(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)

【特别声明:转载知乎某大牛,仅作略微修改,若侵犯权益请联系删除】

疫情的每日数据变化牵动着千万人的心,我多么希望早晨一醒来就传来疫情被战胜的喜讯。我每天早晨醒来的第一件事情,就是看看确诊人数的变化,相信很多小伙伴也和我一样。我是一名程序员,在家就制作了这样一个小程序,通过Python实时生成数据分布图,可以是全国也可以是每个省份。技术分享,我们一起战胜疫情。

(数据取自网站不一定十分精准,主要是技术分享,还望谅解)

全国数据图
在这里插入图片描述

湖北省
在这里插入图片描述

下面和大家一起来看看代码吧!

这里借助了pyecharts

1、先来将需要的模块导入进来


```python
#如果没有这些模块记得先导入
import requests
import json
import re
from pyecharts.charts import Map
from pyecharts import options

在命令行导入这些模块

导入模块

pip install requests

扫描二维码关注公众号,回复: 12026548 查看本文章

pip install json

pip install re

pip install pyecharts

除了上面的模块需要导入外还需要导入地图

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

根据需要地图导入

pip install echarts-countries-pypkg

pip install echarts-china-provinces-pypkg

pip install echarts-china-cities-pypkg

pip install echarts-china-counties-pypkg

pip 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.进行地图的生成,详解在后面;

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,创建省份地图    
    map_province = Map()
    #设置地图上的标题和数据标记,添加省份和确诊人数
    map_province.set_global_opts(title_opts=options.TitleOpts(title=province['name'] + "实时疫情图-确诊人数:" + province['value']),
                                 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")  

#创建国家地图     
map_country = Map()
#设置地图上的标题和数据标记,添加确诊人数
map_country.set_global_opts(title_opts=options.TitleOpts(title="中国实时疫情图-确诊人数:" + 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("中国疫情地图.html")
"""
#world地图,没有详细去完善了,有兴趣的可以试试。

data=[]

for country in table['data']['worldlist']:

    data.append((country['name'], country['value']))
print(data)

map_country =  Map()
map_country.set_global_opts(title_opts=options.TitleOpts(title="世界实时疫情图"), visualmap_opts=options.VisualMapOpts(max_=1000))
map_country.add("确诊", data, maptype="world")
map_country.render("world.html")  # 生成html文件

"""
print("生成完成!!!")

部分代码解释

(1)

#将省份数据添加到列表中去

province_data.append((province[‘name’], province[‘value’]))

将数据中对应的值取出来添加到province_data中。

(2)

title_opts=options.TitleOpts(title=“A”)

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

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”}]))

is_piecewise=True,#设置是否为分段显示

然后通过 pieces来设置。
在这里插入图片描述
(4)

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

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

将描述信息和对应数据添加到地图中去,同时设置地图type。
在这里插入图片描述
(5)

#一切完成,那么生成一个html网页文件。

map_country.render(“country.html”)

(6) 就这样生成了世界、全国、省份的实时地图网页。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45606831/article/details/105129216
今日推荐