利用Python绘制中国新型冠状病毒疫情图(国家和省)

2023-11-12

大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数,包括确诊,疑似,死亡,治愈。如下图所示:
在这里插入图片描述
这里用到了Python中的pyecharts库,点此了解详细信息
1.先来将需要的模块导入进来

import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options

如果事先没有安装这些库,需要导入这些库

pip3 install requests

pip3 install json

pip3 install re

pip3 install pyecharts

除此之外,还需要导入中国地图以及各个省份的地图

依次是全球地图、中国省级地图、中国市级地图、中国区县级地图、中国区域地图

根据需要地图导入

pip3 install echarts-countries-pypkg

pip3 install echarts-china-provinces-pypkg

pip3 install echarts-china-cities-pypkg

pip3 install echarts-china-counties-pypkg

pip3 install echarts-china-misc-pypkg

2.获取数据-处理数据;利用网络爬虫爬取新浪微博上面的数据

#发起网络请求,获取数据
result = requests.get('https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')
#使用正则表达式处理数据
json_str = re.search("\(+([^)]*)\)+", result.text).group(1)
html = f"{json_str}"
table = json.loads(f"{html}")

爬取的数据如图所示:
在这里插入图片描述
3.进行地图的生成,代码如下:
依次是确诊,死亡,治愈,疑似。其中疑似的数据爬取的好像不是很对,总人数是正确的,但是各个省份的人数不对,湖北是0。。。采用比较丑的堆叠代码形式,想简化一点可以采用函数形式。

# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 19 11:11:45 2020

@author: lenovo
"""

import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options


#发起网络请求,获取数据
result = requests.get('https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')
#使用正则表达式处理数据
json_str = re.search("\(+([^)]*)\)+", result.text).group(1)
html = f"{json_str}"
table = json.loads(f"{html}")

province_data = []

#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:

    #将省份数据添加到列表中去
    province_data.append((province['name'], province['value']))

    city_data = []
    #循环获取城市名称和对应的确诊数据
    for city in province['city']:
        #这里要注意对应上地图的名字需要使用mapName这个字段
        city_data.append((city['mapName'], city['conNum']))
#创建国家地图     
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-确诊人数:%d"%(table['data']["gntotal"])), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
                pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, # 不指定 max,表示 max 为无限大(Infinity)。
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成中国地图,所以maptype要对应china。
map_country.add("确诊", province_data, maptype="china")
#一切完成,那么生成一个html网页文件。
map_country.render("country确诊.html")
print("中国实时疫情图生成完成!!!")


province_data = []

#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:

    #将省份数据添加到列表中去
    province_data.append((province['name'], province['deathNum']))

    city_data = []
    #循环获取城市名称和对应的确诊数据
    for city in province['city']:
        #这里要注意对应上地图的名字需要使用mapName这个字段
        city_data.append((city['mapName'], city['conNum']))  
#创建国家地图     
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-死亡人数:%d"%(table['data']["deathtotal"])), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
                pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, # 不指定 max,表示 max 为无限大(Infinity)。
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成中国地图,所以maptype要对应china。
map_country.add("死亡", province_data, maptype="china")
#一切完成,那么生成一个html网页文件。
map_country.render("country死亡.html")
print("中国实时疫情图生成完成!!!")


province_data = []

#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:

    #将省份数据添加到列表中去
    province_data.append((province['name'], province['cureNum']))

    city_data = []
    #循环获取城市名称和对应的确诊数据
    for city in province['city']:
        #这里要注意对应上地图的名字需要使用mapName这个字段
        city_data.append((city['mapName'], city['conNum']))
#创建国家地图     
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-治愈人数:%d"%(table['data']["curetotal"])), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
                pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, # 不指定 max,表示 max 为无限大(Infinity)。
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成中国地图,所以maptype要对应china。
map_country.add("治愈", province_data, maptype="china")
#一切完成,那么生成一个html网页文件。
map_country.render("country治愈.html")
print("中国实时疫情图生成完成!!!")



province_data = []

#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:

    #将省份数据添加到列表中去
    province_data.append((province['name'], province['susNum']))

    city_data = []
    #循环获取城市名称和对应的确诊数据
    for city in province['city']:
        #这里要注意对应上地图的名字需要使用mapName这个字段
        city_data.append((city['mapName'], city['conNum']))
#创建国家地图     
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-疑似人数:%d"%(table['data']["sustotal"])), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
                pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, # 不指定 max,表示 max 为无限大(Infinity)。
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
#将数据添加进去,生成中国地图,所以maptype要对应china。
map_country.add("疑似", province_data, maptype="china")
#一切完成,那么生成一个html网页文件。
map_country.render("country疑似.html")
print("中国实时疫情图生成完成!!!")

这是中国每天的疫情图,如果想看省份的,代码如下:
这只是治愈的,如果想看别的,可以根据上面全国的改动一些地方就行了。

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 20 16:45:13 2020

@author: lenovo
"""
import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options


