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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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')