From 8326eb9a51d90498a6593fe7a39423d5964ea965 Mon Sep 17 00:00:00 2001 From: Leandro Nunes dos Santos Date: Thu, 14 May 2015 11:07:46 -0300 Subject: [PATCH] adding statistics scripts --- script/extract_article_statistics | 16 ++++++++++++++++ script/extract_comment_statistics | 20 ++++++++++++++++++++ script/extract_community_statistics | 16 ++++++++++++++++ script/extract_gamification_itens | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ script/extract_palavraaberta_statistics | 30 ++++++++++++++++++++++++++++++ script/extract_person_statistics | 16 ++++++++++++++++ script/extract_statistics | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 337 insertions(+), 0 deletions(-) create mode 100755 script/extract_article_statistics create mode 100755 script/extract_comment_statistics create mode 100755 script/extract_community_statistics create mode 100755 script/extract_gamification_itens create mode 100755 script/extract_palavraaberta_statistics create mode 100755 script/extract_person_statistics create mode 100755 script/extract_statistics diff --git a/script/extract_article_statistics b/script/extract_article_statistics new file mode 100755 index 0000000..4b71882 --- /dev/null +++ b/script/extract_article_statistics @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +articles = Article.public(:order => :created_at) + +file = File.open('articles.csv', 'w+') + +file.write("'ID','Titulo','Tipo','Criado em','Votos','Comentarios','Hits','Criado Por','Criado Onde'\n") +articles.map do |a| + line = "'#{a.id}','#{a.title}','#{a.type}','#{a.created_at.strftime("%d/%m/%Y")}','#{a.votes.count}','#{a.comments.count}','#{a.hits}','#{a.author ? a.author.identifier : ''}','#{a.profile ? a.profile.identifier : ''}'\n" + puts line + file.write(line) + +end + diff --git a/script/extract_comment_statistics b/script/extract_comment_statistics new file mode 100755 index 0000000..c99b42b --- /dev/null +++ b/script/extract_comment_statistics @@ -0,0 +1,20 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +comments = Comment.find(:all, :order => :created_at) + +file = File.open('comments.csv', 'w+') + +file.write("'ID do Artigo','ID do Comentario','Titulo','Criado em','Votos', 'Origem', 'Profile que escreveu','Id que o comentario se refere'\n") +comments.map do |c| +begin + line = "'#{c.source_id}','#{c.id}','#{c.title}','#{c.created_at.strftime("%d/%m/%Y")}','#{c.votes.count}','#{c.profile.identifier}','#{c.author ? c.author.identifier : ''}','#{c.reply_of_id}'\n" + puts line + file.write(line) +rescue + puts "SOMETHING WRONG HAPPENED WITH COMMENT #{c.id}" +end + +end + diff --git a/script/extract_community_statistics b/script/extract_community_statistics new file mode 100755 index 0000000..36dbb22 --- /dev/null +++ b/script/extract_community_statistics @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +communities = Community.public(:order => :created_at) + +file = File.open('communities.csv', 'w+') + +file.write("'Identifier','Nome','Data de Criacao','Qtd Artigos','Qtd Membros','Qtd Comentatios', 'Membros'\n") +communities.map do |c| + line = "'#{c.identifier}','#{c.name}','#{c.created_at.strftime("%d/%m/%Y")}','#{c.articles.count}','#{c.members.count}','#{c.comments_received.count}', '#{c.members.map{|m|m.identifier}.join('#')}'\n" + puts line + file.write(line) + +end + diff --git a/script/extract_gamification_itens b/script/extract_gamification_itens new file mode 100755 index 0000000..6b3ae4f --- /dev/null +++ b/script/extract_gamification_itens @@ -0,0 +1,186 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +communities = Community.public(:order => :created_at) + +file = File.open('communities.csv', 'w+') + +file.write("'Identifier','Qtd Artigos'\n") +communities.map do |c| + line = "'#{c.identifier}','#{c.articles.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Membros'\n") +communities.map do |c| + line = "'#{c.identifier}','#{c.members.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Atividades'\n") +communities.map do |c| + line = "'#{c.identifier}','#{c.activities.count}'\n" + puts line + file.write(line) +end + +file.close + +file = File.open('artigos.csv', 'w+') +articles = Article.public(:order => :created_at) + +file.write("\n") +file.write("'ID','Views'\n") +articles.map do |a| + line = "'#{a.id}','#{a.hits}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'ID','Comentarios'\n") +articles.map do |a| + line = "'#{a.id}','#{a.comments.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'ID','Votos'\n") +articles.map do |a| + line = "'#{a.id}','#{a.votes.count}'\n" + puts line + file.write(line) +end + +file.close +file = File.open('people.csv', 'w+') +people = Person.public(:order => :created_at) + + +file.write("'Identifier','Qtd Curtidas recebidas'\n") +people.map do |p| + amount = 0 + p.articles.text_articles.select(:id).map do |article| + amount += Vote.count(:conditions => {:voteable_id => article.id, :vote => 1}) + end + Comment.all(:conditions => {:source_id => p.articles.map{|a|a.id}}, :select => :id).map do |comment| + amount += Vote.count(:conditions => {:voteable_id => comment.id, :vote => 1}) + end + line = "'#{p.identifier}','#{amount}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Dislikes recebidos'\n") +people.map do |p| + amount = 0 + p.articles.text_articles.select(:id).map do |article| + amount += Vote.count(:conditions => {:voteable_id => article.id, :vote => -1}) + end + Comment.all(:conditions => {:source_id => p.articles.map{|a|a.id}}, :select => :id).map do |comment| + amount += Vote.count(:conditions => {:voteable_id => comment.id, :vote => -1}) + end + line = "'#{p.identifier}','#{amount * -1}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Curtidas realizadas'\n") +people.map do |p| + line = "'#{p.identifier}','#{Vote.count(:conditions => {:voter_id => p.id})}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Artigos'\n") +people.map do |p| + line = "'#{p.identifier}','#{p.articles.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Comentarios Criados'\n") +people.map do |p| + line = "'#{p.identifier}','#{Comment.count(:conditions => {:author_id => p.id})}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Comentarios Recebidos'\n") +people.map do |p| + line = "'#{p.identifier}','#{p.comments_received.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Amigos'\n") +people.map do |p| + line = "'#{p.identifier}','#{p.friends.count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd de Comunidades'\n") +people.map do |p| + line = "'#{p.identifier}','#{p.communities.count}'\n" + puts line + file.write(line) +end + +file.write("'Identifier','Qtd de Videos Publicados'\n") +people.map do |p| + line = "'#{p.identifier}','#{p.articles.where(:type => 'VideoPlugin::Video').count}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Dono de Comunidade com Pessoas'\n") +people.map do |p| + amount = 0 + communities.map do |community| + amount += 1 if community.admins.include?(p) + end + line = "'#{p.identifier}','#{amount}'\n" + puts line + file.write(line) +end + +file.write("'Identifier','Qtd Artigos com Conteudo Negativo'\n") +people.map do |p| + amount = 0 + p.articles.text_articles.select(:id).map do |article| + amount += Vote.count(:conditions => {:voteable_id => article.id, :vote => -1}) + end + line = "'#{p.identifier}','#{amount * -1}'\n" + puts line + file.write(line) +end + +file.write("\n") +file.write("'Identifier','Qtd Artigos que nao pode ser comentado'\n") +people.map do |p| + amount = 0 + p.articles.text_articles.map do |article| + amount += 1 if article.moderate_comments? + end + line = "'#{p.identifier}','#{amount}'\n" + puts line + file.write(line) +end + + + diff --git a/script/extract_palavraaberta_statistics b/script/extract_palavraaberta_statistics new file mode 100755 index 0000000..331790f --- /dev/null +++ b/script/extract_palavraaberta_statistics @@ -0,0 +1,30 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +communities = Community.find(:all, :order => :created_at) + +file = File.open('/tmp/palavraaberta.csv', 'w+') +domain = Domain.find_by_name('palavraaberta.serpro') + +community = domain.owner + +articles = community.articles.find([798926, 378862,1062230,1062444,1063517,1065845,1032289,290145, 989503,963769,964368,974547]) +file.write("'ID','Caminho','Data de Criacao','Votos','Comentarios','Author','Profile'\n") +articles.map do |a| + line = "'#{a.id}','http://voce.serpro/#{a.profile.identifier}/#{a.path}','#{a.created_at.strftime("%d/%m/%Y")}','#{a.votes.count}','#{a.comments.count}','#{a.author ? a.author.identifier : ''}','#{a.profile ? a.profile.identifier : ''}'\n" + puts line + file.write(line) +end + +file.write("\n\n") + +file.write("'ID do Artigo','ID do Comentario','Titulo','Corpo','Criado em','Votos','Author', 'Resposta de'\n") +articles.map do |a| + a.comments.map do |c| + line = "'#{c.source_id}','#{c.id}','#{c.title}','#{c.body.chomp}','#{c.created_at.strftime("%d/%m/%Y")}','#{c.votes.count}','#{c.author ? c.author.identifier : ''}','#{c.reply_of_id}'\n" + puts line + file.write(line) + end +end + diff --git a/script/extract_person_statistics b/script/extract_person_statistics new file mode 100755 index 0000000..3581466 --- /dev/null +++ b/script/extract_person_statistics @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +people = Person.public(:order => :created_at) + +file = File.open('people.csv', 'w+') + +file.write("'ID','Identifier','Nome','Data de Criacao','Qtd Artigos','Qtd Amigos','Qtd Comentatios'\n") +people.map do |p| + line = "'#{p.id}','#{p.identifier}','#{p.name}','#{p.created_at.strftime("%d/%m/%Y")}','#{p.articles.count}','#{p.friends.count}','#{p.comments_received.count}'\n" + puts line + file.write(line) + +end + diff --git a/script/extract_statistics b/script/extract_statistics new file mode 100755 index 0000000..cf85446 --- /dev/null +++ b/script/extract_statistics @@ -0,0 +1,53 @@ +#!/usr/bin/env ruby +require File.dirname(__FILE__) + '/../config/environment' + + +date = Person.find(:first, :order => :created_at).created_at + +file = File.open('data.csv', 'w+') + +file.write("Numero de pessoas por mes\n") +puts "Numero de pessoas por mes" +while(date <= Date.today) do + date = date.beginning_of_month + + amount = Person.count(:conditions => {:created_at => date...date.end_of_month}) + + file.write("#{date.strftime('%m/%Y')},#{amount}\n") + puts "Amount in #{date.strftime('%m/%Y')} #{amount}" + + date = date.next_month + +end + +file.write("Numero de comunidades por mes\n") +puts "Numero de comunidades por mes" +date = Community.find(:first, :order => :created_at).created_at +while(date <= Date.today) do + date = date.beginning_of_month + + amount = Community.count(:conditions => {:created_at => date...date.end_of_month}) + + file.write("#{date.strftime('%m/%Y')},#{amount}\n") + puts "Amount in #{date.strftime('%m/%Y')} #{amount}" + + date = date.next_month + +end + +file.write("Numero de artigos por mes\n") +puts "Numero de artigos por mes" +date = Article.find(:first, :order => :created_at).created_at +while(date <= Date.today) do + date = date.beginning_of_month + + amount = Article.count(:conditions => {:created_at => date...date.end_of_month}) + + file.write("#{date.strftime('%m/%Y')},#{amount}\n") + puts "Amount in #{date.strftime('%m/%Y')} #{amount}" + + date = date.next_month + +end + +file.close -- libgit2 0.21.2