Skip to content

Instantly share code, notes, and snippets.

@kota7
Last active August 2, 2021 04:19
Show Gist options
  • Save kota7/dfd99191395175fde68f79ccd8cc1716 to your computer and use it in GitHub Desktop.
Save kota7/dfd99191395175fde68f79ccd8cc1716 to your computer and use it in GitHub Desktop.
Coronavirus Cases in Bunkyo-ku Daycares (Also in kaggle https://www.kaggle.com/kotamori/coronavirus-cases-in-bunkyo-ku-daycares)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "1f9f328d",
"metadata": {
"papermill": {
"duration": 0.008344,
"end_time": "2021-08-02T04:17:46.860190",
"exception": false,
"start_time": "2021-08-02T04:17:46.851846",
"status": "completed"
},
"tags": []
},
"source": [
"What this notebook does:\n",
"\n",
"- Retrieve coronavirus cases in daycares reported in the Bunkyo-ku (A ward in Tokyo, Japan) official website (https://www.city.bunkyo.lg.jp)\n",
"- Parse into a dataframe\n",
"- Visualize\n",
"- Save as a CSV file"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "726f2201",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-02T04:17:46.889728Z",
"iopub.status.busy": "2021-08-02T04:17:46.888709Z",
"iopub.status.idle": "2021-08-02T04:17:46.892348Z",
"shell.execute_reply": "2021-08-02T04:17:46.892900Z",
"shell.execute_reply.started": "2021-08-02T03:56:33.167938Z"
},
"papermill": {
"duration": 0.025016,
"end_time": "2021-08-02T04:17:46.893172",
"exception": false,
"start_time": "2021-08-02T04:17:46.868156",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"As of: 2021-08-02 04:17:46.886832\n"
]
}
],
"source": [
"from datetime import datetime\n",
"\n",
"currenttime = datetime.now()\n",
"print(\"As of:\", currenttime) # may be in UTF"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "28890310",
"metadata": {
"_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
"_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5",
"execution": {
"iopub.execute_input": "2021-08-02T04:17:46.923289Z",
"iopub.status.busy": "2021-08-02T04:17:46.922221Z",
"iopub.status.idle": "2021-08-02T04:17:49.072328Z",
"shell.execute_reply": "2021-08-02T04:17:49.071810Z",
"shell.execute_reply.started": "2021-08-02T03:54:17.830666Z"
},
"papermill": {
"duration": 2.170505,
"end_time": "2021-08-02T04:17:49.072469",
"exception": false,
"start_time": "2021-08-02T04:17:46.901964",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"[{'いつ': '令和3年7月29日(木曜日)',\n",
" 'どこで': '私立認可保育園',\n",
" 'だれが': '園児',\n",
" '内容': '令和3年7月29日(木曜日)、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイルス感染症に罹患していることが判明しました。感染拡大防止のため、7月30日(金曜日)及び7月31日(土曜日)は臨時休園することとし、全園児の保護者に対して園から連絡を行いました。'},\n",
" {'いつ': '令和3年7月29日(木曜日)',\n",
" 'どこで': '私立認可保育園',\n",
" 'だれが': '職員',\n",
" '内容': '令和3年7月29日(木曜日)、文京区内の私立認可保育園に勤務する職員(50代以上)1名が、新型コロナウイルス感染症に罹患していることが判明しました。感染拡大防止のため、7月30日(金曜日)及び7月31日(土曜日)は臨時休園することとし、全園児の保護者に対して園から連絡を行いました。'},\n",
" {'いつ': '令和3年7月28日(水曜日)',\n",
" 'どこで': '私立認可保育園',\n",
" 'だれが': '職員',\n",
" '内容': '令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新型コロナウイルス感染症に罹患していることが判明しました。感染拡大防止のため、7月29日(木曜日)から7月31日(土曜日)まで臨時休園することとし、全園児の保護者に対して園から連絡を行いました。'},\n",
" {'いつ': '令和3年7月28日(水曜日)',\n",
" 'どこで': '私立認可保育園',\n",
" 'だれが': '職員',\n",
" '内容': '令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新型コロナウイルス感染症に罹患していることが判明しました。感染拡大防止のため、7月29日(木曜日)は臨時休園することとし、全園児の保護者に対して園から連絡を行いました。'},\n",
" {'いつ': '令和3年7月29日(木曜日)',\n",
" 'どこで': '私立認可保育園',\n",
" 'だれが': '職員及び園児',\n",
" '内容': '令和3年7月29日(木曜日)、新たに職員(30代)1名及び園児1名が、新型コロナウイルス感染症に罹患していることが判明したため、休園期間を7月31日(土曜日)まで延長することとし、全園児の保護者に対して園から連絡を行いました。'}]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from urllib.request import urlopen\n",
"from bs4 import BeautifulSoup as BS\n",
"\n",
"src = urlopen(\"https://www.city.bunkyo.lg.jp/kyoiku/kosodate/okosan/nicchu/ninka/coronaoshirase.html\").read()\n",
"soup = BS(src)\n",
"\n",
"ts = soup.find_all(\"table\")\n",
"def parse_table(t):\n",
" ths = t.find_all(\"th\")\n",
" tds = [th.find_next(\"td\") for th in ths]\n",
" data = {th.text.strip():td.text.strip() for th,td in zip(ths,tds)}\n",
" return data\n",
"\n",
"x = [parse_table(t) for t in ts]\n",
"x[:5]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "01f99ace",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-02T04:17:49.094175Z",
"iopub.status.busy": "2021-08-02T04:17:49.093428Z",
"iopub.status.idle": "2021-08-02T04:17:49.095881Z",
"shell.execute_reply": "2021-08-02T04:17:49.096363Z",
"shell.execute_reply.started": "2021-08-02T03:53:13.318741Z"
},
"papermill": {
"duration": 0.015987,
"end_time": "2021-08-02T04:17:49.096522",
"exception": false,
"start_time": "2021-08-02T04:17:49.080535",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"# check the consistency in the variable names\n",
"expected = ['いつ', 'どこで', 'だれが', '内容']\n",
"for a in x:\n",
" keys = list(a.keys())\n",
" assert len(keys) == len(expected), a\n",
" assert sorted(keys) == sorted(expected), a"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "21af8d3a",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-02T04:17:49.143881Z",
"iopub.status.busy": "2021-08-02T04:17:49.134877Z",
"iopub.status.idle": "2021-08-02T04:17:49.163664Z",
"shell.execute_reply": "2021-08-02T04:17:49.163157Z",
"shell.execute_reply.started": "2021-08-02T04:17:22.018617Z"
},
"papermill": {
"duration": 0.058975,
"end_time": "2021-08-02T04:17:49.163805",
"exception": false,
"start_time": "2021-08-02T04:17:49.104830",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>place</th>\n",
" <th>patient</th>\n",
" <th>patient_worker</th>\n",
" <th>patient_child</th>\n",
" <th>detail</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2021-07-29</td>\n",
" <td>私立認可保育園</td>\n",
" <td>園児</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>令和3年7月29日(木曜日)、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイル...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2021-07-29</td>\n",
" <td>私立認可保育園</td>\n",
" <td>職員</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>令和3年7月29日(木曜日)、文京区内の私立認可保育園に勤務する職員(50代以上)1名が、新...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2021-07-28</td>\n",
" <td>私立認可保育園</td>\n",
" <td>職員</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2021-07-28</td>\n",
" <td>私立認可保育園</td>\n",
" <td>職員</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2021-07-29</td>\n",
" <td>私立認可保育園</td>\n",
" <td>職員及び園児</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>令和3年7月29日(木曜日)、新たに職員(30代)1名及び園児1名が、新型コロナウイルス感染...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>2020-08-04</td>\n",
" <td>私立認可保育園</td>\n",
" <td>園児</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>令和2年8月4日、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイルス感染症に罹...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>2020-07-09</td>\n",
" <td>区立認可保育園</td>\n",
" <td>職員及び園児</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>令和2年7月9日及び10日に、文京区内の区立認可保育園に勤務する職員1名と在籍する園児2名が...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>2020-04-22</td>\n",
" <td>認可外保育施設</td>\n",
" <td>職員</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>令和2年4月22日、文京区内の認可外保育施設に勤務する職員1名が、新型コロナウイルス感染症に...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>2020-04-08</td>\n",
" <td>私立認可保育園</td>\n",
" <td>園児</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>令和2年4月8日、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイルス感染症に罹...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>2020-04-02</td>\n",
" <td>私立認可保育園</td>\n",
" <td>職員</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>令和2年4月2日、文京区内の私立認可保育園の職員1名が、新型コロナウイルス感染症に罹患してい...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>75 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" date place patient patient_worker patient_child \\\n",
"0 2021-07-29 私立認可保育園 園児 False True \n",
"1 2021-07-29 私立認可保育園 職員 True False \n",
"2 2021-07-28 私立認可保育園 職員 True False \n",
"3 2021-07-28 私立認可保育園 職員 True False \n",
"4 2021-07-29 私立認可保育園 職員及び園児 True True \n",
".. ... ... ... ... ... \n",
"70 2020-08-04 私立認可保育園 園児 False True \n",
"71 2020-07-09 区立認可保育園 職員及び園児 True True \n",
"72 2020-04-22 認可外保育施設 職員 True False \n",
"73 2020-04-08 私立認可保育園 園児 False True \n",
"74 2020-04-02 私立認可保育園 職員 True False \n",
"\n",
" detail \n",
"0 令和3年7月29日(木曜日)、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイル... \n",
"1 令和3年7月29日(木曜日)、文京区内の私立認可保育園に勤務する職員(50代以上)1名が、新... \n",
"2 令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新... \n",
"3 令和3年7月28日(水曜日)、文京区内の私立認可保育園に勤務する職員(20代以下)1名が、新... \n",
"4 令和3年7月29日(木曜日)、新たに職員(30代)1名及び園児1名が、新型コロナウイルス感染... \n",
".. ... \n",
"70 令和2年8月4日、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイルス感染症に罹... \n",
"71 令和2年7月9日及び10日に、文京区内の区立認可保育園に勤務する職員1名と在籍する園児2名が... \n",
"72 令和2年4月22日、文京区内の認可外保育施設に勤務する職員1名が、新型コロナウイルス感染症に... \n",
"73 令和2年4月8日、文京区内の私立認可保育園に在籍する園児1名が、新型コロナウイルス感染症に罹... \n",
"74 令和2年4月2日、文京区内の私立認可保育園の職員1名が、新型コロナウイルス感染症に罹患してい... \n",
"\n",
"[75 rows x 6 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import re\n",
"import pandas as pd\n",
"\n",
"def clean_item(item):\n",
" date = item[\"いつ\"]\n",
" r = re.search(r\"令和(\\d+)年(\\d+)月(\\d+)日\", date) # ignore the second date, if any\n",
" assert r is not None, item\n",
" date = \"%04d-%02d-%02d\" % (int(r.group(1)) + 2018, int(r.group(2)), int(r.group(3))) \n",
" place = item[\"どこで\"]\n",
" patient = item[\"だれが\"]\n",
" patient_worker = (patient.find(\"職員\") >= 0)\n",
" patient_child = (patient.find(\"園児\") >= 0)\n",
" detail = item[\"内容\"]\n",
" return {\"date\":date, \"place\":place, \"patient\":patient,\n",
" \"patient_worker\":patient_worker, \"patient_child\":patient_child, \"detail\":detail}\n",
"y = pd.DataFrame(clean_item(a) for a in x)\n",
"y.date = pd.to_datetime(y.date, format=\"%Y-%m-%d\")\n",
"\n",
"y"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7d81f8e8",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-02T04:17:49.203664Z",
"iopub.status.busy": "2021-08-02T04:17:49.202974Z",
"iopub.status.idle": "2021-08-02T04:17:49.891994Z",
"shell.execute_reply": "2021-08-02T04:17:49.891473Z",
"shell.execute_reply.started": "2021-08-02T04:17:23.652429Z"
},
"papermill": {
"duration": 0.719632,
"end_time": "2021-08-02T04:17:49.892144",
"exception": false,
"start_time": "2021-08-02T04:17:49.172512",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"image/png": "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WStXb2itvXHYkQAAAGbTNHcRrCS/nORDrbVfGH4kAACA2TTNI1jfmuQlSZ5XVXdOXr574LkAAABmzqbPwWqtvTPDPL8OAADgijLVc7AAAADYnIIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQiYIFAADQyaYFq6peV1WfraoPbMdAAAAAs2qaR7B+JclNA88BAAAw8zYtWK21O5J8bhtmAQAAmGnVWtt8p6qDSd7SWnvGJfY5kuRIkszPz9+4vLzca8Ztde+pU2nnznVft/bsyRPn5y/741ZXVzM3N9d9HjZ333335Qtf+EL3dR/psbCZoY7dlqS6r7p5Do/k2N9pf39n2Xaee2bt2E2S0+eu677m/j1ncvrcdZnfl5w623fN3vbvOZMDBw50X3colzrGrr322jz44IOPaN2hzg0nT54c5Pv2uD1nRjmfX8wY/8YZ6nyTDHte6O1J+76Ue85e1X3d3XbOWVpaOtFaW9i4fW+vT9BaO5bkWJIsLCy0xcXFXktvq6NHj+bWsw/LacsO7zueW26++bI/bmVlJbOa5ay77bbb8qr33tB93Ud6LGxmyGN3jL8Tj+TY32l/f2fZdp57ZvHYHWbdu3Pr2YW84pkP5dXv7/Pj+fyavR3ed3cOHTrUfd2hXOoYW8v7kZ3rZ+98PtTxMDv/xpm9880w37OfedaZR3zcX4pzzhp3EQQAAOhEwQIAAOhkmtu035bkXUmeVlWfrqofHH4sAACA2bPpRd6ttdm54BEAAGBELhEEAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoRMECAADoZKqCVVU3VdVHqupjVfXKoYcCAACYRZsWrKq6KskvJXlBkqcnOVRVTx96MAAAgFkzzSNYz0nysdbax1trX0yynORFw44FAAAwe6q1dukdql6c5KbW2g9N3n5Jkm9qrb10w35HkhyZvPm0JB/pP+6utD/J6bGH2KVkPy75j0v+45H99pL3eGQ/Htn38ZWttcdv3Li31+qttWNJjvVajzVVdby1tjD2HLuR7Mcl/3HJfzyy317yHo/sxyP7YU1zieA9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\n",
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"fig, ax = plt.subplots(2, 1, figsize=(12, 6), sharex=True, sharey=True)\n",
"\n",
"\n",
"# approx 14 days bins\n",
"bins = int((y.date.max() - y.date.min()).days / 14)\n",
"y.date[y.patient_worker].hist(ax=ax[0], bins=bins, edgecolor=\"grey\")\n",
"ax[0].set_title(\"Workers\")\n",
"y.date[y.patient_child].hist(ax=ax[1], bins=bins, edgecolor=\"grey\")\n",
"ax[1].set_title(\"Children\")\n",
"fig.tight_layout()\n",
"None"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "36724c9a",
"metadata": {
"execution": {
"iopub.execute_input": "2021-08-02T04:17:49.916412Z",
"iopub.status.busy": "2021-08-02T04:17:49.915677Z",
"iopub.status.idle": "2021-08-02T04:17:49.924190Z",
"shell.execute_reply": "2021-08-02T04:17:49.923523Z",
"shell.execute_reply.started": "2021-08-02T04:17:25.245538Z"
},
"papermill": {
"duration": 0.022628,
"end_time": "2021-08-02T04:17:49.924326",
"exception": false,
"start_time": "2021-08-02T04:17:49.901698",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"y.to_csv(\"coronavirus-cases-in-bunkyoku-daycares_{}.csv\".format(currenttime.strftime(\"%Y%m%d\")), index=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "480bc9cb",
"metadata": {
"papermill": {
"duration": 0.009413,
"end_time": "2021-08-02T04:17:49.943928",
"exception": false,
"start_time": "2021-08-02T04:17:49.934515",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
},
"papermill": {
"default_parameters": {},
"duration": 11.622484,
"end_time": "2021-08-02T04:17:50.563350",
"environment_variables": {},
"exception": null,
"input_path": "__notebook__.ipynb",
"output_path": "__notebook__.ipynb",
"parameters": {},
"start_time": "2021-08-02T04:17:38.940866",
"version": "2.3.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment