Python:绘制动态地图-pyecharts

发布时间:2022-04-12 阅读 2659

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:王卓 (合肥工业大学)
邮箱2020171526@mail.hfut.edu.cn


目录


1. 简介

许多软件可以绘制精美的图表,例如 Stata 、ACGIS、Excel 等等,但这些软件呈现的图表大都以静态为主。在本文中,我们将介绍百度的 Python 开源画图工具——pyecharts,它除了可以画出很酷炫的动态图表外,还可以画出动态地图、卫星地图。本文将以绘制各地上市公司数量为例,来演示 Python 绘制动态地图。

  • 本案例中均使用 Python 语言,适用于习惯使用 Python 的读者进行阅读;
  • 本文对 pyecharts 的操作较为简单,对图表美化要求更高的读者,可参考官网介绍。

2. pyecharts 库介绍

pyecharts 是基于 Python 语言和百度开源 Echarts 产生的数据可视化工具。它巧妙的结合了 Python 强大的数据处理、数据分析能力和 Echarts 良好的交互性、精巧的图表设计能力。

pyecharts 库 API 设计简单,可读性强,支持链式调用。该库涵盖了 30 多种常见图表,且配置高度灵活,可轻松搭配出精美的图表。目前,该库版本支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab,新版 V1 仅支持 Python3.6+ 配置。

2.1 pyecharts 库的安装

  • 方法一:pip 安装
pip install pyecharts
  • 方法二:源码安装
git clone https://github.com/pyecharts/pyecharts.git
cd pyecharts                    # 放入默认的 Python 第三方库文件夹中
pip install -r requirements.txt # 在cmd中输入
python setup.py install
# 或者执行 python install.py

2.2 pyecharts 库配置一览

如上图所示,pyecharts 主要有 6 个全局环境配置项,通过 set_global_opts() 方法设置。详细的系列配置项,可参考「官方文档」。

3. 案例操作

本实例以绘制上市公司所在城市地图演示 pyecharts 的基本应用,其中数据获取方式为调用「Tushare」大数据 API。具体可分为以下几步:

  • 第一步:导入第三方库
import pandas as pd  
import numpy as np
from scipy import stats
import tushare as ts 
import matplotlib.pyplot as plt

# 正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

from pyecharts import options as opts
from pyecharts.charts import Map # 地图库
  • 第二步:调取上市公司基本数据,并计算每个城市有多少个上市公司
pro = ts.pro_api()
df1 = pro.stock_company(exchange='SZSE', fields='ts_code,province,city')
df2 = pro.stock_company(exchange='SSE', fields='ts_code,province,city')
basics_data = pd.concat([df1,df2])
city_firm = basics_data.groupby('city')['ts_code'].count().reset_index()
city_firm.columns = ['city','firm']

# 当没有权限时,可使用如下方式获取
# url = 'https://file.lianxh.cn/data/c/company.xlsx'
# basics_data = pd.read_excel(url)
# city_firm = basics_data.groupby('city')['code'].count().reset_index()
# city_firm.columns = ['city','firm']
  • 第三步:清洗上市公司所在地
# 由于百度地图的城市名不包含 “市”、“地区”、“自治州” 等字段,需要删除
import re
city_firm['city'] = city_firm.city.map(lambda x: re.sub('市',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('地区',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('盟',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('.*?族',"",x))
city_firm['city'] = city_firm.city.map(lambda x: re.sub('自治州',"",x))
  • 第四步:画图
# 各城市上市公司数量图
city = city_firm['city'].values.tolist() 
cfirm = city_firm['firm'].values.tolist() # 将城市和公司数量转为list格式方便画图

map = Map()
map.add("", [list(z) for z in zip(city, cfirm)],
       'china-cities',
       label_opts=opts.LabelOpts(is_show=False),
       is_map_symbol_show=False,
       )
map.set_global_opts(
    title_opts=opts.TitleOpts(title="中国上市公司分布"),
    visualmap_opts=opts.VisualMapOpts(min_=min(cfirm),max_=max(cfirm),is_piecewise=True,
                  range_color=["#E0ECF8", "#045FB4"],
                  pieces=[{"min":1,"max":50,"label":"<50"},{"min":50,"max":100,"label":"50-100"},
                          {"min":100,"max":200,"label":"100-200"},{"min":200,"max":300,"label":"200-300"},
                          {"min":300,"label":">300"}]),
    )
# min\max 表示图例的最大最小值;is_piecewise表示地图分割 ;
# range_color是HTML色彩代码,可以去搜索自己需要的颜色用来表示数值深浅;
# pieces表示图例的数字区间

map.render_notebook()

经过上述操作后,动态地图就画好了!在鼠标滑动各个地区时,会有数量显示。但是城市地图可能并不完整,大家可以参考网上相关方法补全,或者以省份地图代替。

# 各省份上市公司数量图
url = 'https://file.lianxh.cn/data/c/company.xlsx'
basics_data = pd.read_excel(url)
province_firm = basics_data.groupby('province')['code'].count().reset_index()
province_firm.columns = ['province','firm']

import re
province_firm['province'] = province_firm.province.map(lambda x: re.sub('自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('维吾尔自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('壮族自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('回族自治区',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('省',"",x))
province_firm['province'] = province_firm.province.map(lambda x: re.sub('市',"",x))

province = province_firm['province'].values.tolist() 
pfirm = province_firm['firm'].values.tolist() # 将城市和公司数量转为list格式方便画图
map = Map()
map.add("", [list(z) for z in zip(province, pfirm)],
       'china',
       label_opts=opts.LabelOpts(is_show=False),
       is_map_symbol_show=False,
       )
map.set_global_opts(
    title_opts=opts.TitleOpts(title="中国上市公司分布"),
    visualmap_opts=opts.VisualMapOpts(min_=min(pfirm),max_=max(pfirm),is_piecewise=True,
                  range_color=["#E0ECF8", "#045FB4"],
                  pieces=[{"min":1,"max":50,"label":"<50"},{"min":50,"max":100,"label":"50-100"},
                          {"min":100,"max":200,"label":"100-200"},{"min":200,"max":300,"label":"200-300"},
                          {"min":300,"label":">300"}]),
    )
# min\max 表示图例的最大最小值;is_piecewise表示地图分割 ;
# range_color是HTML色彩代码,可以去搜索自己需要的颜色用来表示数值深浅;
# pieces表示图例的数字区间
map.render_notebook()

上述只是 pyecharts 的简单操作,它还可以通过更加复杂的设置画出叠加的、可变化的动态图,比如绘制过去 10 年的各个城市的 GDP 的变化和增长等。

4. 参考资料

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 地图, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh