四谷ラボ公式ブログ

四谷ラボはいつでも誰でも自由に参加・研究・交流・発信のできる街のオープンイノベーションラボ

新型ウイルスの感染者数を可視化して気づいたこと

f:id:yamashin0922:20200218063637p:plain

こんにちは、四谷ラボのやましんです。新型コロナウイルスは、新しい風邪の一種と言われても、やっぱり怖いですよね。

各地で大勢の人が集まるイベントが中止される中、四谷ラボで開催するイベントも中止すべきかどうか悩ましいところです。

新型コロナウイルスの正体も、いまいちよくわかっていないようなので、今回は感染者数の推移から状況を把握したいと思います。
感染者数は各国が発表する数値で、国によってその信ぴょう性のばらつきはあるかも知れません。

可視化プログラムと使用したデータも掲載しますので、ご利用ください。

国別感染者数の推移

2月17日時点で、感染者数の多い国から順に、感染者数の推移を可視化しました。
各国で感染者数が大きく異なり、信ぴょう性も異なると思うので、単純に比較することはできません。

トータル

トータルですが、ほとんどが中国の感染者数ですね。 f:id:yamashin0922:20200218054800p:plain

中国

2/12頃の傾斜の変化が気になる。 f:id:yamashin0922:20200218054808p:plain

クルーズ船

国ではないですが、可視化しました。 傾斜はきついですね。 f:id:yamashin0922:20200218054817p:plain

シンガポール

典型的な成長曲線になってるなぁ。 f:id:yamashin0922:20200218054825p:plain

日本

データ数が少ないので、一概に言えませんが、最近の増加率が気になる。 f:id:yamashin0922:20200218054834p:plain

香港

日本と同じような傾き f:id:yamashin0922:20200218054843p:plain

タイ

最近の増加が抑えられているような。 f:id:yamashin0922:20200218054850p:plain

韓国

こうやってみると、中国、クルーズ船、シンガポール、日本、香港以外は、傾斜が緩やかになっているよう。 f:id:yamashin0922:20200218054858p:plain

以下は参考まで。

マレーシア

f:id:yamashin0922:20200218054905p:plain

台湾

f:id:yamashin0922:20200218054913p:plain

ベトナム

f:id:yamashin0922:20200218054920p:plain

ドイツ

f:id:yamashin0922:20200218054928p:plain

オーストラリア

f:id:yamashin0922:20200218054518p:plain

米国

f:id:yamashin0922:20200218054526p:plain

フランス

f:id:yamashin0922:20200218054534p:plain

マカオ

f:id:yamashin0922:20200218054543p:plain

英国

f:id:yamashin0922:20200218054551p:plain

UAE

f:id:yamashin0922:20200218054600p:plain

カナダ

f:id:yamashin0922:20200218054609p:plain

フィリピン

f:id:yamashin0922:20200218054616p:plain

インド

f:id:yamashin0922:20200218054625p:plain

イタリア

f:id:yamashin0922:20200218054633p:plain

ロシア

f:id:yamashin0922:20200218054641p:plain

スペイン

f:id:yamashin0922:20200218054649p:plain

カンボジア

f:id:yamashin0922:20200218054657p:plain

スリランカ

f:id:yamashin0922:20200218054705p:plain

ネパール

f:id:yamashin0922:20200218054714p:plain

エジプト

f:id:yamashin0922:20200218054722p:plain

ベルギー

f:id:yamashin0922:20200218054730p:plain

スウェーデン

f:id:yamashin0922:20200218054738p:plain

フィンランド

f:id:yamashin0922:20200218054745p:plain

プログラム

後述するcsv ファイルを読み込んで、グラフを表示するプログラムです。python3です。

# -*- coding: utf-8 -*-
import sys
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import csv
import matplotlib.dates as mdates
from datetime import datetime as dt
matplotlib.use('TkAgg')


def read_csv(filename):
    data = {}
    timestamp = []
    with open(filename) as f:
        reader = csv.reader(f)
        header = next(reader)
        for row in reader:
            for cnt, name in enumerate(header):
                if name not in data:
                    data[name] = []
                if name == 'timestamp':
                    timestamp.append(dt.strptime(row[cnt], '%Y-%m-%d'))
                else:
                    data[name].append(int(row[cnt]))

    return timestamp, data

def plot_graph(timestamp, data):

    num_of_country = len(data) - 1
    horizontal = 1
    vertical = 1

    for i in range(int(num_of_country/(horizontal*vertical))+1):
        fig = plt.figure(figsize=(20,10),dpi=200)

        #fig.suptitle('Infections of a new coronavirus', fontsize=30)
        start = i * vertical * horizontal
        end = min(start + vertical * horizontal,num_of_country)
        cnt = 1
        for key, value in sorted(data.items(), key=lambda x:np.max(x[1], initial=0),reverse=True)[start:end]:
            ax = fig.add_subplot(vertical, horizontal, cnt)
            ax.set_xticklabels(timestamp, fontsize=18, rotation=0)
            ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))

            ax.plot(timestamp, value)
            ax.set_xlabel('Date',fontsize=20)
            ax.set_ylabel('Number of people infected',fontsize=20)
            ax.set_title(key,fontsize=25)
            ax.grid()
            cnt += 1
        #plt.show()
        output = 'new_coronavirus_' + str(i) + '.png'
        plt.savefig(output) 
        plt.close()


if __name__ == '__main__':
    args = sys.argv
    filename = args[1]
    print(filename)
    timestamp, data = read_csv(filename)
    plot_graph(timestamp, data)


使用したデータ

2020年2月17日までの各国が発表している感染者数のデーターです。csvファイルが欲しい方は、ご連絡ください。

