当前位置:   article > 正文

python数据分析与挖掘实战第七章总结_数据分析第七章

数据分析第七章

本博客旨在帮助学生自己巩固所学,若能帮得上他人也是荣幸之至
首先以下是借鉴过的几个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

1 满足清洗条件的一行数据全部丢弃

#-*- 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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2 k-means聚类,并画雷达图

在这里插入图片描述

# -*- 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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
# -*- 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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
         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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/780037
推荐阅读
相关标签
  

闽ICP备14008679号