基于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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
python版简单工厂模式
Oct 16 Python
运行django项目指定IP和端口的方法
May 14 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
Python的缺点和劣势分析
Nov 19 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
python爬取本站电子书信息并入库的实现代码
Jan 20 Python
python实现简单俄罗斯方块
Mar 13 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
解决Pytorch中关于model.eval的问题
May 22 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 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
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
Python3.6正式版新特性预览
2016/12/15 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python实现一个简单的验证码程序
2017/11/03 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
大学生职业生涯规划书前言
2014/01/09 职场文书
保护环境倡议书100字
2014/05/19 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
文明礼仪主题班会
2015/08/13 职场文书