您的位置:首页 > 编程语言 > Python开发

3.2 -3.4 数据特征分析

2016-12-05 10:01 357 查看
demo/data/catering_fish_congee

这个文件是“捞起生鱼片”的销售数据,书上的文件名写错了,注意改一下。

内容主要是这个菜从 2014/4/1 到 2014/6/30 的销售额。

其实这里没给代码,给的结果,看起来这里用 Excel 也能很好完成的。

同时给了很多分析方法。不过本文主要是代码实践,就不写了。

针对餐饮销量数据有一个统计分析代码:

#-*- coding: utf-8 -*-
#餐饮销量数据统计量分析
from __future__ import print_function
import pandas as pd

catering_sale = 'data/catering_sale.xls' #餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
data = data[(data[u'销量'] > 400)&(data[u'销量'] < 5000)] #过滤异常数据
statistics = data.describe() #保存基本统计量

statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数
statistics.loc['dis']= statistics.loc['75%']-statistics.loc['25%'] #四分位数间距

print(statistics)


这段代码里面需要说一下的就是 Pandas 中的 .loc 方法。

statistics.loc['dis']
这个代码的意思就是选择一列进行操作,这里就是 dis 列。

整个代码运行结果:



==========================================================================================

接下来对菜品贡献度进行分析。

比如餐馆有很多菜品,如何确定重点改善盈利度最高的菜品,砍掉盈利度低的菜品?

代码:

#-*- coding: utf-8 -*-
#菜品盈利数据 帕累托图
from __future__ import print_function
import pandas as pd

#初始化参数
dish_profit = 'data/catering_dish_profit.xls' #餐饮菜品盈利数据
data = pd.read_excel(dish_profit, index_col = u'菜品名')
data = data[u'盈利'].copy()
data.sort(ascending = False)
# sort_values(inplace = True)

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure()
data.plot(kind='bar') # 条状图
plt.ylabel(u'盈利(元)') # Y轴
p = 1.0*data.cumsum()/data.sum()
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2) # 那条曲线的样式
plt.annotate(format(p[6], '.3%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
# 添加注释,即85%处的标记。这里包括了指定箭头样式。第一个点记为编号0,这里就是编号6的点。
# plt.annotate() 是一个文本注释方法,xy 是被注释的地方,xytext 是插入文本的地方。
# format(p[6], '.4%') 中,p[6]应该是计算的编号6的点,'.4%'是百分比化,.4 是小数点后4位的意思
plt.ylabel(u'盈利(比例)')
plt.show()


注意我自己添加的关于画图的注释,都是自己试出来的。

这里的代码有个“未来警告”:sort is deprecated,use sort_values(inplace = True) for INPLACE sorting
                                             data.sort(ascending = False)

懒得管了。

结果如下:



==========================================================================================

相关性分析

SPSS里面其实也能做,但是要试试Python

理论的Pearson和Spearman就不介绍了,以前数学建模接触过。

主要是给代码:

#-*- coding: utf-8 -*-
#餐饮销量数据相关性分析
from __future__ import print_function
import pandas as pd

catering_sale = 'data/catering_sale_all.xls' #餐饮数据,含有其他属性
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列

data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数
print(data.corr()[u'百合酱蒸凤爪'])


注意书上没有那一行 print,而且我试了试 print 只能用 Python 3 的格式,也就是带括号。

运行结果如下:



多试试,把最后的代码改一改:

print(data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']))


或者是:

print(data.corr())


结果也不错。

======================================================================

3.4

讲了很多函数,见书,就不赘述了。

给个小例子

#-*- coding:utf-8 -*-
import pandas as pd
D = pd.DataFrame([range(1,8), range(2,9)]) # 生成样本
D.corr(method = 'pearson') # 计算相关矩阵
S1 = D.loc[0] # 提取第一行
S2 = D.loc[1] # 提取第二行
S1.corr(S2, method = 'pearson') # 计算相关系数
print(S1.corr(S2, method = 'pearson'))


实际输出是 1.0 不知道有什么问题。

====================================================================================

另外讲了 画图方法 和 统计特征函数 的方法。

主要有二维线图plot,饼图pie,条形直方图hist,箱图boxplot,对数图plot(logx = True)

之类的很多...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 大数据