changeset 1002:f6ede18f3e6e live

Luis's latest updates to stats script on live
author Chris Cannam
date Fri, 09 Nov 2012 14:55:45 +0000
parents 3549525ba22a
children 96f4b03623ed
files extra/soundsoftware/get-statistics.rb
diffstat 1 files changed, 101 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/extra/soundsoftware/get-statistics.rb	Mon Nov 05 16:19:40 2012 +0000
+++ b/extra/soundsoftware/get-statistics.rb	Fri Nov 09 14:55:45 2012 +0000
@@ -5,9 +5,19 @@
 # ./script/runner -e production extra/soundsoftware/get-statistics.rb 
 #
 
-d1 = Date.parse("20101201") # => 1 Dec 2010
+d1 = Date.parse("20100701") # => 1 Jul 2010
 d2 = Date.today
 
+def delta_array (iarray)
+  # returns an array with the deltas
+  ## prepends a zero and drops the last element
+  deltas = [0] + iarray
+  deltas = deltas.first(deltas.size - 1)
+
+  return iarray.zip(deltas).map { |x, y| x - y }
+
+end
+
 def months_between(d1, d2)
    months = []
    start_date = Date.civil(d1.year, d1.month, 1)
@@ -32,28 +42,106 @@
 
    while (start_date < end_date)
      weeks << start_date
-     start_date = start_date + 1.week
+     start_date = start_date + 2.week
    end
 
    weeks << end_date
 end
 
-# dates = months_between(d1, d2)
-dates = weeks_between(d1, d2)
+def get_user_project_evol_stats()
+  # dates = months_between(d1, d2)
+  dates = months_between(d1, d2)
+  
+  # number of users 
+  n_users = []
+  n_projects = []
+  qm_users = []
+  
+  dates.each do |date|
+    users =  User.find_by_sql ["SELECT * FROM users WHERE users.status = '1' AND users.created_on <= ?;", date]
+    projects =  Project.find_by_sql ["SELECT * FROM projects WHERE projects.created_on <= ?;", date]
+    
+    qm_users_list = User.find_by_sql ["SELECT * FROM users,ssamr_user_details WHERE users.status = '1' AND ssamr_user_details.user_id = users.id AND (users.mail like '%qmul%' OR ssamr_user_details.institution_id = '99') AND users.created_on <= ?;", date ]
+    
+    qm_users << qm_users_list.count
+    n_users << users.count
+    n_projects << projects.count
+    
+    #  private_projects =  Project.find(:all, :conditions => {:created_on  => d1..date, is_public => false})
+  end
+  
+  user_deltas = delta_array(n_users)
+  proj_deltas = delta_array(n_projects)
+  qm_user_deltas = delta_array(qm_users)
+  
+  puts "Date Users D_Users QM_Users D_QM_users Projects D_Projects"
+  
+  dates.zip(n_users, user_deltas, qm_users, qm_user_deltas, n_projects, proj_deltas).each do |a, b, c, d, e, f, g|
+    puts "#{a} #{b} #{c} #{d} #{e} #{f} #{g}"
+  end
+  
+end
 
-dates.each do |date|
-  users =  User.find(:all, :conditions => {:created_on  => d1..date})
-  all_projects =  Project.find(:all, :conditions => {:created_on  => d1..date})
-  private_projects =  Project.find(:all, :conditions => {:created_on  => d1..date, 
-                                                          :is_public => false})
-  top_level_and_private_projects =  Project.find(:all, :conditions => {:created_on  => d1..date,
-                                                                        :is_public => false, 
-                                                                        :parent_id => nil})
 
-  puts "#{date} #{users.count} #{all_projects.count} #{private_projects.count} #{top_level_and_private_projects.count}\n"
+def get_project_status()
+  date = "20121101"
+  
+   all_projects = Project.find(:all, :conditions => ["created_on < ?", date])
+  #  all_projects = Project.find(:all, :conditions => ["is_public = ? AND created_on < ?", true, date])
+#  all_projects = Project.find(:all, :conditions => ["is_public = ? AND created_on < ?", false, date])
+  
+  collab = []
+  users_per_proj = []
+  
+  #  puts "Public Users Institutions"
+
+  all_projects.each do |proj| 
+    insts = []
+
+    proj.users.each do |u|  
+      if u.institution == "" || u.institution == "No Institution Set"
+        if u.mail.include?("qmul.ac.uk") || u.mail.include?("andrewrobertson77")
+          insts << "Queen Mary, University of London"          
+        else
+          insts << u.mail
+        end
+      else
+        insts << u.institution
+      end
+    end
+
+    users_per_proj << proj.users.count
+    collab << insts.uniq.count
+  end
+  
+  
+  #  freq = collab.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
+  #  freq = freq.sort_by {|key, value| value}
+  #  puts freq.inspect.sort
+
+  puts "Projects: #{all_projects.count} UpP: #{users_per_proj.sum / users_per_proj.size.to_f} Users1+: #{users_per_proj.count{|x| x> 1}} Users2+: #{users_per_proj.count{|x| x> 2}} Collab1+: #{collab.count{|x| x > 1}} Collab2+: #{collab.count{|x| x > 2}} IpP: #{collab.sum / collab.size.to_f}"
+end
+
+def get_user_projects_ratios()
+  user_projects = User.find(:all, :conditions=> {:status => 1})
+  pub_proj_user = user_projects.map{|u| u.projects.find(:all, :conditions=>{:is_public => true}).count}
+
+  user_projects.zip(pub_proj_user).each do |u, pub|
+      puts "#{u.projects.count} #{pub}"
+  end
 
 end
 
+def get_inst_list()
+  users = User.find(:all, :conditions => {:status => 1})
+  inst_list = users.map{|user| user.institution}
+  
+  freq = inst_list.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
+  
+end
 
 
+# get_user_projects_ratios()
+# get_user_project_evol_stats()
 
+get_project_status()