小案例(四):销售额下滑(python)
案件回顾
饭团销售额下滑
- 酒馆的热销菜品之一饭团,近几个月销量比去年同期少了约2成
- 酒馆给出了47种菜品,三个月内每天的销售数据(问题:什么原因导致了饭团销量的下降?)
- 菜品销量变化分析
将数据存储为csv格式,导入python。为了直观的看看饭团销售额的时间序列,画出饭团3个月内的销售额时间序列图。
menus.日期 = pd.to_datetime(menus.日期) import matplotlib.pyplot as plt import pylab menus.index = menus.iloc[:,1] menus.loc[menus.品名=='饭团'].iloc[:,2].plot() plt.ylabel("销售额") pylab.show()
时间序列图,即横轴代表时间轴的图。从图中可以看出,4月份以后,折线整体呈下降趋势,即销售额下降。折线波动的很厉害,因为周末销售额会上涨。再看看炒饭的销售情况。
menus.loc[menus.品名=='炒饭'].iloc[:,2].plot() plt.ylabel("销售额") pylab.show()
从图中可直观看出,炒饭的销售额波动一样厉害,但是整体没有向上或向下的趋势。再看面条类的销售情况。
menus.loc[menus.品名=='意大利面'].iloc[:,2].plot(label='意大利面') menus.loc[menus.品名=='酱汁炒面'].iloc[:,2].plot(label='酱汁炒面') menus.loc[menus.品名=='乌冬面'].iloc[:,2].plot(label='乌冬面') menus.loc[menus.品名=='什锦面'].iloc[:,2].plot(label='什锦面') menus.loc[menus.品名=='拉面'].iloc[:,2].plot(label='拉面') plt.ylabel("销售额") plt.legend() pylab.show()
从图上可以看出,5种面条,从4月份开始,每种的销售额都涨了一点。一般来说,很少人米饭面条会一起点,所以一边增加了,另一边减少也很正常。虽然看上去饭团的销售额与面条的销售额有关系,但是饭团销售额下降的原因真的是因为面条吗?两者之间其实是一种伪相关,因为他们不属于因果关系,应该是由其他某种原因导致的这两者销售额的变化。通过散点图,可以得到各种食品两两比对后的结果,判断是否有相关性。其中,从散点图可以看到饭团和牛奶间存在明显的负相关。
plt.scatter(menus.loc[menus.品名=='饭团'].iloc[:,2],menus.loc[menus.品名=='牛奶'].iloc[:,2]) plt.xlabel("饭团") plt.ylabel("牛奶") pylab.show()
在实际生活中,饭团与牛奶间不存在替代关系,即不应该出现两者的负相关关系,因此图像显示的情况与实际有出入。再来看牛奶的销售情况图。
menus.loc[menus.品名=='牛奶'].iloc[:,2].plot() plt.ylabel("销售额") pylab.show()
从图中可看出,牛奶的销售量从4月份开始,突然上涨明显。调查原因发现,酒馆进了一种米奶,也就是稀粥,与饭团产生了替代关系,导致饭团销量减少。
- 几个小概念
相关系数:观察散点图,如果点从左下到右上呈带状分布,那么两个数据就是正相关。如果是从左上到右下分布,就是负相关。但这只是根据肉眼进行的判断,有时候用数字判断比用图判断更好。比如计算牛奶和饭团销售额的相关系数。
a = menus.loc[menus.品名=='牛奶'].iloc[:,2] b = menus.loc[menus.品名=='饭团'].iloc[:,2] c = pd.concat([a,b],axis=1) c.columns = ['牛奶','饭团'] c.corr()
结果为:
牛奶饭团牛奶1.000000-0.574642饭团-0.5746421.000000
相关系数代表了2组数据之间的线性关系强弱,取值范围为[-1,1],越接近1意味正相关性越高,越接近-1意味着负相关性越高。从计算结果可以看出,牛奶和饭团呈弱负相关性。
后台回复“热销品”,可获得本例中数据
机器学习养成记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法