東京の毎日のCOVID-19感染者数の時系列データをプロットしてみましょう。
import matplotlib.pyplot as plt
import pandas as pd
URL = 'https://okumuralab.org/~okumura/python/data/COVID-tokyo.csv'
df = pd.read_csv(URL)
df
を眺めてから、プロットしてみましょう。
plt.plot(df['date'], df['confirmed'])
何となくプロットできているようですが、横軸がよくわかりません。日付が文字列になってしまっているようです。日付を日付として読むには、次のようにします。
df = pd.read_csv(URL, parse_dates=['date'])
同じように見えますが、これをプロットしてみましょう。
plt.plot(df['date'], df['confirmed'])
今度は横軸を日付と認識してくれました。でも、重なって読みにくいので、少し傾けてみましょう。
plt.plot(df['date'], df['confirmed']) plt.xticks(rotation=20)
少し見やすくなりました。
文字を傾けるのが嫌なら、目盛ラベルを一つ置きにしましょう。
plt.plot(df['date'], df['confirmed']) locs, labels = plt.xticks() plt.xticks(locs[0::2])
棒グラフも同様です。
plt.bar(df['date'], df['confirmed'], width=1) plt.xticks(rotation=20)
同様に、厚労省のオープンデータもプロットしてみましょう。
URL1 = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv' URL2 = 'https://www.mhlw.go.jp/content/pcr_tested_daily.csv' df1 = pd.read_csv(URL1, parse_dates=['日付']) df2 = pd.read_csv(URL2, parse_dates=['日付'])
これらを別々に描いてもいいのですが、マージして一つのデータフレームにしてみましょう。
df = pd.merge(df1, df2) plt.plot(df['日付'], df['PCR 検査陽性者数(単日)']) plt.plot(df['日付'], df['PCR 検査実施人数(単日)'])
これではどっちがどっちかわかりませんので、レジェンド(説明)を付けます。
plt.plot(df['日付'], df['PCR 検査陽性者数(単日)']) plt.plot(df['日付'], df['PCR 検査実施人数(単日)']) plt.legend(['陽性者数', '実施人数'])
割り算すれば陽性率が出せそうです。
df['陽性率'] = df['PCR 検査陽性者数(単日)'] / df['PCR 検査実施人数(単日)']
陽性率もプロットしてみましょう。でも、データがいいかげんなのでとんでもない値が混じってしまっています。縦軸を0〜1までに制限すると見やすいと思います。
plt.plot(df['日付'], df['陽性率']) plt.ylim([0, 1])
日付のフォーマットを変えてみましょう。
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
fig, ax = plt.subplots()
formatter = mdates.DateFormatter("%m-%d")
ax.xaxis.set_major_formatter(formatter)
URL = 'https://okumuralab.org/~okumura/python/data/COVID-tokyo.csv'
df = pd.read_csv(URL, parse_dates=['date'])
ax.bar(df['date'], df['confirmed'], width=1)
さらに凝ってみましょう。
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
fig, ax = plt.subplots()
locator = mdates.AutoDateLocator()
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_formatter(formatter)
URL = 'https://okumuralab.org/~okumura/python/data/COVID-tokyo.csv'
df = pd.read_csv(URL, parse_dates=['date'])
ax.bar(df['date'], df['confirmed'], width=1)
さらにカスタマイズしてみましょう。
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
fig, ax = plt.subplots()
locator = mdates.AutoDateLocator()
formatter = mdates.ConciseDateFormatter(locator)
formatter.formats=['%Y年', '%m月', '%d日', '%H:%M', '%H:%M', '%S.%f']
formatter.zero_formats=['', '%Y年', '%m月', '%m-%d', '%H:%M', '%H:%M']
formatter.offset_formats=['', '%Y年', '%Y-%m', '%Y-%m-%d',
'%Y-%m-%d', '%Y-%m-%d %H:%M']
ax.xaxis.set_major_formatter(formatter)
URL = 'https://okumuralab.org/~okumura/python/data/COVID-tokyo.csv'
df = pd.read_csv(URL, parse_dates=['date'])
ax.bar(df['date'], df['confirmed'], width=1)
Last modified: