从 Python 中的总体生成具有指定属性的随机样本

Generate random samples with specified properties from a population in Python

假设我有一个人口按国籍按以下比例(%)划分:

percentages = {'Germany': 0.4, 'France': 0.25, 'Greece': 0.15, 'Poland': 0.1, 'Norway': 0.05, 'Others': 0.05}

现在我需要从这个群体中生成样本。 Python 中有没有办法从总体中生成大小为 n 的样本?

例如,如果 n = 50,我希望有这样的东西:

sample = {'Germany': 22, 'France': 10, 'Greece': 8, 'Poland': 6, 'Norway': 3, 'Others': 1}

随机有一个内置方法

import random
random.choices(
     population=list(percentages.keys()), 
     weights=list(percentages.values()),
     k=50
)

那么你可以这样做:

import random
percentages = {'Germany': 0.4, 'France': 0.25, 'Greece': 0.15, 'Poland': 0.1, 'Norway': 0.05, 'Others': 0.05}

r = random.choices(
     population=list(percentages.keys()),
     weights=list(percentages.values()),
     k=50
)

sample = {key: 0 for key in percentages}
for key in r:
    sample[key] += 1

print(sample)

可能不是最有效的方法,但它有效。