import datetime as dt
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style(style="darkgrid", rc=None)
sns.set(font_scale = 1.2)
plt.figure(figsize=(12, 6))
import japanize_matplotlib
<Figure size 864x432 with 0 Axes>
import sys
sys.path.append('../')
%cd '../'
import src.tool as tool
%reload_ext autoreload
%autoreload 2
/home/tsu-nera/repo/hack-for-corona
patients = tool.read_patients()
patients.tail(5)
感染例番号 | 情報公開日 | 発病確認日 | 居住地 | 年代 | 性別 | 職業 | 備考 | 情報元 | |
---|---|---|---|---|---|---|---|---|---|
377 | 378 | 2020-04-09 | 2020-04-08 | 神奈川県横浜市 | 50代 | 男性 | 会社員 | NaN | https://www.pref.kanagawa.jp/documents/58277/2... |
378 | 379 | 2020-04-09 | 2020-04-08 | 神奈川県横浜市 | 20代 | 男性 | 会社員 | NaN | https://www.pref.kanagawa.jp/documents/58277/2... |
379 | 380 | 2020-04-09 | 2020-04-08 | 神奈川県横浜市 | 40代 | 男性 | 会社員 | NaN | https://www.pref.kanagawa.jp/documents/58277/2... |
380 | 381 | 2020-04-09 | 2020-04-08 | 神奈川県横浜市 | 20代 | 男性 | 学生 | NaN | https://www.pref.kanagawa.jp/documents/58277/2... |
381 | 382 | 2020-04-09 | 2020-04-08 | 神奈川県横浜市 | 30代 | 女性 | 歯科医師 | NaN | https://www.pref.kanagawa.jp/documents/58277/2... |
patients = patients.drop(["感染例番号","備考", "情報元"], axis=1)
patients["id"] = patients.index
n = len(patients)
latest_date = patients.iloc[-1]["情報公開日"]
print("神奈川県の感染者 {}人({}現在)".format(n, latest_date))
神奈川県の感染者 382人(2020-04-09現在)
time_df = patients
time_df.index = pd.to_datetime(patients["情報公開日"])
time_df["date"] = pd.to_datetime(patients["情報公開日"])
time_df["year"] = time_df.index.year
time_df["month"] = time_df.index.month
time_df["week_of_month"] = time_df.index.week
time_df["year_and_wom"] = time_df.index.strftime('%Y-W%W')
time_df["year_and_month"] = time_df.index.strftime('%Y-%m')
time_df = patients.sort_values("date")
start_date=time_df.iloc[0]["date"]
end_date=time_df.iloc[-1]["date"]
date=start_date
dates=[]
while date <= end_date:
dates.append(date)
date += dt.timedelta(days=1)
dates2=[]
i=0
date=start_date
while date <= end_date:
if i%7 == 0:
dates2.append(date.strftime('%Y-%m-%d'))
else:
dates2.append(None)
i+=1
date += dt.timedelta(days=1)
fig,ax = plt.subplots(figsize=(12, 6))
ax = sns.countplot(x="date", data=time_df, color="red", order=dates, ax=ax)
ax.set_xticklabels(dates2, rotation=40, ha="right", fontsize=10)
ax.set_xlabel('日付')
ax.set_ylabel('感染者数')
plt.tight_layout()
plt.show()
df_days = time_df.groupby("date").count()
df_days["date"] = pd.to_datetime(df_days.index)
df_days["count"] = df_days["id"].cumsum()
fig,ax = plt.subplots(figsize=(14, 4))
ax = sns.barplot(x="date", y="count", data=df_days, ax=ax, color="yellow", order=dates)
ax.set_xticklabels(dates2, rotation=40, ha="right", fontsize=10)
ax.set_xlabel('日付')
ax.set_ylabel('感染者数')
Text(0, 0.5, '感染者数')
groupby = time_df.groupby('year_and_wom')
df_by_week = pd.DataFrame()
df_by_week["感染者数"] = groupby["id"].count()
df_by_week["累積感染者数"] = groupby["id"].count().cumsum()
df_by_week["週番号"] = df_by_week.index
fig,ax = plt.subplots(figsize=(12, 4))
ax = sns.barplot(x="週番号", y="感染者数", data=df_by_week, ax=ax, color="blue")
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right", fontsize=10)
ax.set_xlabel('週番号')
ax.set_ylabel('感染者数')
Text(0, 0.5, '感染者数')
df_by_week.drop(["週番号"], axis=1, inplace=True)
df_by_week.index.name = '週別'
df_by_week
感染者数 | 累積感染者数 | |
---|---|---|
週別 | ||
2020-W03 | 1 | 1 |
2020-W06 | 3 | 4 |
2020-W07 | 13 | 17 |
2020-W08 | 10 | 27 |
2020-W09 | 15 | 42 |
2020-W10 | 15 | 57 |
2020-W11 | 22 | 79 |
2020-W12 | 48 | 127 |
2020-W13 | 139 | 266 |
2020-W14 | 116 | 382 |
groupby = time_df.groupby('year_and_month')
df_by_month = pd.DataFrame()
df_by_month["感染者数"] = groupby["id"].count()
df_by_month["累積感染者数"] = groupby["id"].count().cumsum()
df_by_month["年月"] = df_by_month.index
fig,ax = plt.subplots(figsize=(12, 4))
ax = sns.barplot(x="年月", y="感染者数", data=df_by_month, ax=ax, color="green")
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right", fontsize=10)
ax.set_xlabel('年月')
ax.set_ylabel('感染者数')
Text(0, 0.5, '感染者数')
df_by_month.drop(["年月"], axis=1, inplace=True)
df_by_month.index.name = '月別'
df_by_month
感染者数 | 累積感染者数 | |
---|---|---|
月別 | ||
2020-01 | 1 | 1 |
2020-02 | 23 | 24 |
2020-03 | 120 | 144 |
2020-04 | 238 | 382 |
area = patients.copy()
area["居住地"] = area["居住地"].apply(tool.cut_ku)
area_df = area.groupby("居住地").count().sort_values("id", ascending=False)["id"].to_frame()
area_df.rename(columns={"id": "感染者数"}, inplace=True)
area_df
感染者数 | |
---|---|
居住地 | |
神奈川県横浜市 | 102 |
神奈川県川崎市 | 84 |
神奈川県相模原市 | 39 |
神奈川県厚木保健福祉事務所管内 | 37 |
神奈川県平塚保健福祉事務所管内 | 32 |
神奈川県横須賀市 | 23 |
神奈川県藤沢市 | 23 |
神奈川県鎌倉保健福祉事務所管内 | 19 |
神奈川県小田原保健福祉事務所管内 | 9 |
神奈川県茅ケ崎市保健所管内 | 9 |
神奈川県 | 4 |
市外 | 1 |
plt.figure(figsize=(12, 6))
ax = sns.countplot(x="居住地", data=area, order=area['居住地'].value_counts(ascending=True).index)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right", fontsize=14)
ax.set_xlabel('居住地',fontsize=14)
ax.set_ylabel('感染者数',fontsize=14)
plt.tight_layout()
plt.show()
age = patients.copy()
age_df = age.groupby("年代").count()["id"].to_frame()
age_df.rename(columns={"id": "感染者数"}, inplace=True)
age_df
感染者数 | |
---|---|
年代 | |
10代 | 5 |
10歳未満 | 7 |
20代 | 68 |
30代 | 63 |
40代 | 52 |
50代 | 65 |
60代 | 43 |
70代 | 41 |
80代 | 14 |
90代 | 5 |
plt.figure(figsize=(12, 4))
ax = sns.countplot(x="年代", data=age, order=["10代", "20代", "30代", "40代", "50代", "60代", "70代", "80代", "90代"])
ax.set_xticklabels(ax.get_xticklabels(), fontsize=14)
ax.set_xlabel('年代',fontsize=14)
ax.set_ylabel('感染者数',fontsize=14)
plt.tight_layout()
plt.show()
sex_df = patients.copy()
sex_df = sex_df.groupby("性別").count()["id"].to_frame()
sex_df.rename(columns={"id": "感染者数"}, inplace=True)
sex_df
感染者数 | |
---|---|
性別 | |
女性 | 143 |
男性 | 221 |
sex_df.plot.bar()
<matplotlib.axes._subplots.AxesSubplot at 0x7fa597a8dd10>
work_df = patients.copy()
plt.figure(figsize=(12, 4))
ax = sns.countplot(x="職業", data=patients, order=patients['職業'].value_counts(ascending=True).index)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right", fontsize=14)
ax.set_xlabel('職業',fontsize=14)
ax.set_ylabel('感染者数',fontsize=14)
plt.tight_layout()
plt.show()
work_df = work_df.groupby("職業").count()["id"].to_frame()
work_df.rename(columns={"id": "感染者数"}, inplace=True)
work_df
感染者数 | |
---|---|
職業 | |
JR東日本社員 | 1 |
アルバイト | 5 |
スーパー店員 | 1 |
タクシー運転手 | 2 |
パート | 2 |
パートタイム従業員 | 1 |
ホームヘルパー | 1 |
主婦 | 3 |
介護職 | 2 |
会社員 | 119 |
保育士 | 2 |
公務員 | 4 |
医師 | 3 |
医療事務 | 1 |
医療従事者 | 6 |
団体職員 | 1 |
国家公務員 | 1 |
大学職員 | 1 |
契約社員 | 1 |
学生 | 15 |
小売店従業員 | 1 |
建築業 | 1 |
接客業 | 1 |
施設職員 | 1 |
検疫官 | 1 |
検疫所職員 | 1 |
歯科医師 | 1 |
無職 | 64 |
獣医 | 1 |
理学療法士 | 1 |
病院事務 | 1 |
看護員 | 1 |
看護師 | 3 |
米海軍横須賀基地従業員 | 1 |
自営業 | 14 |
自治体職員 | 1 |
設備工事 | 1 |
警察官 | 2 |
飲食店勤務 | 3 |
飲食店店員 | 2 |
飲食店従業員 | 1 |
##
kawasaki_df = patients.query ("居住地.str.contains ('川崎市')",engine="python")
area = kawasaki_df.copy()
area["居住地"] = area["居住地"]
area_df = area.groupby("居住地").count().sort_values("id", ascending=False)["id"].to_frame()
area_df.rename(columns={"id": "感染者数"}, inplace=True)
len(kawasaki_df)
84
area_df
感染者数 | |
---|---|
居住地 | |
神奈川県川崎市中原区 | 18 |
神奈川県川崎市川崎区 | 12 |
神奈川県川崎市高津区 | 12 |
神奈川県川崎市宮前区 | 11 |
神奈川県川崎市多摩区 | 10 |
神奈川県川崎市幸区 | 10 |
神奈川県川崎市麻生区 | 6 |
神奈川県川崎市 | 5 |
plt.figure(figsize=(12, 6))
ax = sns.countplot(x="居住地", data=area, order=area['居住地'].value_counts(ascending=True).index)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right", fontsize=14)
ax.set_xlabel('居住地',fontsize=14)
ax.set_ylabel('感染者数',fontsize=14)
plt.tight_layout()
plt.show()