Sha256: 297bf59002acc11196edeeb69f17e6022a564e49c70135cc08ace715d645845b
Contents?: true
Size: 1.16 KB
Versions: 2
Compression:
Stored size: 1.16 KB
Contents
class Benford def load!(nums) @numbers = [] nums.each do |num| num.gsub!(".", "") num.gsub!(",", "") @numbers << num.to_s if num.is_numeric? end end # P(d) = log10(1 + 1/d) def law return @benford unless @benford.nil? benford = {} (1..9).each { |d| benford[d.to_s] = Math.log10( 1 + 1 / d.to_f) } @benford = benford end def counts return @digit_counts unless @digit_counts.nil? digit_counts = Hash.new(0) numbers.each do |v| digit_counts[v.first] += 1 end @digit_counts = digit_counts end def distribution return @dist unless @dist.nil? dist = Hash.new(0.0) counts.each do |k, v| dist[k] = v.to_f / numbers.count end @dist = dist end def numbers @numbers end def deviation return @variants unless @variants.nil? variants = Hash.new(0.0) law.each do |digit, occurence| variants[digit] = distribution[digit] - occurence end @variants = variants end end class String def first self.to_i.to_s[0,1] end def is_numeric? self.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
benford-0.0.1 | lib/benford.rb |
benford-0.0.0 | lib/benford.rb |