Pythonでヒートマップを描く方法の記事を書こうかと思ったけど、細かく説明するといろいろとめんどくさそうだったのでとりあえず実際にやってみた可視化だけ書いておく
Twitter APIで自分のツイートを適当に3000件ぐらい取ってきてツイートした時刻と曜日を抽出してカウント、それを可視化用のライブラリseabornのheatmap関数でグラフにした
heatmap関数にはnumpyのarrayやpandasのDataFrameを渡せばよい
ちなみにseabornではなくmatplotlibを使うならhist2d関数やimshow関数などを使えばよさそう
結果
というわけで月から金の平日は昼と夜にツイートが多くて、土日は午後にまんべんなくツイートしているグラフが得られた
ところで、日曜日は23時頃にツイートが急に増えているのは休日最後の悪あがきなのでしょうか……
ソースコード
日本語を使うためにフォントを指定しているので注意
やってからよく考えると、全部のカウントを単純に合計したものを出すのではなくて、一日あたりの平均に直せばよかったかも
# -*- coding: utf-8 -*- import tweepy import time import collections import datetime import pandas as pd import seaborn as sns import matplotlib.font_manager #APIのキーなどを設定 consumer_key = '' consumer_secret = '' access_token = '' access_token_secret = '' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) #自分のアカウントのツイートを取ってくる statuses = tweepy.Cursor(api.user_timeline, 'Scaled_Wurm', count=200).items(3000) data = collections.defaultdict(list) #データを整形 for status in statuses: t = status.created_at + datetime.timedelta(hours=9) data['hour'].append(t.hour) data['weekday'].append('Mon Tue Wed Thu Fri Sat Sun'.split()[t.weekday()] ) #一度もツイートしていない時刻がpandas.crosstabでカウントされなかったのでとりあえずすべての時刻に値を入れておく data['hour'].extend(range(24)) data['weekday'].extend(['filler'] * 24) df = pd.DataFrame(data) #時刻と曜日ごとにカウント tab = pd.crosstab(df.hour, df.weekday) #indexとcolumnの順番を直す tab = tab['Mon Tue Wed Thu Fri Sat Sun'.split()] tab = tab.sort_index(ascending=False) sns.heatmap(tab, annot=True, fmt='d', cbar=False, cmap=sns.light_palette("navy", as_cmap=True)) prop = matplotlib.font_manager.FontProperties(fname=r'C:\Windows\Fonts\meiryo.ttc', size=12) sns.plt.title(u'最近の時間帯ごとのツイート数', fontproperties=prop) sns.plt.xlabel(u'曜日', fontproperties=prop) sns.plt.show()