pandasの勉強ついでにコロナがいつ終わるのか、ロックダウンって意味あるのか自由研究をしてみた


コロナっていつ終わるのよ。

コロナウィルスに対する緊急事態宣言が出て早一ヶ月。なんならヨーロッパで研究のお仕事をしていたので3月の半ばからしっかりこのウィルスに悩まされています。ヨーロッパのお仕事はこの騒ぎでなくなり、日本でのお仕事を探すも、なかなか皆様からのお返事が帰ってきません。(そりゃGWだし当たり前というツッコミ、ありがとうございます。)
家でのうのうと過ごしていても時間の無駄なので、コロナっていつ終わるのか、pandasのお勉強もかねてちょっと自由研究してみました。

 使うもの

 Ourworld in dataのコロナデータベース(CSVベース)

これしか手軽でいい奴が見つかりませんでした。いいデータベースがあればご教授ください。
https://github.com/owid/covid-19-data/blob/master/public/data/owid-covid-data.csv

 Wikipediaのロックダウンのページ

 Jupyterとpandasとか

この辺はqiitaさんなので紹介省いちゃいます。

 データの準備

 Wikipediaのページを先にcsvに調理しておきます。

めちゃ大変。

csvを読み込み、国ごとにデータ整理

df=pd.read_csv('/home/username/COVID19/owid-covid-data.csv')
df.date = pd.to_datetime(df['date'], format='%Y-%m-%d')
countries=pd.read_csv('/home/username/COVID19/countries.csv')
countries.lockdown_begins=pd.to_datetime(countries['lockdown_begins'], format='%Y-%m-%d')
countries.lockdown_ends=pd.to_datetime(countries['lockdown_ends'], format='%Y-%m-%d')
countries=countries.dropna()
countries.index=countries.iso_code

pandasに入るとこんな感じ(インデックスはちょーっといじりました。)
Wikiの方(ロックダウンの開始日、終了(予定)日)

生データ

国別にデータのサブセットをとり、日付をインデックスに

def country(df,country_name):

    newdata=df.loc[df.iso_code==country_name]
    newdata.set_index(['date'],inplace=True)

    return newdata

後はデータで遊びましょう。

 なんでもいいからプロットしてみよう

ということでよく見る、確定感染者数と死者の日時と累計のプロットを作ってみます。
土日のデータをうまく避けるにはやっぱり7日間移動平均が良さそうです。
七日間移動平均と陽性率を計算してみます。

def rolling_average(input):
    columns=input.columns

    input['new_tests2']=input['total_tests'].diff()

    for column in columns[2:13]:
        #移動平均はこの行でok?
        input[column]=input[column].rolling(7).mean()
   #全ケースの移動平均と検査数(人数)から、累計の陽性率と日毎の陽性率を計算します。
    input['positive_rate_total']=input['total_cases']/input['total_tests']
    input['positive_rate_diff']=input['new_cases']/input['new_tests2']

    return input


移動平均の新規感染者は減少傾向、死者数は丁度峠を超えそうなあたりでしょうか。ニュースでやっている通りですね。(五月三日現在)
日毎のPCR陽性率は、報道の通り国全体だと10%程度で推移しているようです。東京都だけのデータならかなり違うんでしょう。

 本題1 ロックダウンの効果は?

ニュースをjupyter上で再現できたところで、ロックダウンとの関係について調べてみましょう。いっつもみさせて貰っている(なんならヨーロッパにいた最初の三週間は毎日チェックしていました)今だけ無料のファイナンシャルタイムスの記事を参考に、死者の移動平均が3人になった日を基準にプロットしてみます。これがこの自由研究におけるコロナウィルス拡散の基準日になります。プロットは全て、最大値(感染者数または死者数が最大になった値)で割ってあります。

緊急事態宣言が発令された日(4/6日)の次の日4/7日が3人になった日で、この日を境に今まで乗っていなかったファイナンシャルタイムスの死者グラフに日本が出現し、ものすごく辛かったです。日本で感染爆発が起きて何万人も亡くなってしまう状況を想像し、ブルブル震えました。しかし幸いにも、二週間が立たないうちに新規感染者のピークを過ぎ去り、少し安心できたのが4/17日ごろだったと思います。だいたいそんな感じでしたよね?死者のピークについてはなんとも言えないですが、他の国の同じグラフでもだいたい二週間遅れなので、先週過ぎたという希望的観測を持つことにしましょう。(死者数は国の医療状況によって様々なようです。)そして我々がいるのが約25日めの5/4ということになります。月末の緊急事態宣言解除はグラフの一番右側です。ぱっと見では、新規の確定感染者数は落ち着きそうですよね。もちろんこの図、いろんな国のを作ることができます。と言っても、内容はファイナンシャルタイムスと同じなので、お世話になったイギリス、フランスと、かなり先進国中ではうまくやっている、オーストラリアをみてみましょう。

イギリスは、ロックダウンに入る日が移動平均の死者3人が過ぎた後8日後で、その分そこから二週間、感染者と死者が増え続けました。お世話になった身としてはとても辛いです。この段階では当然ですがロックダウンを解除できる見込みはありません。ちなみに一番右の線が今日です。悲しいです。

