```python
import pandas as pd
from pyecharts import Geo,Line,Bar
from pyecharts import Overlap # 图表叠加类
from wordcloud import WordCloud, ImageColorGenerator # 词云图相关模块
import matplotlib.pyplot as plt # 绘制图表的模块
from os import path # 路径
import collections # 集合模块
import jieba # 分词模块
import imageio # 图片读取
# 读取文件内容
tomato_com = pd.read_excel('夏洛特烦恼.xlsx')
grouped = tomato_com.groupby(['city']) # 按照城市名称进行数据的分组
grouped_pct = grouped['score'] # 获取分组后的评分信息
city_com = grouped_pct.agg(['mean', 'count']) # 聚合数据,城市、平均分、数量
# 重置数据的索引
city_com.reset_index(inplace=True)
# 返回浮点数 0.01 返回到后两位
city_com['mean'] = round(city_com['mean'], 2)
# 创建热力图实例对象
geo = Geo('《夏洛特烦恼 》 全国热力图', title_color="#fff",
title_pos="center", width=1200,
height=600, background_color='#404a59')
flag = True
# 创建城市与对应数量的列表数据
data = [(city_com['city'][i], city_com['count'][i]) for i in range(0, city_com.shape[0])]
while flag:
# 转换数据序列,将带字典和元组类型的序列转换为 k_lst,v_lst 两个列表
attr, value = geo.cast(data)
try:
# 添加城市热点图
# attr城市名称、value对应数量、type类型、visual_range热点区间值、visual_text_color字体颜色
# is_visualmap是否为视觉地图、
geo.add("", attr, value, type="heatmap", visual_range=[0, 50], visual_text_color="#fff",
is_visualmap=True)
flag = False # 修改循环标记
except ValueError as e:
e = str(e)
e = e.split("No coordinate is specified for ")[1] # 获取不支持的城市名
for i in range(0, len(data)):
if e in list(data[i]):
del data[i] # 将不支持城市名的数据删除
break
flag = True
# 生成全国热力图html文件
geo.render('夏洛特烦恼全国热力图.html')
# 2、生成主要城市评论数及平均分文件
# 通过排序获取数量排行前30的城市信息
city_main = city_com.sort_values('count', ascending=False)[0:30]
attr = city_main['city'] # 获取城市名称的数据
v1 = city_main['count'] # 获取数量
v2 = city_main['mean'] # 获取平均分
line = Line("主要城市评分") # 折线图对象
# is_stack是否堆叠、xaxis_rotate(x轴城市名称旋转角度)
# yaxis_min(y轴最小值)
# mark_point(覆盖物的方式显示最高值和最小值)
# xaxis_interval(x轴间隔距离,底部显示城市名称之间的距离)
# line_color(线的颜色)
# line_width(线宽度)
# mark_point_textcolor(标记点文字的颜色)
# is_splitline_show(是否显示分割线)
line.add("城市", attr, v2, is_stack=True, xaxis_rotate=45, yaxis_min=0,
mark_point=['min', 'max'], xaxis_interval=0, line_color='lightblue',
line_width=4, mark_point_textcolor='black', mark_point_color='yellow',
is_splitline_show=False) # 添加折线图
bar = Bar("主要城市评论数") # 柱形图对象
bar.add("城市", attr, v1, is_stack=False, xaxis_rotate=45, yaxis_min=0,
xaxis_interval=0, is_splitline_show=False,mark_point_color='yellow') # 添加柱形图
overlap = Overlap() # 叠加图表对象
# 默认不新增 x y 轴,并且 x y 轴的索引都为 0
overlap.add(bar)
overlap.add(line, yaxis_index=1, is_add_yaxis=True)
# 生成主要城市评论数_平均分.html文件
overlap.render('主要城市评论数_平均分.html')
# 3、生成词云图
# 获取评论内容
tomato_str = ' '.join(tomato_com['comment'])
words_list = [] # 保存词汇的列表
# 分词
word_generator = jieba.cut_for_search(tomato_str)
for word in word_generator:
words_list.append(word) # 将拆分后的词汇添加至列表当中
words_list = [k for k in words_list if len(k) > 1] # 筛选词汇长度大于1的
back_color = imageio.imread('词云背景.jpg') # 读取图片
wc = WordCloud(background_color='white', # 背景颜色
max_words=200, # 最大词数
mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略
max_font_size=300, # 显示字体的最大值
font_path="STFANGSO.ttf", # 字体
random_state=42, # 为每个词返回一个PIL颜色
# width=1000, # 图片的宽
# height=860 # 图片的长
)
tomato_count = collections.Counter(words_list) # 统计数量
wc.generate_from_frequencies(tomato_count) # 生成词云图
# 基于彩色图像生成相应彩色
image_colors = ImageColorGenerator(back_color)
# 创建图形
plt.figure()
# 显示彩色图像
plt.imshow(wc.recolor(color_func=image_colors))
# 去掉坐标轴
plt.axis('off')
# 保存词云图片
wc.to_file(path.join('词云.png'))
为什么会出现这样的报错,这些库都安装了一个遍,是在pycharm上运行的