新型コロナウィルスの感染データをStataで入手する

ジョンズ・ホプキンズ大学のSchool of Engineering Center for Systems Science and Engineeringは各国のコロナウィルス感染者数をGithub上で公開しています。今回は、Stataでこれらの公開されているデータにアクセスし、Stata形式に変換して整理しましょう。

1 データのインポート

まずはGitHub上にジョンズ・ホプキンズ大学が公開しているデータセットを確認しましょう。公開されているウェブページは次のリンク先にあります。

各ファイルはMM-DD-YYYY.csvという形になっています。例として、1月29日のデータをimport delimitedコマンドでインポートしてみましょう。

次のコマンドをdoファイルエディタに貼り付けて実行ボタンをクリックします。

import delimited ///
"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-29-2020.csv", clear

import delimitedコマンドの後ろにある///は改行しても 1つのコマンドとして続いていることを示します。

インポートされると、データエディタは次のようになります。

観測地、日時、感染者数、死者数、回復者数が変数として含まれていますので、コマンドウィンドウでdescribeコマンドで確認しましょう。

describe

2 変数名の変更

describeコマンドでデータセットを確認すると、provincestate変数が文字化けしていることに気づきます。この変数名と変数ラベルの文字化けを修正するには、if構文の中でrenameとlabel variableコマンドでそれぞれの内容を編集します。

if _rc == 0 {
rename ïprovincestate provincestate
label variable provincestate "Province/State"
}

さらに4つの変数の名前:province_state、country_region、last_update、lat、longを変更します。caputureコマンドと組み合わせて、エラーが発生しても処理を継続できるようにしています。

capture rename province_state provincestate
capture rename country_region countryregion
capture rename last_update lastupdate
capture rename lat latitude
capture rename long longitude

3 複数ファイルを一括ダウンロード

ここまででは、1日分のデータしか入手することができません。公開されているcsvファイルはMM-DD-YYYY.csvという形になっています。つまり、先ほどのimport delimitedを1日分ごとに何度も繰り返せば良いということです。

繰り返しにはforvaluesとlocalコマンドを利用します。次のコマンドをdoファイルエディタに張り付けて実行してみましょう。 localコマンドはforvaluesの繰り返しの中で使用される変数を宣言します。3行目の変数monthは01-12まで、4行目のdayは01-31までの値を次々と取ります。01-12月まで、さらにそれぞれの月で01-31日まで、12×31回繰り返します。

forvalues month = 1/12 {
forvalues day = 1/31 {
local month = string(`month', "%02.0f")
local day = string(`day', "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
display "`today'"
}
}

上記を実行すると、01-01-2020から12-31-2020まで一挙に表示します。

これにimport delimitedとsaveを組み合わせて、ファイルのダウンロードを繰り返しましょう。

local URL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"
forvalues month = 1/12 {
forvalues day = 1/31 {
local month = string(`month', "%02.0f")
local day = string(`day', "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
local FileName = "`URL'`today'.csv"
clear
import delimited "`FileName'"
save "`today'"
}
}

上記を実行すると、次のようなメッセージが表示され、01-01-2020.csvというファイルは存在しないため処理が中断し、ループが正しく機能しません。

そこで、captureコマンドを利用し、delimitedとsaveコマンドにエラーが発生しても繰り返しを継続させます。

local URL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"
forvalues month = 1/12 {
forvalues day = 1/31 {
local month = string(`month', "%02.0f")
local day = string(`day', "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
local FileName = "`URL'`today'.csv"
clear
capture import delimited "`FileName'"
capture save "`today'"
}
}

コマンドが実行されると、作業フォルダに一連の月-日-年.dtaファイルが保存されます。lsコマンドで作業フォルダに保存されたファイルを確認します。

ls *-2020.dta

実行すると、次のようにダウンロードしたファイルが一覧表示されます。

4 データをまとめる

2.と3.の処理を組み合わせ、ダウンロードしたファイルをappendコマンドで1つのdtaファイルに統合します。appendコマンドもforvaluesコマンドと組み合わせて繰り返します。

local URL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"
forvalues month = 1/12 {
forvalues day = 1/31 {
local month = string(`month', "%02.0f")
local day = string(`day', "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
local FileName = "`URL'`today'.csv"
clear
capture import delimited "`FileName'"
capture confirm variable ïprovincestate
if _rc == 0 {
rename ïprovincestate provincestate
label variable provincestate "Province/State"
}
capture rename province_state provincestate
capture rename country_region countryregion
capture rename last_update lastupdate
capture rename lat latitude
capture rename long longitude
capture save "`today'", replace
}
}
clear
forvalues month = 1/12 {
forvalues day = 1/31 {
local month = string(`month', "%02.0f")
local day = string(`day', "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
capture append using "`today'"
}
}

5 まとめ

ジョンズ・ホプキンズ大学が公開している新型コロナウィルス感染情報をStataからアクセスして保存する方法を紹介しました。

iconポイント

  • ウェブ上で公開されているcsvファイルは、import delimited“URL”でStataに取り込みます。
  • 公開されているファイルは複数あるので、localとforvaluesコマンドでアクセスするURLを変更して、import delimitedを繰り返し、ファイルをダウンロードします。
  • ダウンロードされた複数のファイルは、appendコマンドをlocalとforvaluesコマンドで繰り返して1つのファイルにまとめます。

今回紹介した情報はStata社公式ブログ、The Stata Blogに掲載されている内容を用いて作成しております。

参照文献

Huber, C. (2020, 3 24). Import COVID-19 data from Johns Hopkins University.
Retrieved from The Stata Blog:
https://blog.stata.com/2020/03/24/import-covid-19-data-from-johns-hopkins-university/
Huber, C. (2020, 3 24). Update to Import COVID-19 post.
Retrieved from The Stata Blog:
https://blog.stata.com/2020/03/24/update-to-import-covid-19-post/

Stata is a registered trademark of StataCorp LLC, College Station, TX, USA, and the Stata logo is used with the permission of StataCorp.

page_top_icon