ジョンズ・ホプキンズ大学のSchool of Engineering Center for Systems Science and Engineeringは各国のコロナウィルス感染者数をGithub上で公開しています。今回は、Stataでこれらの公開されているデータにアクセスし、Stata形式に変換して整理しましょう。
次のコマンドを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
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
ここまででは、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'"
}
}
そこで、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
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'"
}
}
ジョンズ・ホプキンズ大学が公開している新型コロナウィルス感染情報をStataからアクセスして保存する方法を紹介しました。
今回紹介した情報はStata社公式ブログ、The Stata Blogに掲載されている内容を用いて作成しております。
Stata is a registered trademark of StataCorp LLC, College Station, TX, USA, and the Stata logo is used with the permission of StataCorp.