timestamp China Cruiseship Japan Korea Taiwan HongKong Macau Philippines Vietnam Cambodia Thailand Malaysia Singapore Australia SriLanka India Nepal Russia UAE Egypt Italy Germany France Spain Belgium UK Sweden Finland USA Canada Total
2020-01-11 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-12 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-13 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-14 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-15 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-16 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41
2020-01-17 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45
2020-01-18 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62
2020-01-19 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121
2020-01-20 198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198
2020-01-21 291 0 1 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 295
2020-01-22 440 0 1 1 0 1 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 446
2020-01-23 571 0 1 1 1 1 1 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 581
2020-01-24 830 0 1 2 1 2 2 0 2 0 4 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 846
2020-01-25 1287 0 3 2 3 5 2 0 2 0 4 0 3 3 0 0 1 0 0 0 0 0 3 0 0 0 0 0 2 0 1320
2020-01-26 1975 0 3 2 3 5 2 0 2 0 5 3 4 4 0 0 1 0 0 0 0 0 3 0 0 0 0 0 2 0 2014
2020-01-27 2744 0 4 4 4 8 5 0 2 0 5 4 4 4 0 0 1 0 0 0 0 0 3 0 0 0 0 0 5 1 2798
2020-01-28 4515 0 6 4 7 8 7 0 2 1 14 4 7 5 1 0 1 0 0 0 0 1 3 0 0 0 0 0 5 2 4593
2020-01-29 5974 0 7 4 8 8 7 0 2 1 14 4 7 7 1 0 1 0 4 0 0 4 4 0 0 0 0 0 5 3 6065
2020-01-30 7711 0 11 4 8 10 7 1 2 1 14 7 10 7 1 1 1 0 4 0 0 4 5 0 0 0 0 1 5 3 7818
2020-01-31 9692 0 14 11 9 12 7 1 5 1 14 8 13 9 1 1 1 0 4 0 2 5 6 0 0 0 0 1 6 3 9826
2020-02-01 11791 0 17 12 10 13 7 1 6 1 19 8 16 12 1 1 1 2 4 0 2 7 6 1 0 2 1 1 7 4 11953
2020-02-02 14380 0 20 15 10 14 7 2 7 1 19 8 18 12 1 2 1 2 5 0 2 8 6 1 0 2 1 1 8 4 14557
2020-02-03 17205 0 20 15 10 15 8 2 8 1 19 8 18 12 1 3 1 2 5 0 2 10 6 1 0 2 1 1 11 4 17391
2020-02-04 20438 0 20 16 10 15 8 2 9 1 19 10 18 12 1 3 1 2 5 0 2 12 6 1 0 2 1 1 11 4 20630
2020-02-05 24324 10 23 18 11 18 10 3 10 1 25 10 24 13 1 3 1 2 5 0 2 12 6 1 1 2 1 1 11 5 24554
2020-02-06 28018 20 25 23 11 21 10 3 10 1 25 12 28 14 1 3 1 2 5 0 2 12 6 1 1 2 1 1 12 5 28276
2020-02-07 31147 61 25 24 16 24 10 3 12 1 25 14 30 15 1 3 1 2 5 0 3 13 6 1 1 3 1 1 12 7 31467
2020-02-08 34542 64 25 24 16 26 10 3 13 1 32 15 33 15 1 3 1 2 7 0 3 14 6 1 1 3 1 1 12 7 34882
2020-02-09 37109 64 26 27 17 26 10 3 14 1 32 17 40 15 1 3 1 2 7 0 3 14 11 1 1 3 1 1 12 7 37469
2020-02-10 40160 70 26 27 18 36 10 3 14 1 32 18 43 15 1 3 1 2 7 0 3 14 11 2 1 4 1 1 12 7 40543
2020-02-11 42638 135 26 28 18 42 10 3 15 1 33 18 45 15 1 3 1 2 8 0 3 14 11 2 1 8 1 1 13 7 43103
2020-02-12 44653 174 29 28 18 49 10 3 15 1 33 18 47 15 1 3 1 2 8 0 3 16 11 2 1 8 1 1 13 7 45171
2020-02-13 58761 218 33 28 18 50 10 3 16 1 33 18 50 15 1 3 1 2 8 0 3 16 11 2 1 9 1 1 14 7 59334
2020-02-14 63851 218 41 28 18 53 10 3 16 1 33 19 58 15 1 3 1 2 8 0 3 16 11 2 1 9 1 1 15 7 64445
2020-02-15 66491 285 53 28 18 56 10 3 16 1 34 21 67 15 1 3 1 2 8 1 3 16 11 2 1 9 1 1 15 7 67180
2020-02-16 68500 355 59 29 18 56 10 3 16 1 34 22 72 15 1 3 1 2 8 1 3 16 12 2 1 9 1 1 15 7 69273
2020-02-17 70548 355 59 29 20 57 10 3 16 1 34 22 72 15 1 3 1 2 8 1 3 16 12 2 1 9 1 1 15 7 71324

気づいたこと

ターニングポイントの検知のため、SDARというモデルを使って、二段階学習させたのですが、データ数が少ないせいか、思うような結果は得られませんでした。 このまま鎮静化することを望んでいますが、感染者がさらに増加してしまった場合、もう一度、トライします。

まとめ

みんなで感染拡大を抑えて、TOKYO2020を迎えましょう!

まずは手洗いが大切です。外出先からの帰宅時や調理の前後、食事前などに こまめに石けんやアルコール消毒液などで手を洗いましょう。

咳などの症状がある方は、咳やくしゃみを手で押さえると、その手で触った ものにウイルスが付着し、ドアノブなどを介して他の方に病気をうつす可能 性がありますので、咳エチケットを行ってください。

持病がある方、ご高齢の方は、できるだけ人混みの多い場所を避けるなど、 より一層注意してください。

厚労省 新型コロナウイルスを防ぐには