统计抽样

通常情况下,把总体全部作为样本进行调查研究的成本是极为高昂的。在对大量的人口对象进行统计的时候就有这个问题。对几十亿条数据进行多维度的统计分析,这样的计算,即使是用计算机来进行,也有无法忽略的成本。此外,检测本身可能存在破坏性。例如,在工业品出厂检测中,很多情况下,被测对象在被拆解后无法再流向市场,这就形成了一种生产过程中的损失。所以,有相当多的统计调查都是通过抽样来进行的,因为这种方式更为经济,而且可行性更高。
为了让抽取的样本对总体有足够好的代表性,在生产中,最常使用的方法就是概率抽样(Probability Sampling),也叫随机抽样。有的时候也会使用非概率抽样(Non-Probability Sampling)的方法。

概率抽样

在概率抽样中,总体中的每个个体都有被选择的平等机会。概率抽样能提供真正代表总体的样本。

1、简单随机抽样

简单随机抽样就是通过随机过程选取一个大小为n的样本,所有大小为n的可能样本被选中的可能性都相同。有两种具体做法:重复抽样和不重复抽样。

1
2
3
4
5
6
7
8
9
import numpy as np

a = ['u', 'v', 'w', 'x', 'y', 'z']
# 有放回抽样
sample_wt = np.random.choice(a, 5, replace=True)
print(sample_wt)
# 无放回抽样
sample_wo = np.random.choice(a, 5, replace=False)
print(sample_wo)

2、分层抽样

分层抽样是指在抽样时,将总体分成互不相交的层,然后按照一定的比例,从各层独立地抽取一定数量的个体,将各层取出的个体合在一起作为样本的方法。层内变异越小越好,层间变异越大越好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import pandas as pd

class StratifiedSampling:
'''
分层抽样
INPUT -> 数据集, 分层变量名, 分类抽样比例
'''
def __init__(self, dataset):
self.dataset = dataset

def _helper(self, group, typeicalFracDict):
frac = typeicalFracDict[group.name]
return group.sample(frac=frac, replace=False) # 是否放回抽样,false为不放回

def Sampling(self, typeicallabel, typeicalFracDict):
self.dataset = pd.DataFrame(self.dataset)
self.typeicallabel = typeicallabel,
self.typeicalFracDict = typeicalFracDict
result = self.dataset.groupby(self.typeicallabel[0], group_keys=False).apply(self._helper, self.typeicalFracDict)
return result

data = {
'id': [3566846, 6541227, 3512432, 3512234, 3512145, 3512441, 3534448, 3512464, 3512449, 3512401],
'sex': ['male', 'Female', 'Female','male', 'Female', 'Female','male', 'Female','male', 'Female'],
'level': ['high', 'low', 'middle', 'high', 'low', 'middle', 'high', 'low', 'middle', 'middle']
}

SS = StratifiedSampling(data)
result = SS.Sampling('sex', {'male': 0.8, 'Female': 0.2})
print(result)

3、系统抽样

当总体中的个体数较多时,采用简单随机抽样显得较为费事。这时,可将总体分成均衡的几个部分,然后按照预先定出的规则,从每一部分抽取一个个体,得到所需要的样本,这种抽样叫做系统抽样。系统抽样亦称为机械抽样、等距抽样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def SystematicSampling(dataset, num):
k = int(len(dataset)/num)
sample = []
i = 0
while len(sample) != num:
sample.append(dataset[i*k])
i+=1
return sample

data = [i for i in range(30)]

result = SystematicSampling(data, 8)
print(result)

print('----------------另一种写法-----------------')

population = 100
step = 5
sample = [element for element in range(1, population, step)]
print (sample)

非概率抽样

1、方便抽样

方便抽样又称随意抽样、偶遇抽样,是在调查过程中由调查员依据方便的原则,自行确定入抽样本的单位。例如,调查员在街头、公园、商店等公共场所进行拦截调查;厂家在出售产品柜台前对路过顾客进行的调查。

2、配额抽样

根据指定特征选取样本。例如,从总体中选取大小是4的倍数的数字。

3、判断抽样

判断抽样也称为选择性抽样,对样本的选择取决于专家的判断(判断哪些个体可以帮助更好地推断总体)。

4、雪球抽样

这种抽样技术要求现有抽样人员推荐更多自己所认识的其他人员,以便样本的数量像滚雪球一样增加。例如,随机选择了1号人员作为样本,然后他(她)推荐了6号人员,6号人员又推荐了11号人员,依此类推。
当抽样框架难以识别时,这种抽样方法很有效。

拓展阅读