为了账号安全,请及时绑定邮箱和手机立即绑定

4.数据预处理

标签:
Java

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消