Dwa*_*h23 2 random numpy python-3.x pandas
我试图从一个现有的列中生成一个随机的分类变量列,以创建一些综合数据。例如,如果我的列具有3个值0,1,2,其中0出现在50%的时间中,而1和2出现在30%和20%的时间中,则我希望新的随机列也具有相似(但不相同)的比例
关于交叉验证,有一个类似的问题已经使用R解决了。https://stats.stackexchange.com/questions/14158/how-to-generate-random-categorical-data。但是我想要一个Python解决方案
使用np.random.choice()并指定与从错误中选择的相对应的概率向量:
>>> import numpy as np
>>> np.random.seed(444)
>>> data = np.random.choice(
... a=[0, 1, 2],
... size=50,
... p=[0.5, 0.3, 0.2]
... )
>>> data
array([2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1,
1, 1, 0, 2, 1, 1, 2, 1, 1, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 2, 2, 2,
1, 1, 1, 0, 0, 1])
>>> np.bincount(data) / len(data) # Proportions
array([0.44, 0.32, 0.24])
Run Code Online (Sandbox Code Playgroud)
随着样本量的增加,经验频率应朝着目标收敛:
>>> a_lot_of_data = np.random.choice(
... a=[0, 1, 2],
... size=500_000,
... p=[0.5, 0.3, 0.2]
... )
>>> np.bincount(a_lot_of_data) / len(a_lot_of_data)
array([0.499716, 0.299602, 0.200682])
Run Code Online (Sandbox Code Playgroud)
如@WarrenWeckesser所述,如果您已经具有1d NumPy数组或Pandas Series,则可以直接将其用作输入而无需指定p。的默认值np.random.choice()是使用替换(replace=True)进行采样,因此,通过传递原始数据,结果分布应近似于输入的分布。