python机器学习之数据的预处理(五种方式数据处理案例详解)

数据的预处理

数据下载地址——>点这里下载

到入文件时可以直接复制地址然后用r" "包裹起来。
例如:data = pd.read_cav(r"C:\work\data.csv")
或者也可以以直接将\换成//也可以导入。

1.归一化

在sklearn当中,我们使用preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数,feature_range,控制我们希望把数据压缩到的范围,默认是[0,1]。
在这里插入图片描述

导入库和数据

from sklearn.preprocessing import MinMaxScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]
import pandas as pd
pd.DataFrame(data)


在这里插入图片描述
进行归一化处理

scaler = MinMaxScaler()#实例化
scaler = scaler.fit(data)#fit.在这里是生成min(x)和max(x)
result = scaler.transform(data)#通过接口 导出结果
result


在这里插入图片描述
也可以一步达成训练和导出结果

result_ =scaler.transform(data)#训练和导出结果一步达成
result_x


在这里插入图片描述
将归一化的数据逆转为原数据

scaler.inverse_transform(result)#将归一化后的结果逆转


在这里插入图片描述
将范围设置为[0,5]

data = [[-1,2],[-0.5,6],[0,10],[1,18]]
scaler = MinMaxScaler(feature_range=[5,10])#实例化带范围5-10
result = scaler.fit_transform(data)#一步导出结果
result


在这里插入图片描述
当数据量多于大时,使用:

# scaler = scaler.partial_fit(data)  #大数据使用


使用numpy处理数据归一化

import numpy as np
X= np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])
#归一化
X_nor= (X -  X.min(axis=0)) /(X.max(axis=0) - X.min(axis=0))
X_nor


在这里插入图片描述
逆转归一化:

#逆转归一化
X_returned= X_nor *(X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)
X_returned


在这里插入图片描述

2.标准化

当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization)在这里插入图片描述
导入库和定义数据

from sklearn.preprocessing import StandardScaler
data = [[-1,2],[-0.5,6],[0,10],[1,18]]


进行数据标准化

scaler = StandardScaler()#实例化
scaler.fit(data) #fit,本质是生成均值和方差
scaler.mean_#查看均值的属性
scaler.var_#查看方差的属性
x_std = scaler.transform(data)#通过接口导出结果
x_std


在这里插入图片描述
查看均值和方差

x_std.mean()#导出的结果是一个数组,用mean()查看均值
x_std.std()#查看方差


一步实现标准化

scaler = StandardScaler()#实例化
scaler.fit_transform(data)#一步达成结果



在这里插入图片描述
逆转标准化

scaler.inverse_transform(x_std)#逆转标准化


在这里插入图片描述

标准化与归一化比较

大多数机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中StandardScaler往往是最好的选择。

MinMaxScaler在不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。

建议先试试看StandardScaler,效果不好换MinMaxScaler。
在这里插入图片描述

3.缺失值填充

机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。

导入数据

import pandas as pd
data = pd.read_csv("../数据/Narrativedata.csv",index_col=0)
#将第0列作为索引index_col=0
data.head()#查看数据前五行


在这里插入图片描述
查看数据情况:

data.info()


在这里插入图片描述
发现Age列右200多缺失值,Embarked列有两个缺失值。

填补age列

将数据装成二维

Age = data.loc[:,"Age"].values.reshape(-1,1)#sklearn种特征矩阵必须是二维
Age.shape#查看维度
Age[:20]#查看前二十行


在这里插入图片描述
使用,均值、中位数、0对数据进行填充
实例化

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer()#实例化。默认均值填补
imp_median = SimpleImputer(strategy="median")#用中位数填补
imp_0 = SimpleImputer(strategy="constant",fill_value=0)#用0填补


得到结果

imp_mean =imp_mean.fit_transform(Age)#使用ift_trankform一步完成调取结果
imp_median = imp_median.fit_transform(Age)
imp_0 = imp_0.fit_transform(Age)


查看填充好的数据:

imp_mean[1:20,:]#查看用均值填充的前二十行
imp_0[1:20,:]#查看用0填充的前二十行
imp_median[1:20,:]#查看用中位数填充的前二十行


在这里插入图片描述
在这里使用中位数对原数据进行填充

data.loc[:,"Age"] = imp_median  #用中位数对元数据填充
data.info()#查看数据情况


