You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.7 KiB

import pandas as pd
from pyecharts.charts import Line,Pie,Bar,WordCloud
from pyecharts import options as opts
# 读取Excel文件
df = pd.read_excel('携程餐厅数据.xlsx', skiprows=[1]) # 跳过第一行无效数据
cuisine_column = '菜系'
score_column = '评分'
# 计算各菜系的评分平均分
cuisine_scores = df.groupby(cuisine_column)[score_column].mean().reset_index()
cuisine_scores.columns = ['菜系', '平均分']
# 使用Pyecharts绘制折线图
line = Line()
line.add_xaxis(cuisine_scores['菜系'].tolist())
line.add_yaxis("平均分", cuisine_scores['平均分'].tolist())
# 设置图表标题、工具提示等
line.set_global_opts(
title_opts=opts.TitleOpts(title="各菜系评分平均分折线图"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
yaxis_opts=opts.AxisOpts(type_="value")
)
# 渲染图表到HTML文件
line.render('cuisine_scores_percent.html')
# 计算各菜系的消费次数之和(即评论总数之和)
cuisine_counts = df.groupby('菜系')['评论总数'].sum().reset_index()
cuisine_counts.columns = ['菜系', '消费次数']
# 使用Pyecharts绘制饼图
pie = (
Pie()
.add(
"",
[list(z) for z in zip(cuisine_counts['菜系'], cuisine_counts['消费次数'])],
radius=["40%", "75%"], # 设置饼图的内外半径
label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"), # 标签格式,包括菜系名称、消费次数和百分比
)
.set_global_opts(title_opts=opts.TitleOpts(title="各菜系消费次数占比"))
# 不需要在这里再设置 label_opts因为它已经在 add 方法中设置过了
)
# 渲染图表到HTML文件
pie.render('cuisine_consumption_pie_chart.html')
# 计算每个菜系的人均消费总和和平均消费(假设每个菜系有多条记录)
cuisine_sums = df.groupby('菜系')['人均消费'].sum()
cuisine_counts = df.groupby('菜系')['人均消费'].count()
cuisine_averages = cuisine_sums / cuisine_counts
# 转换为DataFrame以便使用
cuisine_df = cuisine_averages.reset_index()
cuisine_df.columns = ['菜系', '平均消费']
# 绘制柱状图
bar = Bar()
bar.add_xaxis(cuisine_df['菜系'].tolist())
bar.add_yaxis('平均消费', cuisine_df['平均消费'].tolist())
# 设置全局配置项
bar.set_global_opts(
title_opts=opts.TitleOpts(title='各菜系人均消费占比柱状图'),
xaxis_opts=opts.AxisOpts(name='菜系'),
yaxis_opts=opts.AxisOpts(name='平均消费'),
toolbox_opts=opts.ToolboxOpts()
)
# 渲染图表到HTML文件可以在浏览器中打开查看
bar.render('cuisine_average_consumption.html')