我想从数据表中生成基因图。我的表T有两列,一列“ ID”和一列“ Genes”,其中有列表。列表中包含基因(字符串)。
我希望我的基因作为节点(每个基因一个节点),并且边缘应连接到共享一个不同ID的两个基因。我做了很多尝试,但是我需要最快的解决方案,因为该表有70万至270万行。
我应该如何进行?就像我如何找到桌子上某个特定基因的所有外观?
我已经实现了生成所有提及基因的nd.array的工作。接下来,我尝试使用nd.nditer两次遍历该列表以获取所有成对组合,然后遍历所有行以检查两个基因是否都在列表之一中。下面的示例。接下来,我尝试首先通过查找特定基因的所有id来转换表格,然后从那里开始。这个想法是第二个循环。
两者都不是很有效,所以我问是否有一个更有效的解决方案。
for gene1 in nd.nditer(mentionendGenes):
for gene2 in nd.nditer(mentionendGenes):
for row in range(0,len(T['ID'])):
if (gene1 in T['Genes'].values[row]) and (gene2 in T['Genes'].values[row])
G.add_edge(gene1,gene2)
for gene in np.nditer(mentionendGenes):
for listofgenes in np.nditer(T['Genes'].values, flags = ['refs_ok']):
if gene in listofgenes:
doStuff()
答案 0 :(得分:0)
部分答案:
您的第一种方法可能只需调用
即可简化(并加快)import itertools
for row in range(0,len(T['ID'])):
G.add_edges_from(itertools.combinations(T['Genes'].values[row], 2))
您可能会发现,可以通过首先获取所有行中的所有边缘来进一步改善这一点。为了进行适当的基准测试,我们需要一个尺寸合适的测试集。