ID点菜次数最多
import numpy as np
import pandas as pd #导入pandas用于表格操作
import xlrd #导入xlrd用于获取一个表格里多个sheet
from matplotlib import pyplot as plt#导入pyplot用于绘图
from datetime import datetime
# 解决中文乱码问题
#sans-serif就是无衬线字体,是一种通用字体族。
#常见的无衬线字体有 Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
table1=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail1')
table2=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2')
table3=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail3')
foodData=pd.concat([table1,table2,table3],axis=0,sort=False) #axis=0合并行
foodData['total_amounts']=foodData['amounts']*foodData['counts'] #设置总价新字段并赋值。
dataGroup=foodData[['order_id','counts','amounts','total_amounts']] #取出多个字段构建新dataFrame类型为分组做准备
data_sort=dataGroup.groupby(by='order_id').sum() #分组求和
data_sort.sort_values(by='counts',ascending=False,inplace=True) #降序
data_sort[:10].plot.bar() #展示
数据分析:
1.X为订单,Y为数量
2.总体分布图来看,用户点菜排名靠前的前十处于30左右。
3根据菜数最多的这些数量,可以看出一顿饭给不同用户我们准备最多的准备量。
订单花钱最多
foodData['total_amounts']=foodData['amounts']*foodData['counts']
dataGroup=foodData[['order_id','counts','amounts','total_amounts',]]
data_sort=dataGroup.groupby(by='order_id').sum()
data_sort.sort_values(by='total_amounts',ascending=False,inplace=True)
data_sort['total_amounts'][:10].plot.bar()
#和上述思想一样
订单ID平均菜品最贵
第一种方法:
#这里因为ID,每个ID点的菜品不会一样,所以可以直接用mean函数来求平均值。
dataGroup=foodData[['order_id','amounts']]
data_sort=dataGroup.groupby(by='order_id').mean()
data_sort.sort_values('amounts',ascending=False,inplace=True)
data_sort['amounts'][:10].plot.bar()
第二种方法
counts_list=foodData['counts'].values.tolist() #取出值转成List
for i in counts_list:
num=str(i).replace(str(i),'1') #遍历出的数据都替换成1个
foodData['counts']=int(num) #然后循环重新赋值 dataGroup1=foodData[['order_id','counts','amounts']] #取多个字段
data_sort=dataGroup1.groupby(by='order_id').sum() 求和
data_sort['mean_price']=data_sort['amounts']/data_sort['counts'] #菜品和除以新赋值后菜品数量
data_sort.sort_values(by='mean_price',ascending=False,inplace=True) 排序
data_sort['mean_price'][:10].plot.bar()