python 抽样分布实践

本次选取泰坦尼克号的数据,利用python进行抽样分布描述,主要是提供实现代码,具体的理论知识不会过多涉及。(注:是否服从T分布不是进行t检验~)
字段说明:
Age:年龄,指登船者的年龄。
Fare:价格,指船票价格。
Embark:登船的港口。

需要验证的是:
1、验证数据是否服从正态分布?
2、验证数据是否服从T分布?
3、验证数据是否服从卡方分布?

我们选取年龄作为例子进行数据验证。

import pandas as pd
import numpy as np

path = 'D:\\数据\\data\\data.xlsx'
data = pd.read_excel(path)

# 按照港口分类,计算数据的统计量
embark = data.groupby(['Embarked'])

embark_basic = data.groupby(['Embarked']).agg(['count','min','max','median','mean','var','std'])

age_basic = embark_basic['Age']
fare_basic = embark_basic['Fare']

age_basic 
fare_basic

在这里插入图片描述
1、 先验证价格年龄是否服从正态分布。

# 画出年龄的图像
import seaborn as sns 
sns.set_palette("hls") #设置所有图的颜色,使用hls色彩空间
sns.distplot(data['Age'],color="r",bins=10,kde=True)
plt.title('Age')
plt.xlim(-10,80)
plt.grid(True)
plt.show()

在这里插入图片描述

#分别用kstest、shapiro、normaltest来验证分布系数
from scipy import stats
ks_test = stats.kstest(data['Age'], 'norm')
shapiro_test = stats.shapiro(data['Age'])
normaltest_test = stats.normaltest(data['Age'],axis=0)

print('ks_test:',ks_test)
print('shapiro_test:',shapiro_test)
print('normaltest_test:',normaltest_test)

在这里插入图片描述
由检验结果知,p <0.05,所以拒绝原假设,认为数据不服从正态分布。

# 绘制拟合正态分布曲线
age = data['Age']
plt.figure() #创建画纸
age.plot(kind = 'kde')   #原始数据的分布,kde为概率密度曲线
M_S = stats.norm.fit(age)  #返回一个数组,age的平均值[0]及标准差[1]
normalDistribution = stats.norm(M_S[0], M_S[1])  # 绘制拟合的正态分布图M_S[0]为平均值 M_S[1]为标准差
x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100) #创建等差数列
plt.plot(x, normalDistribution.pdf(x), c='orange')
plt.xlabel('Age about Titanic')
plt.title('Age on NormalDistribution', size=20)
plt.legend(['age', 'NormDistribution'])
方法名全称功能
rvsRandom Variates of given type对随机变量进行随机取值,通过size参数指定输出数组的大小
pdfProbability Density Function随机变量的概率密度函数,即知道 x 求 f(x)
cdfCumulative Distribution Function随机变量的累积分布函数,它是概率密度函数的积分,即知道x 求p = F(x)
sfSurvival function随机变量的生存函数,它的值是1-cdf(t)
ppfPercent point function累积分布函数的反函数,即知道 p = F(x) 反求 x
statstatistics计算随机变量的期望值和方差
fitfit对一组随机取样进行拟合,找出最适合取样数据的概率密度函数的系数

在这里插入图片描述
2、 验证是否服从T分布?

ks = stats.t.fit(age)
df = ks[0]
loc = ks[1]
scale = ks[2]
ks2 = stats.t.rvs(df=df, loc=loc, scale=scale, size=len(age))
stats.ks_2samp(age, ks2)

在这里插入图片描述
由检验结果知,p <0.05,所以拒绝原假设,认为数据不服从T分布

# 绘制拟合的T分布图
plt.figure()
age.plot(kind = 'kde')
TDistribution = stats.t(ks[0], ks[1],ks[2]) 
x = np.linspace(TDistribution.ppf(0.01), TDistribution.ppf(0.99), 100)
plt.plot(x, TDistribution.pdf(x), c='orange')
plt.xlabel('age about Titanic')
plt.title('age on TDistribution', size=20)
plt.legend(['age', 'TDistribution'])

在这里插入图片描述
3、验证数据是否服从卡方分布

chi_S = stats.chi2.fit(age)
df_chi = chi_S[0]
loc_chi = chi_S[1]
scale_chi = chi_S[2]
chi2 = stats.chi2.rvs(df=df_chi, loc=loc_chi, scale=scale_chi, size=len(age))
stats.ks_2samp(age, chi2)

在这里插入图片描述

# 对数据进行卡方拟合
plt.figure()
age.plot(kind = 'kde')
chiDistribution = stats.chi2(chi_S[0], chi_S[1],chi_S[2])  # 绘制拟合的正态分布图
x = np.linspace(chiDistribution.ppf(0.01), chiDistribution.ppf(0.99), 100)
plt.plot(x, chiDistribution.pdf(x), c='orange')
plt.xlabel('age about Titanic')
plt.title('age on chi-square_Distribution', size=20)
plt.legend(['age', 'chi-square_Distribution'])

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值