进行数据分析时,需要预先把进入模型算法的数据进行数据预处理。一般我们接收到的数据很多都是“脏数据”,里面可能包含缺失值、异常值、重复值等;同时有效标签或者特征需要进一步筛选,得到有效数据,最终把原始数据处理成符合相关模型算法的输入标准,从而进行数据分析与预测。下面将介绍数据预处理中的四个基本处理步骤:

目录

一、数据清洗

1.缺失值

1.1缺失值可视化

1.2缺失值处理

2.异常值

2.1异常值可视化

2.2异常值识别

2.3异常值处理

3.重复值

3.1重复值处理

二、数据集成

1.运用merge函数合并数据

2.运用concat函数进行数据连接

3.运用combine_first函数合并数据

三、数据变换

1.特征归一化

1.1总和标准化

1.2标准差标准化

1.3极大值标准化

1.4极差标准化(区间放缩法、0-1标准化、最值归一化)

2.特征二值化

3.连续特征变换

4.定性特征哑编码:One-hot编码

四、数据归约(特征选择)


一、数据清洗

数据清洗主要将原始数据中的缺失值、异常值、重复值进行处理,使得数据开始变得“干净”起来。

1.缺失值

1.1缺失值可视化

运用python中的missingno库,此库需要下载导入

#提前进行这一步:pip install missingno
#导入相关库
import missingno as msno
import pandas as pd
import numpy as np

可视化方法一:无效矩阵的数据密集显示

#读取文件
df=pd.read_csv('C:/Users/27812/Desktop/1-Advertising.csv')#缺失值的无效矩阵的数据密集显示
fig1=msno.matrix(df,labels=True)
b=fig1.get_figure()
b.savefig('C:/Users/27812/Desktop/a.png',pdi=500)#保存图片

注意:其中白色的横条表示为缺失值,黑色部分表示有值的部分

可视化方法二:运用列的无效简单可视化

#缺失值的条形图显示
fig2=msno.bar(df)
b=fig2.get_figure()
b.savefig('C:/Users/27812/Desktop/b.png',pdi=500)#保存图片

1.2缺失值处理

方法一:当缺失率少且重要度较高时,运用pandas里面的fillna函数进行填充。

方法二:当缺失率高且重要度较低时,可以运用pandas里面的dropna函数直接进行删除。

方法三:当缺失率高且重要度高时,运用插补法或建模法。其中插补法有:随机插补法、多重插补法、热平台插补、拉格朗日插值法、牛顿插值法等;建模法:利用回归、贝叶斯、决策树等模型对缺失数据进行预测。

2.异常值

异常值的来源主要分为人为误差和自然误差,例如:数据输入错误、测量误差、故意异常值、抽样错误、自然异常值、数据处理错误等等。

2.1异常值可视化

主要运用python里面的seaborn库绘制箱线图,查看异常值,如何绘制请详看上期文章

2.2异常值识别

方法一:Z-score方法

# 通过Z-Score方法判断异常值,阙值设置为正负2
# 复制一个用来存储Z-score得分的数据框,常用于原始对象和复制对象同时进行操作的场景
df_zscore = df.copy()
for col in all_colums: df_col = df[col]  z_score = (df_col - df_col.mean()) / df_col.std()  # 计算每列的Z-score得分df_zscore[col] = z_score.abs() > 2  # 判断Z-score得分绝对值是否大于2,大于2即为异常值
print(df_zscore)#显示为True的表示为异常值
# 剔除异常值所在的行
print(df[df_zscore['列名一'] == False])
print(df[df_zscore['列名二'] == False])
print(df[df_zscore['列名三'] == False])

方法二:基于正态分布的离群点检测(3原则)

#查看是否服从正态分布
# pvalue大于0.05则认为数据呈正态分布
from scipy import stats
mean = df['列名一'].mean()
std = df['列名一'].std()
print(stats.kstest(df['列名一'],'norm',(mean,std)))
# 选取小于3个标准差的数据
df = df[np.abs(df['列名一']- mean) <= 3*std]
#若不成正态分布,用远离平均值的多少倍标准差来筛选异常值
# 定义远离平均值4倍标准差为异常值
a = mean + std*4
b = mean - std*4
df = df[(df['Age'] <= a) & (df['Age'] >= b)]

方法三:箱线图分析(四分位法)

# 算出上界和下届
q1 = df["列名一"].quantile(0.25)
q3 = df["列名一"].quantile(0.75)
iqr = q3 - q1
bottom = q1 - 1.5*iqr
upper = q3 + 1.5*iqr# 去除异常值
df[(df['列名一'] >= bottom) & (df['列名一'] <= upper)]

方法四:简单统计分析

主要是运用pandas里面的describe函数进行查看

