一文学会用python进行数据预处理

简介: 一文学会用python进行数据预处理

数据预处理

1、概述

实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的挖掘结果,大量的数据预处理技术随之产生。

2、缺失值处理

查找缺失值

元素级别的判断,把对应所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False。

data.isnull()

结果示例如下,如果某个元素是缺失值则会显示True(下图红框中所示)

image.png

查看各列(行)是否存在空值,True表示有空值,参数axis=0代表查看列,axis=1代表查看行。

data.isnull().any(axis=0)

image.png

计算含有空值的列数(行数),参数axis。

data.isnull.any(axis=0).sum()

image.png

将某一列中为空或者NA的个数统计出来。

data['column_name'].isnull().sum()

image.png

列出在某一列中带有缺失值的所有行。

data[data['column_name'].isnull().values==True]

缺失值处理方法

       1、删除法

       2、替补法

       3、插补法


删除法

删除法适用于变量有较大缺失且对研究目标影响不大的情况。

del data['column_name'] # 删除某一列
data['column_name'].dropna()   #删除某一行为空值或者NA的元素
data.drop(data.columns[[0,1]],axis=1,inplace=True)  
#删除第1,2列,设定axis是为了确定要删的标签是属于column还是index,inplace=True表示直接就在内存中替换了,不用二次赋值生效。
data.dropna(axis=0)         #删除带有空值的行
data.dropna(axis=1)        #删除带有空值的列

替换法

如果缺失值所在变量为数值型,一般用均值来替换;如果为非数值型变量,则用中位数或者是众数来替换。

data['column_name']=data['column_name'].fillna(num) 
#将该列中的空值或者NA填充为num.其中num是某位数字,这个代码用于用数字进行替换。
data['column_name'][data['column_name'].isnull()]=data['column_name'].dropna().mode().values
#如果该列是字符串的,就将该列中出现次数最多的字符串赋予空值,mode()函数就是取出现次数最多的元素
data['column_name'].fillna(method='pad') 
#使用前一个数值替代空值或者NA,就是NA前面最近的非空数值替换
data['column_name'].fillna(method='bfill',limit=1) 
#使用后一个数值替代空值或者NA,limit=1就是限制如果几个连续的空值,只能最近的一个空值可以被填充。
data['column_name'].fillna(data['column_name'].mean()) 
#使用平均值进行填充
data= data.fillna(data.mean())
#将缺失值全部用该列的平均值代替,这个时候一般已经提前将字符串特征转换成了数值。

插补法

使用删除法和替换法有时会存在信息浪费的问题,并且数据结构也会发生变动,导致得到有偏的统计结果。用插补法可以很轻松的解决此类问题,常用的插补法有回归插补、多重插补、拉格朗日插补等。

3、异常值处理

异常值的识别

在异常值处理之前需要对异常值进行识别,一般多采用单变量散点图或是箱线图来达到目的,利用图形来判断数值是否处于正常值范围。

绘制箱线图展示缺失值:

from matplotlib import pyplot as plt
import pandas as pd
dataArray=pd.DataFrame([5,6,2,4,8,9,10,2,4,5,3,5,15])
plt.boxplot(dataArray[0],labels=["A"])
plt.title("Box-plot Test")
plt.show()

image.png

四分位距

IQR=Q_3-Q_1

异常值下限

down_line=Q_1-1.5*IQR

异常值上限

up_line=Q_3+1.5*IQR

注释:图中的长方形中的值为正常值,超出范围即可判定为异常值。

异常值处理的常用方法

       1、视为缺失值

       2、删除含有异常值的记录

       3、平均值修正

       4、不处理


4、数据集成

数据集成就是将多个数据源合并存放在一个一致的数据存储中的过程,根据需求而定。

5、数据变换

数据变换主要是对数据进行规范化处理、连续变量的离散化以及变量属性的构造,将数据转换成“适当的”形式,以满足挖掘任务及算法的需要。


主要用到sklearn的preprocessing模块来介绍


数据转换

把一些属性特征转换为数据的过程,例如性别这个字段,有男和女这两个元素。那我们就设0代表男,1代表女。

df[u'性别'] = df[u'性别'].map({'女': 1, '男': 0})

数据标准化

经过数据标准化变化后各维特征有0均值、单位方差,所以也叫做z-score规范化(零均值规范化)。计算的方法是将特征值减去均值,除以标准差。

