# 导包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示
data = pd.read_excel('../data/work.xlsx')
data.head(30)
订单id菜品大类菜品id菜品名数量单价用户id01肉类1肉11100100011肉类2肉21200100021肉类3肉31300100031肉类4肉41400100041菜类5菜11500100051菜类6菜21600100061菜类7菜31700100072肉类1肉11100100182肉类2肉21200100192肉类3肉313001001102肉类4肉414001001112菜类5菜115001001122菜类6菜216001001132菜类7菜317001001143肉类1肉111001002153肉类2肉212001002163肉类3肉313001002173肉类4肉414001002183菜类5菜115001002193菜类6菜216001002203菜类7菜317001002
# 统计每个菜品的销售数量
sales_count = data.groupby('菜品名')['数量'].sum().reset_index()
# 统计每个菜品的销售额
sales_amount = data.groupby('菜品名').apply(lambda x: (x['数量'] * x['单价']).sum()).reset_index(name='销售额')
# 合并销售数量和销售额数据
sales_analysis = pd.merge(sales_count, sales_amount, on='菜品名')
# 根据销售数量对菜品排序
sales_analysis = sales_analysis.sort_values(by='数量', ascending=False)
# 打印销售数量和销售额前10的菜品
top_10_sales = sales_analysis.head(10)
print("销售数量前10的菜品:")
print(top_10_sales[['菜品名', '数量']])
print("\n销售额前10的菜品:")
print(top_10_sales[['菜品名', '销售额']])
销售数量前10的菜品: 菜品名 数量 0 肉1 3 1 肉2 3 2 肉3 3 3 肉4 3 4 菜1 3 5 菜2 3 6 菜3 3 销售额前10的菜品: 菜品名 销售额 0 肉1 300 1 肉2 600 2 肉3 900 3 肉4 1200 4 菜1 1500 5 菜2 1800 6 菜3 2100import matplotlib.pyplot as plt # 统计每个菜品的销售数量和销售额 sales_count = data.groupby('菜品名')['数量'].sum() sales_amount = data.groupby('菜品名').apply(lambda x: (x['数量'] * x['单价']).sum()) # 根据销售数量排序 sales_count = sales_count.sort_values(ascending=False) # 绘制销售数量的条形图 plt.figure(figsize=(10, 6)) plt.bar(sales_count.index, sales_count.values) plt.xlabel('菜品名') plt.ylabel('销售数量') plt.title('菜品销售数量') # 根据销售额排序 sales_amount = sales_amount.sort_values(ascending=False) # 绘制销售额的条形图 plt.figure(figsize=(10, 6)) plt.bar(sales_amount.index, sales_amount.values) plt.xlabel('菜品名') plt.ylabel('销售额') plt.title('菜品销售额') # 展示图形 plt.show()
# 根据菜品类别进行分组,并计算每个类别的总销售额
sales_by_category = data.groupby('菜品大类').apply(lambda x: (x['数量'] * x['单价']).sum())
# 根据销售额排序
sales_by_category = sales_by_category.sort_values(ascending=False)
# 绘制销售额的条形图
plt.figure(figsize=(5, 9))
plt.bar(sales_by_category.index, sales_by_category.values)
plt.xlabel('菜品类别')
plt.ylabel('销售额')
plt.title('不同类别菜品销售情况')
# 展示图形
plt.show()
# 根据用户ID进行分组,并计算每个用户的购买菜品数量和消费总额
user_consumption = data.groupby('用户id').agg({'数量': 'sum', '单价': 'sum'})
# 打印用户消费情况
print(user_consumption)
数量 单价 用户id 1000 7 2800 1001 7 2800 1002 7 2800
# 绘制条形图
plt.figure(figsize=(5, 9))
plt.bar(user_consumption.index, user_consumption['单价'])
plt.xlabel('用户ID')
plt.ylabel('消费总额')
plt.title('用户消费情况')
plt.show()
# 将菜品按照单价分为不同的价格区间
data['价格区间'] = pd.cut(data['单价'], bins=[0, 100, 200, 300, 400, 500, float('inf')], labels=['0-100', '100-200', '200-300', '300-400', '400-500', '500+'])
# 按照价格区间进行分组,并统计每个价格区间内的销售数量
price_analysis = data.groupby('价格区间')['数量'].sum()
# 绘制条形图
plt.bar(price_analysis.index, price_analysis.values)
plt.xlabel('价格区间')
plt.ylabel('销售数量')
plt.title('高价和低价菜品销售情况')
plt.show()