1 Star 1 Fork 75

loala0918 / StataSX2018

forked from Stata007 / StataSX2018 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
刘亮推文01_新冠病毒翻译.md 12.33 KB
一键复制 编辑 原始数据 按行查看 历史

StataBlogs---美国新冠病毒数据

作者:刘亮(三峡大学)

邮件:jetinskyliu0@gmail.com

Source:

原文:原文作者Chuck Huber,Associate Director of Statistical Outreach

原文标题:Import COVID-19 data from Johns Hopkins University

[toc]

1简介

本文介绍Chuck Huber博士编写的Covid19 Stata命令,并将约翰霍普金斯大学公布的全球新型冠状病毒数据为例,依次介绍如何使用Stata命令进行数据获取、清洗、保存以及数据可视化。

该命令能生成一个包含日期、确诊病例、新增病例、死亡人数,以及康复人数的表格。为了能够查看具体国家病毒感染人数,作者添加country(),增加graph选项画出确诊人数图,添加保存选项saving,将数据保存为(covid19_usa)。

其基本命令为:covid19, country(“US”) graph saving(covid19_usa)

输出结果为:

​ ** Confirmed cases of COVID-19 in the United States**

2 约翰霍普金斯大学GitHub数据

GitHub是一个流行的软件开发和发布平台。约翰霍普金斯大学系统科学与工程中心(School of Engineering Center for Systems Science and Engineering)建立一个包含来自世界各地的定期更新的COVID-19GitHub数据存储库。其原始数据网址为:https://github.com/CSSEGISandData/COVID19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports打开网站后得到如下界面,可以看到部分数据如下图所示:

每天的相关数据存储在独立的.csv文件中。以2020年1月29日的数据为例,查看相关内容。

点击“Raw”按键可以看到原始的数据,原始数据如下所示:

3 数据下载

我们能够将这些原始数据(Raw data)使用import delimited命令将其导入到Stata中,首先以2020年1月29日为例。Stata的基本命令为:import delimited https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-29-2020.csv

导入数据后先输入describe命令,结果显示如下:

输入list in 1/5查看前5个观测值。

4 数据处理

4.1修改变量名

我们看到变量provincestate在一些文件中被当成变量ïprovincestate。由于导入的文件很多,我们避免手动逐个查看。我们使用confirm命令去逐个查看每个文件中的ïprovincestate。其相关命令如下:

confirm variable ïprovincestate
display_rc

输出结果为:0

如果变量ïprovincestate存在,command命令会为_rc存一个“0”值,从而我们可以使用rename 和label命令修改变量名和变量标签。相关命令如下:

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

执行完了if命令块后,使用describe provincestate命令,可以看到现在的数据中包含的变量为provincestate的相关信息。

为了检查数据是否还存在ïprovincestate变量,再使用comfirm variable ïprovincestate其结果如下:

可以发现原始数据中的变量已经被我们清理完成了。

4.2数据导入

4.2.1使用宏导入不同的文件

宏可以分为局部宏和全局宏。全局宏(global macro)一旦定义将贯穿整个Stata程序,局部宏(local macro)仅存在被定义的程序或do文件中。我们做一个示例定义并引用一个局部宏today,如下所示:

local today = "3-19-2020"

我们可以通过在宏名称使用左右引号进行引用。左引号(在“esc”键下方)和右引号(在“回车”键的左侧)来引用宏。命令如下:

local today = "3-19-2020"
display "`today'"

3-19-2020

我们可以通过整合其他宏来创建宏,例如:

local month = "3"
local day = "19"
local year = "2020"
local today = "`month'-`day'-`year'"
display "`today'"

3-19-2020

我们想导入名为03-19-2020.csv的文件。注意月份包含一个“前置0”。1至9月被指定为:“01”,“02”往后依次类推。10至12月指定为“10”,“11",”12”。我们需要一种方法值赋时给月份添加适的包含前导0的局部宏。String()函数能够满足这一要求。相关代码如下所示:

