大家好,欢迎来到IT知识分享网。
目前全国疫情爆发的厉害,我们可以自己用python写个程序,实时观察全国各地区疫情动态,下面,我们来步入正题。
先导入代码模块
import time
import requests
import json
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Grid, Map
然后就是主要的代码部分
首先创建一个类,拿到腾讯疫情网页的URL:
https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=_&_=1650358262411
这个URL在网页打开是这样的
想要实时观察疫情动态,就要根据现在的时间去更新疫情数据,这个可以用python来实现,写一个时间戳就可以了,然后把时间戳拼接到URL中
self.sjc = int(time.time()*1000)
self.url = f'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=_&_={self.sjc}'
然后就是解析url,先把数据变成json数据,我这里用的是replace替换,开头和结尾都要替换,然后用键拿值
response = requests.get(self.url).text
data_o = response.replace('_(', '') # 替换开头
data_t = data_o.replace(')', '') # 替换结尾
data_th = json.loads(data_t)['data'] # 拿到json数据中 data 的值
china_data = json.loads(data_th)['areaTree'][0]['children'] # 拿到json数据中 children 的值
然后创建一个空数据集,用for循环遍历拿到的数据,再创建一个空字典,利用空字典设置键等于遍历的某些值,用pandas制成图表,可以将数据直接保存到Excel中
# 设置一个数据集
data_set = []
for i in china_data:
# 创建空字典
data_dict = {}
# 地区名称
data_dict['province'] = i['name']
# 疫情数据
data_dict['nowConfirm'] = i['total']['nowConfirm'] # 现有确诊
data_dict['confirm'] = i['total']['confirm'] # 累计确诊
data_dict['dead'] = i['total']['dead'] # 死亡人数
data_dict['heal'] = i['total']['heal'] # 治愈人数
data_dict['wzz'] = i['total']['wzz'] # 本土无症状确诊
data_dict['provinceLocalConfirm'] = i['total']['provinceLocalConfirm'] # 地区本地确诊
data_set.append(data_dict)
fd = pd.DataFrame(data_set) # 制成表格
fd.to_excel('全国地区疫情数据.xls') # 保存Excel
然后就是数据可视化了
利用pyecharts可以绘制柱形图,折线图,扇形图,甚至是中国地图
下面我们绘制地图
china_map = (
Map()
# china--意为中国地图
.add('现有确诊', [list(i) for i in zip(fd['province'].values.tolist(), fd['nowConfirm'].values.tolist())], 'china')
.add('治愈人数', [list(i) for i in zip(fd['province'].values.tolist(), fd['heal'].values.tolist())], 'china')
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区疫情情况', pos_top='50%', pos_left='65%'),
visualmap_opts=opts.VisualMapOpts(max_=500, is_piecewise=True),
legend_opts=opts.LegendOpts(pos_left='90%', pos_top='60%')
)
)
china_map.render('map.html')
代码如下
import time
import requests
import json
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Grid, Map
class EpidemicSpider(object):
def __init__(self):
self.sjc = int(time.time()*1000)
self.url = f'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=_&_={self.sjc}'
def parse_response(self):
response = requests.get(self.url).text
data_o = response.replace('_(', '') # 替换开头
data_t = data_o.replace(')', '') # 替换结尾
data_th = json.loads(data_t)['data'] # 拿到json数据中 data 的值
china_data = json.loads(data_th)['areaTree'][0]['children'] # 拿到json数据中 children 的值
# 设置一个数据集
data_set = []
for i in china_data:
# 创建空字典
data_dict = {}
# 地区名称
data_dict['province'] = i['name']
# 疫情数据
data_dict['nowConfirm'] = i['total']['nowConfirm'] # 现有确诊
data_dict['confirm'] = i['total']['confirm'] # 累计确诊
data_dict['dead'] = i['total']['dead'] # 死亡人数
data_dict['heal'] = i['total']['heal'] # 治愈人数
data_dict['wzz'] = i['total']['wzz'] # 本土无症状确诊
data_dict['provinceLocalConfirm'] = i['total']['provinceLocalConfirm'] # 地区本地确诊
data_set.append(data_dict)
fd = pd.DataFrame(data_set) # 制成表格
# fd.to_excel('全国地区疫情数据.xls') # 保存Excel
fd2 = fd.sort_values(by=['nowConfirm'], ascending=False) # 根据 'nowConfirm' 以多到少向下排序
self.drawing(fd)
def drawing(self, fd):
china_map = (
Map()
# china--意为中国地图
.add('现有确诊', [list(i) for i in zip(fd['province'].values.tolist(), fd['nowConfirm'].values.tolist())], 'china')
.add('治愈人数', [list(i) for i in zip(fd['province'].values.tolist(), fd['heal'].values.tolist())], 'china')
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区疫情情况', pos_top='50%', pos_left='65%'),
visualmap_opts=opts.VisualMapOpts(max_=500, is_piecewise=True),
legend_opts=opts.LegendOpts(pos_left='90%', pos_top='60%')
)
)
china_map.render('map.html')
上面就是全国的疫情动态,下次还有全世界的
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24334.html