基于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用10行代码实现对黄色图片的检测功能
Aug 10 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
Sep 18 Python
Python 含参构造函数实例详解
May 25 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
Django Celery异步任务队列的实现
Jul 24 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
python颜色随机生成器的实例代码
Jan 10 Python
python切片作为占位符使用实例讲解
Feb 17 Python
使用Pytorch训练two-head网络的操作
May 28 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
php 调试利器debug_print_backtrace()
2012/07/23 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python操作Excel之xlsx文件
2017/03/24 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python变量类型知识点总结
2019/02/18 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
党的群众路线对照检查材料
2014/09/22 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
《搭石》教学反思
2016/02/18 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
Python Django项目和应用的创建详解
2021/11/27 Python
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