用python动手学统计学_3-4用python模拟抽样

本文通过Python实现抽样过程,从5条鱼的湖泊到10000条鱼的数据集,展示了随机数生成、放回与不放回抽样,以及正态分布的模拟。通过实例讲解了如何对比总体分布和正态分布,并探讨了假设正态分布的合理性。
摘要由CSDN通过智能技术生成

用python模拟抽样

基于阿里云天池

3-4-1环境准备

#用于数值计算的库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
#用于绘图的库
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()
#设置浮点数打印精度
%precision 3
#在jupyter notebook里显示图形
%matplotlib inline

3-4-2抽样过程

样本就是随机变量,它的取值会随机变化。

3-4-3在只有5条鱼的湖中抽样

使用numpy中的数组准备鱼的体长数据

fish_5 = np.array([2,3,4,5,6])
fish_5
# array([2, 3, 4, 5, 6])

np.random.choice

使用np.random.choice函数从5条鱼中随机抽取一部分,size=1表示将样本容设定为1,replace =False表示函数不重复选取相同的值
随机选取1条鱼

np.random.choice(fish_5,size = 1,replace= False)
# array([4])

随机选取3条鱼

np.random.choice(fish_5,size = 3,replace= False)
# array([6, 3, 2])

每次的结果都不想同,得到的是随机样本

随机种子

设置随机种子,每次执行的多得到的样本相同

np.random.seed(1)
np.random.choice(fish_5,size = 3,replace= False)
# array([4, 3, 6])

计算所得样本的平均值,即样本均值

np.random.seed(1)
sp.mean(np.random.choice(fish_5,size = 3,replace= False)
# array([4, 3, 6])
       )
#4.333333333333333

3-4-4随机数

随机得到的数字叫做随机数。有些领域将其看作随机变量。模拟抽样也是一种生成随机数的过程。

3-4-5放回抽样、不放回抽样

把抽出的样本放回总体再重新抽样叫做放回抽样。抽出的样本不放回总体的抽样叫做不放回抽样。
指定参数replace = False的抽样就是不放回抽样。

3-4-6从鱼较多的湖中抽样

读入数据化为列联表
读入数据

fish_10000 = pd.read_csv(
"tongji_data/3-4-1-fish_length_100000.csv")["length"]
fish_10000.head()
# 0    5.297442
# 1    3.505566
# 2    3.572546
# 3    3.135979
# 4    4.689275
# Name: length, dtype: float64

计算个数

len(fish_10000)
# 100000

抽取十条鱼,使用np.random.choice()

sampling_result = np.random.choice(
    fish_10000,size = 10,replace = False)
sampling_result
# array([4.091, 5.465, 3.426, 4.287, 4.244, 4.282, 4.29 , 5.087, 2.769,
#        5.296])

最后计算样本均值

sp.mean(sampling_result)
#4.3235970793805025

3-4-7总体分布

均值,即总体分布

sp.mean(fish_10000)
# 4.000000000000001

总体的标准差

sp.std(fish_10000,ddof=0)
# 0.8

求方差

sp.var(fish_10000,ddof=0)
# 0.64

绘制总体的直方图

sns.distplot(fish_10000,kde=False,color='black')

在这里插入图片描述
均值为4、方差0.64
方差的公式:1-7上以0.1为公差的等差数列

3-4-8对比总体分布和正态分布的概率密度函数

准备1-7上以0.1为公差的等差数列

x = np.arange(start = 1,stop =7.1,step = 0.1)
x
# array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2,
#        2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2, 3.3, 3.4, 3.5,
#        3.6, 3.7, 3.8, 3.9, 4. , 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8,
#        4.9, 5. , 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6. , 6.1,
#        6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 7. ])

使用函数stats.norm.pdf计算概率密度。参数loc为均值,scale为标准差。

