新冠疫情可视化-Pyecharts地图

CDA老师1

Python 可视化
# 新冠疫情可视化-Pyecharts地图 ## 一、案例背景 **本案例就新冠疫情历史数据,利用Matplotlib、Pyecharts绘图工具展现疫情数据在全国以及全球范围内的统计信息,供大家学习参考。** ## 二、数据来源 **本案例的数据来源于**[https://github.com/canghailan/Wuhan-2019-nCoV](https://github.com/canghailan/Wuhan-2019-nCoV)中的Wuhan-2019-nCoV.csv文件。由新冠病毒爆发初期截止至2020年9月21日历史数据作为样本。 ## 三、全国疫情确诊人数-地图 ### 1. Pyecharts地图 **Pyecharts是一个用于生成Echarts图表的库。Echarts 是百度开源的一个数据可视化JS库用 Echarts 生成的图可视化效果非常棒,用Pyecharts 可以很方便在 Python 中直接使用数据,来生成图表。** **在最新的Pyecharts中,我们需要自行安装对应的地图文件包。** **地理文件被分为了三个包,分别是:** ``` 全球国家地图: echarts-countries-pypkg 中国省级地图: echarts-china-provinces-pypkg 中国市级地图: echarts-china-cities-pypkg ``` **需要哪个地图,可以直接用pip来进行安装:** ``` 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 pip install echarts-united-kingdom-pypkg ``` * **全球国家地图: **`echarts-countries-pypkg` :世界地图和 213 个国家,包括中国地图 * **中国省级地图: **`echarts-china-provinces-pypkg`:23 个省,5 个自治区 * **中国市级地图: **`echarts-china-cities-pypkg`:370 个中国城市 * **中国县区级地图: **`echarts-china-counties-pypkg`:2882 个中国县·区 * **中国区域地图: **`echarts-china-misc-pypkg`:11 个中国区域地图,比如华南、华北 **Pyehcarts共有有四种地理图表,** `Map`:地图 `Geo`:地理坐标系 `BMap`:百度地图** **百度地图需要申请开发者 AK。这里不做细说,大家有兴趣可以去Pyecharts官网学习。 `Map3D`:三维地图 ### 2. 数据准备 **首先我们导入相关的Python库:** ``` import numpy as np  # 科学计算库 import pandas as pd  # 数据处理库 import matplotlib.pyplot as plt  # matplotlib可视化库 plt.rcParams['font.family']='Arial Unicode MS'  # 显示中文参数【本代码基于OS系统,若为windows系统则将字体改为SimHei即可】 from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.commons.utils import JsCode import warnings warnings.filterwarnings('ignore')  # 忽略警告 ``` **这里我们直接使用下载好的数据文件进行数据读取:** ``` data = pd.read_csv('cov.txt') data.head() # 查看数据前五行 ``` ![image20221104104849010.png](/z_anli/upload/pgc/202212/a32df83cafb978fab4cc11352f6d9f34.png) ### 3. 数据处理 **首先我们提取全国各省目录,并获取其确诊总人数列表,将最近的日期放在列表最前面,并识别统计零新增数据。** ``` df_province = data.loc[(data['province'].notnull()) & (data['city'].isnull())] # 筛选各省数据 name = ['湖北','广东','北京','吉林','上海','浙江','安徽','江西','山东','广西','海南','四川','贵州',        '云南','宁夏','天津','山西','黑龙江','河南','湖南','重庆','河北','辽宁','江苏','福建',        '陕西','台湾','香港','澳门','内蒙','甘肃','新疆','青海','西藏'] # 各省简称列表,方便文字展示 ``` ![image20221104104923704.png](/z_anli/upload/pgc/202212/4b19857a8aa61c790d4edb6f2e42775d.png) **对其表格省份名称进行简化:** ``` def transfer(x):    for i in name:        if i[:2] == x[:2]:            return i df_province['pro'] = df_province['province'].apply(transfer) # 新增省份简称一列 df_province.drop('province', axis=1, inplace=True) # 删除原始省份列 df_province.to_csv('china_province_data.csv',index=0) # 结果表保存 ``` ![image20221104104949832.png](/z_anli/upload/pgc/202212/25b809082ec123a815d39150e8749113.png) **然后获取其确诊总人数列表,匹配各省及其确诊相关数据。** ``` province_list = df[df['date']=='2020-09-21']['pro'].tolist()  # 各省/区的名字列表 data_list = df[df['date']=='2020-09-21']['confirmed'].tolist() # 数据 data_pair = [x for x in zip(province_list, data_list)] ``` ## 四、地图绘制流程 ### 1. 初始化配置 ``` class Map(    # 初始化配置项,参考 `global_options.InitOpts`    init_opts: opts.InitOpts = opts.InitOpts() ) ``` **根据规则,我们可以定义绘图函数。比如设置主题背景、画布宽度和高度:** ``` def china_map(data_pair): Map(init_opts=opts.InitOpts(theme='dark', width='1600px', height='900px') ) ``` ### 2. 添加绘图参数 **我们先来看下主要的绘图参数设置规则:** ``` def add( # 系列名称,用于 tooltip 的显示,legend 的图例筛选。 series_name: str, # 数据项 (坐标点名称,坐标点值) data_pair: types.Sequence[types.Union[types.Sequence, opts.MapItem, dict]], # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件 maptype: str = "china", # 是否显示标记图形 is_map_symbol_show: bool = True) ``` **根据规则,我们画图的主要参数可以设置为:** ``` add( series_name="", data_pair=data_pair, maptype="china", label_opts=opts.LabelOpts( is_show=True, position='inside', ), is_map_symbol_show=False, ) ``` ### 3. 全局参数设置 **首先导入options选项,并缩写为opts。** **set_global_opts()函数可设置配置项如下:** ``` - title_opts——标题 - legend_opts——图例 - tooltip_opts——提示框 - toolbox_opts——工具箱 - brush_opts——区域选择组件 - xaxis_opts——X轴 - yaxis_opts——Y轴 - visualmap_opts——视觉映射 - datazoom_opts——区域缩放 - graphic_opts——原生图形元素组件 - axispointer_opts——坐标轴指示器 ``` **下面我们在地图中进行相应设置:** ``` set_global_opts( # 设置标题 title_opts=opts.TitleOpts( title="全国疫情地图", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts( font_size=24, font_family="Microsoft YaHei"), subtitle='统计时间截止至2020.09.21 21时', subtitle_textstyle_opts=opts.TextStyleOpts( font_size=12, font_family="Microsoft YaHei"), ), # 设置提示框 tooltip_opts=opts.TooltipOpts( is_show=True, formatter="{b} : 确诊{c}人", ), # 设置视觉映射 visualmap_opts=opts.VisualMapOpts( is_piecewise=True, dimension=0, pos_left="10", pos_bottom="20", pieces=[ {'max': 9, 'min': 0, 'label': '0-9', 'color': '#EE3B3B'}, {'max': 99, 'min': 10, 'label': '10-99', 'color': '#EE3B3B'}, {'max': 499, 'min': 100, 'label': '100-499', 'color': '#EE3B3B'}, {'max': 999, 'min': 500, 'label': '500-999', 'color': '#CD2626'}, {'max': 4999, 'min': 1000, 'label': '1000-4999', 'color': '#EE2C2C'}, {'max': 9999, 'min': 5000, 'label': '5000-9999', 'color': '#FF3030'}, {'max': 49999, 'min': 10000, 'label': '10000-49999', 'color': '#B22222'}, {'max': 99999, 'min': 50000, 'label': '>=50000', 'color': '#8b1A1A'} ] ) ) ``` ### 4. 可视化效果 **我们上述代码整合,可以看到地图的效果。** ![image20221104105125814.png](/z_anli/upload/pgc/202212/25e91b6208b45b3c70b7fac69f78724f.png)
6.0586 4 0 关注作者 收藏 2022-12-16   阅读量: 934

评论(0)


暂无数据

博客推荐