新型冠状病毒肺炎发展至今,拐点已过,尾声将至。对于科研工作者,最重要的研究材料之一就是历史数据,权威的数据来自各级卫健委每日发布的疫情报告,然而数据以文本方式呈现,收集的成本较高。目前,在R和Python上通过一些开源的API可以直接提取数据,在GitHub上也有可以直接下载的全量历史数据,还有Wind等付费数据平台(现在WindQuant平台支持免费调用了Wind疫情数据了),下面将提供这些数据的获取方法并做简单的点评。
目录
1. nCov2019(R语言)
2. AkShare(Python)
3. GitHub开源项目
3.1 2019-nCoV 全量每日统计数据
3.2 2019新型冠状病毒疫情时间序列数据仓库
4. Wind EDBC
5. WindQuant
总结(确定不看到最后吗)
1. nCov2019(R语言)
nCov2019库的安装与调用都非常简单,具体可以参考检索疫情数据的R包来了,各省市的疫情历史数据来了。目前从该库中可以方便地获取精确到省、市级的历史数据,数据从1月11日起,一直在更新当中。
remotes::install_github("GuangchuangYu/nCov2019")
library(nCov2019)
x <- load_nCov2019()
data <- summary(x)[1:3]
2. AkShare(Python)
AkShare是基于Python的开源金融数据接口库,汇总了百度、网易、丁香园的数据接口,不同接口的数据略有差异,需谨慎使用。由于各个服务器接口经常改变,因此AkShare库在使用中如果发现不能调用的情况可以尝试在CMD中更新安装包来解决。Akshare可以查询细化到省、市的历史数据,数据的更新也非常及时。具体参见AkShare官方文档。
import akshare as ak
epidemic_hist_province_df = ak.epidemic_hist_province(province="湖北")
print(epidemic_hist_province_df)
3. GitHub开源项目
3.1 2019-nCoV 全量每日统计数据
2019-nCoV 全量每日统计数据:该项目能可以直接通过网站下载全量历史数据(包括国家、省、市级历史数据)的CSV与JSON格式。这是目前我发现的历史时间最长的疫情数据(2019-12-01起至今),由于不同历史时段数据源不同会出现数据难以自洽的问题,不过作者一直在维护与更新,数据的质量已经比原来好了很多,与卫健委数据几乎一致。例如用R语言可以直接下载并保存到本地:
data <- read.csv("https://raw.githubusercontent.com/canghailan/Wuhan-2019-nCoV/master/Wuhan-2019-nCoV.csv",
header = TRUE, stringsAsFactors = FALSE, fileEncoding="utf8")
write.csv(data, "Data/China.csv", row.names = FALSE)
Hubei.Data <- data[data$provinceCode == 420000, ]
Hubei.Data <- Hubei.Data[!is.na(Hubei.Data$provinceCode), ]
write.csv(Hubei.Data, "Data/Hubei.csv", row.names = FALSE)
3.2 2019新型冠状病毒疫情时间序列数据仓库
2019新型冠状病毒疫情时间序列数据仓库:GitHub 598星的项目,提供精确到市级的数据,从1月24日更新至今。数据来源是实时爬取的丁香园,数据集每小时增加一次新的数据,因此相对于日度数据显得有点累赘。
4. Wind EDBC
Wind是国内最权威的金融经济数据平台之一,数据可靠、服务贼好,但是要付费。Wind的宏观经济数据库提供国家、省、市级的历史疫情数据下载,数据的起始日期在1月20日左右(不同地区有差异)并在实时更新中。麻烦的是数据需要一条条地下载,即使使用Wind官方API也要一条条地输入数据的Wind代码,但是数据质量高仍然使我最倾向于Wind。另:微信搜索公众号PurePlay后台回复Wind API即可获取Wind的R与Python API官方手册。
from WindPy import w
w.start()
df = w.edb(["S6274770","S6275447"],
beginTime="20200101",
usedf = True)[1]
df.rename(columns={'S6274770': 'Nation', 'S6275447': 'Hubei'},
inplace=True)
df.to_csv(r"Data\Data.csv")
5. WindQuant
WindQuant是Wind旗下的量化分析云平台,Wind的部分数据可以免费通过WindQuant获取。注册WindQuant账号之后,即可在平台上通过Python API免费调用,同时还支持Web API在本地调取疫情数据,详见官方文档。相对于其他API来说,代码比较复杂,但仍然胜在数据质量。例如,本地调用非湖北累计病例数据的代码如下
import requests
import json
import pandas as pd
import time
userid = "94ac606a-c220-46af-abf3"
indicators = "S6291523, S6291524, S6291525, S6291526, S6291527"
factors_name = ["确诊病例","疑似病例","重症病例","死亡病例","治愈病例"]
startdate = "2020-01-20"
enddate = "2020-02-18"
url = '''https://www.windquant.com/qntcloud/data/edb?userid={}&indicators={}&startdate={}&enddate={}'''.format(
userid,indicators,startdate,enddate)
response = requests.get(url)
data = json.loads(response.content.decode("utf-8"))
try:
time_list = data["times"]
value_list = data["data"]
for i in range(len(time_list)):
time_list[i] = time.strftime("%Y-%m-%d", time.localtime(time_list[i]/1000))
result = pd.Datafr ame(columns=factors_name, index = time_list)
for i in range(len(factors_name)):
result[factors_name[i]] = value_list[i]
except Exception as e:
print("服务异常")
总结
不同数据源各有特色,如果你习惯用R语言,那就用nCov2019;如果你习惯用Python,那就选AkShare或者WindQuant;如果你需要疫情的早期历史数据,那就点2019-nCoV 全量每日统计数据;如果你有Wind,考虑到数据的权威性,Wind自然是最好的选择。
相关文章
Logistic模型拟合COVID-19疫情以及Python实现
假如把COVID-19疫情作为股票因子…
AHP | 层次分析法原理及Python实现
以上是本篇的全部内容,欢迎关注我的知乎|简书|CSDN|微信公众号PurePlay , 会不定期分享研究与学习干货。