随机替换Python中的数据点

时间:2014-01-01 14:56:54

标签: python data-structures random

我正在写一个KNN意味着用于解释微阵列数据的近似程序(在实际情况下,它经常出现错误[编辑:在某些方面缺少数据的形式]),我想训练一些代码(完美的)数据集我有。现在,我已经组织了这样的数据:

def read(data):
random.seed(2347)
with open("..data.csv") as f: 
    realdata = {"probeID": [], "GeneID": [], "Signal_P/2a-1": [], "Signal_P/2a-2": [], "Signal_P/2a-3": [], "Signal_P/4a-1": [], "Signal_P/4a-2": [], "Signal_P/4a-3": [], "Signal_P/8a-1": [], "Signal_P/8a-2": [], "Signal_P/8a-3": []} #Defining the matrix. Remember to add deletion probability!
    lines = f.readline()
while lines:   
    if lines[0:2] == "Pr": #Skipping the header
        lines = f.readline()
        continue
    line = lines.split("\t") #Separating dis shit, so we can get everything into lists
    data["probeID"].append (line[0])
    data["GeneID"].append (line[1])
    data["Signal_P/2a-1"].append (float(line[2]))
    data["Signal_P/2a-2"].append (float(line[3]))
    data["Signal_P/2a-3"].append (float(line[4]))
    data["Signal_P/4a-1"].append (float(line[5]))
    data["Signal_P/4a-3"].append (float(line[6]))
    data["Signal_P/8a-1"].append (float(line[7]))
    data["Signal_P/8a-2"].append (float(line[8]))
    data["Signal_P/8a-3"].append (float(line[9]))
    lines = f.readline()
    simdata = realdata

所以我的simdata等于realdata,但我希望simdata等于realdata,但是浮点数中的错误率很小(比如0,1或0,01%)。我的第一个想法是为每个浮点数分配一个介于0和999之间的随机变量,然后执行if函数,所以它将类似于:

for point in simdata: #or, I guess, I could do all the simdata.data["Signal_blablabla"]s
    temp = random.random(0, 999)
    if temp = 0:
        point = None

然而,这似乎是一种非常低效的方式,我甚至不确定它是否有用。有没有更好的办法?我对编程很陌生,所以如果我以愚蠢的方式阅读我的数据,我也会感谢那里的修正。

这似乎是一个相当明显的问题,但我无法弄清楚如何有效地做到这一点,我找不到其他任何人询问它。任何意见都会非常感激!

1 个答案:

答案 0 :(得分:0)

而不是循环所有数据,你可以"删除"只有随机索引引用的那些。

for l in range(0, int(len(data) / 1000)):  # if you have 3000 probes you need 3 "gaps"
    t = int(random.random(0, len(data)))  # let's retrieve a random index for each gap
    data["Signal_P/2a-1"][t] = None  # and let's empty it.
    data["Signal_P/2a-2"][t] = None
    data["Signal_P/2a-3"][t] = None
    data["Signal_P/4a-1"][t] = None
    data["Signal_P/4a-3"][t] = None
    data["Signal_P/8a-1"][t] = None
    data["Signal_P/8a-2"][t] = None
    data["Signal_P/8a-3"][t] = None