python 练习-帕累托分析以及正态检验

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()

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180411G1VXG400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券