class Benford

Public Instance Methods

counts() click to toggle source
# File lib/benford.rb, line 20
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
deviation() click to toggle source
# File lib/benford.rb, line 42
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
distribution() click to toggle source
# File lib/benford.rb, line 29
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
law() click to toggle source

P(d) = log10(1 + 1/d)

# File lib/benford.rb, line 13
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
load!(nums) click to toggle source
# File lib/benford.rb, line 3
def load!(nums)
  @numbers = []
  nums.each do |num|
    num.gsub!(".", "")
    num.gsub!(",", "")
    @numbers << num.to_s if num.is_numeric?
  end
end
numbers() click to toggle source
# File lib/benford.rb, line 38
def numbers 
  @numbers
end