数据预处理(一)

一、安装所需要的包

pip install numpy
pip install matplotlib

或者用condos安装

二、导入所需要的库

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
——按照需要导入库

三、导入数据集

sklearn库里的数据——此数据暂时不需要进行额外处理

举例:
frome sklearn.datasets import load_wine
wine = load_wine
wine.data.shape #查看wine特征的结构
wine.data.info() #查看wine数据的各列的情况
wine.target #查看wine数据的标签

外部数据——转化为DataFrame结构

读文件,我的文件时csv格式的,其它文件读改一下后缀或者百度一下

path = r"movies_metadata.csv"	#加上r就不需要加转义字符
df = pd.read_csv(path, engine='python'
				,index_col = 0	#如果不设置此参数,默认第一列也为特征;设置后,第一列会设为索引
				)

四、对数据进行预处理

1.一行一列进行处理

最先开始,我是对DataFrame里的数据一个个进行处理,先读行,再读行里的每一列,循环读到最后一行,DataFrame里的数据是字符串,相当于对字符串进行处理。部分代码如下:

globals1 = {
        'nan': 0
    }
globals2 = {
        'FALSE': 0
    }   #用来解决eval()类型转换的问题
# 读表格内容为列表,列表里为字典的值,返回keyValue的种类
def readData(path):
    resultList = []
    for j in range(0, len(df)):		#遍历每一行
        df2 = df.iloc[j,]		#遍历每一列
        
        belongs = str(df2['belongs_to_collection'])	#获取列名为belongs_to_collection的单元格
        belongs_id = eval(belongs, globals1,globals2)	#将belongs转换为字典或列表
        if type(belongs_id) != int and type(belongs_id) != float and type(belongs_id) != str:
            belongs_to_collection = belongs_id['id']
            if is_number(belongs_to_collection):
                belongs_to_collection_id = belongs_id['id']
            else:
                belongs_to_collection_id = 0
        else:
            belongs_to_collection_id = 0
    return resultList	#返回一个DataFrame

上面读取数据就是对数据进行处理,特别繁琐,后来学习别人的代码,明细简单了很多。
如下:

2.删除缺失值过多和观察判断来说和预测的y没有关系的列

import pandas as pd
data = pd.read_csv(r"C:\work\learnbetter\micro-class\week 1 DT\data\data.csv",index_col
= 0)
data.head()     #显示dataframe前5行
data.info()     #显示dataframe各列的缺失值情况等信息
data.drop(["Cabin","Name","Ticket"],inplace=True,axis=1) #处理缺失值,对缺失值较多的列进行填补,有一些特征只确实一两个值,可以采取直接删除记录的方法
#inplace=True表示替代原数据;axis=1表示列操作,axis=0表示行操作
data["Age"] = data["Age"].fillna(data["Age"].mean())#选择列名为Age的列,并用平均值填充空缺值
data = data.dropna()#删除为空值的行数据

3.将分类变量转换为数值型变量

#将二分类变量转换为数值型变量
#astype能够将一个pandas对象转换为某种类型,和apply(int(x))不同,astype可以将文本类转换为数字,用这
#个方式可以很便捷地将二分类特征转换为0~1
data["Sex"] = (data["Sex"]== "male").astype("int")

#将三分类变量转换为数值型变量
labels = data["Embarked"].unique().tolist()#将列名为“Embarked”的列里的所有不同的值罗列出来,返回一个list
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))#lambda为匿名函数,返回Embarked值所在list里索引
data.head()#查看处理后的数据集

五、提取标签和特征矩阵,分离测试集和训练集

import pandas as pd
data = pd.read_csv(r"C:\work\learnbetter\micro-class\week 1 DT\data\data.csv",index_col= 0)
x = data.iloc[:,data.columns != "Survived"] #X为列名不为"Survived"的dataframe
y = data.iloc[:,data.columns == "Survived"] #X为列名为"Survived"的dataframe

from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(x,y,test_size=0.3) #划分测试集和训练集
for i in [Xtrain, Xtest, Ytrain, Ytest]:    #修正测试集和训练集的索引
    i.index = range(i.shape[0])
Xtrain.head()   #查看分好的训练集和测试集

上面是参考别人的方法,直接用对dataframe操作就可以了。但是会报错,说y的标签不是一列。

y = np.array(y).astype("float")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值