Rubyでtweetを収集(Twitter Streaming API)、分析してみた
RubyでTwitterのtweetを収集して、簡単な分析をしてみます。
ここでは以下を点を分析することにします。
・tweetでは、どれくらいの割合でHashタグが付けられているのか?
・tweetでは、どれくらいの割合でリンクが付けられているのか?
・tweetでは、どれくらいの割合でmentionが付けられているのか?
・どのクライアントアプリでよく使われているのか?
tweetの収集
まずtweetの収集ですが、
Twitterには「REST API」と「Streaming API」の二種類があり、
分析するために大量のtweetを取得する用途には、
「Streaming API」が向いてそうなのでそちらを使います。
RESTAPIとStreamingAPIの違いはこのスライドがわかりやすいです。
TwitterのStreamingAPIについて 概要と簡単な実演
http://www.slideshare.net/hidenorigoto/twitterstreaming-api
TwitterのStreaming APIのマニュアル
https://dev.twitter.com/docs/streaming-apis
Streaming APIを使用してtweetを取得してみます。
こちらのサイト参考にしました(かなりの部分そのままですww)。
Twitter Streaming APIをRubyで試してみる
http://d.hatena.ne.jp/shibason/20090816/1250405491
先に上げた分析に必要な情報は
・tweetの本文
・クライアントアプリ名
これを取得する、以下のプログラムでtweetを収集します。
呼び出し時にコマンドライン引数で、
twitterのユーザ名・パスワードを指定します。
#!/usr/bin/env ruby
# coding: utf-8
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
# コマンドライン引数からtwitterユーザ名・パスワードを取得
if ARGV.size < 2
puts "usage: ruby get_publictweet.rb [username] [password]"
exit
end
username = ARGV[0]
password = ARGV[1]
# 取得したtweetを出力するファイルをオープン
twout = File.open('twout.csv',"w")
# streaming APIに接続
uri = URI.parse("https://stream.twitter.com/1/statuses/sample.json")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.start
# tweetの取得開始
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(username, password)
twcnt = 0
http.request(request) do |response|
raise 'Response is not chuncked' unless response.chunked?
response.read_body do |chunk|
# 空行は無視、JSON形式でのパースに失敗したら次へ
status = JSON.parse(chunk) rescue next
# 削除通知など、'text'パラメータを含まないものは無視して次へ
next unless status['text']
# 日本語でないtweetは無視して次へ
next unless status['user']['lang'] == 'ja'
# tweetの本文とクライアントの情報を出力
twarray = [status['text'], status['source']]
twarray.map! {|e| e.gsub(/"/, "\"\"") }
twarray.map! {|e| "\"#{e}\"" }
twout.puts twarray.join(",")
twcnt += 1
# 必要な数のtweetが収集できたら終了(ここでは40tweet)
exit if twcnt > 40
end
end
# ファイルをクローズ
twout.close
このプログラムを実行すると、
1列目:tweetの本文
2列目:クライアントアプリ名
が入ったCSVファイルが出力されます。
tweetの分析
tweetの分析ですが、今回収集したもの以外に
2001年5月に収集したデータが手元にあったので比較して見ます。
tweet本文の中に
「http://」が含まれている場合 → URLのリンクを含んだtweet
「#」が含まれている場合 → hashタグのついたtweet
「@」が含まれている場合 → mentionのtweet
として集計します。
※実際の集計にはExcelを使いましたが、細かいところは省略します。
tweet本文を上記のように集計したところ以下のようになりました。
◆2011年5月と2012年8月のtweet傾向比較
2011/5 | 2012/8 | |
---|---|---|
URLのリンクを含んだtweet | 16.50% | 18.72% |
hashタグのついたtweet | 6.93% | 6.39% |
mentionのtweet | 8.98% | 41.19% |
15ヶ月前と比較するとmentionの付いたtweetが、
4倍以上増加している事がわかります。
このことから、twitterの使われ方が、
「個人のつぶやき」→「コミュニケーション」
と変化してきているのではないかと考えられます。
次にクライアントもsource部分のクライアント名で集計します。
集計結果は次のようになりました。
◆2011年のクライアント利用状況
クライアント名 | 利用割合 |
---|---|
web | 13.10% |
Keitai Web | 12.99% |
ついっぷる/twipple | 6.82% |
Twitter for iPhone | 5.14% |
モバツイ / www.movatwi.jp | 4.71% |
Tween | 4.22% |
Echofon | 3.73% |
twicca | 3.41% |
yubitter | 2.33% |
ついっぷる for iPhone | 2.27% |
TweetDeck | 2.16% |
Twitter for Android | 2.00% |
jigtwi | 1.89% |
Saezuri | 1.46% |
Tweet Button | 1.46% |
SOICHA | 1.24% |
TwitBird | 1.03% |
YoruFukurou | 1.03% |
HootSuite | 0.97% |
TweetMe for iPhone | 0.81% |
その他 | 27.22% |
◆2012年のクライアント利用状況
クライアント名 | 利用割合 |
---|---|
Twitter for iPhone | 14.76% |
web | 12.33% |
Twitter for Android | 12.11% |
twittbot.net | 6.83% |
Keitai Web | 5.95% |
EasyBotter | 4.85% |
ついっぷる/twipple | 3.08% |
twicca | 2.86% |
Echofon | 2.42% |
SOICHA | 2.20% |
ついっぷる for iPhone | 1.98% |
Janetter | 1.54% |
jigtwi | 1.32% |
Tweet Button | 1.10% |
Twipple for Android | 1.10% |
twitterfeed | 1.10% |
mixi ボイス | 0.88% |
BotMaker | 0.88% |
jigtwi for Android | 0.88% |
Tween | 0.88% |
その他 | 20.93% |
2012年の利用率上位10位のクライアントについて、
2011年の利用率と比較してみると以下のようになりました。
15ヶ月前と比較すると
・Keitai Webが減少
・Twitter for iPhone/Androidが増加
という傾向がはっきりと見えます。
最近のスマートフォンの普及の影響でしょう。
Echofonが減少して、SOICHAが増加というのも、
スマートフォン向けtwitterクライアントの
トレンドを反映してそうですね。
結果をまとめると、twitterは、
『従来型携帯電話からスマートフォンでの利用にシフト』しており、
その使われ方は、
『個人のつぶやきよりもコミュニケーション(会話)』が増えてきている
と考えられます。
さらに「それはなぜなのか」も考えて見ると面白いかもしれませんね。
例えば考えられる仮説:
・ユーザのtwitterの利用暦が長くなり人脈が増えた結果、会話が増えた
・従来型携帯電話よりスマホの方が会話しやすいから、会話が増えた
(専用クライアントがあるため)
・個人的なつぶやき中心のユーザが飽きてtwitterやめて、会話の割合が増えた
とか、とか。。
※情報の収集方法・期間
収集方法: public_timelineのtweetを15分後とに20件ずつ取得し、ユーザの言語がjaのものを抽出
収集期間:
2011年5月分: 5/18(水) 10:45 ~ 5/24(水) 11:30 (日本時間)
2012年8月分: 8/16(木) 17:15 ~ 8/17(金) 13:30 (日本時間)