【数学建模】python建模专用数据清洗代码(本人实践)

刚入坑的小白可以看一下,大佬勿喷,我也是小白,白的不能再白的那种,所以吧,我把我入坑时候大量搜索的代码,没日没夜调试的代码,能用的以及自己写的代码,给各位汇总,会以每篇文章的形式进行更新,所以各位记得点赞,关注,收藏!(要不然就找不到我了!)

问题一:什么是数据预处理?

答:数据预处理就是将大量的数据进行整齐话,对数据进行清洗,把没用的,或者是异常的(就是坏的)剔除掉,剔除掉呢就是删掉他就行了,然后空白值什么的进行删除就行了,就这么简单(在我建模的历程中没遇到过空白值,哈哈哈哈,看个人吧)

问题二:如何进行数据预处理?

答:数据预处理的方法主要包括去除唯一属性、处理缺失值、属性编码、数据标准化正则化、特征选择、主成分分析等。

一、去除唯一属性

就是简单的id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除就行了。

二、 缺失值处理

(一)缺失值的分类

完全随机缺失:指的是数据的缺失是完全随机的;
随机缺失:指的是数据的缺失不是完全随机的,和完全变量有关;
完全不随机缺失:指的是数据的缺失与不完全变量自身的取值相关; 缺失值会使得系统丢失了大量的有用信息,系统所表现出来的不确定性更加显著,系统中蕴含的确定性成分更难把握,包含空值的不完全变量会使得挖掘过程陷入混乱。

(二)缺失值处理的三种方法

直接使用含有缺失值的特征;删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全。
删除含有缺失值的特征:若变量的缺失率较高(大于80%),覆盖率较低,且重要性较低,可以直接将变量删除。
(1)均值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。
Ps : 定距型数据–数据的中间级,用数字表示个体在某个有序状态中所处的位置,不能做四则运算。例如,”受教育程度”,文盲半文盲=1,小学=2,初中=3,高中=4,大学=5,硕士研究生=6,博士及其以上=7。
(2)利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。
(3)极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
(4)多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。
多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。
假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。
当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。
上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。
多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。
1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。
2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。
以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

(5)插值法填充

包括随机插值,多重差补法,热平台插补,拉格朗日插值,牛顿插值等

(6)模型填充

使用回归、贝叶斯、随机森林、决策树等模型对缺失数据进行预测。

上述内容参考知乎[酒仙美嘉雪]的《数据分析中缺失值的处理方法》,数据分析中缺失值的处理方法 – 知乎,以及CSDN[marsjhao]的《机器学习算法笔记之6:数据预处理》,https://blog.csdn.net/marsjhao/

上面部分节选的是机器学习(三):数据预处理–数据预处理的基本方法 – 知乎 (zhihu.com)

其实主要就是

  • 缺失值查找
  • 缺失值删除
  • 缺失值填充

就这三步骤

下面我们就要开始在我们python中进行了!我们先导入我们的库!

import pandas as pd
import numpy as np

这个呢就是pandas库的调用来读取我们的excel表格, numpy库呢就是对数组进行处理的,所以一般都是先调用到这两个库,as的意思就是类似于一个简写让后面调用库的时候简单话

好了我们来导入我们的数据

df =pd.read_excel(r'C:\Users\14927\Desktop\数据.xls',sheet_name = 'Sheet1')  #读取数据
#如果是cvs文件 read_cvs

这个sheet_name也可以不写他就是用来定位你的工作表单的如果你想定位在第二个表单 那就改预先相对应的名字就可以了,默认不写就是第一个表单,看下面的图吧

【数学建模】python建模专用数据清洗代码(本人实践)

是吧很详细了吧,好啦,我们导入数据之后,我们先对空值进行检索,就是数据查找空值

df.info()

就这一行代码就可以了 ,你也不用去理解他的原理,你就输入进去,运行就是了

如何跑出来结果

【数学建模】python建模专用数据清洗代码(本人实践)

我把数据做成了这样大家看一下就可以了,好啦我们现在对我们的空值进行定位

df.isnull()

然后输入的结果

x y
0 False False
1 False False
2 False False
3 False False
4 False False
5 False False
6 False False
7 False False
8 False False
9 False False
10 False False
11 False True
12 False False
……….

后面我就不写了太长了,各位看到true就是我们的空值

对于这种值我们一般直接删除就行了,对数据影响不大

使用dropna(0)函数删除所有含Nan空值的行
df.dropna()

对于缺失的我们也可以用平均值等进行填充

#使用fillna函数填充空值
df.fillna(0)

这样填进去的就是0了

【数学建模】python建模专用数据清洗代码(本人实践)

然后我们可以指定位置进行填充

#指定列用指定值填充
df.fillna({'y':'2022'})

这样就可以了

三、重复值的处理

一样重复上面的操作进行导入数据

然后

df.drop_duplicates()  #没有设置默认全列重复行的删除,有重复列需要进行设置

这里我就不上数据图了,各位有不懂的评论回复留言我吧,

然后我们根据定位列去除重复值

df.drop_duplicates(subset='你的列的索引')

四、异常值得检测与处理

就是不正常的数据喽,解决方法

  • 删除;
  • 用正常值替换;(replace函数)
  • 研究数据异常的原因;

replace函数

df1=df["列的索引"].replace("目标","替换内容")

这样基本就完成了哦!

然后总结运行,下面就是我们的总结代码啦!各位拿到数据可以直接运行就可以了!

交论文时候别交我这个哈,切记,切记,切记!

import pandas as pd#调用库

df =pd.read_excel(r'C:\Users\14927\Desktop\数据.xls)  #读取数据
#如果是cvs文件 read_cvs

print(df.head(5))       #得到数据的前五行 进行判断

print(df.info())       #得到数据整体的格式

print(df.duplicated()) #查询重复值 此数据没有重复值

print(df.isnull())  #查缺失值 此数据没有缺失值

#此代码是建模前期数据预处理的代码
#有一些自己加一下吧,懂得都懂哈,哈哈哈哈哈,想要的留言评论我私发

Original: https://blog.csdn.net/xiaobo6122/article/details/124230838
Author: 小白波612
Title: 【数学建模】python建模专用数据清洗代码(本人实践)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/693307/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球