中国科学软件网-首页
博文分享|Stata软件从Johns Hopkins University导入COVID-19数据

像你们中的许多人一样,我目前也在家办公并经常关注COVID-19的最新消息。我看到很多数字和图表,因此我四处寻找“官方数据”。 我发现的最佳数据来源之一是在GitHub网站上的 Johns Hopkins Whiting School of Engineering Center for Systems Science and Engineering。每天的数据都存储在一个单独的文件中,因此我编写了一个名为covid19的Stata小命令来下载、合并、保存和绘制这些数据的图表。

 

该命令创建了一个包含日期、确诊病例数、死亡人数和治愈人数的表格。我还添加了一个名为newcases的计算变量,这是连续两天确诊病例之间的差异。

 

原始数据包括所有报告的国家/地区,因此我添加了country()选项,该选项使我可以查看某个国家/地区的表格。

1.jpg

我还添加了一个graph选项,用于绘制确诊病例数。

 

图1:在美国确认的COVID-19病例

2.jpg

saving()选项将数据保存到名为covid19_usa.dta的文件中。

3.jpg

我很喜欢我的covid19命令,但是目前还没有计划正式发布它。因为我尚未对其进行彻底的检验,并且如果Johns Hopkins更改其数据,可能会使它失效。 因此,我将向您展示下载和处理数据的步骤,以便您自己进行操作。如果数据发生变化,您将拥有修改代码和下载未来数据的工具。

Johns Hopkins University GitHub数据

GitHub是一个流行的软件开发和发布的网站/平台。Johns Hopkins Whiting School of Engineering Center for Systems Science and Engineering拥有一个GitHub存储库,其中包含来自世界各地的定期更新的COVID-19数据。原始数据都在Johns Hopkins GitHub data。


图2:COVID-19的Johns Hopkins GitHub数据

4.jpg

每天将数据存储在单独的.csv文件中。 让我们单击名为01-29-2020.csv的文件以查看其内容。该文件包含有关省/州、国家/地区、最近更新的日期和时间、确诊病例数、死亡人数和治愈数等数据。

 

图3:01-29-2020.csv的内容

5.jpg

您可以通过单击红色箭头旁边的“RAW”按钮来查看以逗号分隔的原始数据。注意,红色箭头是我自己添加的,它并不会出现在网站上。

 

图4:01-29-2020.csv中的原始逗号分隔数据

6.jpg

您可以使用import delimited将这些原始数据从网站导入Stata中。 文件名是Web浏览器地址栏中的URL。

7.jpg

您的web浏览器可能会将URL打包到第二行。注意,这是Stata中的单行命令。然后我可以在Stata中describelist数据。

8.jpg

我们已成功将2020年1月29日的原始数据从Johns Hopkins GitHub repository导入Stata。 它只有一个文件,并且数据至少存在一个明显的问题(变量名0.jpgprovincestate),但这是一个很好的开始。使用confirm and if修复变量名。

 

通过反复试验,我了解到变量provincestate在某些文件中被导入为0.jpgprovincestate,而在其他文件中则被导入为provincestate。我们想要导入许多文件,并且我们不需要手动浏览每个文件。 因此,让我们使用confirm来检查每个文件中是否有一个名为0.jpgprovincestate的变量。

9.jpg

如果存在变量0.jpgprovincestate,则该命令会将零值存储到_rc 我们可以在if语句中使用此结果,该语句将rename并正确label变量。

10.jpg


该数据集包含变量0.jpgprovincestate,因此将执行if中的命令。我们可以使用describe来检验。

11.jpg

现在,我们的数据集包含一个名为provincestate的变量。让我们再次输入confirm variable,以查看如果变量iprovincestate不在我们的数据集中时会发生什么。

12.jpg

该数据集不包含名为0.jpgprovincestate的变量,因此confirm variable 将返回错误消息。 如果我们在do文件中执行confirm variable ,则do文件将停止运行。 即使confirm variable 返回错误,我们也可以使用capture来允许我们的do文件继续运行。

13.jpg

注意_rc等于111,不等于0。因此下面的代码将导入原始数据,并在必要时修复iprovincestate

14.jpg

使用宏导入不同的文件

接下来,让我们看看macros如何帮助我们从网站导入不同的文件。我们可以使用宏将单词或数字临时存储在内存中。宏可以是本地的也可以是联网的。全局宏一旦定义,就可以在Stata中的任何位置使用。局部宏仅存在于定义它们的程序或do文件中。 您可以这样定义本地宏:

15.jpg

您可以在宏名称的左侧输入左单引号(在“one key”的左侧),在宏名称的右侧输入右单引号(在“Enter”键的左侧)来引用宏。

