US州ごと新規感染者数トレンド推移をPlotlyで描画する
前回記事のグラフをPlotlyで描画してみた
hiroshimaeasygogo.hatenadiary.com
前回はUSの州ごとの新規感染者数の推移を、季節調整を施したトレンドラインでmatplotlibを使って描画した。
しかしlegend
(つまり凡例)が見づらく、どこが増えていてどこが減っているのかmatplotlibではわかりづらいという話をした。
ということで今回はplotlyを使ってグラフを描画してみたので、参考にしてもらえれば幸いだ。
残念ながらstaked area plot(積み上げ面グラフ)の描き方が上手くいかなかったので、stacked bar chart(積み上げ棒グラフ)になってしまったが(実数ではなくトレンドラインを示すのに棒グラフは何となく不自然)、傾向が掴めればそれでよしとしよう。
https://chart-studio.plotly.com/~hiroshimaeasyryo/159.embed
前回触れた通りブログ内に埋め込みができないのでリンクから飛んで見てきてほしい。
コードスニペット
途中まで前回と一緒ですが一応載せておきます。
import pandas as pd import numpy as np import pprint import datetime import matplotlib.pyplot as plt import seaborn as sns row_data = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_US.csv') states_df = row_data.groupby('Province_State') df_list = [] for dl in states_df: pd.DataFrame(dl) df_list.append(dl) daily_list = [] for i in range(len(df_list)): daily_list.append(df_list[i][1].T[11:].sum(axis=1)) daily_df = pd.DataFrame(daily_list).T states_list = [] for dl in range(len(df_list)): states_list.append(df_list[dl][0]) daily_df.columns = states_list daily_cases = daily_df.diff().dropna() daily_cases.where(daily_cases > 0, 0, inplace=True) day_cas_rol = daily_cases.rolling(7).mean().dropna() # ここから追記 # plotlyで描画 # chart studioでオンライン上で表示する為にはchart studioの登録とapi keyの設定が必要 import chart_studio.plotly as py import plotly.graph_objects as go from plotly.subplots import make_subplots # オフラインでnotebook上で見る場合はこの2行が必要 import plotly.offline as offline offline.init_notebook_mode(connected=False) traces = [] for t in range(len(day_cas_rol.columns)): traces.append('traces_' + str(t)) for s in range(len(traces)): traces[s] = go.Bar( x=day_cas_rol.index, y=day_cas_rol[day_cas_rol.columns[s]], name=day_cas_rol.columns[s] ) layout = go.Layout(barmode='stack') fig = go.Figure(data=traces, layout=layout) py.plot(fig) # オフラインで見る場合はこちら offline.iplot(fig)