sklearn.preprocessing.scale(X)

通常情况下会把train和test放在一起进行标准化,或者在train集上做标准化后,用同样的标准化器去标准化test集,此时可以用scaler。

scaler = sklearn.preprocessing.StandardScaler().fit(train)
scaler.transform(train)
scaler.transform(test)

最大-最小规范化

最小-最大规范化对原始数据进行线性变换,变换到[0,1]区间(也可以是其他固定最小最大值的区间)

min_max_scaler = sklearn.preprocessing.MinMaxScaler()

规范化

规范化是将不同变化范围的值映射到相同的固定范围,常见的是[0,1],此时也称为归一化。

X = [[ 1, -1, 2],[ 2, 0, 0], [ 0, 1, -1]]
sklearn.preprocessing.normalize(X, norm='l2')   # 默认L2标准化

image.png

特征二值化

给定阈值,将特征转换为0/1

binarizer = sklearn.preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)

6、数据规约

维灾难

维灾难是指这样的现象:随着数据维度的增加,许多数据分析变的非常困难。特别是随着维度增加,数据在它所占据的空间中越来越稀疏。


维规约

       1、主成分分析(PCA)

       2、奇异值分解(SVD)

相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据挖掘
python数据分析——数据预处理
数据预处理是数据分析过程中不可或缺的一环,它的目的是为了使原始数据更加规整、清晰,以便于后续的数据分析和建模工作。在Python数据分析中,数据预处理通常包括数据清洗、数据转换和数据特征工程等步骤。
106 0
|
19天前
|
数据采集 自然语言处理 搜索推荐
python【包含数据预处理】基于词频生成词云图
背景目的 有一篇中文文章,或者一本小说。想要根据词频来生成词云图。
|
19天前
|
数据采集 自然语言处理 搜索推荐
python 【包含数据预处理】基于词频生成词云图
这段文本是关于如何使用Python基于词频生成词云图的教程。内容包括:1) 中文分词的必要性,因中文无明显单词边界及语言单位特性;2) 文本预处理步骤,如移除特殊符号、网址、日期等;3) 使用`data_process`函数清除无用字符;4) `getText`函数读取并处理文本为句子数组;5) 使用jieba分词库进行分词和词频统计;6) 示例代码展示了从分词到生成词云的完整流程,最后展示生成的词云图。整个过程旨在从中文文本中提取关键词并可视化。
46 5
python 【包含数据预处理】基于词频生成词云图
|
2天前
|
数据采集 机器学习/深度学习 数据可视化
关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理,进行数据探索,选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。
【7月更文挑战第5天】这是一个关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理(填充缺失值,处理异常值),进行数据探索(可视化和统计分析),选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。此案例展示了数据科学的典型流程。
14 2
|
26天前
|
数据采集 机器学习/深度学习 数据挖掘
使用Python进行数据预处理与清洗的最佳实践
本文探讨了Python在数据预处理和清洗中的关键作用。预处理包括数据收集、整合、探索、转换和标准化,而清洗则涉及缺失值、重复值、异常值的处理及数据格式转换。文中提供了使用pandas库进行数据读取、缺失值(如用平均值填充)和重复值处理、异常值检测(如IQR法则)以及数据转换(如min-max缩放)的代码示例。此外,还讲解了文本数据清洗的基本步骤,包括去除标点、转换为小写和停用词移除。整体上,文章旨在帮助读者掌握数据预处理和清洗的最佳实践,以提高数据分析的准确性和效率。
33 2
|
2月前
|
机器学习/深度学习 数据采集 算法
Python中的机器学习入门:从数据预处理到模型评估
Python中的机器学习入门:从数据预处理到模型评估
236 35
|
2月前
|
机器学习/深度学习 数据采集 PyTorch
在Python中进行深度学习的数据预处理
在Python中进行深度学习的数据预处理
47 2
|
11月前
|
数据采集 Python 数据可视化
[Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念](三)
[Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念](三)
|
11月前
|
数据采集 Python
[Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念](二)
[Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念](二)
|
2月前
|
XML JSON 数据格式
Python Pandas PK esProc SPL,谁才是数据预处理王者?
Python Pandas PK esProc SPL,谁才是数据预处理王者?

相关实验场景

更多