#读取文件
df=pd.read_csv('C:/Users/27812/Desktop/1-Advertising.csv')
print(df.describe())

2.3异常值处理

方法一:当异常值较少时,可删除

方法二:不处理(看算法是否对异常值敏感)

方法三:用平均值代替

方法四:视为缺失值,以处理缺失值的方法进行处理

3.重复值

3.1重复值处理

运用pandas里面的duplicated函数去重

#查看是否有重复值
print(df[columns].nunique())
#检测重复值
print(df.duplicated())#出现为TRUE的则是重复值
#提取重复值
print(df[df.duplicated()])
#如果有重复值,则用df.drop_duplicated()方法去重

二、数据集成

数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。

利用pandas合并数据:

1.运用merge函数合并数据

import pandas as pd
symble=pd.DataFrame({'cat':['a','b','c','d'],'color':['red','yellow','blue','black']})
age=pd.DataFrame({'cat':['a','b','c','d'],'age':[2,4,6,8]})
print(pd.merge(symble, age))
'''结果如下cat   color  age
0   a     red    2
1   b  yellow    4
2   c    blue    6
3   d   black    8
'''

2.运用concat函数进行数据连接

import pandas as pd
symble=pd.DataFrame({'cat':['a','b','c','d'],'color':['red','yellow','blue','black']})
age=pd.DataFrame({'cat':['a','b','c','d'],'age':[2,4,6,8]})
print(pd.concat([symble,age],axis=0))
'''结果如下cat   color  age
0   a     red  NaN
1   b  yellow  NaN
2   c    blue  NaN
3   d   black  NaN
0   a     NaN  2.0
1   b     NaN  4.0
2   c     NaN  6.0
3   d     NaN  8.0
'''

3.运用combine_first函数合并数据

此函数需要合并的两个DataFrame存在重复索引

import pandas as pd
symble=pd.DataFrame({'cat':['a','b','c','d'],'color':['red','yellow','blue','black']})
age=pd.DataFrame({'cat':['a','b','c','d'],'age':[2,4,6,8]})
print(symble.combine_first(age))
'''结果如下age cat   color
0    2   a     red
1    4   b  yellow
2    6   c    blue
3    8   d   black
'''

三、数据变换

数据变换即对数据进行规范化处理,以便后续的信息挖掘。常见的数据变换有:特征归一化、特征二值化、连续特征变换、定性特征哑编码等。

python的sklearn库中的Preprocessing(预处理)模块,几乎包含数据预处理的所有内容。

1.特征归一化

特征归一化也叫数据无量纲化,主要包括:总和标准化、标准差标准化、极大值标准化、极差标准化。注意:基于树的方法是不需要进行特征归一化的,例如GBDT、bagging、boosting等,而基于参数的模型或基于距离的模型,则都需要进行特征归一化。

1.1总和标准化

总和标准化处理后的数据介于(0,1)之间,并且它们的和为1。总和标准化的步骤和公式也非常简单:分别求出各聚类要素所定义的数据的总和,以各要素的数据除以该要素的数据总和。

1.2标准差标准化

标准差标准化处理后所得到的新数据,各要素(指标)的平均值为0,标准差或方差为1。

from sklearn import preprocessing
x_scale=preprocessing.scale(df)

1.3极大值标准化

极大化标准化后的新数据,各要素的最大值为1,其余各项都小于1。(为稀疏矩阵数据设计)

1.4极差标准化(区间放缩法、0-1标准化、最值归一化)

经过极差标准化处理后的新数据,各要素的极大值为1,极小值为0,其余值均在0到1之间。如果数据中有离群点,对数据进行均值和方差的标准化效果并不好,这时候可以使用robust_scale和RobustScaler作为代替,它们有对数据中心化和数据的缩放鲁棒性更强的参数。

from sklearn import preprocessing
min_max_scaler=preprocessing.MinMaxScaler()
x_minmax=min_max_scaler.fit_transform(df)#极差标准化
#对后面测试数据进行训练
x_test_minmax=min_max_scaler.transform(df_test)

2.特征二值化

特征二值化的核心在于设定一个阈值,将特征与该阈值进行比较后,转换为0或1,它的目的是将连续数值细颗粒度的度量转换为粗粒度的度量。

from sklearn.preprocessing import Binarizer
Binarizer=Binarizer(threshold=20).fit_transform(df)#阈值设置视情况而定

3.连续特征变换

连续特征变换的常用方法有三种:基于多项式的数据变换、基于指数函数的数据变换、基于对数函数的数据变换。连续特征变换能够增加数据的非线性特征捕获特征之间的关系,有效提高模型的复杂度。

4.定性特征哑编码:One-hot编码

