编写Ruby脚本来对Twitter用户的数据进行深度挖掘

2019-09-25 09:39:43王振洲

按照相类似的模式,该脚本接受了一个界面名称,然后遍历该用户的粉丝,从当前粉丝中提取时区并把它存放在tweetlocation哈希表中。需要注意的是,你先要检测该键值是否已经存在于哈希表中,若是的话,增加该键值的计数。你还可以记住所有时区的个数,以用于后面的百分比的计算。

这一脚本的最后一部分内容是构造Google Pie Chart的URL,创建一个新的PieChart,指定一些选项(大小、标题和是否为3D等);接着,遍历时区哈希表,找出用于图表的时区串的数据(删去&符号)以及该时区计数与总数的百分比。

清单7.通过Twitter的时区来构建一个饼图(followers-location.rb)

#!/usr/bin/env ruby 
require "rubygems" 
require "twitter" 
require 'google_chart' 
 
screen_name = String.new ARGV[0] 
 
tweetlocation = Hash.new 
timezones = 0.0 
 
# Authenticate 
Twitter.configure do |config| 
config.consumer_key = '' 
config.consumer_secret = '' 
config.oauth_token = ' 
config.oauth_token_secret = '' 
end 
 
# Iterate followers, hash their location 
followers = Twitter.followers.users.each do |f| 
 
loc = f.time_zone.to_s 
 
if (loc.length > 0) 
 
if tweetlocation.has_key?(loc) 
tweetlocation[loc] = tweetlocation[loc] + 1 
else 
tweetlocation[loc] = 1 
end 
 
timezones = timezones + 1.0 
 
end 
 
end 
 
# Create a pie chart 
GoogleChart::PieChart.new('650x350', "Time Zones", false ) do |pc| 
 
tweetlocation.each do |loc,count| 
pc.data loc.to_s.delete("&"), (count/timezones*100).round 
end 
 
puts pc.to_url 
 
end 

若要执行清单7中的脚本,给它提供一个Twitter界面显示名称,然后把得出的URL拷贝并粘贴到浏览器中,清单8给出了这一过程及最终生成的URL。

清单8. 调用followers-location脚本(结果只是一行来的)

$ ./followers-location.rb MTimJones 
http://chart.apis.google.com/chart?chl=Seoul|Santiago|Paris|Mountain+Time+(US++Canada)| 
Madrid|Central+Time+(US++Canada)|Warsaw|Kolkata|London|Pacific+Time+(US++Canada)| 
New+Delhi|Pretoria|Quito|Dublin|Moscow|Istanbul|Taipei|Casablanca|Hawaii|Mumbai| 
International+Date+Line+West|Tokyo|Ulaan+Bataar|Vienna|Osaka|Alaska|Chennai|Bern| 
Brasilia|Eastern+Time+(US++Canada)|Rome|Perth|La+Paz 
&chs=650x350&chtt=Time+Zones&chd=s:KDDyKcKDOcKDKDDDDDKDDKDDDDOKK9DDD&cht=p 
$ 

把清单8中的URL粘贴到浏览器中,你就可以得到图1所示的结果。

图1. Twitter粉丝位置分布的饼图

20151110143210111.jpg (533×298)

Twitter用户的行为

Twitter包含了大量的数据,你可以通过挖掘这些数据来了解用户行为的某些要素。两个简单例子将用来分析Twitter用户何时发布消息以及通过什么应用来发布消息,你可以使用下面两个简单的脚本来提取并可视化这些信息。

清单9给出的脚本遍历了某个特定用户的tweet消息(使用user_timeline方法),然后从每条tweet消息中提取出该tweet消息形成的具体时间,一个简单的哈希表被再次用来统计一周中每天的计数,然后以与前面的时区例子相类似的方式使用Google Charts生成一个柱状图。