最近有个妹子问我共现矩阵python怎么实现?
大致写了下,顺便记下笔记 …
关于共现矩阵是什么,可以参考这篇博文:python构建关键词共现矩阵
本文提供另一思路:
-
以列表存储数据为例:
步骤1:针对每一个样本,利用itertools库中的combinations函数构建排列组合,然后输出一个这样的DataFrame 针对第一个样本,可以构建6中两两的排列组合
·针对第二个样本,同样可以构建6中两两的排列组合
步骤2:将两个DataFrame合并成一个
步骤3:重复统计
步骤4:利用unstack函数生成共现矩阵
-
完整代码
import pandas as pd
from itertools import combinations
def Get_matrix(df_list):
'''
获取共现矩阵
'''
df = pd.DataFrame()
for i in df_list:
df = pd.concat([df,i])
df = pd.DataFrame(df.value_counts())
df.columns = ['counts']
df = df.unstack(level=1).fillna(0)
return df
def count_list(list_):
'''
排列组合
'''
list_ = [c for c in combinations(list_, 2)] + [(i[-1],i[0]) for i in [c for c in combinations(list_, 2)]]
df = pd.DataFrame(list_,columns=['x1','x2'])
return df
if __name__ == "__main__":
data_list = [
['I' ,'like','learning'],
['I' ,'like','playing'],
]
df_list = [count_list(i) for i in data_list] # 排列组合
res_df = Get_matrix(df_list) # 获取共现矩阵
.
.
.
.
.
.
.
.
最后,文章中有不足之处,欢迎指正