フランスは、ロックダウンに入る日こそ遅かったですが、外出の徹底的な禁止と、不要な外出に対する罰金を課すことによって、かなり人の移動を強制的に制限しました。効果は、今見てみるとてきめんで、数字にすると未だに千人くらいの方が毎日感染確定していますが、ひどい時の2割まで新規感染者数は減り、死者も減る一方です。当時は外出禁止の厳しさに困惑する部分もありましたが、今こうしてみると非常に高い効果が出ていますね。一番右の線は今日の日付です。

オーストラリアは、あまり事情に詳しくないのですが(ロックダウンしてないんでしたっけ?)、かなり早い段階から国際線の運行を止めていたそうです。(その日をロックダウン開始日の代わりにしてあります。)ご覧のように死者が出る前に対策を打ったオーストラリアでは効果がものすごく高く、感染者数のピークが死者3人になる前に終わっています。ということは死者3人の時点で、あらかた片付いているということになりますね。右の線は5/3日です。これなら、気をつけて外出して、クラスタ(3密)を避ければ今年中に元の生活に戻れそうです。

どうでしたか?簡単なグラフですが、ロックダウンや水際防疫の重要さがわかるような気がします。

 本題2 嫌なグラフ

どうやら、ロックダウンや水際対策の早さがコロナ対策の秘訣だったようです。これをロックダウンデルタ、なんてかっこいい名前で呼んで、累計感染者数上位50カ国の死者数や感染者数を色々プロットしてみた中で、面白い図が2枚だけありました。一枚目がこちら。とても嫌なグラフです。なにせ縦軸は私たちが失った人々なので。

(lockdown efficiencyなんて言っていますが、ただのロックダウンした日と、累計死者3人のズレです。ロックダウンデルタです。笑)ロックダウンデルタは左に行くほど早く、右に行くほど遅くロックダウンしたことを示します。移動平均ピーク死者数を縦に取ってあります。ご覧の様に、機械学習がなくても線を引かなくても、はっきりわかる相関があります。日本はロックダウンデルタが-1ですので、他の国々の中ではかなりいい方だと思います。2月終わりからのクラスタ、3密回避の効果が出ているのでしょう。緊急事態宣言を一週間早く出せば、という議論もありますが、過ぎたことはどうにもなりません。

    次は素早く緊急事態宣言を出してください。よろしく。
ロックダウンデルタが5日以上遅れてしまったフランス、スペイン、イギリス、アメリカ、などは非常に厳しい結果になっている様です。中国は、なんの情報もないのに、よくこのスピードでロックダウンできたと思います。しかしロシアとブラジルは、ロックダウン時期は日本と同じくらいなのに、苦労している様です。

 本題 んでいつ終わるの?

コロナが一応収束したとみられる場所で、ロックダウンが解除された場所での、ロックダウンデルタとロックダウン期間の関係です。

ロックダウンデルタが小さいところは、感染ピークが早く、すぐ減少に転じ、よって死者数も少ないため、ロックダウンを解除するまでの日数が短い、という結果になっています。幸い日本の緊急事態宣言はロックダウンΔ=-1でしたので、ロックダウン期間は大体65日くらいですかね。1日で全部作ったので直線引く暇もなかったんですが、まぁ大体6月の頭にはロックダウンが解除できそうな気がします。逆に今動いてもいいと思っている人はまだまだ甘くて、次の波を呼び寄せてしまうかもしてません。

    引き続きすていほーむ、びーせーふ、びーかいんどで五月も参りましょう

ヨーロッパはロックダウンデルタが正の数の国が多いので、まだまだ時間がかかりそうです。最後のグラフを直線で引っ張ると、倍はかかりそうな気がします。大変ですが、応援しています。ところで、先ほど紹介したオーストラリアは、ロックダウンが早かったためロックダウン期間も短いです。気になる点、ありませんか?そうですノルウェーです。何が起きてるんでしょうか。ちょっと見てみましょう。

ノルウェーのロックダウンは、ヨーロッパの中でも一足先の3/12日でした。移動平均が三人になったのは4/3日のことで、逆算すると20日以上前からロックダウンをしていたことになるんですね。ロックダウン終了は移動平均が三人になってから僅か10日ほどの4/13日。完全に元の日常に戻るわけではないとしても、随分早いロックダウン解放です。日次移動平均死者数は最高8で、累計では二百人の方が犠牲にはなりましたが、人の移動の活発なヨーロッパの中では最優秀ではないでしょうか。

 終わりに

どうでしたか?激動の時代で先が見えない感じもしますが、自分の国が特異点にならない限りは簡単なデータ整理で未来がちょっとだけ予測できるようです。初めての自由研究ですが、面白い、と思われる方が居られればこれからもちょくちょく投稿しようかと思います。ソースはもし希望があれば公開しますが、あまりいいプログラマーではないので、期待しないでください。また会う機会がありましたら、どこかでお会いしましょう。