在这里插入图片描述
对Embarked列进行众数填充

Embarked = data.loc[:,"Embarked"].values.reshape(-1,1)#转换成二维
imp_mode = SimpleImputer(strategy="most_frequent")#使用众数实例化
data.loc[:,"Embarked"] = imp_mode.fit_transform(Embarked)#进行填补并赋值给元数据
data.info()#查看原数据


在这里插入图片描述
用Pandas和Numpy进行填补,效果也是一样的

导入数据:

import pandas as pd
data1 = pd.read_csv("../数据/Narrativedata.csv",index_col=0)

data1.head()


填补:


data1.loc[:,"Age"] = data1.loc[:,"Age"].fillna(data1.loc[:,"Age"].median())
#.fillna 在DataFrame里面直接进行填补



删除:

data1.dropna(axis=0,inplace=True)
#.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
#参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False


在这里插入图片描述

4.处理分类型特征:编码与哑变量

在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据(其实手写决策树和普斯贝叶斯可以处理文字,但sklearn中规定必须导入数值型)。然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。比如说,学历的取值可以是[“小学”,“初中”,“高中”,“大学”],付费方式可能包含[“支付宝”,“现金”,“微信”]等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。

标签专用,能够将分类转换为分类数值

导入库

from sklearn.preprocessing import LabelEncoder


导入数据

import pandas as pd
data2 = pd.read_csv("../数据/Narrativedata.csv",index_col=0)

data2.head()


在这里插入图片描述
提取数据,实例化

y = data2.iloc[:,-1]  #要输入的是标签,不是特征矩阵,所以允许一维
le = LabelEncoder()  #实例化
le = le.fit(y)#导入数据
label = le.transform(y)#接口调取结果
le.classes_  #查看标签种到底有多少类别
label



在这里插入图片描述
已经将[‘No’, ‘Unknown’, ‘Yes’]转换成了0,1,2.

也可以一步到位:

le.fit_transform(y)  #也可以直接一步到位


逆转为原数据

le.inverse_transform(label)#逆转


在这里插入图片描述
将运行结果赋值到原数据

data2.iloc[:,-1] = label  #让标签等于运行的结果
data2.head()


在这里插入图片描述
简单,快捷的方式:运行分类转换:

#下面这两行代码即可实现,分类转换
from sklearn.preprocessing import LabelEncoder
data2.iloc[:,-1] = LabelEncoder().fit_transform(data.iloc[:,-1])


特征专用,能够将分类特征转换为分类数值

导入库

from sklearn.preprocessing import OrdinalEncoder


获取数据

data3 = data.copy()#复制一份数据
data3.head()


在这里插入图片描述
查看列种包含的名称

OrdinalEncoder().fit(data3.iloc[:,1:-1]).categories_#查看中间列的名称,和classes_,功能一样


在这里插入图片描述
实例化,对数据直接进行转换

data3.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data3.iloc[:,1:-1])
data3.head()


在这里插入图片描述
发现已经将”Sex“,” Embarked“两个列种的[‘female’, ‘male’]和[‘C’, ‘Q’, ‘S’]转换成了0,1和0,1,2

独热编码,创建哑变量

类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量
向算法传达最准确的信息:
在这里插入图片描述
这样的变化,让算法能够彻底领悟,原来三个取值是没有可计算性质的,是“有你就没有我”的不等概念。在我们的
数据中,性别和舱门,都是这样的名义变量。因此我们需要使用独热编码,将两个特征都转换为哑变量。

导入库和数据提取

from sklearn.preprocessing import OneHotEncoder
x = data.iloc[:,1:-1]


实例化后转换数据,数组展示

OneHotEncoder(categories="auto").fit_transform(x).toarray()#装换成数组,可以显示结果


在这里插入图片描述
逆转数据

pd.DataFrame(enc.inverse_transform(result))#还原回原数据


在这里插入图片描述
查看返回 的稀疏矩阵名称

enc.get_feature_names()#返回稀疏矩阵名称,便于判别


在这里插入图片描述

合并数据

newdata = pd.concat([data,pd.DataFrame(result)],axis=1)#合并数据

newdata.head()


在这里插入图片描述
删除[“Sex”,“Embarked”]列,改变列名称

