お久しぶり。
しばらく修論を書いたり書かなかったりしていたせいで、なかなかゴミ記事を書くことができなかった。
この度ひと段落したので、またゴミ記事執筆活動を再開していこうと思う。
今回はTwitter APIを使って、Benjamin MendyのTwitterにおける活動について考察したりしなかったりする。
Benjamin Mendyって?
もうすでにブラウザバックした方も多くいると思うが、挫けずに書き連ねる。
Benjamin Mendyはイングランドプレミアリーグのマンチェスターシティに所属している世界的SBである。
ではなぜ突然MendyのTwitterを考察してみようと思ったのか。
それはMendyがプロサッカー選手でありながら重度のツイッタラーだからである。
TwitterなどのSNSをやりすぎるあまりに、とうとう彼の上司(監督)であるJosep Guardiolaにこう言われてしまった。
Pep:Sometimes we want to kill him and sometimes you think wow what a player we have ... (マンチェスターシティ公式Twitterアカウントより)
ウケるよね。
さて、ここで私は思った。
果たしてこの言葉はMendyの心に響いているのだろうか、と。
というわけで本文において、Mendyのツイート数がこの発言を受けてから減少しているかどうか、確かめてみよう。
環境
- Python3
モジュール等は
- OAuth1Session
- pandas
- pyplot
ツイートの取得
基本はここと同じ。
import json
import pandas as pd
from requests_oauthlib import OAuth1Session
from twitter_function import *
# 認証処理
ck = '********'
cs = '********'
at = '********'
ats = '********'
# params
count = ***
screen_name = 'benmendy23'
max_id = '****'
timeline = get_usr_tl(cnt = count, scrn_name = screen_name, max_id=max_id, ck = ck, cs = cs, at = at, ats = ats)
out_list = []
for i in range(len(timeline)):
created_at = timeline[i]['created_at'] #ツイート投稿時間
text = timeline[i]['text'] #テキスト
fav_cnt = timeline[i]['favorite_count'] #いいね数
ret_cnt = timeline[i]['retweet_count'] #リツイート数
tweet_id = timeline[i]['id'] #ツイートid
out = {'created_at' : created_at, 'text' : text, 'fav_cnt' : fav_cnt, 'ret_cnt' : ret_cnt, 'tweet_id' : tweet_id}
out_list.append(out)
df = pd.DataFrame(out_list)
今回はMendyのツイートのみを取得したいので、screen_nameのところで指定する。また、リツイートは除いた。
さて、今回取得するデータは、Mendyがマンチェスターシティに移籍が決まった日(2017年7月24日くらい)〜現在に至るまでであり、1034ツイート分を取得した。
なお、取得したデータはツイート投稿時間(created_at、今回はこれのみを扱う)、ツイート本文(text、次回以降で感情分析やってみたいなと思っているため)、いいね数・リツイート数(fav_cnt,ret_cnt、Mendyがいつキモチヨクなっているのか今後知りたいため)、ツイートIDである。
取得したデータをpandasのデータフレームとして扱う。
なぜわざわざpandasなのか?
それは恥ずかしながら私がこれまでpandasを触ったことがないからである。それだけ。
ツイート数カウント
前述のデータフレームに対して、ツイート投稿時間をキーに、ツイート数カウント用のカラム(cnt)を追加したものが下図の様な感じ。
あとは、投稿時間に関してリサンプルを行い、プロットすればいいだけ。
# リサンプル
df2 = df.resample('W').sum()['cnt']
df3 = df.resample('D').sum()['cnt']
# プロット
ax = df2.plot()
plt.title('Benjamin Mendy Twitter', Fontsize=20)
plt.xlabel('day', Fontsize=15)
plt.ylabel('count', Fontsize=15)
ax.annotate('Pep:Sometimes we want kill him...',
(df2.index[54], df2[54]),
xytext=(15, 40),
textcoords='offset points',
arrowprops=dict(headwidth=7), Fontsize=10)
plt.savefig('benmendy23_week.png', bbox_inches="tight")
plt.show()
ax = df3.plot()
plt.title('Benjamin Mendy Twitter', Fontsize=20)
plt.xlabel('day', Fontsize=15)
plt.ylabel('count', Fontsize=15)
ax.annotate('Pep:Sometimes we want kill him...',
(df3.index[385], df3[385]),
xytext=(30, 70),
textcoords='offset points',
arrowprops=dict(headwidth=7), Fontsize=10)
plt.savefig('benmendy23_day.png', bbox_inches="tight")
plt.show()
結果はこんな感じ。(1枚目が数単位でリサンプル、2枚目が日単位でリサンプルしたもの)
ちゃっかりプロットのアノテーションをやってみた。初めて使った。。。
また、Pepに怒られる以前と以後の平均ツイート数は以下の通り:
- 以前(約380日平均):2.25 tweets/day
- 以前(約160日平均):1.61 tweets/day
- 以後(約160日平均):1.00 tweets/day
減ってるねえ。。。
やはりPepに怒られたことを気にしているのか。はたまたTwitterに飽きたのか。。。
ピーク
そのほかに気になる事として、いくつかピーク(?)がみられたので、それぞれ何に対応しているのかを調べた。
- 2017/09/28 18 tweets : CLでシャフタールに勝利
- 2017/09/30 23 tweets : チェルシーに勝利
- 2017/10/14 18 tweets : ストークに7-2で大勝
- 2017/11/05 18 tweets : アーセナルに勝利
- 2017/12/03 17 tweets : ウェストハムに逆転勝利
- 2017/12/16 24 tweets : トッテナムに大勝
- 2018/04/15 17 tweets : プレミアリーグ17/18シーズン優勝決定
- 2018/04/26 13 tweets : 古巣オリンピックマルセイユがEL準決勝1stレグ勝利
- 2018/07/14 - 07/16 24 tweets : フランス代表(Mendyも選出)がワールドカップ優勝
- 2018/09/22 13 tweets : CLでリヨン戦敗北からのカーディフ戦大勝
おいおい、サッカー大好き少年じゃねえか。
なんかもっとクラブでパリピってる動画ばっかあげてんのかと思ったわ。
結論
- Pepに怒られてから反省しているはず
- サッカー大好き少年
めでたしめでたし。
終わりに
次は今回用いていないテキストの部分に対して、形態素解析したりしなかったりして、AIにぶっこんで感情分析をしたりしなかったりしたいなあ。
怒られない程度に色々やる。


