基于python进行抽样分布描述及实践详解


Posted in Python onSeptember 02, 2019

本次选取泰坦尼克号的数据,利用python进行抽样分布描述及实践。

备注:数据集的原始数据是泰坦尼克号的数据,本次截取了其中的一部分数据进行学习。Age:年龄,指登船者的年龄。Fare:价格,指船票价格。Embark:登船的港口。

1、按照港口分类,使用python求出各类港口数据 年龄、车票价格的统计量(均值、方差、标准差、变异系数等)。

import pandas as pd
df = pd.read_excel('/Users/Downloads/data.xlsx',usecols = [1,2,3] )
#拿到港口'Embarked'、年龄'Age'、价格'Fare'的数据
df2 = df.groupby(['Embarked'])
#按照港口'Embarked'分类后,查看 年龄、车票价格的统计量。
# 变异系数 = 标准差/平均值
def cv(data):
  return data.std()/data.var()

df2 = df.groupby(['Embarked']).agg(['count','min','max','median','mean','var','std',cv])
df2 = df2.apply(lambda x:round(x,2))
df2_age = df2['Age']
df2_fare = df2['Fare']

分类后 年龄及价格统计量描述数据如下图:

年龄统计量

基于python进行抽样分布描述及实践详解

价格统计量

基于python进行抽样分布描述及实践详解

2、画出价格的分布图像,验证数据服从何种分布(正态?卡方?还是T?)

2.1 画出船票的直方图:

plt.hist(df['Fare'],20,normed=1, alpha=0.75)
plt.title('Fare')
plt.grid(True)

船票价格的直方图及概率分布

基于python进行抽样分布描述及实践详解

2.2 验证是否符合正态分布?

#分别用kstest、shapiro、normaltest来验证分布系数
ks_test = kstest(df['Fare'], 'norm')
#KstestResult(statistic=0.99013849978633, pvalue=0.0)

shapiro_test = shapiro(df['Fare'])
#shapiroResult(0.5256513357162476, 7.001769945799311e-40)

normaltest_test = normaltest(df['Fare'],axis=0) 
#NormaltestResult(statistic=715.0752414548335, pvalue=5.289130045259168e-156)

以上三种检测结果表明 p<5%,因此 船票数据不符合正态分布。

绘制拟合正态分布曲线:

fare = df['Fare']

plt.figure()
fare.plot(kind = 'kde')   #原始数据的正态分布

M_S = stats.norm.fit(fare)  #正态分布拟合的平均值loc,标准差 scale
normalDistribution = stats.norm(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('Fare about Titanic')
plt.title('Titanic[Fare] on NormalDistribution', size=20)
plt.legend(['Origin', 'NormDistribution'])

船票拟合正态分布曲线

基于python进行抽样分布描述及实践详解

2.3 验证是否符合T分布?

T_S = stats.t.fit(fare)
df = T_S[0] 
loc = T_S[1] 
scale = T_S[2] 
x2 = stats.t.rvs(df=df, loc=loc, scale=scale, size=len(fare))
D, p = stats.ks_2samp(fare, x2) # (0.25842696629213485 2.6844476044528504e-21)

p = 2.6844476044528504e-21 ,p < alpha,拒绝原假设,价格数据不符合t分布。

对票价数据进行T分布拟合:

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

票价拟合T分布

基于python进行抽样分布描述及实践详解

2.4 验证是否符合卡方分布?

chi_S = stats.chi2.fit(fare)
df_chi = chi_S[0] 
loc_chi = chi_S[1] 
scale_chi = chi_S[2] 
x2 = stats.chi2.rvs(df=df_chi, loc=loc_chi, scale=scale_chi, size=len(fare))
Df, pf = stats.ks_2samp(fare, x2) # (0.16292134831460675, 1.154755913291936e-08)

p = 1.154755913291936e-08 ,p < alpha,拒绝原假设,价格数据不符合卡方分布。

对票价数据进行卡方分布拟合

plt.figure()
fare.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('Fare about Titanic')
plt.title('Titanic[Fare] on chi-square_Distribution', size=20)
plt.legend(['Origin', 'chi-square_Distribution'])

票价拟合卡方分布

基于python进行抽样分布描述及实践详解

3、按照港口分类,验证S与Q两个港口间的价格之差是否服从某种分布

S_fare = df[df['Embarked'] =='S']['Fare']
Q_fare = df[df['Embarked'] =='Q']['Fare']
C_fare = df[df['Embarked'] =='C']['Fare']
S_fare.describe()
count  554.000000
mean   27.476284
std    36.546362
min    0.000000
25%    8.050000
50%    13.000000
75%    27.862500
max   263.000000
Q_fare.describe()
count  28.000000
mean   18.265775
std   21.843582
min    6.750000
25%    7.750000
50%    7.750000
75%   18.906250
max   90.000000
C_fare.describe()
count  130.000000
mean   68.296767
std    90.557822
min    4.012500
25%    14.454200
50%    36.252100
75%    81.428100
max   512.329200

按照港口分类后,S港口样本数<=554,Q港口样本数<=28,C港口样本数<=130。

总体不服从正态分布,所以需要当n比较大时,一般要求n>=30,两个样本均值之差的抽样分布可近似为正态分布。X2的总体容量为28,其样本容量不可能超过30,故其S港和Q港两个样本均值之差(E(X1)-E(X2))的抽样分布不服从正态分布。

S港和C港两个样本均值之差(E(X1)-E(X3))的抽样分布近似服从正态分布,其均值和方差分别为E(E(X1) - E(X3)) = E(E(X1)) - E(E(X3)) = μ1 - μ3;D(E(X1) + E(X3)) = D(E(X1)) + D(E(X3)) = σ1²/n1 + σ3²/n3 。绘图如下:

miu = np.mean(S_fare) - np.mean(C_fare)
sig = np.sqrt(np.var(S_fare, ddof=1)/len(S_fare) + np.var(C_fare, ddof=1)/len(C_fare))

x = np.arange(- 110, 50)
y = stats.norm.pdf(x, miu, sig)
plt.plot(x, y)
plt.xlabel("S_Fare - C_Fare")
plt.ylabel("Density")
plt.title('Fare difference between S and C')
plt.show()

基于python进行抽样分布描述及实践详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python3实现点餐系统
Jan 24 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
Python多线程多进程实例对比解析
Mar 12 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
Python学习之os包使用教程详解
Mar 21 Python
利用Python复制文件的9种方法总结
Sep 02 #Python
Python单元测试工具doctest和unittest使用解析
Sep 02 #Python
Python操作SQLite数据库过程解析
Sep 02 #Python
Python实现生成密码字典的方法示例
Sep 02 #Python
python使用多线程编写tcp客户端程序
Sep 02 #Python
使用python实现离散时间傅里叶变换的方法
Sep 02 #Python
详解Python图像处理库Pillow常用使用方法
Sep 02 #Python
You might like
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
签约仪式主持词
2014/03/19 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
青年志愿者活动方案
2014/08/17 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
小组口号霸气押韵
2015/12/24 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
创业计划书之物流运送
2019/09/17 职场文书
python获取对象信息的实例详解
2021/07/07 Python
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android