Skip to content
Extraits de code Groupes Projets
Valider 288d20b6 rédigé par Ilya Zhitomirskiy's avatar Ilya Zhitomirskiy
Parcourir les fichiers

correlations on the admins page

parent 4c9b45b9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -66,7 +66,7 @@ class AdminsController < ApplicationController
end
def correlations
@post_count_correlation = Statistics.new.post_count_correlation
@correlations_hash = Statistics.new.generate_correlations
end
private
......
......@@ -6,6 +6,8 @@
.span-24.last
%h1
= "Correlation between Post Count and Sign In Count"
= "Correlations between with Sign In Count"
%ul
= @post_count_correlation
- @correlations_hash.keys.each do |k|
%li
= "#{k.to_s}, #{@correlations_hash[k]}"
......@@ -55,16 +55,16 @@ SQL
SQL
end
def post_count_correlation
def correlate(first_metric, second_metric)
# [{"id" => 1 , "count" => 123}]
x_array = []
y_array = []
post_count_hash.keys.each do |k|
if val = sign_in_count_hash[k]
x_array << post_count_hash[k]
self.result_hash(first_metric).keys.each do |k|
if val = self.result_hash(second_metric)[k]
x_array << self.result_hash(first_metric)[k]
y_array << val
end
end
......@@ -72,15 +72,15 @@ SQL
correlation(x_array, y_array)
end
###\
#def correlate(thing)
# sql = self.send("#{thing}_count_sql".to_sym)
# self.correlation(User.connection.select_all(sql),
#end
###
def generate_correlations
result = {}
[:posts_count, :invites_sent_count, :tags_followed_count,
:mentions_count].each do |metric|
result[metric] = self.correlate(metric,:sign_in_count)
end
result
end
def correlation(x_array, y_array)
x = x_array.to_scale
......@@ -99,23 +99,17 @@ SQL
User.where("username IS NOT NULL").where("created_at > ? and created_at < ?", Time.now - (n+1).weeks, Time.now - n.weeks)
end
def post_count_hash
unless @post_count_hash
post_count_array = User.connection.select_all(self.posts_count_sql)
@post_count_hash = {}
post_count_array.each{ |h| @post_count_hash[h['id']] = h["count"]}
end
@post_count_hash
end
def sign_in_count_hash
unless @sign_in_count_hash
sign_in_count_array = User.connection.select_all(self.sign_in_count_sql)
#@param [Symbol] input type
#@returns [Hash] of resulting query
def result_hash(type)
instance_hash = self.instance_variable_get("@#{type.to_s}_hash".to_sym)
unless instance_hash
post_count_array = User.connection.select_all(self.send("#{type.to_s}_sql".to_sym))
@sign_in_count_hash = {}
sign_in_count_array.each{ |h| @sign_in_count_hash[h['id']] = h["count"]}
instance_hash = {}
post_count_array.each{ |h| instance_hash[h['id']] = h["count"]}
self.instance_variable_set("@#{type.to_s}_hash".to_sym, instance_hash)
end
@sign_in_count_hash
instance_hash
end
end
......@@ -57,22 +57,25 @@ describe Statistics do
@stats.correlation([1,2,1,2],[1,1,2,2]).to_s.should == 0.0.to_s
end
end
describe "#correlation_hash" do
describe "#generate_correlations" do
it 'it returns a hash of including start and end time' do
pending
hash = @stats.correlation_hash
hash[:starrt_time].should == @time
hash[:start_time].should == @time
hash[:end_time].should == @time - 1.week
end
it 'returns the post count (and sign_in_count) correlation' do
@stats.stub(:posts_count_correlation).and_return(0.5)
bob.sign_in_count = 1
bob.post(:status_message, :text => "here is a message")
bob.save!
@stats.generate_correlations[:posts_count].should == 0.5
@stats.generate_correlations[:posts_count].to_s.should == "1.0"
end
end
describe "#post_count_correlation" do
describe "#correlate" do
it 'calls correlation with post' do
User.connection.should_receive(:select_all).and_return([{"id"=> 1, "count" => 7},
{"id" => 2, "count" => 8},
......@@ -82,7 +85,7 @@ describe Statistics do
)
@stats.should_receive(:correlation).with([7,9],[17,19]).and_return(0.5)
@stats.posts_count_correlation.should == 0.5
@stats.correlate(:posts_count,:sign_in_count).should == 0.5
end
end
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter