如何从细分群体中构建随机样本?

时间:2017-04-14 19:54:08

标签: python

假设有1000个人,他们都被问到他们最喜欢的一餐是早餐,午餐还是晚餐。我将该信息存储在如下列表中:

mylist = [350, 450, 200]

即。 350人喜欢早餐,450人喜欢吃午餐,200人喜欢吃晚餐。

如何随机抽样100人并获得类似的清单?那就是我想得到像

这样的随机抽样列表
[35, 45, 20]
[33, 42, 25]
[37, 46, 17]

谢谢..

编辑:我想补充一点。期望的行为是无需替换的采样。假设,按照上面的例子,我想从原始1000个样本中抽取999个人。例如,[350, 458, 201]就不可能得到一个列表,因为它没有' t 201喜欢吃晚餐的人。

2 个答案:

答案 0 :(得分:4)

这将完成这项工作:

import numpy as np
res=np.random.choice(350*[0]+450*[1]+200*[2],size=100,replace=False)
np.histogram(res,range(4))[0]

更一般地说:

import numpy as np
v=[350,450,200]
res=np.random.choice(np.repeat(range(len(v)),v),size=100,replace=False)
np.histogram(res,range(len(v)+1))[0]

答案 1 :(得分:2)

在没有替换的情况下执行此操作的一种方法是在不更换的情况下绘制1到1000之间的随机整数(代表人),然后确定它们属于哪个桶(早餐,午餐或晚餐组):

import numpy

vec = [350, 450, 200]

# pick people without replacement
samp = numpy.random.choice(1000, 100, replace=False)

# get their preference
prefs = numpy.digitize(samp, numpy.cumsum(vec))

# count people by preference
numpy.histogram(prefs, 3)[0]