
新型コロナ - 世界のデータ解析(1)
知人から、武漢からの距離と感染者数を調べてみたら?と助言がありました。日本をはじめ東アジアの感染者数・死者数が少ないのは、我々がよく引く「普通の風邪」ですでにcovid-19に対する何らかの「交差免疫」を持っているからでは? 武漢に地理的に近い東アジアの我々には、その土地に特有なウイルスへの耐性をすでに持っているのでは?と言うアイデアです。
エクササイズとして試しに作ってみます。
1. Data
データを参照するのは以下のJohn's Hopkins とOxfordの二つのサイト:
・ OVID-19 Dashboard by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University (JHU)
・ Our World in Data - Coronavirus Pandemic (COVID-19)
両サイトとも、GitHubでデータを公開している。
前者はArcGISの地図上に感染者数を表示しているので、緯度・経度の情報を持っている。後者は感染者数を100万人で割ってnormalizaしたデータをすでに作っている。どこにデータを持っているかは、各サイトを注意して見ること。
これらのデータはpandasで直接読める。rawデータを読むこと。例えば、owidのGitHubページであれば、
RawをclickしてそのURLをコピーすること。
下でそれぞれのデータから必要変数(CSSEでは緯度・経度、owidではcases per 1M)を書き出している。ここで注意するのはcsseデータは例えば大きな国や植民地があれば一つの国に複数にわたるposition infoのデータがある。
owidのdata tableを見るとわかるが各columnに国名、rowに日があるのでCSSEのデータのように行と列を変更して書き出したい。df.transpose()でそれを行う。その後、一行目(iloc[:,0])の国名と最後の行(iloc[:,-1])の最新のデータ(累積)だけを取り出している。
ここで、多分二つのdata tablesを比較してmergeするなど、python/pandasでできるはず(ref)だが、私はgoogle spread sheetで自分でmergeした。200ほどの国のデータだし、複数position infoがある国は数個だし。データに目も通せるし。
最終的に作ったデータの五行は↓。
Country,20200630,Lat,Log
Afghanistan,802.449,33,65
Albania,856.905,41.1533,20.1683
Algeria,309.48,28.0339,1.6596
Andorra,11065.812,42.5063,1.5218
2. Procedure
[1] データを読む。owidから抽出した国名と6月30日のデータ(スペインは6/29)と、CSSEから抽出した緯度・経度のデータがある。
武漢の緯度・経度と各国の緯度・経度から距離をnumpyを使って計算する。
ここのサイトで距離を計算してくれるので、アフガニスタンでチェック。
plotlyでplotしてみる。Bubble size は感染者数/1M。htmlでinteractiveな図を出してくれる(ここでは載せない)。
綺麗に見えるplotでも情報量が多いと余計にわかりにくい図になる時があります。seabornでもplot。
3. Analysis & Summary
各国の武漢からの距離と100万人中の感染者数の相関を調べてみた。相関はみられない。ただし、国によって初めての感染者がでた日は異なる。各国で最初の感染者から何日目と決めて累積数を求めた方が良い。
患者数の多い例えばアメリカの移民のグループでデータを分けるなどの研究・解析の方が良い気がする。
4. Reference
今は読む時間ないけど、あとで読んでみたいもの。