pyecharts实践--2019-nCoV疫情数据可视化地图(实时更新)

2019-nCoV疫情数据可视化地图效果如下:

在这里插入图片描述

获取数据(本文数据获取自腾讯的疫情实时追踪)

腾讯的疫情实时追踪网页: 点击查看.
这里我使用的是Google,追踪得到的数据如下图:
在这里插入图片描述
双击左边的 getOnsInfo?name=disease_h5&callback······ , Google 打开一个新的页面,展示最新的病情数据:
在这里插入图片描述
数据分析:
在这里插入图片描述
至此,我们就获得了需要的数据啦!

我们通过requests库来采集实时数据;由于得到的数据是json格式的,所以我们还需要json库来解析数据;链表数据可以使用pandas库方便地规范化数据(当然如果不想使用pandas照样可以,稍稍改动部分代码即可)。

话不多说,上代码:

# 腾讯的疫情实时追踪接口获取json格式疫情数据
def get_ncp_data():
    url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
    data = requests.get(url).json()['data']
    return data

# 扁平化中国疫情数据
def flatten_ncp_data():
    all = json.loads(get_ncp_data())
    #  初始化结果链表
    provinces = []
    date = all['lastUpdateTime']
    china = all['areaTree'][0]['children']  
    #  获取各省份确诊病例
    for province in china:
        province_ncp = province['children']
        province_ncp = {
            '日期': date,
            '省份': province['name'],
            '累计确认': province['total']['confirm']
        }
        provinces.append(province_ncp)       
    return provinces

数据可视化

这里使用的是pyecharts库(当然,也可以使用Matplotlib以及其他)

#  渲染可视化地图
def render_map_chart():
    provinces = flatten_ncp_data()
    df = pd.DataFrame(provinces)
    
    map_chart = Map()
    map_chart.add(
        "全国NCP确诊病例分布图",
        [list(z) for z in zip(list(df["省份"]), list(df['累计确认']))],
        "china",
        is_map_symbol_show=False
    )

    map_chart.set_global_opts(
        title_opts=opts.TitleOpts(
            title="NCP疫情地图(" + str(datetime.date.today()) + ")"
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            pieces=[
                {"min": 1, "max": 9, "label": "1-9人", "color": "#FFE6BE"},
                {"min": 10, "max": 99, "label": "10-99人", "color": "#FFB769"},
                {"min": 100, "max": 499, "label": "100-499人", "color": "#FF8F66"},
                {"min": 500, "max": 999, "label": "500-999人", "color": "#ED514E"},
                {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CA0D11"},
                {"min": 10000, "max": 100000, "label": "10000人以上", "color": "#A52A2A"}
            ]))

    map_chart.render('ncp_map_{}.html'.format(datetime.date.today()))


好啦,到这里也差不多结束了,是不是很简单呢!想学习的小伙伴可以动手实践实践!!

全部代码

python版本:python: 3.8(32-bit)

需要安装模块:

数据分析与处理(如果不想使用pandas就不用安装),建议下载对应,whl文件进行本地pip安装。下载地址如下:
numpy:numpy
pandas:pandas

pyecharts数据可视化分析库
pyecharts:pyecharts

此处附上网盘链接:https://pan.baidu.com/s/1cGHOxlMloDilIIK_cS8wQw
提取码:ulu0
复制这段内容后打开百度网盘手机App,操作更方便哦

import requests
import json
import pandas as pd
import datetime

from pyecharts.charts import Map
from pyecharts import options as opts

#  腾讯数据接口获取json格式疫情数据
def get_ncp_data():
    url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
    data = requests.get(url).json()['data']
    
    return data

#  扁平化中国疫情数据
def flatten_ncp_data():
    all = json.loads(get_ncp_data())
    #  初始化结果链表
    provinces = []
    date = all['lastUpdateTime']
    #  获取各省份确诊病例
    china = all['areaTree'][0]['children']  # 获得中国数据
    for province in china:
        province_ncp = province['children']
        province_ncp = {
            '日期': date,
            '省份': province['name'],
            '累计确认': province['total']['confirm']
        }
        provinces.append(province_ncp)
             
    return provinces

#  渲染可视化地图
def render_map_chart():
    provinces = flatten_ncp_data()
    df = pd.DataFrame(provinces)
    
    map_chart = Map()
    map_chart.add(
        "全国NCP确诊病例分布图",
        [list(z) for z in zip(list(df["省份"]), list(df['累计确认']))],
        "china",
        is_map_symbol_show=False
    )

    map_chart.set_global_opts(
        title_opts=opts.TitleOpts(
            title="NCP疫情地图(" + str(datetime.date.today()) + ")"
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            pieces=[
                {"min": 1, "max": 9, "label": "1-9人", "color": "#FFE6BE"},
                {"min": 10, "max": 99, "label": "10-99人", "color": "#FFB769"},
                {"min": 100, "max": 499, "label": "100-499人", "color": "#FF8F66"},
                {"min": 500, "max": 999, "label": "500-999人", "color": "#ED514E"},
                {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CA0D11"},
                {"min": 10000, "max": 100000, "label": "10000人以上", "color": "#A52A2A"}
            ]))

    map_chart.render('ncp_map_{}.html'.format(datetime.date.today()))


if __name__ == '__main__':
    
    render_map_chart()

发布了9 篇原创文章 · 获赞 5 · 访问量 343

猜你喜欢

转载自blog.csdn.net/qq_42964349/article/details/104346693