描述:采用数据挖掘算法中K-Means聚类算法,首先对数据探索,清洗,规约,然后对数据归一化处理,使用K-Means算法进行聚类分析,
代码:
#-*- coding:utf -8-*-
import pandas as pd
#对数据基本探索,返回最大最小值
def Data_Explore(data):
outputfile = 'F:/chapter7_explore_result.xls'
data_explore = data.describe(percentiles= [],include='all').T
data_explore['null'] = len(data) - data_explore['count']
data_explore = data_explore[['null','max','min']]
data_explore.columns = [u'空值数',u'最大值',u'最小值'] #重命名表头
data_explore.to_excel(outputfile)
return data
#数据预处理,包括数据清洗
def Data_preprocessing(data):
clean_file = 'F:/chapter_clean_data'
data = data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()] #票价非空值保留
#只保留票价非零的,或者平均折扣价率与总飞行公里数同时为0的记录
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM-YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0)
data = data[index1 | index2 | index3]
data.to_excel(clean_file)
def Data_Standard():
import pandas as pd
datafile = 'F:/Python/IDLE--python/BigDataAnalyze/chapter7-data/zscoredata.xls'
outfile = 'F:/zerosdata.xls'
#标准化处理:(原始数据-数据的平均值) /数据的标准值
data = pd.read_excel(datafile)
data_std = (data-data.mean(axis = 0))/(data.std(axis=0))
data_std.columns = ['Z' + i for i in data.columns] #重命名表头
data_std.to_excel(outfile)
return data_std
def Kmeans_div(data_std):
from sklearn.cluster import KMeans #导入K均值聚类算法
k = 5
#调用k-means算法,进行聚类分析
kmodel = KMeans(n_clusters=k,n_jobs=4)
kmodel.fit(data_std) #训练模型
print(kmodel.cluster_centers_ )#查看聚类中心
print("-------------------------------------")
print(kmodel.labels_ )#查看个样本对应的类型
return kmodel
def Draw_Result(kmodel):
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
clu = kmodel.cluster_centers_
x=[1,2,3,4,5]
colors = ['red','green','yellow','blue','black']
for i in range(5):
plt.plot(x,clu[i],label='clustre' + str(i),linewidth=6-i,color=colors[i],marker='o')
plt.xlabel('L R F M C')
plt.ylabel('values')
plt.show()
def main():
inputfile = 'F:/Python/IDLE--python/BigDataAnalyze/chapter7-data/air_data.csv'
data = pd.read_csv(inputfile, encoding='utf-8') #读取数据
#数据基本探索,主要是对数据缺失值和异常值分析
#Data_Explore(data)
#数据预处理,过滤掉不符合规则的数据
#Data_preprocessing(data)
#标准差标准化
data_std = Data_Standard()
#K-means聚类,对客户数据进行客户分群
kmodel = Kmeans_div(data_std)
#画出分析图
Draw_Result(kmodel)
if __name__ == '__main__':
main()