如何将含虚拟变量的矩形矩阵转换为数值型方阵?
虚拟变量矩阵转共现方阵及source关联数统计方法
一、统计每个source关联的target数量
核心逻辑是对每行的target列求和,快速得到单个source关联的target总数:
Python(Pandas)实现
import pandas as pd # 读取数据,支持csv、excel等格式,按需替换读取方法 df = pd.read_csv("your_data.csv") # 筛选所有target开头的列,按行求和得到每个source的关联target数 df["关联target数量"] = df.filter(regex="^target").sum(axis=1) # 按关联数降序排序,快速定位关联最多的source top_sources = df.sort_values(by="关联target数量", ascending=False)
Excel实现
- 在数据右侧新增一列,命名为「关联target数量」;
- 对第一行source对应的target列求和,比如公式写
=SUM(B2:D2)(假设target列在B到D列); - 下拉填充公式到所有行,再对这一列降序排序,即可看到关联target最多的source。
二、生成共现方阵(同时满足两个target的source数量)
本质是计算两两target的共现次数,即同时关联两个target的source总数:
Python(Pandas)实现
# 提取所有target列 target_df = df.filter(regex="^target") # 转置后点乘原矩阵,得到的结果就是两两target同时为1的样本数 cooccur_matrix = target_df.T.dot(target_df) # 调整格式,让左上角为空,和示例一致 cooccur_matrix.index.name = "" cooccur_matrix.columns.name = "" # 输出或保存矩阵 print(cooccur_matrix) # cooccur_matrix.to_csv("共现矩阵.csv")
Excel实现
- 在新区域构建方阵框架:把所有target名称分别作为行标题(如A6:A8)和列标题(如B5:D5);
- 填充单元格:
- 对角线单元格(如B6,对应target1自身):用
=COUNTIF(B:B,1),统计该target关联的总source数; - 非对角线单元格(如B7,对应target2和target1):用
=COUNTIFS(B:B,1,C:C,1),统计同时关联两个target的source数;
- 对角线单元格(如B6,对应target1自身):用
- 填充完所有单元格后,即可得到和示例一致的共现方阵。
内容的提问来源于stack exchange,提问作者Antonio Alaia
相关产品推荐
相关产品推荐

