You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现多非数值列两两组合转换 适配Tableau相关矩阵构建

分类变量相关性分析长表生成方案(适配Tableau)

核心处理逻辑

  • 以Identifier列为分组键逐组处理,所有空值自动跳过,不参与配对计算
  • 仅对非数值类型的分类列做无重复两两组合,不会出现Var1/Var2顺序互换的重复配对
  • 输出固定三列结构:Identifier、Var1、Var2,无需额外清洗即可导入Tableau使用

Pandas 实现代码

import pandas as pd
from itertools import combinations

# 替换为你的数据读取逻辑
df = pd.read_csv("your_source_data.csv")
id_column = "Identifier"
# 自动提取所有非数值分类列,不需要手动枚举40列的列名
category_columns = df.drop(columns=[id_column]).select_dtypes(exclude="number").columns.tolist()

def get_group_pairs(group_data):
    # 提取当前组内所有非空分类值,自动去重
    valid_values = group_data[category_columns].melt()["value"].dropna().unique()
    # 生成无重复两两配对,单组有效值不足2个时自动返回空
    pair_list = list(combinations(sorted(valid_values), 2))
    # 拼接当前组的Identifier标识
    return pd.DataFrame(pair_list, columns=["Var1", "Var2"]).assign(Identifier=group_data[id_column].iloc[0])

# 分组执行后重置索引,按指定列顺序输出
final_long_table = df.groupby(id_column, group_keys=False)\
    .apply(get_group_pairs)\
    .reset_index(drop=True)[[id_column, "Var1", "Var2"]]

Tableau 相关矩阵搭建方法

  • 导入生成的三列长表,将Var1拖入行功能区,Var2拖入列功能区
  • 将记录数拖入标记卡的「颜色」「文本」选项,单元格的数值、颜色深浅直接代表两个分类值在同一Identifier下的共现次数,可直接作为关联强度的度量
  • 如果需要更严谨的分类变量相关性指标(如Cramer's V系数),可直接在Tableau中基于共现计数创建计算字段实现,无需额外在Python侧预处理

备选宽表方案

如果不需要做分类值粒度的共现分析,仅需要列级别的分类变量相关性,可跳过生成长表的步骤:

  • 对所有分类列做标签编码后,直接计算Cramer's V矩阵、Kendall秩相关系数矩阵,计算时开启空值跳过参数即可
  • 输出的n*n宽表可直接导入Tableau做透视展示,操作更简便

注意:宽表方案计算的是列与列之间的整体相关性,而非单元格内具体分类值的共现关系,根据分析粒度选择即可。

内容的提问来源于stack exchange,提问作者Random Person

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:33:19