我爱编程

4.数据预处理

2018-08-07  本文已影响0人  红领巾_66d0

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()函数拆开来;

上一篇下一篇

猜你喜欢

热点阅读