Python获取2019-nCoV疫情实时追踪数据
点击图片上方蓝色字体“慧天地”即可订阅
本文转载自微信公众号CSDN云计算(ID:CSDNcloud),来源:三行科创,责编:Carol,版权归原作者及刊载媒体所有。
2019-nCoV新型冠状病毒引发的肺炎牵动全国人民的心,无数无畏的英雄儿女逆行而上奔赴前线,作者也于2020年2月2号回上海了开启居家办公模式。2月3日上午部门开了电话会议后,晚上刷手机刷这刷着觉得也要像那些医务人员一样勇敢,为疫情做点什么,于是有了这次2019-nCoV项目,本项目包括如下三部分。
第一部分 获取疫情数据
第二部分 地理可视化
第三部分 病例数据规律探索
本篇主要讲如何获取实时疫情数据。
分析与操作
很多大型门户网站和手机应用都开设了专门的疫情实时追踪数据网站和功能,比较友好的有腾讯新闻,网易新闻,新浪新闻,三者网页感官大体差不多,有疫情最新总数,疫情地图,疫情病例曲线等,数据来源于国家及各地卫生健康委员会每日发布的信息,今天我们就以腾讯新闻为例来获取疫情实时数据。
具体操作
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 4 10:27:51 2020
project name:2019-nCoV
@author: 帅帅de三叔
"""
import json, csv, requests #导入请求模块
def get_data(): #定义获取数据并写入csv文件里的函数
url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" #请求网址
response=requests.get(url).json() #发出请求并json化处理
#print(response) #测试一下是否获取数据了
data = json.loads(response['data']) #提取数据部分
#print(data.keys()) #获取数据组成部分['chinaTotal', 'chinaAdd', 'lastUpdateTime', 'areaTree', 'chinaDayList', 'chinaDayAddList']
update_time=data["lastUpdateTime"]
chinaDayList=data["chinaDayList"] #历史数据
with open("每日病例.csv","w+",newline="") as csv_file:
writer=csv.writer(csv_file)
header=["date","confirm","suspect","dead","heal", "update_time"] #定义表头
writer.writerow(header)
for i in range(len(chinaDayList)):
data_row1=[chinaDayList[i]["date"],chinaDayList[i]["confirm"],chinaDayList[i]["suspect"],chinaDayList[i]["dead"],chinaDayList[i]["heal"], update_time]
writer.writerow(data_row1)
chinaDayAddList=data["chinaDayAddList"] #历史新增数据
with open("每日新增病例.csv","w+",newline="") as csv_file:
writer=csv.writer(csv_file)
header=["date","confirm","suspect","dead","heal","update_time"] #定义表头
writer.writerow(header)
for i in range(len(chinaDayAddList)):
data_row2=[chinaDayAddList[i]["date"],chinaDayAddList[i]["confirm"],chinaDayAddList[i]["suspect"],chinaDayAddList[i]["dead"],chinaDayAddList[i]["heal"], update_time]
writer.writerow(data_row2)
areaTree=data["areaTree"] #各地方数据
with open("全国各城市病例数据.csv","w+",newline="") as csv_file:
writer=csv.writer(csv_file)
header=["province", "city_name", "total_confirm", "total_suspect", "total_dead", "total_heal", "today_confirm", "today_suspect", "today_dead", "today_heal","update_time"]
writer.writerow(header)
china_data=areaTree[0]["children"] #中国数据
for j in range(len(china_data)):
province=china_data[j]["name"] #省份
city_list=china_data[j]["children"] #该省份下面城市列表
for k in range(len(city_list)):
city_name=city_list[k]["name"] #城市名称
total_confirm=city_list[k]["total"]["confirm"] #总确认病例
total_suspect=city_list[k]["total"]["suspect"] #总疑似病例
total_dead=city_list[k]["total"]["dead"] #总死亡病例
total_heal=city_list[k]["total"]["heal"] #总治愈病例
today_confirm=city_list[k]["today"]["confirm"] #今日确认病例
today_suspect=city_list[k]["total"]["suspect"] #今日疑似病例
today_dead=city_list[k]["today"]["dead"] #今日死亡病例
today_heal=city_list[k]["today"]["heal"] #今日治愈病例
print(province, city_name, total_confirm, total_suspect, total_dead, total_heal, today_confirm, today_suspect, today_dead, today_heal,update_time)
data_row3=[province, city_name, total_confirm, total_suspect, total_dead, total_heal, today_confirm, today_suspect, today_dead, today_heal, update_time]
writer.writerow(data_row3)
if __name__=="__main__":
get_data()
代码解读
这里主要用到json, csv, requests三个模块,用requests发出请求,获取返回的json格式数据,我们可以用data.keys()打印出数据构成,一共有’chinaTotal’, ‘chinaAdd’, ‘lastUpdateTime’, ‘areaTree’, ‘chinaDayList’ 和 ‘chinaDayAddList’ 6部分数据,分别对应中国疫情总数,当日新增疫情总数,最近一次更新时间,各地方疫情明细,历史疫情总数和历史新增总数,其中areaTree还包括海外数据,在厘清数据组成之后就需要把各部分数据分别弄下来,对于’chinaTotal’, ‘chinaAdd’, ‘lastUpdateTime’这三部分数据都只有一条数据,对后面的研究不大,故这次只准备获取后面三部分’areaTree’, ‘chinaDayList’ 和 ‘chinaDayAddList’ ,采取了3次分别写入csv文件中,并在每次写入的时候增加了更新时间字段,使得字段完备。
(点击图片即可查看详细信息)
内容转载、商务活动、投稿等合作请联系
微信号:huitiandi321
邮箱:geomaticshtd@163.com
欢迎关注慧天地同名新浪微博:
ID:慧天地_geomaticser
Python 与开源 GIS : 数据处理、空间分析与地图制图
《慧天地》敬告
《慧天地》公众号聚焦国内外时空信息科技前沿、行业发展动态、跨界融合趋势,探索企业核心竞争力,传播测绘地理信息文化,为测绘、地信、遥感等相关专业的同学提供日常学习、考研就业一站式服务,旨在打造政产学研用精准对接的平台。《慧天地》高度重视版权,对于原创、委托发布的稿件,会烦请作者、委托方亲自审核通过后才正式推发;对于来自网站、期刊、书籍、微博、微信公众号等媒介的稿件,会在作者栏或者文章开头显著标明出处,以表达对作者和推文引用平台版权的充分尊重和感谢;对于来源于网络作者不明的优质作品,转载时如出现侵权,请后台留言,我们会及时删除。感谢大家一直以来对《慧天地》的关注和支持!