欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-16 10:44:58
...

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

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

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

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

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

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

这里借助了pyecharts

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


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

在命令行导入这些模块

导入模块

pip install requests

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是生成地图中的红色框框部分。
(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)
(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来设置。
(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)
(4)

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

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

将描述信息和对应数据添加到地图中去,同时设置地图type。
(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)
(5)

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

map_country.render(“country.html”)

(6) 就这样生成了世界、全国、省份的实时地图网页。
(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)

相关标签: python 经验分享