pandas - Python:如何从具有多列的数据框中循环遍历每两列组合以进行聚类?
问题描述
我有一个原始数据框(每个客户为不同产品购买的数量)有多个列,如下所示:
我的目标是对原始数据框中的每两个产品进行聚类。为简单起见,我尝试通过获取客户、产品 1 和产品 2 来进行聚类。我的数据框如下所示(忽略客户列,仅获取两个产品的数据) df = 请单击此处参考数据框示例
考虑下面我用于聚类和可视化的代码。
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++')
kmeans.fit(df)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
# 4 clusters
# Fitting K-Means to the dataset
kmeans = KMeans(n_clusters = 4, init = 'k-means++')
y_kmeans = kmeans.fit_predict(df)
# Visualising the clusters
plt.scatter(df[y_kmeans == 0, 0], df[y_kmeans == 0, 1], s = 20, c = 'red', label = 'Cluster 1')
plt.scatter(df[y_kmeans == 1, 0], df[y_kmeans == 1, 1], s = 20, c = 'blue', label = 'Cluster 2')
plt.scatter(df[y_kmeans == 2, 0], df[y_kmeans == 2, 1], s = 20, c = 'green', label = 'Cluster 3')
plt.scatter(df[y_kmeans == 3, 0], df[y_kmeans == 3, 1], s = 20, c = 'yellow', label = 'Cluster 4')
plt.title('Clusters of customers')
plt.xlabel('Product1 (000 TO)')
plt.ylabel('Product2 (000 TO)')
plt.legend()
plt.show()
这对一对来说效果很好,但我的目标是对我原始数据框中的两个产品组合中的每一个都做。
我尝试搜索这个并用于循环和迭代,但无法实现我的最终目标。我不是循环方面的专家,并且从几个月开始就开始使用 python ..您的帮助将不胜感激..
你可以修复 no 。在您的答案中,簇数为 4。让我也粘贴到我迄今为止为此尝试过的内容下方,并且仍在弄清楚下一步是什么。
如果我的问题不清楚,请告诉我..或者我需要添加更多细节..提前非常感谢
from itertools import combinations
from sklearn.cluster import KMeans
[编辑] ..下面是我的最新代码..为了更简单..我正在尝试迭代下面的代码,用于所有对组合的一对
# kmeans for one pair
kmeans = KMeans(n_clusters = 4, init = 'k-means++')
X=df.iloc[:, [0,1]].values
kmeans.fit(X)
y_kmeans = kmeans.fit_predict(X)
kmeans循环
kmeans = KMeans(n_clusters = 4, init = 'k-means++')
combos = list(combinations(df.columns,2))
for combo in combos:
for i in range(0,len(combos)):
X=df.loc[:,combos[i]].values
kmeans.fit(X)
y_kmeans=kmeans.fit_predict(X)
循环一次只给了我最后一对的输出,而它应该给我所有这对的输出..我不确定,我在这里缺少什么..
解决方案
您可以使用itertools.combinations
创建所有成对组合,然后将fit
所有模型for loop
附加到一个list
类似中:
from itertools import combinations
from sklearn.cluster import KMeans
combos = list(combinations(df.columns,2))
models = []
for combo in combos:
model = kmeans.fit(df[list(combo)]
models.append(model)
推荐阅读
- php - 如何在查询中使用 groupby 以避免冗余行
- javascript - 未捕获的类型错误:无法读取 HTMLAnchorElement.linkAction 处未定义的属性“添加”
- java - 繁荣菜单崩溃
- swift - VideoPlayer 自动播放 SwiftUI 问题
- c++ - CTAD(?) 函数模板的函数参数
- ubuntu - nginx: [emerg] "if" 指令在 /etc/nginx/nginx.conf:64 中是不允许的
- python - Linux:管道数据使常规数据流断断续续
- express - 当在 localhost AdminBro 捆绑功能正在使用路径时,但是当部署到 Vercel 生产时出现错误,为什么?
- cypress - 检查背景颜色是否不是赛普拉斯的正确方法是什么
- dbt - dbt 种子可以与管道分隔的 csv 文件一起使用吗?