数据分析之实例⼀:餐厅订单数据分析实例⼀:餐厅订单数据分析
#先进⾏设置
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
2.加载三个⽂件资料,将其合并和相应的删除处理
#1加载⽂件中的三个表
ad_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail1')
ad_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2')
ad_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail3')
#2合并数据函数pd.concat()
at([data1,data2,data3],axis=0)
#‘axis=0’代表按照⾏链接数据,下⽅堆叠
#data.head(5)
data.dropna(axis=1,inplace=True)
#删除na列,axis=1代表按照列,inplace=True在原数据修改操作
屈楚萧年龄
data.info()
输出:
<class 'frame.DataFrame'>
Int64Index: 10037 entries, 0 to 3610
Data columns (total 11 columns):
#  Column            Non-Null Count  Dtype
---  ------            --------------  -----
0  detail_id        10037 non-null  int64
1  order_id          10037 non-null  int64
2  dishes_id        10037 non-null  int64
3  dishes_name      10037 non-null  object
4  itemis_add        10037 non-null  int64
5  counts            10037 non-null  int64
6  amounts          1003
7 non-null  int64
7  place_order_time  10037 non-null  datetime64[ns]
8  add_inprice      10037 non-null  int64
9  picture_file      10037 non-null  object
10  emp_id            10037 non-null  int64
dtypes: datetime64[ns](1), int64(8), object(2)
memory usage: 941.0+ KB
3.计算卖出菜品平均价格
#卖出菜品的平均价格
round(data['amounts'].mean(),2)#⽅法⼀,round(2)保留两位⼩数
an(data['amounts']),2)#⽅法⼆(相对np处理较快)
44.82
4.频数统计,什么菜最受欢迎(对菜名进⾏频数统计,取最⼤前⼗名)
#频数统计,什么菜最受欢迎(对菜名进⾏频数统计,取最⼤前⼗名)
dishes_counts=data['dishes_name'].value_counts()[:10]
#.value_counts()数据统计,[:10]切⽚,取前⼗
dishes_counts
⽩饭/⼤碗        323
凉拌菠菜        269
⾕稻⼩庄        239
⿇辣⼩龙虾        216
辣炒鱿鱼        189
芝⼠烩波⼠顿龙虾    188
五⾊糯⽶饭(七⾊)    187
⽩饭/⼩碗        186
⾹酥两吃⼤虾      178
焖猪⼿          173
Name: dishes_name, dtype: int64
#数据可视化
dishes_counts.plot(kind='bar',color=['y'],fontsize=16)
#dishes_counts.plot(kind='line',color=['r'],fontsize=16)一路顺风简谱
for x,y in enumerate(dishes_counts):
#enumerate() 函数⽤于将⼀个可遍历的数据对象(如列表、元组或字符串)组合为⼀个索引序列,#同时列出数据和数据下标,⼀般⽤在 for 循环当中。
print(x,y)
<(x,y+2 ,y,ha='center',fontsize=12)
#第⼀个x,y相当于坐标位置。+2字体⾼度调整
0 323
1 269
2 239
3 216
4 189
5 188
6 187
7 186
8 178
9 173
#订单的种类最多
#订单电池的种类最多
data_group=data['order_id'].value_counts()[:10]
data_group.plot(kind='bar',fontsize=16,color=['r','m','b','y','g'])
#data_group.plot(kind='line',fontsize=16,color=['r','m','b','y','g'])
plt.title('点菜前⼗')
plt.xlabel('订单id',fontsize=16)
plt.ylabel('点菜种类',fontsize=16)
video games live#8⽉份点菜订单前⼗,平均点菜25个菜品
Text(0, 0.5, '点菜种类')
李宇春2010南京演唱会#订单id点菜数量top10(分组order_10,counts求和,取前⼗)
#订单id点菜数量top10(分组order_10,counts求和,取前⼗)
data['total_amounts']=data['counts']*data['amounts']#先添加总价列
dataGroup=data[['order_id','counts','amounts','total_amounts']].groupby(by='order_id') #.groupby(by=
'ord_id')按照order_id分组
Group_sum=dataGroup.sum()#分组求和
sort_counts=Group_sum.sort_values(by='counts',ascending=False)
#Group_sum.sort_values排序,by='counts'以counts来排序,ascending=False降序
sort_counts['counts'][:10].plot(kind='bar',fontsize=16)
plt.xlabel('订单id')
plt.ylabel('点菜数量')
plt.title('点菜数量top10')
哪个订单消费⾦额前⼗
#哪个订单消费⾦额前⼗
sort_total_amounts=Group_sum.sort_values(by='total_amounts',ascending=False)
sort_total_amounts['total_amounts'][:10].plot(kind='bar',fontsize=16,color=['r','m','b','y','g']) plt.xlabel('消费id')
plt.ylabel('消费⾦额')
plt.title('消费⾦额top10')
哪个订单消费单价最⾼
Group_sum['average']=Group_sum['total_amounts']/Group_sum['counts']
sort_average=Group_sum.sort_values(by='average',ascending=False)
sort_average['average'][:10].plot(kind='bar',color=['g'])
plt.xlabel('消费id')
plt.ylabel('消费单价')
plt.title('消费单价top10')
⼀天当中什么时间段点菜量⽐较多(hour)
data['hourcount']=1#新列,⽤作计数器
data['time']=pd.to_datetime(data['place_order_time'])#将时间转换成⽇期形式储存
data['hour']=data['time'].map(lambda x:x.hour)
#新建hour列,⽤map(lambda)以x的形式遍历data['time']所有值,并把其中hour⼩时进⾏储存group_by_upby(by='hour').count()['hourcount']
group_by_hour.plot(kind='bar')
plt.xlabel('时间段(单位:⼩时)')
plt.ylabel('数量')
plt.title('各时间段消费⼈数')
#group_by_hour.plot(kind='pie')
哪⼀天订餐⼈数最多
#那⼀天订餐⼈数最多
data['daycount']=1#新列,⽤于存储每天⽤餐⼈数
data['day']=data['place_order_time'].map(lambda x:x.day)
#解析出天,存储到day列中fx组合雪莉
gp_by_upby(by='day').count()['daycount']
#data中‘day’分组,并计算出每组数量,赋值给gp_by_day
gp_by_day.plot(kind='bar',fontsize=10)爱存在 王诗安
plt.xlabel('⽇期(单位:⽇)',fontsize=16)
plt.ylabel('点菜数量',fontsize=16)
plt.title('各⽇期的点菜数量',fontsize=20)
查看星期⼏订餐⼈数最多
#查看星期⼏订餐⼈数最多
data['weekcount']=1#新列,⽤于存储星期⼏的⽤餐⼈数
data['weekday']=data['time'].map(lambda x:x.weekday())
#新建列,并存储星期⼏
gp_by_upby('weekday').count()['weekcount']
#按照不同星期⽇期进⾏分组,并把他们数量进⾏统计,将数量填⼊’weekday'
gp_by_weekday.plot(kind='bar')
plt.xlabel('星期⽇期',fontsize=16)
plt.ylabel('订餐数量',fontsize=16)
plt.title('星期与点菜关系',fontsize=20)