赞
踩
本博客旨在帮助学生自己巩固所学,若能帮得上他人也是荣幸之至
首先以下是借鉴过的几个github库,非常感谢:
https://github.com/apachecn/python_data_analysis_and_mining_action
https://github.com/keefecn/python_practice_of_data_analysis_and_mining
https://github.com/Stormzudi/Python-Data-Mining
https://github.com/Echo9573/DataAnalysisbyPython
#-*- coding: utf-8 -*-
# 数据清洗,过滤掉不符合规则的数据
import pandas as pd
datafile = '../data/air_data.csv' # 航空原始数据,第一行为属性标签
cleanedfile = '../tmp/data_cleaned.csv' # 数据清洗后保存的文件
cleanedfile2 = '../tmp/data_cleaned.xls'
# 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)
data = pd.read_csv(datafile, encoding='utf-8')
# NOTE: * instead of &
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] # 该规则是“或”
# to_csv
data.to_csv(cleanedfile, encoding='utf-8') # 导出结果
data.to_excel(cleanedfile2)
print('END')
# -*- coding: utf-8 -*-
# K-Means聚类算法
import pandas as pd
from sklearn.cluster import KMeans # 导入K均值聚类算法
inputfile = '../tmp/zscoreddata.xls' # 待聚类的数据文件
k = 5 # 需要进行的聚类类别数,需结合业务的理解和分析来确定客户的类别数量
# 读取数据并进行聚类分析
data = pd.read_excel(inputfile) # 读取数据
# 调用k-means算法,进行聚类分析
# TODO: error here
# n_jobs是并行数,一般等于CPU数较好 , window下多进程 跑失败
kmodel = KMeans(n_clusters=k, n_jobs=1)
kmodel.fit(data) # 训练模型
from cluster_plot import print_cluster_result, plot_cluster
print_cluster_result(data, kmodel)
plot_cluster(data, kmodel)
print('END')
# -*- coding: utf-8 -*-
# 画出特征雷达图,代码接KMeans_cluster.py
def print_cluster_result(data, kmodel):
import pandas as pd
# 简单打印结果
r1 = pd.Series(kmodel.labels_).value_counts() # 统计各个类别的数目
r2 = pd.DataFrame(kmodel.cluster_centers_) # 找出聚类中心
r = pd.concat([r2, r1], axis=1) # 横向连接(0是纵向),得到聚类中心对应的类别下的数目
r.columns = list(data.columns) + [u'类别数目'] # 重命名表头
print(r)
# print(kmodel.cluster_centers_) # 查看聚类中心
# print('labels_=', kmodel.labels_) # 查看各样本对应的类别
def plot_cluster(data, kmodel):
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
labels = data.columns # 标签
k = 5 # 数据个数
plot_data = kmodel.cluster_centers_
color = ['b', 'g', 'r', 'c', 'y'] # 指定颜色
angles = np.linspace(0, 2 * np.pi, k, endpoint=False)
plot_data = np.concatenate((plot_data, plot_data[:, [0]]), axis=1) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
fig = plt.figure()
ax = fig.add_subplot(111, polar=True) # polar参数!!
for i in range(len(plot_data)):
ax.plot(angles, plot_data[i], 'o-', color=color[i],
label=u'客户群' + str(i+1), linewidth=2) # 画线
ax.set_rgrids(np.arange(0.01, 3.5, 0.5),
np.arange(-1, 2.5, 0.5), fontproperties="SimHei")
ax.set_thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei")
plt.legend(loc=4)
plt.show()
ZL ZR ZF ZM ZC 类别数目
0 0.485803 -0.799873 2.485890 2.426468 0.311059 5330
1 -0.700177 -0.417892 -0.158759 -0.158425 -0.256170 24599
2 1.161990 -0.376760 -0.087085 -0.094883 -0.159319 15712
3 -0.316467 1.682452 -0.573787 -0.536745 -0.177226 12143
4 0.050846 0.002164 -0.233775 -0.238254 2.166849 4260
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。