#发起网络请求,获取数据
result = requests.get('https://interface.sina.cn/news/wap/fymap2020_data.d.json?1580097300739&&callback=sinajp_1580097300873005379567841634181')
#使用正则表达式处理数据
json_str = re.search("\(+([^)]*)\)+", result.text).group(1)
html = f"{json_str}"
table = json.loads(f"{html}")

province_data = []

#循环获取省份名称和对应的确诊数据
for province in table['data']['list']:

    #将省份数据添加到列表中去
    province_data.append((province['name'], province['cureNum']))

    city_data = []
    #循环获取城市名称和对应的确诊数据
    for city in province['city']:
        #这里要注意对应上地图的名字需要使用mapName这个字段
        city_data.append((city['mapName'], city['conNum']))
#使用Map,创建省份地图    
    map_province = Map()
    #设置地图上的标题和数据标记,添加省份和确诊人数
    map_province.set_global_opts(title_opts=options.TitleOpts(title=province['name'] + "实时疫情图-治愈人数:" +province['cureNum']), visualmap_opts=options.VisualMapOpts(is_piecewise=True,#设置是否为分段显示
                pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, 
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))
    #将数据添加进去,生成省份地图,所以maptype要对应省份。
    map_province.add("治愈", city_data, maptype = province['name'])
    #一切完成,那么生成一个省份的html网页文件,取上对应省份的名字。
    map_province.render(province['name'] + ".html")
print("各个省份地图生成完成")

部分代码解释:
(1)将省份数据添加到列表中去

province_data.append((province['name'], province['value']))
#将数据中对应的值取出来添加到province_data中。

(2)

title_opts=options.TitleOpts(title="A")

A是生成地图中的红色框框部分。
在这里插入图片描述
(3)

pieces=[
                    {"min": 1000, "label": '>1000人', "color": "#6F171F"}, 
                    {"min": 500, "max": 1000, "label": '500-1000人', "color": "#C92C34"},
                    {"min": 100, "max": 499, "label": '100-499人', "color": "#E35B52"},
                    {"min": 10, "max": 99, "label": '10-99人', "color": "#F39E86"},
                    {"min": 1, "max": 9, "label": '1-9人', "color": "#FDEBD0"}]))is_piecewise=True,#设置是否为分段显示,然后通过 pieces来设置。

(4)将数据添加进去,生成中国地图,所以maptype要对应china。

map_country.add("确诊", province_data, maptype="china")

(5)一切完成,那么生成一个html网页文件。

map_country.render("country.html")

可能会有一些不对的地方,希望大家借鉴着看。还有那个疑似数据如果我有哪个地方弄的不对,希望路过的大佬指正。
希望有一天运行出来的结果,除了治愈的之外,剩下的都全是白色的。这一天一定会到来的!!!中国加油!
参考网址:https://zhuanlan.zhihu.com/p/105072241
努力加油a啊,(o)/~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用Python绘制中国新型冠状病毒疫情图(国家和省) 的相关文章

