class RailsDataExplorer::Statistics::RngCategory
Responsibilities:
* Provide random categorical data. Useful for testing and demo data.
Public Class Methods
new(categories, category_probabilities = nil, rng = lambda { Kernel.rand })
click to toggle source
@param categories [Array<Object>] the pool of available categories. @param category_probabilities [Array, optional] probability of each category. @param rng [Proc, optional] lambda to generate random numbers which will
be mapped to categories.
# File lib/rails_data_explorer/statistics/rng_category.rb, line 14 def initialize(categories, category_probabilities = nil, rng = lambda { Kernel.rand }) @categories, @category_probabilities, @rng = categories, category_probabilities, rng @category_probabilities ||= @categories.map { |e| @rng.call } @category_probabilities = normalize_category_probabilities @category_order = compute_category_order end
Public Instance Methods
rand()
click to toggle source
Returns a random category
# File lib/rails_data_explorer/statistics/rng_category.rb, line 22 def rand r_v = @rng.call rnd = @category_order.detect { |e| e[:threshold] >= r_v } rnd[:category] end
Protected Instance Methods
compute_category_order()
click to toggle source
# File lib/rails_data_explorer/statistics/rng_category.rb, line 37 def compute_category_order category_order = [] running_sum = 0 @categories.each_with_index { |e, idx| running_sum += @category_probabilities[idx] category_order << { category: e, threshold: running_sum } } category_order end
normalize_category_probabilities()
click to toggle source
# File lib/rails_data_explorer/statistics/rng_category.rb, line 32 def normalize_category_probabilities total = @category_probabilities.inject(0) { |m,e| m += e } @category_probabilities.map { |e| e / total.to_f } end