上篇文章python 全国内地高风险地区数量查询与可视化(分省) 已经详细写明数据获取途径、数据处理、可视化,这里就不再重复;
不过该文章还有进一步优化的地方:该文章只是单一展示高风险地区数量分布,我们可以简单修改下代码,使得结果同时可以呈现中高风险
地区数量分布,结果如下:
主要画图差异代码部分:
完整代码:
import datetime
import pandas as pd
import akshare as ak
from pyecharts import options as opts
from pyecharts.charts import Map
def data_pro(df):
# 各省风险地区数量统计、排序
df_counts = df.groupby(['province']).nunique()[['communitys']]
df_counts = df_counts.sort_values(by=['communitys'],ascending=False)
df_counts.rename(columns={"communitys":"counts"},inplace=True)
return df_counts.reset_index()
# 数据获取
covid_19_risk_area_high_df = ak.covid_19_risk_area(symbol="高风险等级地区")
covid_19_risk_area_mid_df = ak.covid_19_risk_area(symbol="中风险等级地区")
# 数据处理
df_counts_province_high = data_pro(covid_19_risk_area_high_df)
df_counts_province_mid = data_pro(covid_19_risk_area_mid_df)
# 获取省份简称
ProvinceInfo_TX = pd.read_excel("ProvinceInfo_TX.xlsx")
# 表关联
df_high = pd.merge(df_counts_province_high,ProvinceInfo_TX,how="left",left_on="province",right_on="fullname")
df_mid = pd.merge(df_counts_province_mid,ProvinceInfo_TX,how="left",left_on="province",right_on="fullname")
# 利用 pyecharts 绘图
# 参考:https://gallery.pyecharts.org/#/Map/map_base
data_list_high = df_high[['name','counts']].values.tolist() # 数据列表
data_list_mid = df_mid[['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_high, "china") # 添加数据
.add("中风险地区数量", data_list_mid, "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()