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

基于人员访楼数据的聚类分析及可视化工具需求

按人员访问的建筑组合聚类的最优实现方案及可视化工具推荐

嘿,这个需求核心就是按人员的唯一建筑访问集合来分组对吧?我给你梳理两个最靠谱的实现路径,还有能搞定可视化的工具,之前Knime没成功可能是没找对节点组合,咱们换个思路来:

先明确下你的数据场景:每行记录是“人员X访问了建筑Y”,示例数据如下(实际有千余行):

PERSON1 BUILDING1 PERSON2 BUILDING4 PERSON3 BUILDING4 PERSON5 BUILDING3 PERSON3 BUILDING2 PERSON3 BUILDING1 PERSON5 BUILDING6 PERSON4 BUILDING6

需要聚类规则:仅访问同一栋建筑的为一类,仅访问建筑1&2的为一类,仅访问建筑3&4的为一类,仅访问同一组3栋建筑的为一类,以此类推。

一、最优实现方式

1. Python 实现(灵活易扩展,自定义性强)

这是我最推荐的方案,用pandas就能快速搞定,步骤清晰:

  • 第一步:整理原始数据
    先把你那种一行多个人员-建筑对的格式,拆成每行一条记录,转换成DataFrame:
    import pandas as pd
    
    # 假设数据存在文本文件里,读取并拆分
    with open('your_data.txt', 'r') as f:
        raw_data = f.read().split()
    # 两两分组生成人员-建筑记录
    records = [(raw_data[i], raw_data[i+1]) for i in range(0, len(raw_data), 2)]
    df = pd.DataFrame(records, columns=['Person', 'Building'])
    
  • 第二步:生成唯一的建筑组合标识
    关键是要让BUILDING1&BUILDING2和BUILDING2&BUILDING1归为同一类,所以要先对每个人员的建筑去重、排序,再拼接成字符串作为组合键:
    # 按人员分组,获取去重并排序的建筑列表,转为字符串键
    person_building_groups = df.groupby('Person')['Building'].agg(lambda x: sorted(set(x))).reset_index()
    person_building_groups['Building_Combination'] = person_building_groups['Building'].apply(lambda x: '&'.join(x))
    
  • 第三步:按组合聚类
    最后按建筑组合分组,就能得到每个聚类对应的人员列表:
    clusters = person_building_groups.groupby('Building_Combination')['Person'].agg(list).reset_index()
    # 给聚类编号
    clusters['Cluster_ID'] = clusters.index + 1
    # 查看结果
    print(clusters)
    

运行完就能得到完美符合你需求的聚类结果,后续还能灵活调整规则。

2. SQL 实现(适合数据库存储的数据)

如果你的数据存在数据库里,直接用SQL就能在端上处理,以MySQL为例:

  • 先确保数据是每行一条Person-Building记录(如果原始数据是一行多个对,MySQL可以用递归CTE拆分);
  • 生成每个人员的建筑组合键:
    SELECT 
        Person,
        GROUP_CONCAT(DISTINCT Building ORDER BY Building SEPARATOR '&') AS Building_Combination
    FROM your_table
    GROUP BY Person;
    
  • 按组合分组得到最终聚类:
    SELECT 
        CONCAT('Cluster ', ROW_NUMBER() OVER (ORDER BY Building_Combination)) AS Cluster_Name,
        Building_Combination,
        GROUP_CONCAT(Person SEPARATOR ', ') AS Persons_In_Cluster
    FROM (
        SELECT 
            Person,
            GROUP_CONCAT(DISTINCT Building ORDER BY Building SEPARATOR '&') AS Building_Combination
        FROM your_table
        GROUP BY Person
    ) AS person_combinations
    GROUP BY Building_Combination;
    

直接在数据库里就能导出聚类结果,不用导出到其他工具。

二、带可视化功能的工具推荐

1. Python + Plotly/Seaborn(代码式可视化,交互性强)

用上面的Python处理完数据后,直接用可视化库做图,比如用Plotly做交互式柱状图,能直观看到每个聚类的人员数量:

import plotly.express as px

# 统计每个聚类的人员数量
clusters['Person_Count'] = clusters['Person'].apply(len)
# 生成交互式柱状图
fig = px.bar(clusters, x='Cluster_ID', y='Person_Count', 
             color='Building_Combination',
             hover_data=['Building_Combination', 'Person'],
             title='人员访问建筑组合聚类分布')
fig.show()

也可以用Seaborn做热力图展示建筑组合关联,或者用网络图展示人员-建筑的关系,灵活性拉满。

2. Tableau/Power BI(无代码拖拽,适合非技术用户)

这两个工具绝对是可视化神器,完全不用写代码:

  • 步骤:把Person-Building数据导入工具,创建计算字段生成Building_Combination(按人员分组,去重排序后拼接),然后按这个字段分组,自动形成聚类;
  • 可视化:拖拽就能生成柱状图、树状图(展示不同组合的占比)、Sankey图(展示人员-建筑-聚类的流向),操作超直观,比Knime上手快多了。

3. Excel(轻量需求首选)

如果数据量不大,Excel也能搞定:

  • 用「数据透视表」按人员分组,获取每个人员的所有建筑;
  • 用TEXTJOIN结合排序函数生成排序后的建筑组合;
  • 再按组合分组,用柱状图或饼图展示聚类分布,轻量又方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:54