stats.norm.pdf(x = x,loc = 4,scale = 0.8)
# array([4.407e-04, 6.988e-04, 1.091e-03, 1.676e-03, 2.536e-03, 3.778e-03,
#        5.540e-03, 7.998e-03, 1.137e-02, 1.591e-02, 2.191e-02, 2.971e-02,
#        3.967e-02, 5.215e-02, 6.749e-02, 8.598e-02, 1.078e-01, 1.332e-01,
#        1.619e-01, 1.938e-01, 2.283e-01, 2.648e-01, 3.025e-01, 3.401e-01,
#        3.764e-01, 4.102e-01, 4.401e-01, 4.648e-01, 4.833e-01, 4.948e-01,
#        4.987e-01, 4.948e-01, 4.833e-01, 4.648e-01, 4.401e-01, 4.102e-01,
#        3.764e-01, 3.401e-01, 3.025e-01, 2.648e-01, 2.283e-01, 1.938e-01,
#        1.619e-01, 1.332e-01, 1.078e-01, 8.598e-02, 6.749e-02, 5.215e-02,
#        3.967e-02, 2.971e-02, 2.191e-02, 1.591e-02, 1.137e-02, 7.998e-03,
#        5.540e-03, 3.778e-03, 2.536e-03, 1.676e-03, 1.091e-03, 6.988e-04,
#        4.407e-04])

绘制概率密度函数

plt.plot(x,
         stats.norm.pdf(x = x,loc = 4,scale = 0.8),
        color = 'black')

是以均值为轴左右对称的平滑的概率分布
在这里插入图片描述
最后,把正态分布的概率密度图形和总体的直方图叠放
norm_hist = True,可以得到总面积为1的直方图

sns.distplot(fish_10000,kde=False,
             norm_hist = True,color='black')
plt.plot(x,
         stats.norm.pdf(x = x,loc = 4,scale = 0.8),
        color = 'black')

在这里插入图片描述

3-4-9抽样过程的抽象描述

使用函数stats.norm.rvs函数。参数loc为均值,scale为标准差,size为样本容量。

sampling_norm = stats.norm.rvs(
    loc = 4,scale = 0.8,size = 10)
sampling_norm
# array([4.037, 3.498, 4.322, 5.295, 5.499, 2.905, 4.437, 4.665, 3.786,
#        4.569])

样本均差

sp.mean(sampling_norm)
# 4.3014016645

3-4-10有限总体校正

1.严格来说正态分布的概率密度的图形和直方图不是完全等价。
假设总体分布为正态分布,这句话的含义是,假设总体为无限总体,组数有无穷多个,组的大小,组的大小也分得无穷习,则它的直方图和直方图不是完全等价的。
2.stats.norm.rvs函数生成随机数的过程却是从无限总体中进行抽样。要想基于有限总体,就需要进行有限总体校正。当总体容量远大于样本容量时,无需进行校正。

3-4-11假设总体服从正态分布是否恰当

严格来说,总体分布不是正态分布,但实践假设多会假设总体服从正态分布。
正态分布可以取负数。事实上,即使假定体长服从正态分布,它取负数的概率也小到可以忽略不计,因而可以大胆采用正态分布。

参考资料

[日] 马场真哉 著, 吴昊天 译. 用Python动手学统计学[M]. 1. 人民邮电出版社, 2021-06-01.
菜鸟网站python3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,我们可以使用random模块来进行抽样模拟。这个模块提供了许多有用的函数,用于生成随机数和进行随机抽样抽样模拟统计学中有许多应用,常常会对总体进行随机子集的观察,并用于对整体总体进行推断。此外,随机数生成在科中也有许多应用。例如,化和物理中的蒙特卡罗模拟就需要随机数生成。通过使用random模块,我们可以从列表中随机抽样项目,同时还可以生成伪随机数。在Python中,还有一本名为《用Python动手统计学》的书,其中介绍了使用Python进行统计学的方法,包括抽样模拟。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python随机抽样_掌握python中的随机抽样](https://blog.csdn.net/weixin_32349577/article/details/114942794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [用python动手统计学_3-4用python模拟抽样](https://blog.csdn.net/weixin_46016079/article/details/124191530)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值