ハンバーグのおいしい季節

いっつもうめえよ

Twitterのリプライで2018年を振り返ろう

2018年も終わるにあたってSlackで一年を振り返るという記事を読み、自分もTwitterとかを使ってなにか振り返ってみたいという衝動に駆られた。
よくやられているのは、ツイート履歴からよく使われる単語を抽出してその人がどんな1年だったか振り返るという手法。
なんか独自性のあるものがやりたかったので、他人から特定の人に対するリプライでその人にとってどんな一年だったのかを振り返ってみたいと考えた。他人からの意見(リプライ)がもしその人を写す鏡になっていたら面白いなと。

Twitterデータ収集

いつもの通り、改悪された公式のTwitterAPIを使用すると過去7日のツイートしか取得できない。これでは1年が振り返れないではないか。
そこで検索してみると、GetOldTweets-pythonというリポジトリgithubにて公開されていた。
https://github.com/Jefferson-Henrique/GetOldTweets-python

こちらを使用することで過去7日以上のツイートが抽出できる。非公式のため使用は自己責任で。

$ git clone https://github.com/Jefferson-Henrique/GetOldTweets-python
$ cd GetOldTweets-python
$ pip install -r requirements.txt

以上セットアップ完了。

import sys
import pandas as pd
if sys.version_info[0] < 3:
    import got
else:
    import got3 as got

tweetCriteria = got.manager.TweetCriteria().setQuerySearch('hoge').setSince("2015-05-01").setUntil("2015-09-30").setMaxTweets(1)
tweet = got.manager.TweetManager.getTweets(tweetCriteria)[0]
print(tweet.text)

setQuerySearchの引数に検索したいワード、setSinceとsetUntilの引数に取得したい日付、setMaxTweetsに取得したツイート件数を入れればすぐ検索できる。
ちなみに、setMaxTweetsは2000とかたくさん件数を指定することも可能だが、処理が非常に重くなるため20件くらいでwhileループさせる方がいい。

検索日時を秒単位で指定したい場合は、"2018-01-01_00:00:00_JST"などと書くらしい。また、検索ワードにを"to:ariyoshihiroiki"とすると、@ariyoshihiroikiに対するリプライのみ抽出が可能である。初めて知ったしTwitterの公式検索でも役立ちそう。

since = "2018-01-01_00:00:00_JST"
until = "2018-12-21_23:59:59_JST"

df_tweet = pd.DataFrame(columns=['id', 'username','text','date'])

while(until[0:4] == '2018'):
    tweetCriteria = got.manager.TweetCriteria().setQuerySearch('to:ariyoshihiroiki').setSince(since).setUntil(until).setMaxTweets(20)
    for i in range(20):
        tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i]
        tmp_se = pd.Series( [ tweet.id, tweet.username, tweet.text,tweet.date], index=df_tweet.columns )
        df_tweet =  df_tweet.append( tmp_se, ignore_index=True )
        k1,k2 = str(tweet.date).split()
        until = "{}_{}_JST".format(k1,k2)
        print(until)
        df_tweet.to_csv('tweet.csv')

こんな感じで一年分のツイートの取得が可能になった。

リプライ分析

今回は、自分へのリプライを見てもあまり面白くなさそうなので、自分の好きなアイドルグループである「フィロソフィーのダンス」のメンバーを対象に分析してみる。
アイドルに対するファン・オタクのリプライは数も多いことながらバラエティに富んでいる印象なので、抽出してみるとなにか面白い結果が出そう。

日向ハル(@halu_philosophy)さん
奥津マリリ(@philosophy092)さん
佐藤まりあ(@_satomaria)さん
十束おとは(@ttk_philosophy)さん
の4人に対する2018年の一年間のリプライを先ほどの手法で抽出した。(スクリプトずっと回していたら丸1日くらいかかった)


1日あたりのリプライ数

まずは、リプライ数を1日ごとに集計してplotしてみる。

f:id:shin_nandesu:20190109025709p:plainf:id:shin_nandesu:20190109025743p:plain
f:id:shin_nandesu:20190109025719p:plainf:id:shin_nandesu:20190109025755p:plain

全員に共通して言えるのが、各人の誕生日周辺(上から1月,7月,9月,8月)が突出してリプライが多くなっている。あとはオタクにリプ辺をしている日とか、単純にツイートの数が多い日とかにリプライが多くなっていた。

時間別のリプライ数
メンバーに対するリプライをする時間をplotしてみる。
各メンバーごとにplotしてみたがあまり差がなかったので、全員に対するリプライ数をみる。
f:id:shin_nandesu:20190109234558p:plain

リプライ時間≒オタクが起きている時間であり、0時を越えるとリプライ数が減少するのでオタクは日々正しい生活を送っていることがわかる。

メンバーに対するリプライの内容

最後に、リプライの内容から頻出単語をメンバーごとにplotしてみる。

f:id:shin_nandesu:20190109235038p:plainf:id:shin_nandesu:20190109235050p:plainf:id:shin_nandesu:20190109235103p:plainf:id:shin_nandesu:20190109235107p:plain


フィロソフィーのダンスのメンバー全員に共通したワードや、各メンバーのニックネームなどが上位を占めるが、日向ハル(@halu_philosophy)さん
には「ゴリゴリ*1」だったり、奥津マリリ(@philosophy092)さんには「ビール」、だったり、佐藤まりあ(@_satomaria)さんには「りん*2」だったり、
十束おとは(@ttk_philosophy)さんには「ゲーム」と、各メンバーによって特色があるリプライがされていることがわかった。
あと、知っていはいたけどオタクは推しに対してめちゃくちゃ可愛いとか好きってリプライするし、めちゃくちゃライブを楽しみにしているのだなと再認識した。

結論

2018年をリプライで振り返ってみた。この記事を書いているうちに2019年になってしまったけれど、2019年も何か面白い形で振り返りたい。

*1:日向ハルさんは自称アイドル界のゴリゴリのゴリ

*2:佐藤まりあさんが飼っている柴犬の名前