数据挖掘数据预处理

注意
数据为csv文件格式,第一行为列名。

from collections import Counter

from pandas.core.dtypes.inference import is_number
from sklearn.preprocessing import LabelEncoder,OrdinalEncoder
import numpy as np
import pandas as pd

def getClassinfo(label):
    '''
    参数:标签y列表(默认两类)
    功能:计算各类别的个数和相应的标签
    返回:正类数,负类数,正类标签,负类标签
    '''
    ele,cnt=np.unique(label,return_counts=True)#np.unique() 函数 去除其中重复的元素 ,并按元素 由小到大 返回一个新的无元素重复的元组或者列表。
    if(np.min(cnt)==np.max(cnt)):#两个样本一样多
        pcnt=cnt[0]
        ncnt=cnt[0]
        pos_label=ele[0]
        neg_label=ele[1]
    else:
        pcnt=np.min(cnt)
        ncnt=np.max(cnt)
        pos_label=ele[np.argmin(cnt)]#正类,样本数小的类
        neg_label=ele[np.argmax(cnt)]#负类
    return pcnt,pos_label,ncnt,neg_label

def reSetlabel(label):
    """
    功能:重新设置类别标签,大类为0,小类为1
    """
    p_cnt,p_lab,n_cnt,n_lab=getClassinfo(label)
    label[label==n_lab]=0
    label[label==p_lab]=1
    return label
def encoder(data):
    """
    功能:将字符属性值转换为数字
    """
    for a in range(data.shape[1]):
        try:
            data[:, a].astype('float')
        except Exception as e:
            print(a,'###########################################################')
            data[:, a] = LabelEncoder().fit_transform(data[:, a])
    return data

#读取数据集以X,y的形式返回
def readDateSet(filename):
    '''
    参数:filename指文件名
    功能:读取指定文件中的数据,其中样本标签默认为最后一列。第一行为列名
    返回:格式X(数据),y(标签)
    '''
    data=pd.read_csv(filename,delim_whitespace=False ,sep=',',encoding='gbk',header=None)
    data = data.iloc[1:,:]
    data = np.array(data)

    X=data[:,0:-1]
    X = encoder( X)
    y=data[:,-1]
    # if {0,1}!=set(y):#类标签不是{0,1}时,重新设置大类的标签为0,小类的标签为1
    y=reSetlabel(y.reshape(len(y),1))
    y=y.astype('int')
    X=X.astype('float')
    y=y.ravel()
    print('Original dataset shape %s' % Counter(y))
    return X,y#ravel()方法将数组维度拉成一维数组
if __name__ == '__main__':
    readDateSet(r'F:\PycharmProjects\ml\keel_dataset\two_class\bupa(liver).csv')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值