4.数据预处理

作者: 红领巾_66d0 | 来源:发表于2018-08-07 18:34 被阅读0次

    import pandas as pd

    from sklearn.cluster import  KMeans

    import math

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签

    plt.rcParams['axes.unicode_minus'] =  False #用来正常显示负号

    e = math.e

    datafile =  'D:/BaiduNetdiskDownload/chapter4/demo/data/discretization_data.xls'

    data = pd.read_excel(datafile)

    data = data[u'肝气郁结证型系数'].copy()

    data.head(5)

    k = 4

    d1 = pd.cut(data,k,labels= range(k))#等宽离散化

    #等频率离散化

    w = [1.0 * i/ k for i in range(k+1)]

    w = data.describe(percentiles = w)[4:4+k+1]

    w[0] = w[0]*(1- 1*e -10)

    d2 = pd.cut(data,w,labels= range(k))

    from sklearn.cluster import KMeans#引入KMeans

    kmodel = KMeans(n_clusters = k ,n_jobs=  4 )#建立模型

    kmodel.fit(data.values.reshape((len(data),1)))#训练模型

    c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0) #输出聚类中心,并且排序(默认随机排序)

    w = c.rolling(2).mean().iloc[1:]#相比两项求中点,作为边界线

    w = [0] + list(w[0]) + [data.max()]#将首末边界点加上

    d3 = pd.cut(data,w,labels= range(k))

    def cluster_plot(d,k):#自定义作图来显示结果

        plt.figure(figsize = (8,3))

        for j in range(0,k):

            plt.plot(data[d == j],[j for i in d[d == j]],'o')

        plt.ylim(-0.5,k-0.5)

        return plt

    cluster_plot(d1,k).show()

    cluster_plot(d2,k).show()

    cluster_plot(d3,k).show()

    错误1:series数据不存在reshape,需改为data.values.reshape

    错误2:dataframe排序,不能直接data.sort[],需改为data.sort_values()

    3.df的rolling_mean()移动窗口函数问题:这里移动窗口函数的使用要改为c.rolling(2).mean(),也就是把rolling_mean()函数拆开来;

    相关文章

      网友评论

        本文标题:4.数据预处理

        本文链接:https://www.haomeiwen.com/subject/fseemftx.html