基于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 获取 Linux 系统信息的代码
Jul 13 Python
Python 备份程序代码实现
Mar 06 Python
python奇偶行分开存储实现代码
Mar 19 Python
python在每个字符后添加空格的实例
May 07 Python
使用python 3实现发送邮件功能
Jun 15 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
Python递归实现打印多重列表代码
Feb 27 Python
Python网页解析器使用实例详解
May 30 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 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
PHP4引用文件语句的对比
2006/10/09 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python+opencv实现动态物体追踪
2018/01/09 Python
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
护理专业本科生自荐信
2013/10/01 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
企业管理培训感言
2014/01/27 职场文书
自荐信的基本格式
2014/02/22 职场文书
大学生英语演讲稿
2014/04/24 职场文书
节约用水演讲稿
2014/05/21 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书