Help us understand the problem. What is going on with this article?

【新型コロナ】次のピークは12月? Pythonでトレンド分析やってみた!

Trend.png

0.まとめ

(1) PythonのStatsModelで新型コロナのトレンド分析をやってみた
(2) 厚労省のデータを分析したところ、最初のピークが4月、今回のピークは8月
(3) と、言うことは、次のピークは12月か、という お話

1.やったこと

(1) 厚労省のホームぺージから、新型コロナ感染者のデータを取得
(2) PythonのStatsModelで、トレンド、季節要因、残差に分解

(Special Thanks to)
もものきとデータ解析をはじめようを参考にさせて頂きました。
大変、ありがとうございました。

2.厚労省のホームぺージから、新型コロナ感染者のデータを取得

厚労省のホームページから、陽性者数をダウンロード。csvデータで簡単にダウンロードが出来るのは、とても好感が持てた。厚労省、スゴイ!

詳しい分析手法については、前述の「もものきとデータ解析をはじめよう」を参照してください。

まずは、準備作業。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
% matplotlib inline

そして、ダウンロードしたデータを読み込む。1月16日以降のデータが入っている。

df=pd.read_csv('pcr_positive_daily.csv')
df.head()

pic1.png

ちなみに、直近のデータは一昨日のもの。基本的に、前日のデータまで取得できるが、更新されるのは、夕方。土日でも更新されるところがエライ!

df.tail()

pic2.png

さて、データが公表されている1月後半以降、足元までの感染者数の推移を見てみよう。

%matplotlib inline
df.plot()

PCR1.png

ちなみに、matplotlibは、そのまま使うと、いわゆる「豆腐」になります(笑)
解決方法は、以下のぺージが、とっても参考になりました。ありがとうございます。
Googleコラボのグラフ(matplotlib)を日本語化する方法!

3.PythonのStatsModelで、トレンド、季節要因、残差に分解

さて、やっと本題です。
厚労省のデータを、PythonのStatsModelを使って、分解します。

numbers = pd.Series(df['PCR 検査陽性者数(単日)'], dtype='float')
numbers.index = pd.to_datetime(df['日付'])

res = sm.tsa.seasonal_decompose(numbers)

original = numbers # オリジナルデータ
trend = res.trend # トレンドデータ
seasonal = res.seasonal # 季節性データ
residual = res.resid # 残差データ

plt.figure(figsize=(8, 8)) # グラフ描画枠作成、サイズ指定

# オリジナルデータのプロット
plt.subplot(411) # グラフ4行1列の1番目の位置(一番上)
plt.plot(original)
plt.ylabel('Original')

# trend データのプロット
plt.subplot(412) # グラフ4行1列の2番目の位置
plt.plot(trend)
plt.ylabel('Trend')

# seasonalデータ のプロット
plt.subplot(413) # グラフ4行1列の3番目の位置
plt.plot(seasonal)
plt.ylabel('Seasonality')

# residual データのプロット
plt.subplot(414) # グラフ4行1列の4番目の位置(一番下)
plt.plot(residual)
plt.ylabel('Residuals')

plt.tight_layout() # グラフの間隔を自動調整

結果は、以下の通りです。
コードにも書きましたが、上から順番に、
①オリジナルデータ
②トレンドデータ
③季節性データ
④残差データ
と なります。

PCR2.png

2番目のトレンドデータに着目して下さい。
最初のピークが4月上旬、今回のピークが8月上旬にあることが見てとれます。
そこから考えるに、次のピークは12月上旬でしょうか。

4.最後に

新型コロナが早期に終息することを、ただただ祈っています。
しかしながら、現実は厳しい と、認識しています。

新型コロナの病名はCOVID-19ですが、ウイルス名はSARS-CoV-2だそうです。
このウィルス名はSARSに似ているからだそうです。

そのSARSが流行ったのは2002年ですから、今から20年近く前です。
しかしながら、SARSのワクチンは未だに作られていないようです。

大変な時代だからこそ、出来ることを粛々と、やっていきたいと思います。

新型コロナの影響で、飲み会がなくなったのは、寂しい気もしますが、
在宅勤務の推進など、合理的な働き方を進める、良い機会になった面もあります。

こんな時こそ、落ちついて生きましょう:relaxed:

最後の最後に、参考とさせて頂きましたサイトの関係者の方々に、御礼、申し上げます。

ka201504
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした