我知道怎么在R里做这件事。但是,pandas中是否有任何函数将数据帧转换为nxn共现矩阵,其中包含两个方面共现的计数。
例如矩阵df:
import pandas as pd
df = pd.DataFrame({'TFD' : ['AA', 'SL', 'BB', 'D0', 'Dk', 'FF'],
'Snack' : ['1', '0', '1', '1', '0', '0'],
'Trans' : ['1', '1', '1', '0', '0', '1'],
'Dop' : ['1', '0', '1', '0', '1', '1']}).set_index('TFD')
print df
>>>
Dop Snack Trans
TFD
AA 1 1 1
SL 0 0 1
BB 1 1 1
D0 0 1 0
Dk 1 0 0
FF 1 0 1
[6 rows x 3 columns]
会产生:
Dop Snack Trans
Dop 0 2 3
Snack 2 0 2
Trans 3 2 0
由于矩阵是在对角线上镜像的,我想有一种方法可以优化代码。
这是一个简单的线性代数,你用它的转置乘矩阵(你的例子包含字符串,别忘了把它们转换成整数):
如果,如R答案所示,您想重置对角线,可以使用numpy的^{} :
NumPy演示:
输出:
使用matplotlib的热图:
(注:aneat visualization of a co-occurrence matrix in D3.js。)
如果你有更大的语料库和词频矩阵,使用稀疏矩阵乘法可能更有效。我使用的矩阵乘法技巧与本页的
algo
答案相同。这里是稀疏csr格式的共现矩阵
相关问题 更多 >
编程相关推荐