twitterデータを分析してみた その1(Tweet数編)
概要
昨年の秋(2014年10月)からtwitterのPublic Stream APIを用いて全量の1%のTweetを収集している.dev.twitter.com
しかし,ずっと貯めているだけで何も触っていなかったのでちょっとだけこのデータを利用しようと思う.
このデータを貯めている仕組みについては今度時間があったら紹介します.
ゴール
今回はRを用いてTweet量を時間単位で分けて折れ線グラフで表示し考察することをゴールとする.
さらにそれを各曜日で算出し比べてみる.
Rを使う理由は最近この本使って触ってみたから.もう少し勉強しようと思った.
- 作者: 酒巻隆治,里洋平
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/06/25
- メディア: 単行本
- この商品を含むブログ (1件) を見る
作業
今回対象とした日付は2015/05/17~23の1週間である.
GWとかイベントとか特にないはずなのでイレギュラーなグラフは表示されないはずである.
1日のみ可視化
まずはじめの一歩として1日分のグラフを描画してみる.
以下のようなデータを用意する.
なおこれはタブ区切りである.
ファイル名:20150517.txt
time count 2015-05-17 00:00:00 56918 2015-05-17 01:00:00 36735 2015-05-17 02:00:00 22748 2015-05-17 03:00:00 15885 2015-05-17 04:00:00 11987 2015-05-17 05:00:00 10769 2015-05-17 06:00:00 12665 2015-05-17 07:00:00 19398 2015-05-17 08:00:00 26735 2015-05-17 09:00:00 29715 2015-05-17 10:00:00 33747 2015-05-17 11:00:00 35657 2015-05-17 12:00:00 38422 2015-05-17 13:00:00 37761 2015-05-17 14:00:00 36903 2015-05-17 15:00:00 37946 2015-05-17 16:00:00 39019 2015-05-17 17:00:00 42120 2015-05-17 18:00:00 43838 2015-05-17 19:00:00 49303 2015-05-17 20:00:00 57333 2015-05-17 21:00:00 66247 2015-05-17 22:00:00 76951 2015-05-17 23:00:00 73168
これは各時間ごとのTweet数である.
これを元に折れ線グラフを書いてみる(この集計するプログラムについては後日githubにあげようかと).
以下が可視化するためのRのコードになる.
なお事前に以下のライブラリーをRにインストールしておく必要がある.
- ggplot2
- scales
- tidyr
ファイル名:tweet_cnt_hour.R
library(ggplot2) library(scales) args <- commandArgs(trailingOnly = T) file <- args[1] date <- sub(".txt", "", file) graph_title <- paste(date, ":Tweet", sep="") data <- read.table(file, head=T, sep="\t") limits <- c(0, max(data$count)) data$time <- as.POSIXct(data$time) g = ggplot(data, aes(x = time, y = count)) + geom_line(lwd=1, color="blue") + geom_point(size=2, color="blue") + scale_y_continuous(label=comma, limits=limits) + ggtitle(graph_title) + scale_x_datetime(label=date_format("%H:%M")) + theme_bw() ggsave(paste(date, ".pdf", sep=""), g)
以下のコマンドで実行
R --vanilla --slave --args 20150517.txt < tweet_cnt_hour.R
すると以下の日付.pdfという名前のファイル(今回だと20150517.pdf)ができる.
それを見てみるとこんな感じ.
これをみると当然ながら深夜帯は少なくて,夕方から夜になるに連れてどんどんつぶやきの数が増えることがわかる.
1週間可視化
次に2015/05/17~23日までまとめて折れ線グラフとして表示してみた.
20150517~23.txtのデータを用いて以下のようなデータを作成した.
ファイル名:20150517-23.txt
time 20150517 20150518 20150519 20150520 2015052 20150522 20150523 00:00:00 56918 55711 48138 49733 48614 46605 49119 01:00:00 36735 32162 28379 29487 29363 28342 30199 02:00:00 22748 19277 17846 18980 19788 18437 19646 03:00:00 15885 13436 12822 13484 13737 12862 14398 04:00:00 11987 10320 9877 10943 13161 11559 11828 05:00:00 10769 10366 10345 10219 11624 11000 11218 06:00:00 12665 14730 14728 15550 15400 15915 14164 07:00:00 19398 26485 27733 27215 27336 28921 23858 08:00:00 26735 25505 27221 27155 27159 28386 27016 09:00:00 29715 22382 21609 22344 21898 22645 28332 10:00:00 33747 23717 23428 23815 23800 24272 31690 11:00:00 35657 25234 24416 24434 25234 25208 32245 12:00:00 38422 35393 35723 36317 36511 37030 37159 13:00:00 37761 29588 29624 30551 30408 30283 36167 14:00:00 36903 27232 26894 27793 27631 27617 34581 15:00:00 37946 28632 29281 29707 29066 29403 35091 16:00:00 39019 33182 32051 31748 31308 32623 35974 17:00:00 42120 38279 36806 36625 36432 36687 40027 18:00:00 43838 44254 43583 43895 42467 43413 42640 19:00:00 49303 49374 48201 47376 47939 48198 44884 20:00:00 57333 55440 55070 58300 55873 59388 53098 21:00:00 66247 63367 62990 64561 63599 67060 61320 22:00:00 76951 68307 67554 68326 67791 67936 66756 23:00:00 73168 63418 64788 63155 60027 63002 63761
これを可視化するRのコードが以下である.
library(ggplot2) library(scales) library(tidyr) dd<-read.table("data/20150517-23.txt", head=T, sep="\t") dd$time<-as.POSIXct(dd$time, format="%H:%M") gather_data <- gather(dd, date, count, -time) ggplot(gather_data, aes(x = time, y = count, colour = date)) + geom_line() + theme_bw() + scale_x_datetime(labels=date_format("%H:%M"))
これを実行すれば以下のようなグラフが表示される.
考察
これを見てわかることは18~22日は同じようなグラフになり,17,23だけ少しだけ変わったグラフになった.
大きく分けると平日(18~22)と休日(17,23)である.
平日
まず平日から見てみる.最初に見せたグラフ同様深夜は少なく,夕方から夜にかけて上昇している.
また,平日は3つの山があることがグラフからわかる.
7時台,12時台,22時台.これはそれぞれ通勤or通学中,昼休み中,寝る前の自由な時間?を表していると予想.
社会人であるとこの時間帯でないとツイッターをする時間がないのかもしれない.(学生はわからない...)
休日
次に休日組(17,23)を見てみる.
深夜は少なく,夕方から夜にかけて上昇の傾向は変わらないが,朝や昼のTweet数が多少ことなる.
例えば7時台は平日と比べると少なくなっている.
これは休みの日なのでぐっすり寝てしまい,ツイッターを触っていないのではと予想.
また休みの日なので仕事が休みな人がほとんど,なので昼周辺の時間も比較的平日よりTweet数が多くなっている.
また最後の22時台はなぜか17(日曜)が土曜日より多くなっている.
たまたま多くなったのか,それとも普段からこんな感じなのかは他の週を調べないとわからないが,
もしかしたら「月曜やだ〜」とか「明日仕事だ〜」といった,嘆きみたいなのをつぶやいているのかもしれない...
これは今度調査.
まとめ
今回,twitter stream apiを用いて貯めた1%のデータから
各曜日の1時間ごとのTweet数を集計し可視化を行った.さらに自分なりの考察を入れた.
大きく分けて平日と休日のタイプに別れる.
平日は通勤 or 通学時,お昼時間,寝る前に山ができることがわかった.
また休日は平日より朝のTweet数は少なく変わりそれ以外の時間は平日より多かった.
日曜日のみ寝る前のTweet数が他の曜日より少々多かった.
次は一番つぶやかれてる単語とか調べたら面白いかも.
深夜にだいぶ慌てて書いたので誤字脱字やコードの間違いなどあるかもしれません.
もし何か見かけたら連絡ください.よろしくお願いします.