新型コロナの感染状況(2020/5/2)
前回の記事では、新型コロナの感染状況データをPythonでスクレイピングしてオラクルデータベースへ収容し、OpenJUMP上の地図にグラフ表示しました。
今回は、SpatiaLiteを使って今週分のデータを処理します。
今回実現する仕組み
今回は、PythonでスクレイピングしたデータをSpatiaLiteデータベースへインポートし世界地図とSQLで結合します。仕組みを以下に図示します。

シェープファイルのインポート
世界地図のシェープファイルを、”spatialite_gui”ユーティリティを使ってSpatiaLiteへインポートします。
”spatialite_gui”の導入やインポートの詳細は、以下の記事を参考にしてください。
[blogcard url=”https://takamoto.biz/spatialite/spatialite1/”]
シェープファイルのインポートは、”spatialite_gui”ユーティリティを起動して新規のSpatiaLiteデータベースを作成します。

次に、”Load Shapefile”アイコンをクリックして、Natural Earthの世界地図をインポートします。
メニューから[Files]、[Advanced]、[Load Shapefile]を選択し、表示される”Load Shapefile”ダイアログからインポートするシェープファイルを指定して”OK”ボタンを押下します。SRID(=EPSG)は、”4326”(WGS84緯度経度)を指定してください。

インポートに成功すると以下のメッセージダイアログが表示さえれます。

CSVファイルのインポート
次に、PythonでスクレイピングしたWHOデータをインポートします。
Pythonによるスクレイピングの詳細は以下の記事を参考にしてください。
[blogcard url=”https://takamoto.biz/gis/openjump5/”]
CSVファイルのインポートは、メニューから[Files]、[Advanced]、[Load CSV/TXT]を選択し、表示される”Load CSV/TXT”ダイアログからインポートするCSVファイルを指定して”OK”ボタンを押下します。ファイルの先頭行をカラム都市、テキストのセパレータなし、区切り文字をカンマで指定します。

インポートに成功すると以下のメッセージダイアログが表示さえれます。

PostGIS、オラクルでも同様の取り込みを行いましたが、テーブルの定義や読み込み用の定義ファイルの作成などが煩雑でした。
spatialite_guiでは、ファイル名をテーブル名、カラム名をファイルの先頭行、データ型は自動認識となっており、手間がかからずにインポートできました。
して、5週間分のWHOデータをインポートします。
SQLを発行して、インポートしたnaturalearthとWHOデータを結合すると以下のようになります。

OpenJUMPを使ってグラフ表示
ここからが本題のグラフ表示です。
5週間分のグラフをOpenJUMPのDB Query(SQL)を使って表示します。
1.感染者数(総数)
まずは全世界を見てみましょう。
感染者数は、アメリカが圧倒的です。
ロシアやブラジルの伸びが多くなっていますので、感染に季節性は関係ないのかもしれません。

アメリカの感染者数が多すぎ(1,160,838人)て他国のグラフが小さくなってしまうので、アメリカを除外して表示します。
ヨーロッパ中心部の感染者数は収束しているようには見えませんし、ロシアでは感染爆発が起きているように見えます。また、中国は感染の抑え込みに成功したように見えます。

(発行SQL)
select na.name_ja name ,w1.tcases w1 ,w2.tcases w2 ,w3.tcases w3 ,w4.tcases w4 ,w5.tcases w5 ,na.Geometry geom
from naturalearth na
left outer join stat0404 w1 on (na.name_en=w1.country)
left outer join stat0411 w2 on (na.name_en=w2.country)
left outer join stat0418 w3 on (na.name_en=w3.country)
left outer join stat0426 w4 on (na.name_en=w4.country)
left outer join stat0503 w5 on (na.name_en=w5.country)
where na.name_en not like ‘%America%’;
中南米を確認すると、ブラジル、メキシコ、エクアドル、ペルーが多くなっています。
ブラジルの感染者数は、97,100人です。

2.100万人あたりの感染者数
100万人あたりの感染者数を確認すると、中東やロシア、北米の増加傾向が確認できます。

ヨーロッパ中心部を拡大すると、ドイツ、フランス、スイスを中心に頭打ち傾向が確認できます。

(発行SQL)
select na.name_ja ja_name ,w1.tc1mpop w1 ,w2.tc1mpop w2 ,w3.tc1mpop w3 ,w4.tc1mpop w4 ,w5.tc1mpop w5 ,na.Geometry geom
from naturalearth na
left outer join stat0404 w1 on (na.name_en=w1.country)
left outer join stat0411 w2 on (na.name_en=w2.country)
left outer join stat0418 w3 on (na.name_en=w3.country)
left outer join stat0426 w4 on (na.name_en=w4.country)
left outer join stat0503 w5 on (na.name_en=w5.country);
3.100万人あたりの死亡者数
次に、100万人あたりの死亡者数を確認しましょう。
ヨーロッパの中心部では頭打ち傾向が確認できますが、他地域の伸びは鈍化していません。

(発行SQL)
select na.name_ja ja_name ,w1.d1mpop w1 ,w2.d1mpop w2 ,w3.d1mpop w3 ,w4.d1mpop w4 ,w5.d1mpop w5 ,na.Geometry geom
from naturalearth na
left outer join stat0404 w1 on (na.name_en=w1.country)
left outer join stat0411 w2 on (na.name_en=w2.country)
left outer join stat0418 w3 on (na.name_en=w3.country)
left outer join stat0426 w4 on (na.name_en=w4.country)
left outer join stat0503 w5 on (na.name_en=w5.country);
我が国周辺も確認しましょう。
我が国の100万人あたりの死亡者数は伸びており、ほぼ韓国と同等となっています。
一方で、台湾は押さえこみに成功し、フィリピンは日本と同様に死亡者数が増えています。

(発行SQL)
select na.name_ja ja_name ,w1.d1mpop w1 ,w2.d1mpop w2 ,w3.d1mpop w3 ,w4.d1mpop w4 ,w5.d1mpop w5 ,na.Geometry geom
from naturalearth na
left outer join stat0404 w1 on (na.name_en=w1.country)
left outer join stat0411 w2 on (na.name_en=w2.country)
left outer join stat0418 w3 on (na.name_en=w3.country)
left outer join stat0426 w4 on (na.name_en=w4.country)
left outer join stat0503 w5 on (na.name_en=w5.country)
where na.region_un=’Asia’;
4.100万人あたりの検査数
最後に100万人あたりの検査数を確認しましょう。
台湾は日本同様、検査数は少ないのですが、感染者数や死亡者数が少なくなっています。これは、初動で水際対策が成功したからだと思われます。

まとめ
今回は、以下を試してみました。
1.世界地図とスクレイピングしたデータのSpatiaLiteへの取り込み
2.OpenJUMPによるグラフ表示(先週までとの比較)
グラフを見ていると、感染はまだまだ収束していないように見えます。
私の会社でもTeamsやZoom、在宅ワークが一気に浸透してきています。
投資家のウォーレン・バフェットさん(正確にはバークシャー・ハザウェイ社)が、所有する航空会社の株式をすべて売却したことがニュースになっていました。曰く、3~4年後の乗客数が昨年同様になるか不安だとか。。
1日も早い収束を祈るばかりです。