Dataframe通过在python中计算所有集群来收集所有Kmeans结果

2024-10-06 08:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试创建两个数据帧(一个用于保存质心结果,另一个用于保存添加到原始数据库中的群集标签结果),使用不同的群集编号(1,2,3,4,5)

原始数据如下所示:

enter image description here

在不同的街区有10家超市。男性=%社区男性,女性=%社区女性,N_产品=超市产品数量,GM=超市毛利率

# Load Libraries
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

from sklearn.cluster import KMeans 
from sklearn.preprocessing import StandardScaler
from scipy.spatial import distance

df=pd.read_csv("stores.csv")
# Standardization (z-score)
scaler = StandardScaler()
df_std = scaler.fit_transform(df)

# Centroid and Label results for all numbers of clusters:

from collections import Counter
    
centroids_All = []
df_All = []

for cluster in range(1,6):
    kmeans = KMeans(n_jobs = -1, n_clusters = cluster, init='k-means++')
    kmeans.fit(df_std)
    counts = dict(Counter(kmeans.labels_))
    counts = pd.DataFrame.from_dict(counts, orient='index',  columns=['Stores'])
    centroids_deno = pd.DataFrame(scaler.inverse_transform(kmeans.cluster_centers_),columns= df.columns)
    centroids_deno['Stores'] = counts['Stores']
    centroids_deno['n_cluster'] = cluster
    centroids_All.append(centroids_deno)
    df['Label']=kmeans.labels_
    df['n_cluster']=cluster
    df_All.append(df)       
    
df_All=pd.concat(df_All)
centroids_All = pd.concat(centroids_All)

enter image description here

质心结果是我想要创建的第一个数据帧

enter image description here

第二个数据帧是原始数据集,但包含一个标签,用于标识哪些存储属于哪些集群。这是我结果的一部分(太长了,无法显示)。 问题是n_cluster列应该是1到5之间的值,这意味着集群的数量,但我的算法只在集群的数量=5时生成结果,并重复5次

我很感激有人帮我修理它。谢谢大家!


Tags: columns数据fromimportdfasallstores