微信公众号:数据皮皮侠
如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传
内容目录:随机抽样:python应用
统计学中的随机抽样本文我们将讨论四种常见的抽样方法以及他们的python实现。1. 随机抽样(random sampling)2. 等距抽样(systematic sampling)3. 分层抽样(stratified sampling)4. 整群抽样(cluster sampling)一.四种抽样的脚本实现二.进阶:将脚本封装为函数三.总结
统计学中的随机抽样
”抽样是一种很常见的方法使我们能够从子集(样本)的统计信息来获取总体信
息,而无需调查所有样本。”
本文我们将讨论四种常见的抽样方法以及他们的python实现。
1. 随机抽样(random sampling)
从有限总体中简单随机抽样或从无限总体中随机抽样。
2. 等距抽样(systematic sampling)
也称系统抽样,根据样本容量要求确定度抽选间隔,然后随机确定起点,每隔一定的间隔抽取一个单位的一种抽样方式。
3. 分层抽样(stratified sampling)
将总体单位按某种特征或某种规则划分为不同的层,然后从每一层中随机抽取一定量的抽样单位,组成样本。如果层内的个体是同质的,那么在相对小的样本容量下可以获得层特征的一个好的估计。
4. 整群抽样(cluster sampling)
将总体划分成若干个群组, 抽样时直接随机抽取群组, 这些群组中的所有抽样单位即为样本。在理想状态下,每一个群是整个总体小范围内的代表。
一.四种抽样的脚本实现
import random
import numpy as np
#设置随机种子
np.random.seed(seed=2)
# 简单的随机抽样
data = np.loadtxt(r'C:\Users\Romer\Desktop\data3.txt')
# print(type(data))
data_sample=random.sample(list(data),2000) #随机抽取2000个样本
print(data_sample[:2])#打印前两条数据
print(len(data_sample))#打印样本量
#等距抽样
sample_count=2000 #指定抽样数
record_count=data.shape[0]#最大样本数
width=int(record_count/sample_count)
data_sample=[]
i=0
while len(data_sample) <= sample_count and i*width <=record_count-1:
data_sample.append(data[i*width])#新增样本
i+=1
print(data_sample[:2])#打印前两条数据
print(len(data_sample))#打印样本量
#分层抽样
data2=np.loadtxt(r'C:\Users\Romer\Desktop\data2.txt')
each_sample_count=200 #定义每个分层的抽样数量
label_data_unique=np.unique(data2[:,-1])#
print(label_data_unique)
sample_list=[]#存放临时分层数据
sample_data=[]#存放最终抽样数据
sample_dict={}#用来显示各分层样本数量
for label_data in label_data_unique:
sample_list.clear();
for data_tmp in data2:
if data_tmp[-1] == label_data:#如果数据最后一列为标签
sample_list.append(data_tmp)#
each_sample_data=random.sample(sample_list,each_sample_count)#对每层随机抽样
sample_data.extend(each_sample_data)#将抽样数据追加到分层数据里面
sample_dict[label_data]=len(each_sample_data)#样本统计结果
#整群抽样
data3=np.loadtxt(r'C:\Users\Romer\Desktop\data4.txt')
label_data_unique=np.unique(data3[:,-1]) #定义整群标签值域
print(label_data_unique)
sample_label=random.sample(list(label_data_unique),2) #随机抽取2个整群
sample_data=[] #定义空列表,用来存储最终抽样数据
for each_label in sample_label:
for data_tmp in data3:
if data_tmp[-1] == each_label: #如果数据最后一列为标签
sample_data.append(data_tmp)
print(sample_label)
print(sample_data)
二.进阶:将脚本封装为函数
1.随机抽样
# 简单的随机抽样
#data:输入的数据
#sample_count:抽取的样本数
def randomSampling(data,sample_count):
data_sample=random.sample(list(data),sample_count) #随机抽取样本
return data_sample
data_sample1=randomSampling(data3,2000)
2.等距抽样
#等距抽样
#data:输入的数据
#sample_count:抽取的样本数
def systematicSampling(data,sample_count):
record_count=data.shape[0]#最大样本数
width=int(record_count/sample_count)#计算抽取样本的宽度
data_sample=[]#存放最终抽样数据
i=0
while len(data_sample) <= sample_count and i*width <=record_count-1:
data_sample.append(data[i*width])#新增样本
i+=1
return data_sample
data_sample2=systematicSampling(data3, 2000)
3.分层抽样
#分层抽样
#data:输入的数据
#each_sample_count:每层抽取的样本个数
#label_line:以data的哪列为数据特征
def stratifiedSamping(data,each_sample_count,label_line):
label_data_unique=np.unique(data[:,label_line]) # 数据特征
sample_list=[]#存放临时分层数据
sample_data=[]#存放最终抽样数据
for label_data in label_data_unique:
sample_list.clear()#清空上一循环的数据
for data_tmp in data:
if data_tmp[label_line] == label_data: #如果数据与标签匹配
sample_list.append(data_tmp)#加入临时分层数据
each_sample_data=random.sample(sample_list,each_sample_count) #对每层随机抽样
sample_data.extend(each_sample_data) #将抽样数据追加到分层数据里面
return sample_data
data_sample3=stratifiedSamping(data2, 200, 5)
4.整群抽样
#整群抽样
#data:输入的数据
#label_line:以data的哪列为数据特征
#cluster_num:抽取群的数量
def clusterSampling(data,label_line,cluster_num):
label_data_unique=np.unique(data[:,label_line]) #定义整群标签值域
if(cluster_num>label_data_unique.shape[0]):#如果群数比特征数还大,则将群数设为特征数
cluster_num=label_data_unique.shape[0]
sample_label=random.sample(list(label_data_unique),cluster_num) #随机抽取2个整群
sample_data=[] #定义空列表,用来存储最终抽样数据
for each_label in sample_label:
for data_tmp in data:
if data_tmp[label_line] == each_label: #如果数据与标签匹配
sample_data.append(data_tmp)#添加数据
return sample_data
data_sample4=clusterSampling(data4, 5, 2)
三.总结
在本文中,我们了解了抽样的概念,不同的抽样方法以及他们的python实现。抽样是数据科学中的一个重要课题,不同的抽样方法有着不同的适用范围,在选择抽样策略时应该十分小心并充分考虑。有时,一个好的抽样策略会大大推进项目的进展。错误的抽样策略可能会给我们带来错误的结果。