16.jpg

我们可以通过合并其他宏来创建宏,如下所示:

17.jpg

我们希望导入名称为01-29-2020.csv的文件。请注意,月份包括“leading zero” 1–9个月指定为“ 01”“ 02”,依此类推。 10-12个月指定为“ 10”“ 11”“ 12” 我们需要一种方法将值赋给本地宏,在适当的时候包含前置零string()函数是执行此操作的一种方法。

18.jpg

monthstring()函数将数字3存储到带有前置零的两个字符的字符串中。 宏daystring()函数将数字19存储到带有前置零的两个字符的字符串中,但是前置零不是必需的。这将使我们能够为要导入的文件指定正确格式的任意日期。

接下来,让我们考虑整个文件名。每个文件的大多数冗长的文件名都是相同的。让我们将文件名的URL存储到本地宏中。

19.jpg

这使我们可以指定如下文件名:

20.jpg

使用循环导入多个文件

通过将它们放在循环中,我们可以重复一个命令或命令集合。一种实现方法就是使用forvalues

21.jpg

请注意,将month存储为本地宏,我们可以在循环内将其称为month’ 因此,循环的结果如下所示:

22.jpg

我们还可以在一个循环内创建另一个循环。 例如,我们可以像这样在几个月内循环几天:

23.jpg

此循环的结果很长,因此我省略了大部分输出结果。

24.jpg

让我们使用循环为我们要下载的文件创建名称。

25.jpg

该循环还返回很多输出,因此为了简洁起见,我省略了大部分。请注意,string()函数在必要时在月份和日期中添加前置零。

26.jpg

我们可以使用宏URLimport delimited来导入2020年每天的原始数据。在导入每个原始数据文件之前,我们需要clear Stata的内存。然后,我们可以将每个文件的副本saveStata数据集。

27.jpg

您一定已经预料到了以上代码的缺陷。它包含了2020年每个月的每一天。但是数据文件是从2020121日开始的,因此11日没有数据文件。我们的程序会返回错误消息。

28.jpg

新数据也将每天添加,一旦发布,我想导入将来的数据。有许多巧妙的方法来处理这种情况。一种方法是简单地在import-delimited之前使用capture保存。数据文件(如果存在)将被导入。如果数据文件不存在,程序将继续。这是一种缓慢而粗糙的方法,但可以达到我们的目的。

29.jpg

我们的capture技巧起作用了,我可以在本地目录中查看Stata数据文件的列表。

30.jpg


我们打开文件01-22-2020.dta并描述数据。

31.jpg

这是包含变量 0.jpgprovincestate的文件之一。我们在前面学习了如何使用confirmif修复这个问题,所以让我们将“修复”放在代码中并重新运行它。注意,我添加了选项replacesave commands,因为文件已经存在于我们的目录中。

32.jpg

现在我们可以描述数据集01-22-2020.dta并验证变量 0.jpgprovincestate已更改为provincestate

33.jpg

现在,我们的本地目录包含一个Stata数据文件的集合,我们希望将这些数据文件合并为一个文件。我们可以使用append执行此操作。我们可以手动append两个数据文件,如下所示:

34.jpg

但这将是乏味的,我们将不得不不断更新代码。另一个循环将使我们能够自动执行此过程。请注意,我在append之前使用了capture技巧,因为我们没有2020年每天的文件。

35.jpg

我在下面描述了我们的数据,并注意到有两个新变量。一些原始数据文件包含latitudelongitude变量,它们已附加到我们的完整数据集中。

36.jpg

最近10个观测值的列表确认该数据集包含一些latitude longitude数据。

37.jpg

结论和下一步目标

让我们在这里停下来,想一想我们所取得的成果。我们已经从Johns Hopkins GitHub repository中成功下载了可用于COVID-19的所有原始数据,并使用以下代码将它们组合为一个数据集:

38.jpg

您们中许多人会注意到,我们可以通过一个循环来完成此任务(提示:使用frame)。 但是在这篇文章中,我想让事情尽可能简单。保存此数据集,以便以后使用。

39.jpg

我们可以使用此原始数据集做很多事情。我们可以创建时间序列数据来检查一段时间内的模式。我们可以按国家或地区甚至是国家中的省或州来做到这一点。而且我们掌握了一些数据的经度和纬度信息,因此我们可以按时间和位置探索模式。我将在以后的文章中讨论这些。

 

请注意,我们尚未检查并清除这些数据。上面的代码和所得数据应仅用于指导目的。

 Software Solution and Services(900x383)-1-1.jpg