local month = string(3, "%02.0f")
local day = string(19, "%02.0f")
local year = "2020"
local today = "`month'-`day'-`year'"
display "`today'"

03-19-2020

接下来将前面的内容进行整合,使用宏来导入文件。命令为:

local URL = "https://raw.githubusercontent.com/CSSEGISandData/  > COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/"
local FileName = "`URL'`today'.csv"
import delimited "`FileName'"

(8 vars,284 obs)

4.2.2使用循环读入多个文件

作者思路非常清晰,首先介绍简单的月循环,将每个月展示出来,然后介绍嵌套循环,将年和月共同展示。作者调用宏将月进行循环,代码如下:

forvalues month = 1/12{
	display "month = `month'"
}

结果如下:

继续将月和日共同循环,相关代码如下:

forvalues month = 1/12{
	forvalues day = 1/31{
		display "month = `month', day = `day'"
	}
}

结果展示如下:

有了前文的介绍,继续运用暂元和循环的相关知识,展现2020年所有的日期。相关代码如下:

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'"
	}
}

结果展示:

接下来作者使用关于循环和宏的命令将网站的所有数据均导入到Stata中,但在执行命令的过程中需要注意2点:1疫情的数据从1月23号开始公布,在此之前并没有数据,如果不加以提示,会出现报错,程序停止运行。2原始数据中有的文件的变量名ïprovincestate,有的是provincestate,全部统一修改为provincestate。为了避免程序出现错误,使用capture命令,即使程序出现错误也可以继续执行。

本部分命令如下:

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'"
   }
}

输入ls命令 可以查看Stata中下载到的数据。

打开01-22-2020.dta文件,并且输入describe查看数据。相关结果如下:

我们看到其中的文件包括 ïprovincestate变量名,需要将其全部统一为provincestate

代码如下:

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 save "`today'", replace  //需要添加replace,替换掉之间存在内存中的数据
   }
}

现在打开01-22-2020.dta数据,并且describe结果如下:

继续使用循环命令将所有的数据依次添加并保存,代码如下:

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'"
      }
}

最后使用describe描述最后生成的数据。

5数据更新与保存

随着疫情的不断发展,相关的数据不断更新,因此本文的相关数据和变量会产生不一致。例如provoncestate,province_state,countryregion,country_region等。当我们追加数据时必须要保证变量名称一致,接下来继续使用capture。其完整代码如下:

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'"
   }
}

describe数据可以看到数据结果为:

更新数据已经处理完毕,所有变量均统一,最后保存,为以后所用。

save covid19_raw

6数据可视化

6.1湖北省疫情发展趋势图

我国著名数学家华罗庚老先生曾说<数缺形时少直观,形少数时难入微。本部分将前文所收集到的数据进行可视化,让疫情发展态势更加直观地呈现在我们面前。该疫情首先集中爆发于湖北,首先画一下疫情发生以来湖北省的确诊人数变化趋势图。相关代码如下:

line confirmed update if provincestate == "Hubei",title("湖北省疫情确诊人数") ///
xtitle("数据公布时间") ytitle("确诊人数") xlabel(10(10)70) ylabel()

(这个时间不知道怎么显示不出来,网上查需要转成%td,这个暂时做不出来)

6.2全国疫情情况发展图

接下来分析一下全国的疫情情况,相关的代码如下:

graph bar confirmed 	
	ylabel(2000(500)90000,tposition(inside) labsize(*0.8) angle(0)) 
	ytitle("%",tstyle(smbody)) //y轴标题为小号字体
	blabel(bar,size(vsmall) format(%3.1f)) //产生数字标签,字体小号,固定格式保留一位

(这个数据结构太复杂了,不知道怎么显示全国所有地区每天的图)

1
https://gitee.com/loala0918/StataSX2018.git
git@gitee.com:loala0918/StataSX2018.git
loala0918
StataSX2018
StataSX2018
master

搜索帮助