Python中能否依据其他三列特征对city列城市数据进行聚类?
城市聚类可行性及实现方案
完全可以基于cat1、cat2、cat3三列特征对城市做聚类,这个思路是合理的,具体实现逻辑如下:
核心逻辑
聚类的核心是给每个城市生成对应的特征向量,再基于向量相似度做聚合。因为原始数据集里同一城市大概率对应多条记录,所以第一步需要先按城市维度做特征聚合。
实现步骤
- 第一步:按
city字段分组聚合,生成每个城市的特征向量
根据cat1/cat2/cat3的字段类型(分类/数值)选择对应的聚合方式,示例如下:import pandas as pd # 聚合生成城市维度特征,可根据实际字段类型调整聚合规则 city_feature = df.groupby('city').agg( # 分类特征可以算唯一值数量、众数、各分类占比等 cat1_unique_cnt = ('cat1', 'nunique'), cat1_top = ('cat1', lambda x: x.mode()[0] if not x.mode().empty else None), # 数值特征可以算均值、分位数、方差等 cat2_mean = ('cat2', 'mean'), cat3_std = ('cat3', 'std'), record_cnt = ('city', 'count') ).reset_index() - 第二步:特征预处理
对分类特征做编码(独热编码/标签编码均可),数值特征做标准化,消除不同特征量级对聚类结果的影响:from sklearn.preprocessing import StandardScaler # 去掉城市名列,只保留特征列做预处理 X = city_feature.drop('city', axis=1) # 分类特征编码步骤此处省略,根据实际字段类型补充 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) - 第三步:执行聚类
选择适配的聚类算法(K-Means、DBSCAN、层次聚类等),根据业务需求确定聚类数量即可:from sklearn.cluster import KMeans # 示例用K-Means聚成3类,可自行调整参数 cluster = KMeans(n_clusters=3, random_state=42) city_feature['cluster'] = cluster.fit_predict(X_scaled)
执行完成后,city_feature表中就包含了每个城市对应的聚类标签。
注意事项
- 聚合规则需要和特征的业务含义匹配,避免生成无意义的特征导致聚类结果失真
- 聚类完成后建议做效果校验,可查看同类城市的
cat1/cat2/cat3特征分布是否具有一致性,再根据校验结果调整特征或聚类参数
内容的提问来源于stack exchange,提问作者a.programmer
相关产品推荐
相关产品推荐

