1帕累托分析(贡献度分析,80%的贡献来自20%的产品)
构造数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
index=list('ABCDEFGHIJ'))
#对数据排序
data.sort_values(ascending=False,inplace=True)
画图
plt.figure(figsize=(10,4))
data.plot(kind='bar',color='g',alpha=0.8,width=0.6)
#计算累计占比
p=data.cumsum()/data.sum()
key=p[p>0.8].index[0]
#加入次坐标(画出帕累托图)
p.plot(style='--ko',secondary_y=True)
plt.axvline(knum,color='r',linestyle='--')
2 正态分析
构造数据并画出散点图
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(2,1,1)
ax1.scatter(s.index,s.values)
#画直方图做初步判断
ax2=fig.add_subplot(2,1,2)
s.hist(bins=20,ax=ax2)
#画出密度曲线
s.plot(kind='kde',secondary_y=True,ax=ax2)
plt.grid()
#每个值都有一个横坐标是分位的位置,
#绘制QQ图判断
2.2QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图,判断标准,只需看QQ图上的点是否近似地在一条直线附近,图形是直线说明是正态分布,而且该直线的斜率为标准差,截距为均值
2.1QQ图的直线推导
如果样本是按正态分布的,那么f(x)即是一个正态分布的概率密度函数。根据正态分布的特性,我们又可以推导出对应的标准正态分布的概率密度函数:
y = f( (x-m)/std )
其中m为样本均值,std为样本标准差。设标准正态分布的概率密度函数为 y= f(n),既然这些值一一对应,则有: (x-m)/std=n 即:x=n*std+m ,这是一条斜率为样本标准差,截距为m的直线,就是在q-q图中代表着正态分布的直线。
#计算均值,标准差,画出QQ图
mean=s['value'].mean()
std=s['value'].std()
print('均值为:%.2f,标准差为:%.2f'%(mean,std))
#index也随之改变
s.sort_values(by='value',inplace=True)
s_r=s.reset_index(drop=False)
s_r['p']=(s_r.index-0.5)/len(s_r)
s_r['q']=(s['value']-mean)/std
st = s['value'].describe()
x1 ,y1 = 0.25, st['25%']
x2 ,y2 = 0.75, st['75%']
print('四分之一位数为:%.2f,四分之三位数为:%.2f' % (y1,y2))
print('------')
# 计算四分之一位数、四分之三位数
fig = plt.figure(figsize = (10,9))
ax1 = fig.add_subplot(3,1,1) # 创建子图1
ax1.scatter(s.index, s.values)
plt.grid()
# 绘制数据分布图
ax2 = fig.add_subplot(3,1,2) # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()
# 绘制直方图
ax3 = fig.add_subplot(3,1,3) # 创建子图3
ax3.plot(s_r['p'],s_r['value'],'k.',alpha = 0.1)
ax3.plot([x1,x2],[y1,y2],'-r')
plt.grid()
领取专属 10元无门槛券
私享最新 技术干货