インタラクティブ可視化事例¶
[1]:
import os
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
[2]:
df = pd.read_pickle("https://github.com/plotly-dash-book/events/raw/plotly/20210112/plotly/data.pickle")
df.iloc[[0]].T
[2]:
通し | 1 |
---|---|
厚労省NO | 1 |
無症状病原体保有者 | NaN |
国内 | A-1 |
チャーター便 | NaN |
年代 | 30 |
性別 | 男性 |
確定日 | 2020-01-15 00:00:00 |
発症日 | 2020-01-03 00:00:00 |
受診都道府県 | 神奈川県 |
居住都道府県 | 神奈川県 |
居住管内 | NaN |
居住市区町村 | NaN |
キー | 神奈川県 |
発表 | 神奈川県 |
都道府県内症例番号 | 1 |
市町村内症例番号 | NaN |
ステータス | 退院 |
備考 | NaN |
ソース | https://www.mhlw.go.jp/stf/newpage_08906.html |
ソース2 | https://www.pref.kanagawa.jp/docs/ga4/bukanshi... |
ソース3 | NaN |
人数 | 1 |
累計 | 1.000000 |
前日比 | 1.000000 |
発症数 | 0.000000 |
死者合計 | NaN |
退院数累計 | 1.000000 |
退院数 | 1.000000 |
PCR検査実施人数 | NaN |
PCR検査前日比 | NaN |
職業_正誤確認用 | NaN |
勤務先_正誤確認用 | NaN |
Hospital Pref | Kanagawa |
Residential Pref | Kanagawa |
Release | Kanagawa Prefecture |
Gender | Male |
X | 139.642347 |
Y | 35.447504 |
確定日YYYYMMDD | 2020/1/15 |
受診都道府県コード | 14.000000 |
居住都道府県コード | 14.000000 |
更新日時 | 12/25/2020 12:04 |
感染者の位置情報¶
[3]:
after_oct_df = df.loc[df["確定日"] > "2020-10-01"]
px.set_mapbox_access_token(os.environ["MAPBOX_TOKEN"])
px.scatter_mapbox(
after_oct_df,
lat="Y",
lon="X",
size="人数",
size_max=10,
color="年代",
hover_data=["性別", "発症日", "受診都道府県", "居住都道府県"],
animation_frame=after_oct_df["確定日"].map(lambda x: f"{x:%m/%d}"),
zoom=4,
center={"lat": 36, "lon": 138},
title="感染者の居住地",
width=1000,
height=800,
)
感染者数の推移(年代別)¶
[4]:
age_df = (
df.groupby(["確定日", "年代"]).size().reset_index().rename({0: "感染者数"}, axis=1)
)
age_df.head()
[4]:
確定日 | 年代 | 感染者数 | |
---|---|---|---|
0 | 2020-01-15 | 30 | 1 |
1 | 2020-01-24 | 40 | 1 |
2 | 2020-01-25 | 30 | 1 |
3 | 2020-01-26 | 40 | 1 |
4 | 2020-01-28 | 40 | 2 |
[5]:
px.bar(
age_df,
x="確定日",
y="感染者数",
color="年代",
title="感染者数の推移(年代別)"
).show()
[6]:
prefectures_df = (
df.groupby(["確定日", "居住都道府県"])
.size()
.reset_index()
.rename({0: "感染者数"}, axis=1)
)
prefectures_df.head()
[6]:
確定日 | 居住都道府県 | 感染者数 | |
---|---|---|---|
0 | 2020-01-15 | 神奈川県 | 1 |
1 | 2020-01-24 | 中華人民共和国 | 1 |
2 | 2020-01-25 | 中華人民共和国 | 1 |
3 | 2020-01-26 | 中華人民共和国 | 1 |
4 | 2020-01-28 | 中華人民共和国 | 2 |
感染者数の推移(居住都道府県別)¶
[7]:
px.bar(
prefectures_df,
x="確定日",
y="感染者数",
color="居住都道府県",
title="感染者数の推移(居住都道府県別)"
).show()
レンジスライダ/レンジセレクタ¶
[8]:
fixed_date_sum_df = age_df.groupby("確定日").sum()
fixed_date_sum_df.head()
[8]:
感染者数 | |
---|---|
確定日 | |
2020-01-15 | 1 |
2020-01-24 | 1 |
2020-01-25 | 1 |
2020-01-26 | 1 |
2020-01-28 | 3 |
[9]:
line_fig = px.line(fixed_date_sum_df, x=fixed_date_sum_df.index, y="感染者数")
line_fig.update_xaxes(
rangeslider={"visible": True},
rangeselector={
"buttons": [
{"count": 3, "label": "3m", "step": "month"},
{"count": 1, "label": "1m", "step": "month"},
{"count": 7, "label": "7d", "step": "day"},
]
},
)
line_fig.show()
ツリーマップ¶
[10]:
latest_df = df.loc[
df["確定日"] == df["確定日"].max(), ["確定日", "居住都道府県", "年代", "性別"]
].dropna()
px.treemap(latest_df, path=["居住都道府県", "年代", "性別"])