随机推荐

  • Vue 框架

    Vue 简介 Vue 是一套用于构建用户界面的渐进式框架 Vue 的核心库只关注视图层 不仅易于上手 还便于与第三方库或既有项目整合 另一方面 当与现代化的工具链以及各种支持类库结合使用时 Vue 也完全能够为复杂的单页应用提供驱动 官方文
  • 家用NAS——6大神奇体验供你享

    NAS这个 网络存储器 它能一站式为你解决有关存储的问题 家用NAS的这6大神奇的体验 不用不知道 用了才知道它的妙 一 强大的手机相册管理软件 市面上很多NAS都配备了相册APP管理软件 通过手机APP 可以将手机内的照片直接备份到NAS
  • Docker介绍

    Docker介绍 Docker 扩展了Linux 容器 Linux Containers 或着说 LXC 通过一个高层次的 API为进程单独提供了一个轻量级的虚拟环境 Docker利用了 LXC cgroups 和Linux 自己的内核 和
  • 通过JS监听input输入框的值来判断手机号

  • 多项式分布的理解概率公式的理解

    多项式分布是二项分布的推广 二项分布 也叫伯努利分布 的典型例子是扔硬币 硬币正面朝上概率为p 重复扔n次硬币 k次为正面的概率即为一个二项分布概率 而多项分布就像扔骰子 有6个面对应6个不同的点数 二项分布时事件X只有2种取值 而多项分布
  • stable diffusion实践操作-安装

    本文专门开一节写安装相关的内容 在看之前 可以同步关注 stable diffusion实践操作 正文 1 秋葉一键安装包 github安装 https github com AUTOMATIC1111 stable diffusion w
  • MyBatis在字段返回为null不返回字段

    原文地址 http blog csdn net zkd12344 article details 53261253 参考地址 http www 360doc com content 15 0608 08 281812 476469535 s
  • 使用HAL库开发STM32:UART基础使用

    文章目录 目的 基础说明与初始化 基础说明 初始化 数据接收和发送 轮询方式 中断方式 DMA方式 其它说明 总结 目的 UART 异步串口 是单片机非常常用的一个功能 一般用作设备或模块间通讯的一种方式 通常所说的232或是485通讯从写
  • JavaScript基础--内置对象之Math对象

    Math 对象不是构造函数 不需要new 它具有数学常数和函数的属性和方法 跟数学相关的运算 求绝对值 取整 最大值等 可以使用 Math 中的成员 1 Math对象常用方法 1 1 Max floor Max floor floor表示地
  • sql的基本操作详解

    一 什么是视图 视图 view 是一种虚拟存在的表 是一个逻辑表 本身并不包含数据 作为一个select语句保存在数据字典中的 二 为什么要用视图 视图隐藏了底层的表结构 简化了数据访问操作 客户端不再需要底层表的机构及其之间的关系 视图是
  • UE4 C++获取StaticMesh详细信息

    h UFUNCTION BlueprintCallable Category FunTool void GetStaticMeshDetails UStaticMesh Staticmesh TMap
  • 做期货的时候想到自己挣的钱都是别人亏的钱吗?

    1 换股法 当觉得自己的理财产品实在是没有什么时机了 就选一只与该理财产品价格差不多的 有时机上涨的理财产品来换 也便是等价 或根本等价 换入有上涨期望的理财产品 让后边买入的理财产品上涨后的赢利来抵消前面买入的理财产品因跌落而发生的亏本
  • Spring事务配置文件方式

  • BOOST 库中filesyatem 库的学习

    FileSyatem 库的学习 库的使用方式 嵌入源码的形式 define BOOST SYSTEN NO LIB define BOOST FILESYSTEM NO LIB include
  • 配置文件(properties类)

    基本介绍 1 专门用于读写配置文件的集合类 配置文件格式 键 值 2 注意 键值对 不需要空格 值 不需要用引号 默认类型 String 3 Properties的常见方法 1 load 加载配置文件的键值对到Properties对象 2
  • Win11怎么设置电脑开机密码和锁屏密码

    相信很多用户都已经用上了微软公司为大家提供的全新Win11系统了 Win11与Win10系统有很大区别 不仅仅体现在界面设计和UI上面 狠多以前Win10用户固定的功能有些取消了 有些挪位置了 这让用惯了Win10系统的用户非常不习惯 下面
  • Lua和C++交互详细总结

    转自 http cn cocos2d x org tutorial show id 1474 一 Lua堆栈 要理解Lua和C 交互 首先要理解Lua堆栈 简单来说 Lua和C C 语言通信的主要方法是一个无处不在的虚拟栈 栈的特点是先进后
  • Scrum猪和鸡的故事

    本文转载至 http blog csdn net fen0707 article details 8979942 一天 一头猪和一只鸡在路上散步 鸡看了一下猪说 嗨 我们合伙开一家餐馆怎么样 猪回头看了一下鸡说 好主意 那你准备给餐馆卖什么
  • Java Error org.apache.thrift.transport.TTransportException

    org apache thrift transport TTransportException java net ConnectException Connection refused connect org apache thrift t
  • 利用Python绘制中国新型冠状病毒疫情图(国家和省)

    大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数 包括确诊 疑似 死亡 治愈 如下图所示 这里用到了Python中的pyecharts库 点此了解详细信息 1 先来将需要的模块导入进来 import request