min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

Python3 東京都の感染者数の移動平均

2021/8/6(金)ヒロシマに原爆が投下された日。

東京都のコロナの感染者が連日5,000人を超えている。

 

東京都知事は「自分ごととして捉えていただきたい」なんて上から目線だが、都民の感染を一番他人事として横目にみるだけで何も手を打って来なかったのはこいつ。

f:id:min117:20210806233052p:plain

何を偉そうに。このタヌキめが。

 

オリンピックなんぞやめて、選手村に隔離する体制をつくれば、自宅待機なんてしなくて済んだのだ。

f:id:min117:20210807125859p:plain

五輪につかった巨額のカネがあればどれだけの命が救えた(これからも含めて)のか

f:id:min117:20210807125937p:plain

ほんと人災である。


で、感染の数調べたついでにPythonで色々試す。

teshi-learn.com

 

データはこれ

stopcovid19.metro.tokyo.lg.jp

 

「オープンデータを入手」

f:id:min117:20210806204855p:plain

 

f:id:min117:20210806204907p:plain

 

catalog.data.metro.tokyo.lg.jp

f:id:min117:20210806204949p:plain

 

ダウンロード。

f:id:min117:20210806205002p:plain

f:id:min117:20210806205034p:plain

 

こんなん。

$ cat 130001_tokyo_covid19_patients.csv

f:id:min117:20210806210216p:plain

f:id:min117:20210806210309p:plain

 

bashawkで整形する。

blog.nomadscafe.jp

 

$ cat 130001_tokyo_covid19_patients.csv | awk -F, '{print $5}' | sort | uniq -c

f:id:min117:20210806212834p:plain

 

感染者数,日付 の並びにできた。ほんとは逆がいいけどまあいいや。

f:id:min117:20210806212853p:plain

東京は今日(2021/08/06)だけで4,515人。終わってる。

 

無理やり「日付 人数」に並び替えるにはawk

$ cat 130001_tokyo_covid19_patients.csv | awk -F, '{print $5}' | sort | uniq -c | awk '{print $2,$1}'

2022-08-02 30842
2022-08-03 38940
2022-08-04 35339
2022-08-05 37767
2022-08-06 30970

 

別ファイルに落とす。

$cat 130001_tokyo_covid19_patients.csv | awk -F, '{print $5}' | sort | uniq -c | grep -v 公表 | tee -a 130001_tokyo_covid19_patients2.csv

f:id:min117:20210806231037p:plain

 

python3でグラフにしてみる。

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

 

df3 = pd.read_csv('130001_tokyo_covid19_patients2.csv')

df3['7days_mean'] = df3["感染者数"].rolling(window=7).mean()

print(df3)

#plot
fig = plt

fig.figure(figsize=(18.0,16.0))

fig.plot(df3["感染者数"],label="1day")
fig.plot(df3['7days_mean'],label="7days_mean")
fig.xlabel('date')
fig.ylabel('patients')
fig.legend()
fig.title('Number of patients')

 

f:id:min117:20210806231136p:plain

f:id:min117:20210806231200p:plain

よくわからんけどできた。ソースコピペだし。たぶん正しいのだろう。どうもdataframe慣れない。クセが強い。

 

もいっこ。

別のもやってみる。

chayarokurokuro.hatenablog.com

 

#厚労省の新型コロナPCR検査数データを読み込む
url = "https://www.mhlw.go.jp/content/pcr_tested_daily.csv"

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# ネットから直接CSVを読み込む
df=pd.read_csv(url)
df

f:id:min117:20210806231446p:plain

 

x = df.iloc[:,0] #日付
y = df.iloc[:,1] #検査数

plt.figure(figsize=(18.0,16.0))
plt.plot(x,y)
plt.savefig("tested.jpg")
plt.show()

f:id:min117:20210806231543p:plain

 

# 検査数を取り出し
n = df.iloc[:,1]
n

f:id:min117:20210806231623p:plain

 

# 検査数を7日移動平均に変換。最小範囲1で。
n_m7 = n.rolling(7, 1).mean()
n_m7

f:id:min117:20210806231712p:plain

 

# グラフ作成
y_7 = n_m7 #縦軸
x = df.iloc[:,0] #横軸


plt.figure(figsize=(18.0,16.0))

#プロット
plt.plot(x, y_7)

# 横軸を31日おきの目盛りに
plt.xticks(x[::31], rotation=45)

# 画像保存
plt.savefig("tested_7mean.jpg")

# 表示
plt.show()

 

f:id:min117:20210806231906p:plain


 

 これもコピペだからようわからん。関数使わないで移動平均出してみたい。今度試す。 

 

qiita.com