69
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

新型コロナウイルス感染症(COVID-19)のオープンデータをGoogle Colaboratoryで手軽に可視化・分析する方法

Last updated at Posted at 2020-04-01

COVID-19のオープンデータを手軽に可視化したい

 新型コロナウイルスのニュースが多いですね。ただマス向けのテレビ報道に自分が知りたいデータの情報が無いと感じる方も多いのではないでしょうか?

 かのマリー・アントワネットも
「データがないならデータを作ればいいじゃない」
 と言ったとか言わないとかということで、手軽にGoogle Colaboratoryを使ってCOVID-19関連のオープンデータを可視化してみる方法を紹介したいと思います。

Google Colaboratoryに関して

 Google Colaboratory(以下Google Colab)に関しては、以下記事参照ください。

 ざっくり言うと、ブラウザだけで使える環境構築不要のPython実行環境です。ブラウザさえあれば、データ分析や可視化ができてしまいます。最高ですね。これを使ってCOVID-19関連のデータを可視化・分析していきます。

COVID-19関連オープンデータ

 個人的に以下のページに関連情報をまとめています。オープンデータの項目に、様々なデータをまとめています。

 オープンデータの形式は、大きく以下3つあります。

  • Google Spread Sheet(csvファイル)
  • jsonファイル
  • GitHubリポジトリ

 GitHubリポジトリに関してはgit cloneするだけなので、今回は主にGoogle Spread Sheetとjsonファイルに関して説明をします。

Google Spread Sheetのデータの分析

 Google Spread Sheetのオープンデータに関しては、SIGNATEさんがCOVID-19チャレンジ(フェーズ1)というCOVID-19のオープンデータの整備を目的に行ったコンペティションの成果物を題材にします。

 Google Spread Sheetで公開されていて、頻繁にアップデートされています。
SIGNATE COVID-2019 Dataset(Spreadsheet)

 Google Spread Sheetのデータは、Google Colab上で、以下のようにマジックコマンド(最初に!をつけて)でwgetを実行することでcsvファイルとしてダウンロードできます。

!wget --no-check-certificate --output-document=data.csv 'https://docs.google.com/spreadsheets/d/10MFfRQTblbOpuvOs_yjIYgntpMGBg592dL8veXoPpp4/export?gid=0&format=csv'

 gid=0はシートのNoを表します。Google Spread Sheetのシートによってgidの値が異なるので確認してからダウンロードしましょう。当然普通のcsvファイルも同じ要領でwgetコマンドでダウンロードできます。

 csvがダウンロードできたら、あとはpandasで好きなように読み込むだけです。

import pandas as pd

# SIGNATE COVID-2019 Dataset からデータを読み込み、ステータスと性別を抽出
df = pd.read_csv("data.csv")
df = df[["ステータス","性別"]]

 pandasに関しては、以下ブログ記事等参照下さい。

Python/pandas/matplotlibを使ってcsvファイルを読み込んで素敵なグラフを描く方法(Mac/Raspberry Pi)

そのあとの分析は、SIGNATEさんのCOVID-19チャレンジ(フェーズ2)フォーラムの死亡率と性別の関係のサンプルが参考になります。

 例えばBar Chart Raceと呼ばれる手法での下図のような可視化が簡単にできます。

 Google Colab上で実行できるノートブックも作成しました。すぐ試したい方は以下リンク先から試してみて下さい。

signate_covid_19.ipynb

jsonファイル

東京都の公式の感染動向を可視化したサイトが、日本全国でforkされて各県の感染動向を可視化したサイトが生まれています。こちらで使用されている元となるデータはjsonファイルとなります。各県での詳しい状況が知りたい場合や、県ごとの比較がしたい場合に便利なデータとなります。県ごとのサイトのリンクは以下ページを参照して探して下さい(全ての県であるわけではありません)。

新型コロナウイルス感染症に関する可視化情報等の個人的なまとめ

 これらのサイトはGitHubで公開されているので、GitHubでjson形式のファイルへのリンクを探します。見つけたら、あとはSpread Sheetのときと同様、wgetでダウンロードします。東京の場合は以下です。

!wget --no-check-certificate --output-document=covid19_tokyo.json 'https://raw.githubusercontent.com/tokyo-metropolitan-gov/covid19/development/data/data.json'

jsonファイルもcsv同様pandasで以下のように簡単に読み込めます。

