前言:

凡事预则立,不预则废

数据预处理是建立机器(深度)学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理

本文将带你领在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作

1.导包:

Numpy :满足所有数学运算所需要的库

Maplotlib:满足绘图所需要的库

Pandas :最好的导入并处理数据集的一个库

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

2.读取和保存文件

1.保存和读取csv文件

df = DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况                       
               columns=['IT','化⼯','⽣物','教师','⼠兵'])
# 保存到当前路径下,⽂件命名是:salary.csv。csv逗号分割值⽂件格式
df.to_csv('./salary.csv',          
            sep = ';', # ⽂本分隔符,默认是逗号          
            header = True,# 是否保存列索引          
            index = True) # 是否保存⾏索引,保存⾏索引,⽂件被加载时,默认⾏索引会作为⼀列
# 加载
pd.read_csv('./salary.csv',            
            sep = ';',# 默认是逗号            
            header = [0],#指定列索引            
            index_col=0) # 指定⾏索引
pd.read_table('./salary.csv', # 和read_csv类似,读取限定分隔符的⽂本⽂件                        
            sep = ';',           
            header = [0],#指定列索引            
            index_col=1) # 指定⾏索引,IT作为⾏索引

2.保存和读取Excel文件

import numpy as np
import pandas as pd
df1 = pd.DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况
 columns=['IT','化⼯','⽣物','教师','⼠兵'])
df2 = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考
试成绩
                    columns=['Python','Tensorflow','Keras'])
# 保存到当前路径下,⽂件命名是:salary.xls
df1.to_excel('./salary.xls',
             sheet_name = 'salary',# Excel中⼯作表的名字
             header = True,# 是否保存列索引
             index = False) # 是否保存⾏索引,保存⾏索引
pd.read_excel('./salary.xls',
             sheet_name=0,# 读取哪⼀个Excel中⼯作表,默认第⼀个
             header = 0,# 使⽤第⼀⾏数据作为列索引
             names = list('ABCDE'),# 替换⾏索引
             index_col=1)# 指定⾏索引,B作为⾏索引
# ⼀个Excel⽂件中保存多个⼯作表
with pd.ExcelWriter('./data.xlsx') as writer:
     df1.to_excel(writer,sheet_name='salary',index = False)
     df2.to_excel(writer,sheet_name='score',index = False)

3.保存和读取sql文件

import pandas as pd
# SQLAlchemy是Python编程语⾔下的⼀款开源软件。提供了SQL⼯具包及对象关系映射(ORM)⼯具
from sqlalchemy import create_engine
df = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考试
成绩
                  columns=['Python','Tensorflow','Keras'])

# 数据库连接
conn = create_engine('mysql+pymysql://root:123456@localhost/pandas?
charset=UTF8MB4')

# 保存到数据库
df.to_sql('score',#数据库中表名
           conn,# 数据库连接
           if_exists='append')#如果表名存在,追加数据

# 从数据库中加载
pd.read_sql('select * from score limit 10', # sql查询语句
             conn, # 数据库连接
             index_col='Python') # 指定⾏索引名

4.保存和读取HDF5文件

df1 = pd.DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况
                   columns=['IT','化⼯','⽣物','教师','⼠兵'])
df2 = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考
试成绩
                   columns=['Python','Tensorflow','Keras'])

# 保存到当前路径下,⽂件命名是:data.h5
df1.to_hdf('./data.h5',key='salary') # 保存数据的key,标记
df2.to_hdf('./data.h5',key = 'score')
 
pd.read_hdf('./data.h5',
 key = 'salary')#获取指定的标记、key的数据

此处使用csv文件

dataset = pd.read_csv('my_data.csv')

 3.矩阵保存

# 创建一个矩阵来保存自变量,以及一个向量来保存因变量。为了创建保存自变量的矩阵

X = dataset.iloc[:, :-1].values

# 第一个冒号表示提取数据集的所有行
# [:-1]表示提取出最后一列以外的所有列
# .values表示希望提取所有的值
# iloc[行,列].值
y = dataset.iloc[:, 3].values

4.数据缺失处理:

利用 scikit-learn 预处理模型中的 inputer 类完成其所在列的均值来填充缺失值

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = np.nan, strategy = ‘mean’, axis = 0)

拟合imputer,输入

imputer = imputer.fit(X[:, 1:3])

调用实际上可以替换填充缺失数据的方法

X[:, 1:3] = imputer.transform(X[:, 1:3])

5.处理属性数据

什么是属性数据?

具有特殊代表性的数据,例如没有办法明确地计算诸如猫、狗、麋鹿的均值。那么可以怎么做呢?可以将属性数据(例:0001是猫  0010是狗  0100是麋鹿)编码为数值!

from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

导入编码器,制定对应列的索引

from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])

拟合转换

X = onehotencoder.fit_transform(X).toarray()

以 1 和 0 取代属性变量

labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)

6.划分测试集与训练集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

7.特征缩放

什么是特征缩放?为什么需要特征缩放?

假如我们数据中有一列动物年龄,范围是 4~17,还有一列动物价值,范围是83,000。价值一栏的数值不仅远大于年龄一栏,而且它还包含更加广阔的数据范围。这表明,欧式距离将完全由价值这一特征所主导,而忽视年龄数据的主导效果。如果欧式距离在特定机器学习模型中并没有具体作用会怎么样?缩放特征将仍能够加速模型,因此,你可以在数据预处理中,加入特征缩放这一步。

特征缩放的方法有很多。但它们都意味着我们将所有的特征放在同一量纲上,进而没有一个会被另一个所主导。

# 导包
from sklearn.preprocessing import StandardScaler

# 创建一个需要缩放对象并调用 Standard Scaler 
sc_X = StandardScaler()

# 直接在数据集上进行拟合以及变换。获取对象并应用方法
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

# 不需要在测试集上进行拟合,只进行变换
sc_y = StandardScaler()
y_train = sc_y.fit_transform(y_train)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