一、准备工作
-
需要安装的库: akshare、pyecharts
-
省份简称获取: python 全国行政地区信息爬取-腾迅位置服务平台
-
pyecharts 地图可视化: pyecharts -> Map - Map_base
-
pyecharts 视觉配置项: pyecharts -> VisualMapOpts
-
结果预示
:
二、可视化步骤
2.1 导入相关库
import datetime
import pandas as pd
import akshare as ak
from pyecharts import options as opts
from pyecharts.charts import Map
2.2 高风险地区数据获取
# 高风险地区实时查询
covid_19_risk_area_df = ak.covid_19_risk_area(symbol="高风险等级地区")
2.3 分省高风险地区数量统计、排序
# 各省高风险地区数量统计、排序
df_counts_province = covid_19_risk_area_df.groupby(['grade','province']).nunique()[['communitys']] # 去重统计
df_counts_province = df_counts_province.sort_values(by=['communitys'],ascending=False) # 排序
df_counts_province.rename(columns={"communitys":"counts"},inplace=True) # 将列名communitys重新命名成counts
2.4 获取省份简称
- 因为pyecharts在画地图时,省份名称不支持全称,故需要将省份全称转变为简称,如:新疆维吾尔自治区(全称)–> 新建(简称)
- ProvinceInfo_TX.xlsx 文件获取地址:python 全国行政地区信息爬取-腾迅位置服务平台
# 获取省份简称
# 读取excel数据文件
ProvinceInfo_TX = pd.read_excel("ProvinceInfo_TX.xlsx")
# 表关联
df = pd.merge(df_counts_province.reset_index(),ProvinceInfo_TX,how="left",left_on="province",right_on="fullname")
2.5 pyecharts 绘图
# 参考:https://gallery.pyecharts.org/#/Map/map_base
data_list = df[['name','counts']].values.tolist() # 数据列表
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 目前时间
subtitle = "数据来源:AKShare->事件数据->COVID->疫情风险等级查询\n更新日期:{}".format(now) # 副标题文本
c = (
Map()
.add("高风险地区数量", data_list, "china") # 添加数据
# 设置全局变量
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(
title="全国内地高风险地区数量分布",
subtitle=subtitle,
),
legend_opts=opts.LegendOpts(
selected_mode="single",
),
# 视觉映射配置项,参考:https://pyecharts.org/#/zh-cn/global_options?id=visualmapopts
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 是否为分段型
# 自定义范围、标签、颜色
pieces = [
{
"max":20,
"label":"1-20",
"color":"#FFFF00",
},{
"min":20,
"max":40,
"label":"20-40",
"color":"#FFE500",
},{
"min":40,
"max":80,
"label":"40-80",
"color":"#FFCC00",
},{
"min":80,
"max":150,
"label":"80-150",
"color":"#FF9900",
},{
"min":150,
"max":300,
"label":"150-300",
"color":"#FF6600",
},{
"min":300,
"label":"300及以上",
"color":"#FF3300",
},
]
),
)
)
# 在notebook上显示
c.render_notebook()
三、完整代码
import datetime
import pandas as pd
import akshare as ak
from pyecharts import options as opts
from pyecharts.charts import Map
############################### 数据获取 ###############################
# 高风险地区实时查询
covid_19_risk_area_df = ak.covid_19_risk_area(symbol="高风险等级地区")
# 各省高风险地区数量统计、排序
df_counts_province = covid_19_risk_area_df.groupby(['grade','province']).nunique()[['communitys']]
df_counts_province = df_counts_province.sort_values(by=['communitys'],ascending=False)
df_counts_province.rename(columns={"communitys":"counts"},inplace=True)
# 各市高风险地区数量统计、排序
df_counts_city = covid_19_risk_area_df.groupby(['grade','province','city']).nunique()[['communitys']]
df_counts_city = df_counts_city.sort_values(by=['communitys'],ascending=False)
df_counts_city.rename(columns={"communitys":"counts"},inplace=True)
############################### 数据可视化 ###############################
# 全国内地高风险地区数量分布(分省)
# 获取省份简称
ProvinceInfo_TX = pd.read_excel("ProvinceInfo_TX.xlsx")
# 表关联
df = pd.merge(df_counts_province.reset_index(),ProvinceInfo_TX,how="left",left_on="province",right_on="fullname")
# 利用 pyecharts 绘图
# 参考:https://gallery.pyecharts.org/#/Map/map_base
data_list = df[['name','counts']].values.tolist() # 数据列表
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 目前时间
subtitle = "数据来源:AKShare->事件数据->COVID->疫情风险等级查询\n更新日期:{}".format(now) # 副标题文本
c = (
Map()
.add("高风险地区数量", data_list, "china") # 添加数据
# 设置全局变量
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(
title="全国内地高风险地区数量分布",
subtitle=subtitle,
),
legend_opts=opts.LegendOpts(
selected_mode="single",
),
# 视觉映射配置项,参考:https://pyecharts.org/#/zh-cn/global_options?id=visualmapopts
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 是否为分段型
# 自定义范围、标签、颜色
pieces = [
{
"max":20,
"label":"1-20",
"color":"#FFFF00",
},{
"min":20,
"max":40,
"label":"20-40",
"color":"#FFE500",
},{
"min":40,
"max":80,
"label":"40-80",
"color":"#FFCC00",
},{
"min":80,
"max":150,
"label":"80-150",
"color":"#FF9900",
},{
"min":150,
"max":300,
"label":"150-300",
"color":"#FF6600",
},{
"min":300,
"label":"300及以上",
"color":"#FF3300",
},
]
),
)
)
# 在notebook上显示
c.render_notebook()
.
.
.
- 大家可以参考该文章,获取分省份中风险地区数量分布、按城市中高风险地区分布;
- 图表可以进一步优化,参考:python 全国内地中高风险地区数量查询与可视化(分省)