在Ruby中用DB绘制推文,按小时分组

时间:2010-04-20 11:47:53

标签: ruby twitter

嘿伙计我的代码有几个问题。

  • 我想知道我在密谋 结果非常无效,因为 按小时分组需要很长时间
  • DB非常简单,它包含推文,创建日期和用户名。它由twitter gardenhose喂养。

感谢您的帮助!

require 'rubygems'
require 'sequel'
require 'gnuplot'

DB = Sequel.sqlite("volcano.sqlite")
tweets = DB[:tweets]

def get_values(keyword,tweets)
        my_tweets = tweets.filter(:text.like("%#{keyword}%"))
    r = Hash.new
    start = my_tweets.first[:created_at]
    my_tweets.each do |t|
     hour = ((t[:created_at]-start)/3600).round
     r[hour] == nil ? r[hour] = 1 : r[hour] += 1
    end

    x = []
    y = []
    r.sort.each do |e|
     x <<  e[0]
     y <<  e[1]
    end
    [x,y]
end

keywords = ["iceland", "island", "vulkan", "volcano"]
values  = {}

keywords.each do |k|
  values[k] = get_values(k,tweets)
end


Gnuplot.open do |gp|
 Gnuplot::Plot.new(gp) do |plot|
  plot.terminal "png"
  plot.output "volcano.png"
  plot.data = []
  values.each do |k,v|
     plot.data <<  Gnuplot::DataSet.new([v[0],v[1]]){ |ds|
       ds.with = "linespoints"
       ds.title = k
    }
  end
 end
end

1 个答案:

答案 0 :(得分:0)

这是使用SQL更有意义的情况之一。我建议做一些类似于其他grouping question中所描述的内容,然后修改它以使用SQLite日期函数而不是MySQL日期函数。