newdata.drop(["Sex","Embarked"],axis=1,inplace=True)#删除这两列
newdata.columns = ["Age","Survived",'x0_female','x0_male','x1_C','x1_Q','x1_S']#改变列名称
newdata.head()


在这里插入图片描述
相关引用库:

在这里插入图片描述

5.处理连续型特征:二值化与分段
二值化

根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。二值化是对文本计数数据的常见操作,分析人员可以决定仅考虑某种现象的存在与否。它还可以用作考虑布尔随机变量的估计器的预处理步骤(例如,使用贝叶斯设置中的伯努利分布建模)。

将年龄二值化

获取数据

data4 = data.copy()


导入库

from sklearn.preprocessing import Binarizer


将年龄为30以下的化为0,30以上的化为1

x = data4.iloc[:,0].values.reshape(-1,1) #类为特征专用,所以不能使用一维数组
transformer = Binarizer(threshold=30).fit_transform(x)#将30以上的化为1,30以下的化为0
transformer


在这里插入图片描述
保存数据

data4.iloc[:,0] = transformer#将数据保存的原数据种
data4.head()


在这里插入图片描述

分箱

preprocessing.KBinsDiscretizer这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。总共包含三个重要参数:
在这里插入图片描述
导入库,数据

from sklearn.preprocessing import KBinsDiscretizer
x = data.iloc[:,0].values.reshape(-1,1)


采用ordinal方式编码

est = KBinsDiscretizer(n_bins=3,encode="ordinal",strategy="uniform")
est.fit_transform(x)  


查看转换后分的箱

set(est.fit_transform(x).ravel())   #查看转换后分的箱:变成了一列种的三箱   #ravel()降维函数


在这里插入图片描述

采用onehot方式编码分箱

est = KBinsDiscretizer(n_bins=3,encode = "onehot",strategy="uniform")
est.fit_transform(x).toarray()  #查看转换后分的箱,变成了哑变量


在这里插入图片描述

如果大家对Python感兴趣,这套python学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

① Python所有方向的学习路线图,清楚各个方向要学什么东西

② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析

③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论

④ 20款主流手游迫解 爬虫手游逆行迫解教程包

⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解

⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解

⑦ 超300本Python电子好书,从入门到高阶应有尽有

⑧ 华为出品独家Python漫画教程,手机也能学习

⑨ 历年互联网企业Python面试真题,复习时非常方便

在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈

在这里插入图片描述

在这里插入图片描述

资料领取

这份完整版的Python全套学习资料已经上传网盘,朋友们如果需要可以点击下方微信卡片免费领取 ↓↓↓【保证100%免费】

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据预处理数据分析和机器学习中非常重要的一步,它可以帮助我们准确地分析数据,提高模型的预测能力。下面是一些常用的数据预处理方法的 Python 代码实现: 1. 数据清洗 数据清洗是指删除或修复无效、不完整、重复或错误的数据。常见的数据清洗技术包括: - 删除重复数据: ```python df.drop_duplicates(inplace=True) ``` - 查找缺失值: ```python df.isnull().sum() ``` - 删除缺失值: ```python df.dropna(inplace=True) ``` - 填充缺失值: ```python df.fillna(value, inplace=True) ``` 2. 特征选择 特征选择是指选择最有意义的数据特征,以提高模型的准确性。常见的特征选择技术包括: - 方差选择法: ```python from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold() X_new = selector.fit_transform(X) ``` - 相关系数法: ```python from scipy.stats import pearsonr def select_feature(X, y, threshold): scores, pvalues = [], [] for i in range(X.shape[1]): score, pvalue = pearsonr(X[:, i], y) scores.append(score) pvalues.append(pvalue) scores = np.abs(scores) idx = np.argsort(scores)[::-1] return X[:, idx][:, scores[idx] > threshold] ``` 3. 数据归一化 数据归一化是指将数据进行缩放,以便于不同的特征值之间进行比较。常见的数据归一化技术包括: - 最小-最大归一化: ```python from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) ``` - Z-Score标准化: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` 4. 数据转换 数据转换是指将数据进行转换,以便于进行分析和建模。常见的数据转换技术包括: - One-Hot编码: ```python from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() X_encoded = encoder.fit_transform(X) ``` - 文本转向量: ```python from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() X_vectorized = vectorizer.fit_transform(X) ``` 以上是常见的数据预处理方法,当然还有很多其他的方法,可以根据具体需求进行选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值