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

这篇具有很好参考价值的文章主要介绍了python数据预处理—数据清洗、数据集成、数据变换、数据归约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

 一、数据清洗

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)#保存图片

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

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

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

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

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

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

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

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.离散化和概念分层生产:属性的原始值用区间值或较高层的概念替换,概念分层允许挖掘多个抽象层上的数据,是数据挖掘的一种强有力的工具。文章来源地址https://www.toymoban.com/news/detail-432929.html

到了这里,关于python数据预处理—数据清洗、数据集成、数据变换、数据归约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据清洗和预处理

    预计更新 一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3.4 Python的函数和模

    2024年02月07日
    浏览(53)
  • 头歌:数据预处理之数据清洗

    本关任务:完成泰坦尼克号遇难数据的清洗。   案例背景 泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。 编程要求 根据提示,你需要完成: 缺失值填充 离群点检测

    2024年02月11日
    浏览(43)
  • 数据挖掘 | 实验一 数据的清洗与预处理

    1)了解数据质量问题、掌握常用解决方法; 2)熟练掌握数据预处理方法,并使用Python语言实现; PC机 + Python3.7环境(pycharm、anaconda或其它都可以) 清洗与预处理的必要性 在实际数据挖掘过程中,我们拿到的初始数据,往往存在缺失值、重复值、异常值或者错误值,通常这

    2023年04月08日
    浏览(48)
  • R语言 | GEO表达矩阵的数据清洗与预处理

    目录 1.去除/// 2.去除重复的基因名 3.表达矩阵自动log2化 4.矫正差异 表达量矩阵的数据清洗应该在 注释完成之后 进行,并且下列操作最好按顺序进行 如下图的表格所示,同一个探针ID对应的gene有多个,用///分隔着,而我们想获得一个探针ID只对应一个基因symbol的表格。 表达

    2024年02月13日
    浏览(41)
  • 云计算与大数据分析:如何实现高效的数据清洗与预处理

    随着互联网的普及和数据的快速增长,数据分析和处理成为了企业和组织中的重要组成部分。大数据分析是指利用大量数据来发现新的信息和洞察,从而为企业和组织提供决策支持。云计算是一种基于互联网的计算资源共享和分配模式,它可以让企业和组织更加高效地利用计

    2024年04月11日
    浏览(49)
  • python数据预处理

    输出结果如下: 观察可知,【销量】存在一个缺失值,本例将缺失值所在行进行删除处理 输出结果如下: 输出结果如下: 观察可知,箱线图上下边缘存在异常值,本例通过四分位法对异常值进行处理,即:超出上边缘的异常值让其落在上边缘,低于下边缘的异常值让其落在

    2024年02月13日
    浏览(43)
  • Python中对CSV数据预处理

    CSV(Comma Separated Values)是一种常用的数据格式,它是以逗号作为分隔符的纯文本文件,通常用于存储大量的数据。在数据分析和机器学习领域,CSV数据预处理是一个必不可少的步骤。在本篇博客中,我们将介绍Python中对CSV数据预处理的所有步骤。 在Python中,我们可以使用

    2024年02月10日
    浏览(42)
  • 【Python机器学习】SVM——预处理数据

    为了解决特征特征数量级差异过大,导致的模型过拟合问题,有一种方法就是对每个特征进行缩放,使其大致处于同一范围。核SVM常用的缩放方法是将所有的特征缩放到0和1之间。 “人工”处理方法: 可以看到,最终的结果上训练集和测试集的精度都非常好,但还没有接近

    2024年01月17日
    浏览(42)
  • 数据挖掘学习——数据预处理方法代码汇总(python)

    目录 一、归一化处理方法 (1)min-max方法(离散归一化) (2)零-均值规范化方法 (3)小数定标规范化 二、插值法 (1)拉格朗日插值法 三、相关性分析 (1)pearson相关性系数 (2)spearman相关性系数 四、主成分分析(PCA) 归一化常用方法有: (1)min-max方法(离散归一化

    2024年02月08日
    浏览(71)
  • Python数据分析之特征处理笔记三——特征预处理(特征选择)

    书接上文,进行数据清洗过程后,我们得到了没有空值、异常值、错误值的数据,但想要用海量的数据来建立我们所需要的算法模型,仅仅是数据清洗的过程是不够的,因为有的数据类型是数值,有的是字符,怎样将不同类型的数据联系起来?以及在保证最大化信息量的前提

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包