腾讯全国疫情实时动态 + pyecharts可视化

目前全国疫情爆发的厉害,我们可以自己用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')

上面就是全国的疫情动态,下次还有全世界的

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值