继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

4.数据预处理

幕布斯6054654
关注TA
已关注
手记 1303
粉丝 221
获赞 1014

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



作者:红领巾_66d0
链接:https://www.jianshu.com/p/f96602498d1b


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP