我正在尝试为我的数据创建相关矩阵/应变表样式输出。我正在处理包含(不同数量)群集重叠度量的字典。在Python中创建相关矩阵样式表
overlap={(0,0): 0.5, (1,0):0.2, (1,1):0.0}
重叠BTW集群“0”,“0”为0.5,等 现在我想这个输出是这样的:
0 1
0 0.5 0.2
1 0.2 0
我认为这将是很容易,但我完全停留在这一点上。 这是我迄今为止所做的:我得到了我的行和列。
t=overlap.items()
column_names=[i[0][0] for i in t]
rows=[[i[0][1], i[1]] for i in t]
我做一个字符串模板,以填补这些值:
template="{}\t"*len(column_names)
然后我尝试写出列名和遍历行,以填补这一点。这就是当我卡住:
print template.format(??)
for row in rows:
print template.format(??)
我不知道该怎么
获取
format
接受列表(其中任何一列或行)一块一块的项目? (特别是因为我每次都没有相同数量的簇)!此外,我将不得不填写重复值(1-2 vs 2-1)或将它们替换为空格?
这甚至可能/建议作为打印输出吗?
我看着PrettyTable和在别处建议tabulate但不能让那些来工作的。我想我可以使用熊猫或其他统计模块,但它似乎有点矫枉过正,因为我只想输出这些值。
编辑:这是我落得这样做,这里的“字典”是我输入字典:
entries=dict.items()
column_names=list(set([i[0][0] for i in entries]))
row_names=list(set([i[0][1] for i in entries]))
coltemplate="\t{:<25}"*len(column_names)
print "{:25}".format(" "), coltemplate.format(*column_names)
for r in row_names:
result=[]
for c in column_names:
if c == r:
result.append("***")
elif dict.get((c,r), None) == None:
result.append(dict.get((r,c), "***"))
else:
result.append(dict.get((c,r), "SERIOUS ERROR"))
result=[str(i) for i in result]
rowtemplate="\t{:25}"*len(result)
print "{:>25}".format(r), rowtemplate.format(*result)
嗨罗曼,谢谢,好东西!然而,当我有不平衡数量的簇时,这确实会打破我的观点,对吗?如同比较集合1中的三个集合与集合2中的两个集群? – patrick
你是完全正确的我编辑我的答案来支持这种情况! –
请考虑upvote,如果你发现我的答案有用 –