用遵循特定分布的随机生成数替换一些数据
Replace some data with random generated number that follows the particular distribution
我有一些描述人们年龄的肮脏数据。间隔是从-7000到2015。我已经将值更改为
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)<=1 else x )
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)>=100 else x )
下图显示了数据。
我通过排除值 -99999
来绘制图形
如何在不影响分布的情况下替换-99999 的值,如第二张图所示?年龄在 15-50 岁之间,平均值约为 29 岁,出生日期的中位数 = 28.0。我计划生成 15-50 之间的随机数,但我担心会破坏原始分布。
https://stats.stackexchange.com/questions/78063/replacing-outliers-with-mean
关于为什么通常不这样做的快速入门。无论如何:
我们将根据我们的样本均值和标准差生成一组 numpy.random.normal 的新值,并用其中一个新的 "random normal" 样本替换超出我们选择值的任何值。
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(bd_mean, bd_sd))) if x==-999999 else x )
并将 "x==-99999" 修改为您需要查找要替换内容的任何逻辑。
因此,bd_mean 和 bd_sd 也可以内联计算:
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(df_members.bd.mean(),df_members.bd.std())) if x>9999999 else x))
如果你觉得它是非正态分布,那么有很多不同的样本类型!看看这里:
https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html
感谢大家的编辑!
我有一些描述人们年龄的肮脏数据。间隔是从-7000到2015。我已经将值更改为
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)<=1 else x )
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)>=100 else x )
下图显示了数据。
我通过排除值 -99999
来绘制图形如何在不影响分布的情况下替换-99999 的值,如第二张图所示?年龄在 15-50 岁之间,平均值约为 29 岁,出生日期的中位数 = 28.0。我计划生成 15-50 之间的随机数,但我担心会破坏原始分布。
https://stats.stackexchange.com/questions/78063/replacing-outliers-with-mean
关于为什么通常不这样做的快速入门。无论如何:
我们将根据我们的样本均值和标准差生成一组 numpy.random.normal 的新值,并用其中一个新的 "random normal" 样本替换超出我们选择值的任何值。
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(bd_mean, bd_sd))) if x==-999999 else x )
并将 "x==-99999" 修改为您需要查找要替换内容的任何逻辑。
因此,bd_mean 和 bd_sd 也可以内联计算:
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(df_members.bd.mean(),df_members.bd.std())) if x>9999999 else x))
如果你觉得它是非正态分布,那么有很多不同的样本类型!看看这里: https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html
感谢大家的编辑!