import pandas as pd
data = pd.read_json('covid19_tokyo.json')

 例えば、検査実施回数の日付データは以下で取得できます(# 以下は実行結果です)。

date_data = []
for i in range(len(data['inspection_persons']['labels'])):
    date_data.append(data['inspection_persons']['labels'][i][0:10])
print(date_data)
# ['2020-01-24', '2020-01-25', '2020-01-26', '2020-01-27', '2020-01-28', '2020-01-29', '2020-01-30', '2020-01-31', '2020-02-01', '2020-02-02', '2020-02-03', '2020-02-04', '2020-02-05', '2020-02-06', '2020-02-07', '2020-02-08', '2020-02-09', '2020-02-10', '2020-02-11', '2020-02-12', '2020-02-13', '2020-02-14', '2020-02-15', '2020-02-16', '2020-02-17', '2020-02-18', '2020-02-19', '2020-02-20', '2020-02-21', '2020-02-22', '2020-02-23', '2020-02-24', '2020-02-25', '2020-02-26', '2020-02-27', '2020-02-28', '2020-02-29', '2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08', '2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12', '2020-03-13', '2020-03-14', '2020-03-15', '2020-03-16', '2020-03-17', '2020-03-18', '2020-03-19', '2020-03-20', '2020-03-21', '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26', '2020-03-27', '2020-03-28', '2020-03-29', '2020-03-30', '2020-03-31']

 matplotlibを使って以下で検査実施回数の時系列グラフが得られます。

import matplotlib.pyplot as plt
plt.figure(figsize=(9,6))
plt.bar(date_data, data['inspection_persons']['datasets'][0]['data'])

inspection_tokyo.png

 東京都のサイトと、見比べて正しそうな可視化ができていることが分かります。

 続いて、陽性の患者数のグラフを可視化します。検査実施回数のようにそのままグラフ化できないので、一旦以下のようにリストにデータを格納します(もっとスマートな方法あれば教えて下さい)

patients_data = []
for i in range(len(data['inspection_persons']['labels'])):
    patients_data.append(data['patients_summary']['data'][i]['小計'])

 あとは、以下でグラフ化します。

plt.figure(figsize=(9,6))
plt.bar(date_data, patients_data)

patients_tokyo.png

 ここで、ここ最近の「検査実施数に対する陽性患者数の割合」を知りたいとします。リストはそのまま割り算できないので一旦numpy配列に変換してから計算します。

import numpy as np
np_patients_data = np.array(patients_data)
np_inspection_persons = np.array(data['inspection_persons']['datasets'][0]['data'])

np_patients_inspection_ratio = np_patients_data / np_inspection_persons

 以下でグラフ化します。

plt.figure(figsize=(9,6))
plt.xlim(60, 65)
plt.ylim(0, 1)
plt.bar(date_data, np_patients_inspection_ratio)

patient_inspection_ratio_tokyo.png

 かなり高い割合ですね。

 なお、愛知での同じ日の検査実施数に対する陽性患者数の割合は以下です。

patient_inspection_ratio_aichi.png

 Google Colabのノートブックは以下です。

covid19_visualization_json.ipynb

 データが間違っているかもしれないから意味がない?村上春樹ならこう言うでしょう

「完璧なデータなどといったものは存在しない。完璧な絶望が存在しないようにね。」

 なんらかの前提があるのではないか?足りないデータがあるのではないか?データを読み解き、必要なら正しいデータを予測・取得していきましょう。

まとめ

 新型コロナウイルス感染症のオープンデータをGoogle Colabで手軽に可視化・分析する方法を紹介しました。

 データは見せ方によっては人に恐怖を与えたり、被害を与える凶器になることを認識しましょう。ただ、データは決して専門家だけが扱える特殊なものではなく、多くの人が広く利用し、議論することで世の中をより良くすることができるものだと考えています。正しく責任を持ってデータを扱いましょう。自戒をこめて書きました。

 新型コロナウイルス、長期的に向き合わないといけない様相を呈してきています。誰もが自分でデータに向き合い、自分の頭で考え、知見を共有して議論してデータリテラシーを高め、自分で判断して行動することが世界をよりよくするのではないかなと思っています。

 分析して得られた知見は、例えばSIGNATEさんのCOVID-19チャレンジ(フェーズ2)のフォーラムなどで共有するのが良いかもしれませんね。

関連リンク

 この記事を参考に、データ可視化してくださっている記事の紹介です。

実際にCOVID-19の状況をデータセットを使って可視化してみる

【Python】新型コロナウイルス感染症のデータを7日間移動平均でみる

69
68
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
68

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?