首页 > 编程语言 >一文学会用python进行数据预处理

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

时间:2023-02-21 17:09:48浏览次数:40  
标签:会用 name python 数据 缺失 空值 column data 预处理


目录

​​数据预处理​​

​​1、概述​​

​​2、缺失值处理​​

​​查找缺失值​​

​​缺失值处理方法​​

​​3、异常值处理​​

​​异常值的识别​​

​​异常值处理的常用方法​​

​​4、数据集成​​

​​5、数据变换​​

​​数据转换​​

​​数据标准化​​

​​最大-最小规范化​​

​​规范化​​

​​特征二值化​​

​​6、数据规约​​

​​维灾难​​

​​维规约​​


数据预处理

1、概述

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

2、缺失值处理

查找缺失值

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

data.isnull()

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

一文学会用python进行数据预处理_缺失值

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

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

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

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

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

一文学会用python进行数据预处理_缺失值_03

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

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

一文学会用python进行数据预处理_数据挖掘_04

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

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()

一文学会用python进行数据预处理_缺失值_05

四分位距

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标准化

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

特征二值化

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

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

6、数据规约

维灾难

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

维规约

        1、主成分分析(PCA)

        2、奇异值分解(SVD)

标签:会用,name,python,数据,缺失,空值,column,data,预处理
From: https://blog.51cto.com/u_15969421/6076764

相关文章

  • 在对数据进行预处理时,怎样处理类别型特征?
    什么样的特征是类别型特征?类别型特征主要是指性别(男/女),体型(胖/瘦/适中)等只有在选项内取值的特征,类别型特征的原始输入通常是字符串形式,除了决策树等少数模型能够直接处理字......
  • 基于Python绘制雷达图(非常好的学习例子)
    前言在学Python数据分析时,看到一篇论文,有一个非常好的雷达图例子。这篇论文我目前正在找,找到会更新在此。代码展示importanglesasanglesimportmatplotlibimport......
  • 14个Python处理Excel的常用操作,我先试过了,非常好用
    自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。这也是我写这篇文章的初衷。废话不说了,直接进入正题。数据是......
  • python 学习
    import与  fromimport区别import模块    不会跳过私有属性from模块import函数from模块import*   会跳过私有属性  from…import*语句与i......
  • python生成器
    1.生成器:使用生成器可以生成一个值的序列,用于迭代,并且这个值的序列不是一次生成的,而是使用一个,再生成一个,可以使程序节约大量内存。2.生成器创建:生成器对象是通过yield关......
  • python __slots__魔法
    先谈谈python中__dict__存储了该对象的一些属性类和实例分别拥有自己的__dict__在__init__中声明的变量,会存到实例的__dict__中类的静态函数、类函数、普通函数、全局......
  • python+playwright 学习-4.操作iframe
    前言iframe是web自动化里面一个比较头疼的场景,在Selenium中处理iframe需要切换来切换去非常麻烦。在playwright中,让其变得非常简单,我们在使用中无需切换iframe,直接定......
  • Python+uiautomator2写安卓手机脚本前期准备
    1.安装adb网上找一个或者FQ后官网下,然后配置环境变量即可C:\Users\lenovo>adbversionAndroidDebugBridgeversion1.0.39Revision3db08f2c6889-androidInstal......
  • 基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common
    1框架工具说明工具说明使用Unittest框架开源自动化测试框架,直接使用批量或指定用例运行Unittest框架可支持此功能log日志使用Python的logging库即可......
  • Python列表与元组
    1.列表的格式列表也是一个容器是可变数据类型[数据1,数据2,数据3,数据4,......]列表可以存储多个不同类型的数据2.列表基础操作列表是一个可变数据类型,所执行的操......