使用pandas或其他方法将元组列表转换为相关矩阵

3

所以我有一个数据集元组,像这样:

data = ((tag1, tag2, 相关值), (tag1, tag3, 相关值),...,(tag1, tag n, 相关值), (tag2, tag3, 相关值),...,(tag2, tag n, 相关值),......, (tag n-1, tag n, 相关值)).

我需要从中制作出一个相关矩阵。我已经有了相关值,如上面的“相关值”所定义。然而,我没有找到正确的技术来做到这一点。大多数先前的问题都涉及从数据框或数据数组中计算相关性(Pearson等)。然而,在这里,我已经使用单独的算法计算了相关性,并且我想使用pandas将其放入相关矩阵形式中,以便我可以可视化这些相关性。

相关表格应该看起来像这样:

enter image description here

如何实现呢?直接使用pd.DataFrame()转换为pandas数据框并进行旋转不起作用,因为会有很多“NaN”值,因为我的元组“data”没有相同标签的条目,例如,它没有(Tag1,Tag1,相关值) 条目。 它也没有像(Tag 1,Tag 2,相关值)和(Tag 2,Tag 1,相关值)这样的重复值。相反,它只有(Tag 1,Tag 2,相关值)。
因此,在使用pd.DataFrame的相应数据框中,与行Tag 2和列Tag 1对应的我的输入又是NaN值。
我该如何解决这个问题?
谢谢。
1个回答

2
这是我的解决方案(由于我不太了解数据,特别是标签,因此这可能不是最佳方案):
我假设您的数据输入看起来像(长度不固定):
(('tag1', 'tag2', 0.3), ('tag1', 'tag3', 0.4), ('tag1', 'tag4', 0.5),
 ('tag1', 'tag5', 0.6), ('tag2', 'tag3', 0.5), ('tag2', 'tag4', 0.6),
 ('tag2', 'tag5', 0.7), ('tag3', 'tag4', 0.7), ('tag3', 'tag5', 0.8),
 ('tag4', 'tag5', 0.9))

使用Numpy和Pandas:

import numpy as np
import pandas as pd

从收集标签开始(并在此过程中设置DataFrame的索引/列)。 (如果标签背后有一个系统,则我猜这可以进行优化。)

tags = []
for t1, t2, _ in data:
    tags += [t1, t2]
tags = index = columns = sorted(list(set(tags)))

然后建立标签和索引之间的映射关系:
tags = dict((t, i) for i, t in enumerate(tags))

然后构建相关矩阵:

correlation = np.identity(len(tags))
for t1, t2, corr in data:
    correlation[tags[t1]][tags[t2]] = corr
    correlation[tags[t2]][tags[t1]] = corr

最后是 DataFrame:

df = pd.DataFrame(correlation, index=index, columns=columns)

它在我的样本数据中运作良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接