Python如何导入xlsx文件数据集并生成指定的两种矩阵
Xlsx数据集导入Python生成目标矩阵实现方案
依赖安装
首先安装所需的第三方库:pip install pandas openpyxl numpy
- pandas用于读取xlsx文件和处理表格数据
- openpyxl是pandas读取xlsx格式文件的必要驱动
- numpy用于矩阵数值计算
步骤1:读取xlsx数据集
import pandas as pd import numpy as np # 替换为你的xlsx文件实际路径,sheet_name可指定要读取的工作表序号/名称,默认0为第一个工作表 df = pd.read_excel("你的数据集路径.xlsx", sheet_name=0, engine="openpyxl")
步骤2:生成Matrix 1(同维度关联/共现矩阵)
适用于行、列索引为同一属性的所有唯一值,单元格值为两个值共现次数的场景:
# 替换col_a为你要生成矩阵的对应属性列名 target_col = "col_a" # 替换group_id为你用来判断共现的分组列名,比如同订单、同事件的id列 group_col = "group_id" # 生成属性值到索引的映射 unique_vals = df[target_col].unique() val_to_idx = {val: idx for idx, val in enumerate(unique_vals)} n = len(unique_vals) matrix1 = np.zeros((n, n), dtype=int) # 统计共现次数 for _, group_data in df.groupby(group_col): current_vals = group_data[target_col].unique() for i in range(len(current_vals)): for j in range(i, len(current_vals)): idx1 = val_to_idx[current_vals[i]] idx2 = val_to_idx[current_vals[j]] matrix1[idx1][idx2] += 1 if i != j: matrix1[idx2][idx1] += 1 # 可转为带行列名的DataFrame方便查看 matrix1_df = pd.DataFrame(matrix1, index=unique_vals, columns=unique_vals)
步骤3:生成Matrix 2(跨维度关联矩阵)
适用于行、列索引为不同属性的唯一值,单元格值为两个属性值关联次数/是否存在关联的场景:
# 替换为你对应的行、列属性列名 row_col = "col_a" col_col = "col_b" row_vals = df[row_col].unique() col_vals = df[col_col].unique() row_to_idx = {val: idx for idx, val in enumerate(row_vals)} col_to_idx = {val: idx for idx, val in enumerate(col_vals)} matrix2 = np.zeros((len(row_vals), len(col_vals)), dtype=int) for _, row in df.iterrows(): r_idx = row_to_idx[row[row_col]] c_idx = col_to_idx[row[col_col]] # 如果仅需标记是否存在关联,改为matrix2[r_idx][c_idx] = 1即可 matrix2[r_idx][c_idx] += 1 # 转为带行列名的DataFrame matrix2_df = pd.DataFrame(matrix2, index=row_vals, columns=col_vals)
可选:矩阵导出
如果需要将生成的矩阵保存到本地:
# 导出为csv格式 matrix1_df.to_csv("matrix1.csv") matrix2_df.to_csv("matrix2.csv") # 导出为单个xlsx文件的不同工作表 with pd.ExcelWriter("生成的矩阵.xlsx") as writer: matrix1_df.to_excel(writer, sheet_name="Matrix1") matrix2_df.to_excel(writer, sheet_name="Matrix2")
注意:上述代码中的列名均为示例,需要替换为你自己数据集对应的实际列名即可运行。
内容的提问来源于stack exchange,提问作者nDev
相关产品推荐
相关产品推荐

