コロナウィルスデータを解析してみよう : R言語入門(1/2)


コロナウィルスによって生まれた未曾有の状況に、そこでもかしこでもいろいろな人がいろいろな主張を繰り広げている。残念なことに、その少なからずが、どうにもいい加減な思い込みに基づいていると判断せざるを得ない酷く低レベルな代物だ。

ネットを通じて世界に公開されているデータがいろいろある。高性能な統計処理ソフトも無料で手に入る。それらを使った簡単なグラフを眺めるだけでも、コロナに関する考察をだいぶんレベルアップできるはずである。

というわけで、ここではコロナウィルス関係のとある有用な公開データとR言語を使ったグラフ作成の基本的なところをまとめてみたい。当記事は、「Rなにそれ。エクセルで簡単なグラフぐらいは書いたことあるけど?」 というレベルの方々を対象とする。 もうRをいじったことはあるよという方にとっては読み進めるメリットは少ないだろう。以下に紹介したサイトに行ってデータを取得して、どんどん自力で作業を進めていただきたい。

せめてQiitaを読んでいる層の皆さんには、しっかりした解析・考察をすすめて、筋道の通った提言を世に問うていただきたいと思う。

感染者・死者等の国別・日毎統計

なんといっても、被害の直接的な状況を把握すべきだろう。githubで素晴らしいデータが公開されている。

Data on COVID-19 by Our World in Data : owid/covid-19-data

Our complete COVID-19 dataset is a collection of the COVID-19 data maintained by Our World in Data. It is updated daily and includes data on confirmed cases, deaths, and testing.

ここで公開されているのは、

  • 207か国の
  • 検査件数・確認された感染者数・死者数の
  • 日毎・累積人数が
  • CreativeCommonsに基づいて、誰もが利用できそれによって得られた結果を公表できる。

というものだ。ありがたいことである。しかも、状況が収束するまでデータの更新は毎日やると力強く宣言されている。

R/RStudio

R言語は統計処理やグラフ作成に特化したプログラミング言語である。プログラミング言語としてはかなり癖があるが、グラフを描くなら今のところ最強の言語である。論文などで目にするグラフに関しては、どのような種類のグラフであれRで描けると言って過言ではない。

RstudioはR言語専用のプログラミング環境で、簡明なGUIのもと、プログラムを書き実行しできたグラフを眺めるというサイクルを、比較的簡単に実現できる。

これらはWindows、Linux、MacOSなど主要OSのいずれでも利用可能である。

これからインストールを試みるなら、Windowsであれば次の記事を参考にできるだろう。

グラフを描く環境

R言語に多種多様な解析をやらせるための機能拡張セット(「パッケージ」と呼ばれる)が多数公開されている。ユーザーは目的に応じて適切なパッケージを選択してインストールしていくことになる。パッケージを利用せずとも、素のRだけでも一通りのグラフを描くことはできるのだが、少し複雑なことを考えると機能が物足らなくなるだろう。標準関数だけで作れるグラフは、品質がそれなりだ。デザイン的にいけていない。そこで現在ではggplot2というグラフ作成用パッケージを利用するのが一般的である。

以下のサイトを参考に、tidyrパッケージごとggplot2をインストールしてしまうといいだろう。RStudio上でインストールする手順はlinuxやMacOSにおいても基本的に同じである。

Quick Start

さっそくデータを読み込んでグラフを描いてみよう。

作業用ディレクトリを用意する

まずは、作業用ディレクトリを作る。スペースや全角文字を含まない名前のディレクトリを用意することを強く推奨する。windowsであれば、CドライブやDドライブの直下が良いだろう。

データを持ってくる

次に上記URLにアクセスして、owid-covid-data.csvをダウンロードし、この作業用ディレクトリに置く。公開されているデータがフルセットでこのファイルに格納されている。

Rを使ってみる

RStudioを起動する。3つないし4つの大きなエリアを含む窓が出現するはずだ。左側の「コンソール」に以下のように打ち込む。

setwd(先ほど用意した作業ディレクトリ名)
coviddata <- read.csv("owid-covid-data.csv", header = T, stringsAsFactors = F)

