基于问卷调研数据的3D clustering实现方法咨询
问卷3D聚类分析落地方案
有序分类题项编码规则
聚类算法的核心逻辑是基于样本间的距离计算类群归属,字符串格式的选项无法直接参与计算,必须转换为数值编码,编码时注意两个核心原则:
- 严格匹配有序递进关系:两个5级李克特题项要按照态度正向程度统一编码方向,避免逻辑反向。参考映射规则:正向最高选项(非常同意/非常满意)映射为5,同意映射为4,中立映射为3,不同意/不满意映射为2,负向最高选项(非常不同意/非常不满意)映射为1。你之前已经完成了复购意愿题项的重复选项去重,编码时直接对应映射即可。
- 编码后必须做特征标准化:三个维度的量纲不一致(前两题取值1-5,推荐意愿题取值0-10),如果直接输入聚类模型,量纲更大的维度会在距离计算中占据不合理的高权重,导致聚类结果失真。可以直接用
MinMaxScaler将三个维度统一缩放到0-1区间,或用StandardScaler做Z-score标准化。
工具选型与可视化实现
针对你需要的支持鼠标旋转、缩放、分群高亮、悬停查看样本详情的3D交互效果,优先选以下方案,不需要复杂部署:
- 快速出结果场景:直接用Python生态的Plotly库,生成的可视化结果为独立HTML文件,本地浏览器打开即可使用所有交互功能,支持按聚类结果分色、图例点选隐藏/展示指定分群、自定义悬停显示字段,完全匹配需求。
- 定制化嵌入场景:如果需要把结果嵌入内部系统、加作答筛选/详情跳转等定制功能,可以选Three.js封装的3D散点组件做前端开发,灵活度更高。
最小实现代码示例
以下代码可以直接运行,替换模拟数据为你的真实调研数据即可输出结果:
import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.cluster import KMeans import plotly.express as px # 替换为你自己的真实问卷数据 survey_data = pd.DataFrame({ "满意度": np.random.choice(["非常同意","同意","中立","不满意","非常不满意"], size=500), "复购意愿": np.random.choice(["非常同意","同意","中立","不同意","非常不同意"], size=500), "推荐意愿": np.random.randint(0,11, size=500) }) # 有序选项数值映射 satisfaction_map = {"非常同意":5, "同意":4, "中立":3, "不满意":2, "非常不满意":1} repurchase_map = {"非常同意":5, "同意":4, "中立":3, "不同意":2, "非常不同意":1} survey_data["满意度_编码"] = survey_data["满意度"].map(satisfaction_map) survey_data["复购意愿_编码"] = survey_data["复购意愿"].map(repurchase_map) # 特征标准化 scaler = MinMaxScaler() scaled_features = scaler.fit_transform(survey_data[["满意度_编码", "复购意愿_编码", "推荐意愿"]]) # 聚类计算,n_clusters可通过肘部法、轮廓系数调整最优值 kmeans_model = KMeans(n_clusters=3, random_state=42) survey_data["聚类分群"] = kmeans_model.fit_predict(scaled_features).astype(str) # 生成3D交互可视化 fig = px.scatter_3d( survey_data, x="满意度_编码", y="复购意愿_编码", z="推荐意愿", color="聚类分群", hover_data=["满意度", "复购意愿", "推荐意愿"], title="产品X用户调研3D聚类结果" ) # 导出为本地HTML文件,打开即可交互 fig.write_html("用户聚类3D结果.html") fig.show()
实操提示:如果样本中存在明显的离群用户(比如所有题都打极端分的无效作答),可以把K-Means替换为DBSCAN算法,对离群点的鲁棒性更好,聚类结果更贴合真实用户分层。
内容的提问来源于stack exchange,提问作者MSmith
相关产品推荐
相关产品推荐