one-hot编码又称为独热编码,即一位代表一种状态,及其信息中,对于离散特征,有多少个状态就有多少个位,且只有该状态所在位为1,其他位都为0。

from sklearn.preprocessing import OneHotEncoder
enc=OneHotEncoder().fit_transform(df['列名'])

四、数据归约(特征选择)

数据归约指在尽可能保持数据原貌的前提下,最大限度地精简数据量。数据归约主要有两个途径:属性选择和数据采样,分别针对原始数据集中的属性和记录。

数据归约的策略:

1.数据立方体聚集:聚集操作用于数据集中的数据。

2.维归约:可以检测并删除不相关、弱相关或冗余的属性或维度。

3.数据压缩:使用编码机制压缩数据集。

4.数值归约:用替代的、较小的数据表示代替或估计数据,如参数模型(只需要存放校型参数,而不是实际数据)或非参数方法,如聚类、选样和使用直方图。

5.离散化和概念分层生产:属性的原始值用区间值或较高层的概念替换,概念分层允许挖掘多个抽象层上的数据,是数据挖掘的一种强有力的工具。

python数据预处理—数据清洗、数据集成、数据变换、数据归约相关推荐

  1. 数据预处理——数据清洗、异常值与重复数据的检测

    数据预处理(Data Preprocessing) Where are data from? Why Data Preprocessing? How to handle missing data? O ...

  2. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)

    机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...

  3. Python数据分析中数据预处理:编码将文字型数据转换为数值型

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析中 数据预处理:编码 将文字型数据转换为数值型 选择题 对于以下pyth ...

  4. 使用jupyter进行数据预处理-数据清洗

    使用jupyter进行数据预处理-数据清洗 使用jupyter进行数据预处理-数据清洗 查询各字段的数据类型 使用pandas对列进行重命名 缺失值处理 判断缺失值是否存在 处理缺失值([https: ...

  5. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  6. GLASS数据预处理/MRT工具批量处理MODIS数据

    GLASS数据预处理/MRT工具批量处理MODIS数据 准备工作 处理步骤 准备工作 1.数据准备:进行网站批量下载MRT数据,存储方式为数据–年份–天(例如GLASSFVC数据为8天分辨率,001. ...

  7. 【Python实战】数据预处理(数据清理、集成、变换、归约)

    [Python实战]数据预处理 前言 数据预处理概述 数据清理 异常数据处理 1.异常数据分析 2.异常数据处理方法 缺失值处理 噪声数据处理 数据集成 1.实体识别 2.冗余属性 3.数据不一致 数 ...

  8. 数据预处理——数据清洗

    在数据挖掘中,海量的原始数据中存在着大量不完整.不一致.有异常的数据,严重影响到数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同时进行数 ...

  9. Python数据挖掘 数据预处理案例(以航空公司数据为例)

    Python数据预处理 一.内容: 1.数据清洗 2.数据集成 3.数据可视化 二.实验数据 根据航空公司系统内的客户基本信息.乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGH ...

最新文章

  1. JSON反序列的问题原因查找
  2. get_sheet_of_light_result_object_model_3d算子说明
  3. (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  4. 关于flex布局的深入学习
  5. SharePoint Server和Office 365之间的混合模式集成概述
  6. centos 7 firewalld 设置
  7. double和float的误区!
  8. 链表相关的面试题型总结
  9. python Selenium启动chromedriver
  10. text无法使用空格 unity_简单的介绍几种在unity中对数据的存储和读档的方法!
  11. 数据挖掘概念与技术(第三版)课后答案——第五章
  12. Android ROS开发环境搭建
  13. 学习笔记 Tianmao 篇 SliderLayout 的使用
  14. 审计一波appcms-持续更新。
  15. PCB线路板进行热设计的方法都有哪些?
  16. Linux:配置本地yum源仓库
  17. 拼多多新店铺上架多少宝贝合适?是越多越好吗?
  18. ftp安装包windows版_连接远程Linux系统的免费SSH与FTP软件介绍
  19. 【Java实现链表操作】 万字肝爆 !链表的图文解析(包含链表OJ练习解析)
  20. javascript正则检测用户名验证密码邮箱手机号

热门文章

  1. python一行搞定Z-score标准化
  2. 【实战篇】是时候彻底弄懂BERT模型了(收藏)
  3. FIS学习——利用Matlab创建模糊推理系统Ⅰ
  4. 更改用户账户控制(允许应用对你的电脑进行更改吗?)
  5. 简单理解Focal Loss
  6. java float强制转换int类型_float型怎样强制转换成int型
  7. 核废料该如何处理,奥特曼发话了…
  8. 华为php工程师面试问题,2020年10月php面试笔记
  9. Java求数组的平均值
  10. 智慧厕所引导系统的应用