はじめに
私の住んでいる千葉県市川市における新型コロナウイルス感染者のデータをまとめてみました。
そもそも、市川市のホームページでは、オープンデータとして二次利用できる形式で情報を公開していません。
たいしたデータ量でもなければ、項目も少なく、これで何かしようとするには不十分なのですが、ちょっとしたことには使えそうなので、使いやすいようにしてみました。
また、サンプルのコード(Python)も載せておきました。
なお、随時更新していますが、個人的な事情で遅れることがあります。
→更新を終了しました
【2020/05/08】死亡日を追加
【2021/01/22】死者情報があいまいなため、死亡者を特定できない状態に
【2021/02/19】千葉県が死亡者の居住地情報を公表しないこととしたため、死亡日は追加されなくなりました
【2021/08/13】千葉県が職業と推定感染経路を公表しなくなりました
【2022/02/02】感染者数が多すぎ、処理が追い付かないため、更新終了
URL
データ
CSVフォーマットで、文字コードはUTF-8です。
カラム
カラムの意味は以下の通りです。
- 分類
- 患者(発症済み)か無症状病原体保有者(未発症)です
- 市内
- 市川市在住者で感染が見つかった順番です
- 県内
- 千葉県在住者で感染が見つかった順番です
- 県外で見つかった場合は空欄になっています
- 年
- 年齢(10歳単位)です
- 「0」は0~9歳を表します
- 「90」は90歳以上を表します
- 性別
- 男性または女性です
- 職業
- 感染者の職業です
- 空欄があります
- 推定感染経路
- 感染した場所です
- 「県内○○」の「○○」は千葉県で感染が見つかった順番です
- 空欄があります
- 発症日
- 発症した日です
- 「不明」「調査中」があります
- 無症状病原体保有者は空欄です
- 検査確定日
- PCR検査で陽性が確定した日です
- 死亡日
- 死亡した日です
- 亡くなっているのに情報が公開されていない人もいます
- 空欄があります
- 行動歴
- 市内68例目以前は発症後行動歴、市内69例目以降は発症2日前からの行動歴です
- 空欄があります
サンプル
データを使用した解析のサンプルコードです。
ファイルはJupyter Notebookになってます。
import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('corona.csv')
df["発症日"] = df["発症日"].replace("不明", "")
df["発症日"] = df["発症日"].replace("調査中", "")
df["発症日"] = pd.to_datetime(df["発症日"], format="%Y-%m-%d")
df["検査確定日"] = df["検査確定日"].replace("不明", "")
df["検査確定日"] = df["検査確定日"].replace("調査中", "")
df["検査確定日"] = pd.to_datetime(df["検査確定日"], format="%Y-%m-%d")
df["死亡日"] = df["死亡日"].replace("不明", "")
df["死亡日"] = df["死亡日"].replace("調査中", "")
df["死亡日"] = pd.to_datetime(df["死亡日"], format="%Y-%m-%d")
# 要約統計量
df.describe().loc[:,"年"]
# ヒストグラム(年齢)
plt.title("Age")
plt.yticks([0,400,800,1200,1600,2000,2400,2800,3200,3600])
plt.hist(df["年"], range=(0, 100));
df = df.dropna(subset=['検査確定日'])
# 検査確定日+移動平均(7日)
days = (df["検査確定日"].max()-df["検査確定日"].min()).days+1
hist = plt.hist(df["検査確定日"], bins=days)
left = np.arange(df["検査確定日"].min(), df["検査確定日"].max()+datetime.timedelta(days=1), np.timedelta64(1,'D'))
num = 7
b = np.ones(num) / num
y2 = np.convolve(hist[0], b, mode='same')
plt.figure(figsize=(17, 10))
plt.title("Inspection confirmation date")
plt.bar(left, hist[0], color='green', width=1.0, linewidth=0.0);
plt.plot(left, y2, color='red')