import pandas as pd
#读入数据
protein = pd.read_table('test.txt',sep='t')
#查看前五排
print(protein.head())
#查看描述性统计分析
print(protein.describe())
#查看列名
print(protein.columns)
#查看行数和列数
print(protein.shape)
#数据规整化处理
from sklearn import preprocessing
#由于country不是特征值,故应删去
sprotein = protein.drop(['Country'],axis=1)
#对数据进行标准化处理
sprotein_scaled = preprocessing.scale(sprotein)
#查看处理结果
print(sprotein_scaled)
#数据建模
#导入KMeans类型
from sklearn.cluster import KMeans
#[注意]K值的选择方式
NumberOfClusters = range(1,20)
kmeans = [KMeans(n_clusters=i) for i in NumberOfClusters]
score = [kmeans[i].fit(sprotein_scaled).score(sprotein_scaled) for i in range(len(kmeans))]
print(score)
#变化跨度变小时的值就可取,K值
import matplotlib.pyplot as plt
plt.plot(NumberOfClusters,score)
plt.xlabel('Number of Clusters')
plt.ylabel('Score')
plt.title('Elbow Curve')
plt.show()
#图形变缓慢的点就可取,K值
#设置KMeans聚类器的超级参数
myKmeans = KMeans(algorithm='auto',n_clusters=5,n_init=10,max_iter=200)
#n_cluster为聚类中心
#n_init和max_iter:初始值的选择次数以及最大迭代次数
#algorithem="auto",对于稀疏数据用full(EM算法),非稀疏数据用elkan算法
#【注意】初始聚类中心的选择方式是init参数,目前init参数取值可以为:
#1、k-means++算法(默认):选择彼此尽可远的那个k点
#2、随机:random
#3、指定:ndarray
#模型训练
myKmeans.fit(sprotein_scaled)
print(myKmeans.fit(sprotein_scaled))
#查看模型
print(myKmeans)
#预测聚类结果
y_kmeans = myKmeans.predict(sprotein)
print(y_kmeans)
#结果输出
def print_kmcluster(k):
'''
用于聚类结果的输出
k:为聚类中心个数
'''
for i in range(k):
print('聚类',i)
ls = []
for index,value in enumerate(y_kmeans):
if i == value:
ls.append(index)
print(protein.loc[ls,['Country','RedMeat','Fish','Fr&Veg']])
print_kmcluster(5)