全国疫情可视化分析
一、 选题的背景
为什么要选择此选题?要达到的数据分析的预期目标是什么?(10分)
针对国家新冠疫情有感而发,分析的目标是展示所有省份的疫情数据达到可以可视化观察
二、主题式网络爬虫设计方案(10分)
1.主题式网络爬虫名称
Python网络爬虫——全国各省份疫情
2.主题式网络爬虫爬取的内容与数据特征分析
爬取全国各省份疫情数据做可视化处理
三、主题页面的结构特征分析
1.主题页面的结构与特征分析
直接调用的接口 :https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
接口数据是json格式:
解析json 并使用bar进行数据可视化
from json import loads from requests import get from pyecharts.charts import Bar#使用pyecharts的 Bar绘制柱状图 import time #所有省份数据可视化 def Province_data(content): #地名 Place_name = [] #确诊数据 Diagnosis_data = [] #疑似数据 Suspected_data= [] #死亡数据 Dead_data = [] #治愈数据 Cure_data = [] bar=Bar() for i in range(34): Introduction=content['areaTree'][0]['children'][i] #添加地名 Place_name.append(Introduction['name']) #确诊 Diagnosis_data.append(Introduction['total']['confirm']) #疑似 Suspected_data.append(Introduction['total']['suspect']) #死亡 Dead_data.append(Introduction['total']['dead']) #治愈 Cure_data.append(Introduction['total']['heal']) bar.add_xaxis(Place_name) bar.add_yaxis('确诊',Diagnosis_data) bar.add_yaxis('疑似',Suspected_data) bar.add_yaxis('死亡',Dead_data) bar.add_yaxis('治愈',Cure_data) bar.render('各省疫情数据.html')
最后结果
全部代码如下
from json import loads from requests import get from pyecharts.charts import Bar#使用pyecharts的 Bar绘制柱状图 import time url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5' content=loads(get(url).json()['data']) times = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) #当前数据 def Current_data(json,times): #当前时段的的数据 lower_level = json['chinaTotal'] print(times) print('-'*30) print('当前确诊:{}'.format(lower_level['confirm'])) print('疑似病人:{}'.format(lower_level['suspect'])) print('当前死亡人数:{}'.format(lower_level['dead'])) print('当前治愈的人数:{}'.format(lower_level['heal'])) #做出可视化页面 bar=Bar() bar.add_xaxis(['当前确诊','疑似病人','当前死亡人数','当前治愈的人数']) bar.add_yaxis(times,[lower_level['confirm'],lower_level['suspect'], lower_level['dead'],lower_level['heal']]) print('-'*15) # 较昨日增加了多少 lower_level2 = json['chinaAdd'] print('增加了{}人确诊'.format(lower_level2['confirm'])) print('增加了{}人疑似病人'.format(lower_level2['suspect'])) print('增加了{}人死亡'.format(lower_level2['dead'])) print('增加了{}人治愈'.format(lower_level2['heal'])) print('-' * 15) #所有省份数据可视化 def Province_data(content): #地名 Place_name = [] #确诊数据 Diagnosis_data = [] #疑似数据 Suspected_data= [] #死亡数据 Dead_data = [] #治愈数据 Cure_data = [] bar=Bar() for i in range(34): Introduction=content['areaTree'][0]['children'][i] #添加地名 Place_name.append(Introduction['name']) #确诊 Diagnosis_data.append(Introduction['total']['confirm']) #疑似 Suspected_data.append(Introduction['total']['suspect']) #死亡 Dead_data.append(Introduction['total']['dead']) #治愈 Cure_data.append(Introduction['total']['heal']) bar.add_xaxis(Place_name) bar.add_yaxis('确诊',Diagnosis_data) bar.add_yaxis('疑似',Suspected_data) bar.add_yaxis('死亡',Dead_data) bar.add_yaxis('治愈',Cure_data) bar.render('各省数据.html') print('-' * 15) print('程序结束后 会生成你当前文件夹下') print('-' * 15) #各个省份的确诊 死亡 治愈 疑似 def Province(content): for i in range(34): #print(content['areaTree'][0]['children'][0]['total']) Province_name = content['areaTree'][0]['children'][i] #当前数据 Lookup = Province_name['total'] # 新增数据 Add_data=Province_name['today'] print('-'*15,Province_name['name'],'的数据如下','-'*15) print('总计情况: 确诊{} 疑似{} 死亡{} 治愈{} '.format(Lookup['confirm'],Lookup['suspect'], Lookup['dead'],Lookup['heal'])) print('-'*40) #查询省份下 def Local_province(content): #地名 Place_name = [] #确诊数据 Diagnosis_data = [] #疑似数据 Suspected_data= [] #死亡数据 Dead_data = [] #治愈数据 Cure_data = [] content1 = content["areaTree"][0]["children"] Name_data={} count = 0 for i in content1: # 地名 name1 = i['name'] # {'湖北': 0}{'浙江': 1} dict2 = {name1: count} Name_data.update(dict2) count = count + 1 a=input('请输入你要查询的省份:') test=Name_data[a] Entering_the_province=content["areaTree"][0]["children"][test] #print(Entering_the_province) print(Entering_the_province['today']) print('-'*10,'你查询的 %s省 数据如下'%a,'-'*10) print('省内总计数据 确诊:{} 疑似:{} 死亡:{} 治愈:{}'.format(Entering_the_province['total']['confirm'],Entering_the_province['total']['suspect'], Entering_the_province['total']['dead'],Entering_the_province['total']['heal'])) print('-'*50) Enter_the_city = Entering_the_province['children'] Length = len(Enter_the_city) for i in range(Length): #市名 City=Enter_the_city[i]#['total'] data=City['total'] today_data=City['today'] City_Name=City['name'] print('-'*30) print('总数据 城市:{} 确诊:{} 疑似:{} 死亡:{} 治愈:{}'.format( City_Name,data['confirm'],data['suspect'],data['dead'],data['heal'] )) print('今日数据 确诊:{} 疑似:{} 死亡:{} 治愈'.format( today_data['confirm'],today_data['suspect'],today_data['dead'],today_data['heal'] )) print('-'*30) Place_name.append(City_Name) # 确诊 Diagnosis_data.append(data['confirm']) # 疑似 Suspected_data.append(data['suspect']) # 死亡 Dead_data.append(data['dead']) # 治愈 Cure_data.append(data['heal']) b=input('已经加载好可视化数据是否下载(1 需要 2不需要):') bar=Bar() if b == '1': bar.add_xaxis(Place_name) bar.add_yaxis('确诊', Diagnosis_data) bar.add_yaxis('疑似', Suspected_data) bar.add_yaxis('死亡', Dead_data) bar.add_yaxis('治愈', Cure_data) bar.render('{}省内数据.html'.format(a)) print('-' * 15) print('程序结束后 会生成你当前文件夹下') print('-' * 15) else: print('好吧') print('-'*30) print('全国疫情查询系统')print('-'*30) while True: time.sleep(5) print('1.查询全国疫情数据\n2.各省份疫情数据可视化\n3.各省份疫情数据\n4.查询某省份数据\n其他键可退出') Eat=input('请输入对应的您要查询的模块:') if Eat == '1': Current_data(content,times) elif Eat == '2': Province_data(content) elif Eat == '3': Province(content) elif Eat == '4': Local_province(content) else: print('已退出') break
总结:虽然出来的结果十分粗糙且还仍有进步空间,这次爬取疫情数据让我对requests库和json解析库有了更深的认识,还了解到了Bar()这个功能强大又好用的柱状图生成模块,我会以这次作业来激励自己,这次作业让我萌生了浓厚的学习python兴趣