Python数据分析与挖掘实战第四章笔记之属性离散化

# 在一些分类算法中,要求数据是分类属性形式,这样,常常需要将连续属性变换成分类属性,即连续属性离散化
# 1、离散化过程:在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或者整数值代表落在每个子区间中的数据值。
# 2、离散化方法:
# 1)等宽法:将属性的值域划分成具有相同宽度的区间,区间的个数由数据本身的特点决定,或者由用户指定。
# 2)等频法:将相同数量的记录放进每个区间。
# 3)基于聚类分析的方法:一维聚类的方法包括两个步骤,首先将连续属性的值用聚类算法(k-means)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。
# 聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。

# 数据离散化代码
import pandas as pd
datafile='E:/WTTfiles/自我学习/机器学习/python数据分析与挖掘实战/chapter4/demo/data/discretization_data.xls'
data=pd.read_excel(datafile)
data=data[u'肝气郁结证型系数'].copy()
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-1e-10)
d2=pd.cut(data,w,labels=range(k))

# from sklearn.cluster import KMeans
# kmodel=KMeans(n_clusters=k,n_jobs=1)
# kmodel.fit(data.reshape((len(data),1)))
# c=pd.DataFrame(kmodel.cluster_centers_).sort_index(0)
# w=pd.rolling_mean(c,2).iloc[1:]
# w=[0]+list(w[0])+[data.max()]
# d3=pd.cut(data,w,labels=range(k))

def cluster_plot(d,k):
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值