新冠疫情可视化-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() # 查看数据前五行 ``` ![image20221114102308720.png](/z_anli/upload/pgc/202212/cce44a3e3944d48294bd1bf8fcb95afc.png) ### 3. 数据处理 **首先我们提取全球国家目录,并获取其确诊总人数列表,将最近的日期放在列表最前面,并识别统计零新增数据。** ``` # 定位到最近日期然后筛选国家 data = data.loc[(data['date'] == '2020-09-21') & (data['province'].isnull())] data.head() ``` ![image20221114102520432.png](/z_anli/upload/pgc/202212/5e97d379c5781bb6d571e6afae4620ca.png) **然后获取其确诊总人数列表,匹配各个国家及其确诊相关数据。** ``` country = data['country'].tolist() # 国家 confirmed = data['confirmed'].tolist() # 确诊人数 cure = data['cured'].tolist() # 治愈人数 death = data['dead'].tolist() # 死亡人数 data_pair = [(i, (j, x, y)) for i, j, x, y  in zip(country, confirmed, cure, death)] data_pair ``` ![image20221114102604930.png](/z_anli/upload/pgc/202212/77f602c616f6b87ebfe65afa041d308f.png) ## 四、全球地图绘制流程 ### 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='2000px',height='1000px')) ``` ### 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( '', data_pair, 'world', name_map=name_map, is_map_symbol_show=False) ``` ### 3. 系列配置项 **系列配置可以通过 **`set_series_opts` 方法进行设置,通过系列配置项,可以对文字、图元等样式进行配置。 **因为国家名称太多,为了防止文字过多而造成的可视化效果较差,我们通过将**`label_opts`进行隐藏。 ``` set_series_opts(label_opts=opts.LabelOpts(is_show=False)) ``` ### 4. 全局参数设置 **首先导入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_right='center',pos_top='2%', title_textstyle_opts=opts.TextStyleOpts( font_size=24, font_family="Microsoft YaHei",), subtitle='统计时间截止至2020.09.21',subtitle_textstyle_opts=opts.TextStyleOpts( font_size=12, color="#CCCCCC",font_family="Microsoft YaHei" ), ), # 设置图例 legend_opts=opts.LegendOpts(is_show=False), # 设置视觉映射 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': 999, 'min': 100, 'label': '100-999', 'color': '#EE3B3B'}, {'max': 9999, 'min': 1000, 'label': '1000-9999', 'color': '#CD2626'}, {'max': 99999, 'min': 10000, 'label': '10000-99999', 'color': '#EE2C2C'}, {'max': 999999, 'min': 100000, 'label': '100000-999999', 'color': '#FF3030'}, {'max': 4999999, 'min': 1000000, 'label': '1000000-4999999', 'color': '#B22222'}, {'max': 9999999, 'min': 5000000, 'label': '>=5000000', 'color': '#8b1A1A'} ] ), # 设置提示框 tooltip_opts=opts.TooltipOpts(is_show=True, formatter=JsCode(mapformatter)) ) ``` ### 5. 可视化效果 **我们上述代码整合,调用绘制函数。** ``` draw_global_pics(data_pair) ``` **可以看到全球地图的效果:** ![image20221114103225412.png](/z_anli/upload/pgc/202212/0437727c58ce44b2793e23fe7bc09871.png)
0.0528 7 0 关注作者 收藏 2022-12-19   阅读量: 545

评论(0)


暂无数据

博客推荐