hiyamgyyy

学生がやったことのメモとかいろいろ

Twitterのツイート情報から生活リズムを把握しよう

僕が応援するフィロソフィーのダンスというアイドルグループの十束おとはさん(以下、おとはす)が以前、こんなツイートをしていました。


このツイートを見てから、目には目を歯に歯を!的な精神でおとはすの生活リズムをツイート情報から定量的に把握できないかな、と思い生活リズムの把握を試みました。

※興味本位なものであり、決して悪用目的やプライバシーを侵害する事が目的ではありません。


ツイート投稿時間からの把握

まずはツイート投稿時間をプロットして、何時くらいのツイートが多いのか見てみようと思いました。
TwitterAPIでは一回のリクエストで200件のツイートが取得できるので、API制限上で取得可能な上限の3200件を取得するために16回同じ処理を回します。投稿時間はGETメソッドを用いてstatuses/user_timeline.jsonの"created_at"から取得可能です。

APIを使用するにあたりOAuth認証周りがめんどくさいのでRequests-OAuthlib というライブラリを使用しました。以下参考。
Python で Twitter API にアクセス

from requests_oauthlib import OAuth1Session
import json
import config

#対象者のTwitterID
screen_name = "ttk_philosophy"

def get_all_tweets():
        #config.py に取得したキーなどを登録しておく
	CK = config.CONSUMER_KEY
	CS = config.CONSUMER_SECRET
	AT = config.ACCESS_TOKEN
	ATS = config.ACCESS_TOKEN_SECRET

	# OAuth認証
	twitter = OAuth1Session(CK, CS, AT, ATS)
	#timelineのURL
	url = "https://api.twitter.com/1.1/statuses/user_timeline.json"
	
	max_id = None
	timeCounter = [0 for i in range(24)]
	for i in range(16):
		#パラメータ指定
		params = {"count" : 200 ,"screen_name": screen_name,"max_id":max_id}
		req = twitter.get(url, params = params)
		# レスポンスを確認
		if req.status_code == 200:
			tweets = json.loads(req.text)
			max_id = tweets[-1]["id"]-1
			for tweet in tweets:
		                # TimeZoneをAsia/Tokyoにする
				time = tweet["created_at"].split()
				hour = int(time[3][0:2])+9
				hour = hour -24 if hour >= 24 else hour
				timeCounter[hour]+=1
		else:
			print ("Error: %d" % req.status_code)
	return timeCounter


def plot_bar_chart(x,y):
	plt.title(screen_name+type) #タイトル
	plt.bar(x,y,color="gold",alpha=0.7) #カラー指定してbar plot
	plt.xticks(x)  #x軸目盛
	plt.ylim([0,600])  #y軸目盛
	plt.xlabel('Hour')
	plt.ylabel('Tweets')
	plt.savefig(screen_name+".png") #画像として保存


if __name__ == '__main__':
	x_axis = range(24)
	y_axis = get_all_tweet()
        plot_bar_chart(x_axis,y_axis)


max_idを指定することで直前の処理で取得した最後のツイートの一個前のツイートから取得することが可能です。
取得した3200件のツイートを1時間毎のツイート投稿時間を棒グラフにしてみます。可視化ライブラリはmatplotlibを使用しました。


予想

おとはすさんはアイドルの中でも割と早寝早起きタイプだと思われます。以前、他のメンバーから「おとちゃんはゲーマーなのに早寝早起きだからLINE送っても早朝に返信が来る」的なことを聞いたことがあったので、深夜のツイートは少ないと予測しました。

結果

f:id:shin_nandesu:20180612102131p:plain

な、なんと規則正しい生活...!
深夜3時以降のツイートはほとんどなく、8時台から朝のツイートをし始めている!
アイドルでゲーマーという、なんとも不規則そうな生活を送っているのに早寝早起きをしているおとはすはエライ!


ツイート内容からの把握

おとはすさんのツイート内容には、就寝時と起床時の一貫したルールが存在します。

・起床時


・就寝時



このように、朝一番のツイートには「おはす〜」、寝る前のツイートには「おやはす〜」という文字列が混在していることがわかります。
これらは、朝の挨拶の「おはよう」及び就寝時の挨拶の「おやすみ」に愛称である「おとはす」の"はす"の部分を結合したものでありマス!説明不要だと思いますが!



そのため、先ほど取得した3200件のツイートから「おはす」「おやはす」という文字列が混在するツイートをフィルタリングして、起床時間と就寝時間を見てみたいと思います。

ちなみに、午前中にツイートをせず昼を迎えた場合には「昼はす〜」という固有の挨拶も存在しますが、割愛しました。

結果

起床時と就寝時のツイートをプロットし、平均時間を算出しました。

・起床時のツイート時間
f:id:shin_nandesu:20180612230733p:plain

#起床ツイートの平均時間 10:31:47

・就寝時のツイート時間
f:id:shin_nandesu:20180612230737p:plain

#就寝ツイートの平均時間 0:54:17

以上の結果から、おとはすさんは、平均として10時31分47秒くらいに「おはす〜」を投稿し、0時54分17秒あたりに「おやはす〜」を投稿することが分かりました。
素晴らしく規則正しい生活、見習いたいです。

まとめ

興味本位で生活リズムを把握を試みましたが、予想通りと言えば予想通りの結果が現れました。
今回分析の対象とさせてくれた十束おとはさんには大変感謝しています。
ちなみにおとはすさんははてなブロガーなので、こちらもぜひ。
otohatotsuka.hatenablog.com