コロナデータ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)

f:id:iiiiikamirin:20201029131036p:plain

コード

level毎の和(統計量)

まずは各国それぞれを見る前に、8か国全体の傾向についてみていく。

なので、indexについてdate毎の総和を取りたい。

data_eight = data.sum(level = 'date') #  all country
data_eight.head(3)

f:id:iiiiikamirin:20201029131345p:plain

時系列データについて、曜日ごとの平均をとる

まずは曜日を表すインデックス作成

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)

f:id:iiiiikamirin:20201029131554p:plain

上のパターンみたいに簡単には取れないので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)

f:id:iiiiikamirin:20201029131751p:plain

(数字は0が月曜日)

次に、曜日ごとの平均。これは上と一緒。

sum_per_weekday = data_eight_w.mean(level = 'weekday')
sum_per_weekday

f:id:iiiiikamirin:20201029132223p:plain

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')

f:id:iiiiikamirin:20201029132814p:plain