数据源:
有用数据字段:
# 加载数据 # 1.订单的长度,shape,columns # 2. 统计菜名的平均价格(amounts) # 3.什么菜最受欢迎 # 4.那个订单ID点的菜最多 import pandas as pd import numpy as np import xlrd import matplotlib.pyplot as plt pd.options.display.max_rows = 100000 data1 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail1',nrows= 100) data2 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2',nrows= 100) data3 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail3',nrows= 100) # 数据预处理(合并数据,NA的处理),分析数据 data = pd.concat([data1,data2,data3],axis=0)#将文件中的三个sheet按照行进行拼接在一起 # data.head(5) data.dropna(axis=1,inplace=True)#按照列删除na值,inplace=True在原始的data上进行修改 data.info()#查看数据信息 # 统计八月份卖出菜品的平均价格 df1=round(data['amounts'].mean(),2) #方法一:pandas自带函数mean()平均值函数 df2=round(np.mean(data['amounts']),2) # 方法二:numpy函数处理比pandas快 print(df1) # 频数统计,什么菜最受欢迎,(对菜名进行频数统计,取最大的前十名) dishes_count = data['dishes_name'].value_counts() #value_counts统计频次 print(dishes_count)
plot.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示
dishes_count = data['dishes_name'].value_counts()[:10]#默认已经进行降序排数了 print(dishes_count) # 数据可视化matplotlib dishes_count = data['dishes_name'].value_counts()[:10]#默认已经进行降序排数了 print(dishes_count) # 数据可视化matplotlib dishes_count.plot(kind = 'line',color=['r']) dishes_count.plot(kind = 'bar',fontsize = 16) for x,y in enumerate(dishes_count): print(x,y) plot.text(x,y+2,y,ha='center',fontsize=12) #点菜种类最多的订单 data plot.show()
plot.text(x,y+2,y,ha='center',fontsize=12)
- x 和 y 是文本标签的位置坐标,其中 x 表示横坐标, y 表示纵坐标。
- y+2 表示在纵坐标上向上偏移 2 个单位,这样可以让文本标签稍微上移一些,避免与数据点重叠。
- y 是要显示的文本内容,即菜品数量的值。
- ha='center' 表示文本水平对齐方式为居中,即文本内容在指定的坐标位置水平居中显示。
- fontsize=12 表示文本的字体大小为 12。
#点菜种类最多的订单 detail_group = data['order_id'].value_counts()[:10] detail_group.plot(kind= 'bar',fontsize = 16,color=['r','m','b','y','g']) plot.title('订单点菜的种类Top10') plot.xlabel('订单ID',fontsize=16) plot.ylabel('点菜种类',fontsize=16) for x1,y1 in enumerate(detail_group): plot.text(x1,y1+2,y1,ha='center',fontsize=16) print(detail_group) plot.show()
color除了 'r' (红色)、 'm' (品红色)、 'b' (蓝色)、 'y' (黄色)、 'g' (绿色)之外,常用的颜色还包括: - 'c' :青色 - 'k' :黑色 - 'w' :白色 - 'orange' :橙色 - 'purple' :紫色 - 'brown' :棕色 - 'pink' :粉色
在 plot() 函数中, kind 参数用于指定绘图的类型。除了'line' 之外,常用的绘图类型还包括: 1. 'line' :绘制折线图(默认) 2. 'bar' :绘制垂直柱状图 3. 'barh' :绘制水平柱状图 4. 'hist' :绘制直方图 5. 'box' :绘制箱线图 6. 'scatter' :绘制散点图 7. 'pie' :绘制饼图
#订单id点菜数量top10(按照order_id分组,排序,前十) data['total_amounts'] = data['counts']*data['amounts'] #统计单道菜的总额 dataGroup = data[['order_id','counts','amounts','total_amounts']].groupby(by='order_id') Group_sum = dataGroup.sum()#分组求和 sort_counts = Group_sum.sort_values(by='counts',ascending=False) sort_counts['counts'][:10].plot(kind = 'bar',fontsize = 16) print(sort_counts) plot.title('订单ID点菜数量top10') plot.xlabel('订单ID') plot.ylabel('点菜数量') plot.show()
#那个订单ID吃的钱最多(排序,前十) sort_total_amounts = Group_sum.sort_values(by='total_amounts',ascending=False) sort_total_amounts['total_amounts'][:10].plot(kind='bar') plot.title('订单ID消费最多top10') plot.xlabel('订单ID') plot.ylabel('消费金额') plot.show()
# 平均消费最贵 Group_sum['average'] = Group_sum['total_amounts']/Group_sum['counts'] sort_average=Group_sum.sort_values(by='average',ascending=False) sort_average['average'][:].plot(kind='bar') plot.title('订单ID消费均单价top10') plot.xlabel('订单ID') plot.ylabel('消费均单价') plot.show()
lambda arguments: expression
其中,
lambda
是关键字,
arguments
是函数的参数(可以有多个参数,用逗号分隔),
expression
是函数的返回值表达式。 以下是一个简单的示例,演示了如何使用lambda函数来定义一个函数并调用它:
# 定义一个简单的lambda函数,实现两数相加
add = lambda x, y: x + y
# 调用lambda函数,并输出结果
result = add(3, 5)
print(result) # 输出:8
# 一天当中什么时间段点菜量比较集中(hour) data['hourcount'] = 1#新列,用作计数器 data['time'] = pd.to_datetime(data['place_order_time'])#将试讲转化为日期类型 data['hour'] = data['time'].map(lambda x:x.hour) gp_by_hour = data.groupby(by = 'hour').count()['hourcount'] print(gp_by_hour) gp_by_hour.plot(kind = 'bar') for x,y in enumerate(gp_by_hour): plot.text(x,y+2,y,ha='center',fontsize = 16) plot.title('下单数与小时的关系图') plot.xlabel('小时') plot.ylabel('下单数量') plot.show() #八月份那天订餐数量较多 data['daycount'] = 1 data['day']=data['time'].map(lambda x:x.day) gp_by_day = data.groupby(by = 'day').count()['daycount'] print(gp_by_day) gp_by_day.plot(kind = 'bar') plot.title('八月日期点餐') plot.xlabel('日期') plot.ylabel('点参数') for x1,y1 in enumerate(gp_by_day): plot.text(x1,y1+2,y1,ha='center',fontsize=16) plot.show() #星期几订餐数量较多 data['weekcount'] = 1 data['weekday'] = data['time'].map(lambda x2:x2.weekday()) gp_by_weekday=data.groupby(by='weekday').count()['weekcount'] gp_by_weekday.plot(kind='bar') plot.show()