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

如何合理可视化Python中含部门组合与计数的DataFrame?

部门协作组合可视化方案

针对你拥有的含大量组合(含近半数0计数)的DataFrame,以下是几种用Plotly实现的实用可视化方案:


1. 聚焦高价值协作:Top N组合条形图

先过滤掉计数为0的无效组合,再选取计数最高的Top N组合绘制条形图,清晰展示最频繁的协作模式。

import plotly.express as px
import pandas as pd

# 假设你的DataFrame名为df
# 过滤计数>0的行,按计数降序取前20
top_combinations = df[df['计数'] > 0].sort_values('计数', ascending=False).head(20)

# 绘制条形图
fig = px.bar(top_combinations, 
             x='组合', 
             y='计数',
             title='Top 20 高频部门协作组合',
             color='计数',
             color_continuous_scale='Blues')
fig.update_layout(xaxis_tickangle=-45)  # 旋转x轴标签避免重叠
fig.show()

2. 部门关联网络图:展示全局协作关系

忽略组合的复杂结构,统计所有两两部门的协作总次数(比如A和B不管是单独协作还是和其他部门一起协作,都累加次数),用网络图直观展示部门间的关联强度。

import plotly.graph_objects as go
from itertools import combinations
import pandas as pd

# 1. 预处理:拆分组合,生成所有两两无序部门对
pair_counts = {}
for idx, row in df.iterrows():
    if row['计数'] == 0:
        continue
    # 拆分组合并去重(避免重复部门影响统计)
    depts = list(set(row['组合'].split(',')))
    # 生成所有两两组合
    for pair in combinations(sorted(depts), 2):
        pair_key = ','.join(pair)
        pair_counts[pair_key] = pair_counts.get(pair_key, 0) + row['计数']

# 转换为DataFrame
pair_df = pd.DataFrame([(k.split(',')[0], k.split(',')[1], v) for k, v in pair_counts.items()],
                       columns=['部门1', '部门2', '总协作次数'])

# 2. 绘制网络图
fig = go.Figure()

# 添加节点:所有唯一部门
all_depts = list(set(pair_df['部门1'].tolist() + pair_df['部门2'].tolist()))
node_x = []
node_y = []
node_text = []
for i, dept in enumerate(all_depts):
    node_x.append(i % 7)
    node_y.append(i // 7)
    node_text.append(dept)

fig.add_trace(go.Scatter(
    x=node_x, y=node_y,
    mode='markers+text',
    text=node_text,
    marker=dict(size=20, color='lightblue'),
    textposition='top center'
))

# 添加边:根据协作次数设置粗细
for _, row in pair_df.iterrows():
    idx1 = all_depts.index(row['部门1'])
    idx2 = all_depts.index(row['部门2'])
    fig.add_trace(go.Scatter(
        x=[node_x[idx1], node_x[idx2]],
        y=[node_y[idx1], node_y[idx2]],
        mode='lines',
        line=dict(width=row['总协作次数']/10, color='gray'),
        hoverinfo='text',
        text=f"{row['部门1']}-{row['部门2']}: {row['总协作次数']}次"
    ))

fig.update_layout(title='部门间协作关联网络图', showlegend=False)
fig.show()

3. 组合规模分析:组合长度与计数分布

新增“组合长度”列(统计每个组合中不同部门的数量),用箱线图展示不同规模组合的协作次数分布,分析多部门协作的效率特征。

import plotly.express as px
import pandas as pd

# 新增组合长度列(去重后的部门数量)
df['组合长度'] = df['组合'].apply(lambda x: len(set(x.split(','))))

# 过滤计数>0的行(避免0值干扰分布)
filtered_df = df[df['计数'] > 0]

# 绘制箱线图
fig = px.box(filtered_df,
             x='组合长度',
             y='计数',
             title='不同规模部门组合的协作次数分布',
             color='组合长度',
             labels={'计数':'协作次数', '组合长度':'组合中不同部门数量'})
fig.show()

4. 变通热力图:两两部门协作矩阵

如果仍想使用热力图,可聚焦两两部门的总协作次数,构建14x14的部门关联矩阵,既保留热图的直观性,又避免组合过多的问题。

import plotly.express as px
import pandas as pd
from itertools import combinations

# 复用之前的pair_df数据
# 构建透视矩阵
heatmap_df = pair_df.pivot(index='部门1', columns='部门2', values='总协作次数').fillna(0)
# 补全对称项(因为A-B和B-A是同一协作)
for dept1 in heatmap_df.index:
    for dept2 in heatmap_df.columns:
        if pd.isna(heatmap_df.loc[dept1, dept2]):
            heatmap_df.loc[dept1, dept2] = heatmap_df.loc[dept2, dept1]

# 绘制热力图
fig = px.imshow(heatmap_df,
                title='部门两两协作次数热力图',
                labels=dict(x='部门', y='部门', color='总协作次数'),
                x=heatmap_df.columns,
                y=heatmap_df.index,
                color_continuous_scale='Reds')
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:31:21