下面的代码也是我从别处拿来,准备做一个实训的,结果不能实现地图上面的显示
结果是下面的问题
import re
import numpy as np
import pandas as pd
from pyecharts.charts import Map
df = pd.read_excel("月饼.xlsx")
print(df.head(10))
df.shape
df.drop_duplicates(inplace=True)
print(df.shape)
# 共有4520条数据,去重后还有1885条数据(某宝一个店铺会在不同页面推荐,导致重复数据比较多)
# 付款人数超过10000后会直接用"万"替代,这里我们需要将其恢复:
print(df[df['付款情况'].str.contains("万")])
# 提取数值
df['num'] = [re.findall(r'(\d+\.{0,1}\d*)', i)[0] for i in df['付款情况']]
df['num'] = df['num'].astype('float')
# 提取单位(万)
df['unit'] = [''.join(re.findall(r'(万)', i)) for i in df['付款情况']]
df['unit'] = df['unit'].apply(lambda x:10000 if x=='万' else 1)
# 计算销量
df['销量'] = df['num'] * df['unit']
df = df[df['地址'].notna()]
df['省份'] = df['地址'].str.split(' ').apply(lambda x:x[0])
# 删除多余的列
df.drop(['付款情况', 'num', 'unit'], axis=1, inplace=True)
# 重置索引
df = df.reset_index(drop=True)
print(df.head(20))
# df.to_csv('yuebing2.csv', index=False)
# df2=pd.read_csv('yuebing2.csv')
# print(df2.head(10))
def create_map() -> Map:
# 线性渐变
color_js = """new echarts.graphic.LinearGradient(0, 0, 1, 0,
[{offset: 0, color: '#009ad6'}, {offset: 1, color: '#ed1941'}], false)"""
province_num = df.groupby('省份')['销量'].sum().sort_values(ascending=False)
map_chart = Map(init_opts=opts.InitOpts(theme='light',
width='800px',
height='600px'))
map_chart.add('',
[list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())],
maptype='china',
is_map_symbol_show=False,
itemstyle_opts={
'normal': {
'shadowColor': 'rgba(0, 0, 0, .5)', # 阴影颜色
'shadowBlur': 5, # 阴影大小
'shadowOffsetY': 0, # Y轴方向阴影偏移
'shadowOffsetX': 0, # x轴方向阴影偏移
'borderColor': '#fff'
}
}
)
map_chart.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
is_show=True,
is_piecewise=True,
min_ = 0,
max_ = 1,
split_number = 5,
series_index=0,
pos_top='70%',
pos_left='10%',
range_text=['销量(份):', ''],
pieces=[
{'max':2000000, 'min':200000, 'label':'> 200000', 'color': '#990000'},
{'max':200000, 'min':100000, 'label':'100000-200000', 'color': '#CD5C5C'},
{'max':100000, 'min':50000, 'label':'50000-100000', 'color': '#F08080'},
{'max':50000, 'min':10000, 'label':'10000-50000', 'color': '#FFCC99'},
{'max':10000, 'min':0, 'label':'0-10000', 'color': '#FFE4E1'},
],
),
legend_opts=opts.LegendOpts(is_show=False),
tooltip_opts=opts.TooltipOpts(
is_show=True,
trigger='item',
formatter='{b}:{c}'
),
title_opts=dict(
text='全国各地区月饼销量',
left='center',
top='5%',
textStyle=dict(
color='#DC143C'))
)
return map_chart
if __name__ == "__main__":
chart = create_map()
chart.render("map_chart.html")
这里没有其他的问题,只是数据文件中的省份名称和pyecharts中的地图名称不匹配导致的空值
只需要创建一个字典
# 创建一个字典,用于将数据文件中的省份名称映射到Pyecharts中的地图名称 name_map = { '北京': '北京市', '天津': '天津市', '河北': '河北省', '山西': '山西省', '内蒙古': '内蒙古自治区', '辽宁': '辽宁省', '吉林': '吉林省', '黑龙江': '黑龙江省', '上海': '上海市', '江苏': '江苏省', '浙江': '浙江省', '安徽': '安徽省', '福建': '福建省', '江西': '江西省', '山东': '山东省', '河南': '河南省', '湖北': '湖北省', '湖南': '湖南省', '广东': '广东省', '广西': '广西壮族自治区', '海南': '海南省', '重庆': '重庆市', '四川': '四川省', '贵州': '贵州省', '云南': '云南省', '西藏': '西藏自治区', '陕西': '陕西省', '甘肃': '甘肃省', '青海': '青海省', '宁夏': '宁夏回族自治区', '新疆': '新疆维吾尔自治区', '台湾': '台湾省', '香港': '香港特别行政区', '澳门': '澳门特别行政区' } # 使用map()方法将数据文件中的省份名称映射为Pyecharts中的地图名称 df2['省份'] = df2['省份'].map(name_map)
来匹配pyecharts里面的省份就行了
如有侵权,请私信我!