Я пытаюсь создать матрицу корреляционной матрицы/строки таблицы событий для моих данных. Я работаю со словарем, который содержит меры перекрытия для (разных) кластеров.Создание таблицы корреляционных матричных таблиц в 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 против 2-1) или заменить их пробелом?
Возможно ли это в качестве выхода для печати?
Я смотрел на PrettyTable и tabulate, которые были рекомендованы в другом месте, но не могли получить те работать либо. Думаю, я мог бы использовать Pandas или какой-либо другой модуль статистики, но это кажется немного излишним, поскольку все, что я хочу сделать, это вывести эти значения.
Edit: Вот то, что я в конечном итоге делает, где «ДИКТ» мой вход словарь:
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)
Привет, Romain, спасибо, хорошие вещи! Однако, это разрывает меня, когда у меня есть нечетное количество кластеров, правильно? Как сравнение трех кластеров от набора 1 до двух кластеров из набора 2? – patrick
Вы полностью правы Я редактирую свой ответ, чтобы поддержать этот случай! –
, пожалуйста, учтите, что если вы найдете мой ответ полезным –