如何在Python中按聚类统计依存分析元组的出现频率
依存分析元组跨聚类频率统计实现方案
核心思路
要统计每个依存分析元组在不同聚类中的出现次数,关键是先拆分元组列表,再去重同一聚类内的重复元组,最后按元组统计关联的聚类数量。
代码实现步骤
假设你的DataFrame名为df,包含Parsed(元组列表)和Clu(聚类编号)两列,具体实现如下:
- 导入依赖库并构造示例数据
import pandas as pd # 模拟你的DataFrame结构 data = { 'Parsed': [[('18', 'nummod'), ('cat', 'nsubj')], [('18', 'nummod'), ('dog', 'obj')], [('dog', 'obj'), ('cat', 'nsubj')], [('book', 'dobj'), ('18', 'nummod')]], 'Clu': [1, 0, 0, 2] } df = pd.DataFrame(data)
- 展开元组列表
将Parsed列中的每个元组拆分为独立行,每行对应一个元组和所属的聚类编号:
exploded_df = df.explode('Parsed')
- 去重同一聚类内的重复元组
确保同一个聚类中,相同元组只保留一条记录,避免重复计数:
unique_clu_tuple = exploded_df.drop_duplicates(subset=['Parsed', 'Clu'])
- 统计元组跨聚类出现次数
按元组分组,统计每个元组关联的不同聚类数量:
tuple_cluster_count = unique_clu_tuple.groupby('Parsed')['Clu'].nunique().reset_index(name='Cluster_Count') # 输出结果 print(tuple_cluster_count)
输出示例:
Parsed Cluster_Count 0 ('18', 'nummod') 3 1 ('book', 'dobj') 1 2 ('cat', 'nsubj') 2 3 ('dog', 'obj') 1
扩展:生成聚类-元组存在矩阵
如果需要类似CountVectorizer的矩阵形式(行是聚类,列是元组,值表示元组是否在该聚类中出现),可以用以下代码:
# 生成矩阵 cluster_tuple_matrix = unique_clu_tuple.pivot_table( index='Clu', columns='Parsed', aggfunc='size', fill_value=0 ) # 转换为1/0标识(1表示出现,0表示未出现) cluster_tuple_matrix = cluster_tuple_matrix.applymap(lambda x: 1 if x > 0 else 0) print(cluster_tuple_matrix)
输出示例:
Parsed ('18', 'nummod') ('book', 'dobj') ('cat', 'nsubj') ('dog', 'obj') Clu 0 1 0 1 1 1 1 0 1 0 2 1 1 0 0
内容的提问来源于stack exchange,提问作者Divyansh Kumar Singh
相关产品推荐
相关产品推荐

