目前,我想观察缺失值对数据集的影响。我将数据点(10%,20%,90%)替换为缺失值,并观察了影响。下面的此功能是替换丢失一定百分比的数据点。
def dropout(df, percent):
# create df copy
mat = df.copy()
# number of values to replace
prop = int(mat.size * percent)
# indices to mask
mask = random.sample(range(mat.size), prop)
# replace with NaN
np.put(mat, mask, [np.NaN]*len(mask))
return mat
我的问题是,我想根据zipf分布/功率低/长尾巴来替换缺少的值。例如,我有一个包含10列的数据集(5列分类数据和5列数字数据)。我想替换基于zipf法则分类的5列上的一些数据点,左侧的列比右侧的列丢失更多。
我使用Python来完成此任务。
我在以下链接中看到了有关zipf分布的Scipy手册:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.zipf.html,但仍然对我没有多大帮助。
谢谢
答案 0 :(得分:0)
Zipf分布是从0到无穷大的分布族,而您只想从5个离散列中删除值,因此您必须做出一些任意决定才能做到这一点。这是一种方法:
因此,您可以使用SciPy函数从Zipf分布中迭代采样单个值。对于每个采样值,都删除该值所对应的列中的一个数据点(请参阅3.),直到达到缺失值的总体所需百分比为止。