うまくいっていれば、右上のパネルにcoviddata 8759 obs. of 17 variablesのような表示が見えているはずだ。obsの前の数字は、この原稿を書いている4月25日現在のデータのサイズを表している。日毎に大きくなっていることだろう。

とりあえず、読み込んだデータを見てみよう。headという関数を使ってみる。次のように打ち込む。

> head(coviddata)

するとデータの先頭部分が表示されるはずだ。

  iso_code location       date total_cases new_cases total_deaths new_deaths total_cases_per_million
1      ABW    Aruba 2020-03-13           2         2            0          0                  18.733
2      ABW    Aruba 2020-03-20           4         2            0          0                  37.465
3      ABW    Aruba 2020-03-24          12         8            0          0                 112.395
4      ABW    Aruba 2020-03-25          17         5            0          0                 159.227
5      ABW    Aruba 2020-03-26          19         2            0          0                 177.959
6      ABW    Aruba 2020-03-27          28         9            0          0                 262.256
  new_cases_per_million total_deaths_per_million new_deaths_per_million total_tests new_tests
1                18.733                        0                      0          NA        NA
2                18.733                        0                      0          NA        NA
3                74.930                        0                      0          NA        NA
4                46.831                        0                      0          NA        NA
5                18.733                        0                      0          NA        NA
6                84.296                        0                      0          NA        NA
  total_tests_per_thousand new_tests_per_thousand tests_units surv_rate
1                       NA                     NA                     0
2                       NA                     NA                     0
3                       NA                     NA                     0
4                       NA                     NA                     0
5                       NA                     NA                     0
6                       NA                     NA                     0

小さなデータセットを抜き出す

大きすぎるデータを無理やり利用しても、訳の分からないグラフしか得られない。まずは、日本を含む数か国について3月1日以降の累積死者数のデータのみを取り出し、折れ線グラフを描いてみよう。

先ほどから使っているコンソールにコードを直接打ち込んでいってもいいが、そろそろ「スクリプトファイル」にコードを保存することを考えよう。プルダウンメニューからFile→New File→R Scriptを選択する。

画面の左上に白紙のパネルが新たに出現したはずだ。ここに、以下のように入力する。

library(ggplot2)

coviddata <- read.csv("owid-covid-data.csv", header = T, stringsAsFactors = F)
coviddata <- subset(coviddata, date>"2020-03-01")
coviddata$date <- as.Date(coviddata$date)

countries <- c("Japan", "United States", "United Kingdom", "France", "Italy", "Germany", "Spain", "South Korea", "China")

c_total_death <- subset(coviddata, location %in% countries, select=c("date","location","total_deaths"))
g <- ggplot(c_total_death, aes(x=date,  y=total_deaths, color=location)) + geom_line()
plot(g)

打ち込み終わったらctrl+Sし、スクリプトを適当な名前で保存する。くどいようだがスペースや全角文字をファイル名に使わないように。

スクリプト(プログラム)を実行しグラフを描く

では、このスクリプトを実行してみよう。スクリプトを打ち込んだ左上パネルをよく見ると、上の方にSourceと書かれたボタンが見つかるだろう。これをクリックする。

スクリプトが正しく入力されていたならば、右下のPlotsと書かれたパネルに折れ線グラフが表示されているはずである。

場合によってはパネルの境界線をマウスでドラッグして領域を広げてやらないとちゃんと見えないかもしれない。また、Zoomと書かれたボタンをクリックすると、グラフが描かれた独立したウィンドウが出現する。

Zoomボタンの隣のExportボタンをクリックすると、グラフをPNGファイルなどに保存できる。

続きは

結構長くなってきたので、作業はここまでと一区切りとしよう。

とりあえず、作業内容を保存してRStudioを終了する。プルダウンメニューからQuit Sessionを選択すると、何やら「内容を保存するか?」的な確認メッセージが出てくるので、言われたとおりに保存しておく。次回RStudioを起動したとき、今つくったスクリプトや変数(オブジェクト)、コンソールへの入力履歴などがそっくり再現されるはずである。

次回以降、さまざまなサブセットデータを作り、組みグラフの作成方法、グラフの見栄えの調整方法なども紹介していきたい。

続きをお読みになる方は、下のリンクからどうぞ。