コロナデータ2(level毎の和,曜日毎の平均,seabornをaxオブジェクトで)
やること
multi index
を用いたデータフレームについて、level
ごとの和をとる- 時系列データについて、曜日ごとの平均をとる
seaborn
をaxオブジェクトに格納して細かい調整する(用語変だったらすみません。)
参考サイト
pandasのMultiindexで階層ごとの統計量・サンプル数を算出 | note.nkmk.me
pandasで時系列データの曜日や月、四半期、年ごとの合計や平均を算出 | note.nkmk.me
使用データ
countries = ['United States', 'China', 'United Kingdom', 'France', 'Germany', 'India', 'Brazil', 'Japan'] data = row_data.loc[(slice(None), countries), :] data.head(5)
コード
level
毎の和(統計量)
まずは各国それぞれを見る前に、8か国全体の傾向についてみていく。
なので、index
についてdate
毎の総和を取りたい。
data_eight = data.sum(level = 'date') # all country data_eight.head(3)
時系列データについて、曜日ごとの平均をとる
まずは曜日を表すインデックス作成
data_eight_w = data_eight.set_index([data_eight.index.day_name(), data_eight.index]) data_eight_w.index.names = ['weekday', 'date'] data_eight_w.head(3)
上のパターンみたいに簡単には取れないのでindex.day_name()
を用いる。曜日の英語名じゃなくて数値で扱いたかったら、以下の通り
data_eight_w = data_eight.set_index([data_eight.index.weekday, data_eight.index]) # data_eight_w = data_eight.set_index([data_eight.index.day_name(), data_eight.index]) data_eight_w.index.names = ['weekday', 'date'] data_eight_w.head(3)
(数字は0が月曜日)
次に、曜日ごとの平均。これは上と一緒。
sum_per_weekday = data_eight_w.mean(level = 'weekday')
sum_per_weekday
seaborn
をaxオブジェクトでいじる
まあみるだけなら以下でもいいんだけど
sns.barplot(x = 'weekday', y = 'new_cases', data = sum_per_weekday.reset_index())
以下みたいにすると、x軸斜めにしたりいろいろ細かい調整可能
fig = plt.figure() ax0 = fig.add_subplot(111, title = 'new cases') sns.barplot(x = 'weekday',\ y = 'new_cases',\ data = sum_per_weekday.reset_index(),\ ax = ax0) ax0.tick_params(axis='x', rotation=315) fig.savefig('output/fig0.png')