拉格朗日插值法在数据清洗中的应用
2022-06-09李丽萍
赵 莉,孙 娜,李丽萍,崔 杰
拉格朗日插值法在数据清洗中的应用
赵 莉,孙 娜,李丽萍,崔 杰
(辽宁工业大学 电子与信息工程学院,辽宁 锦州 121001)
为提高数据质量及使数据能够适用于数据分析及数据挖掘算法,获取的数据需要进行数据清洗,讨论了缺失值的处理方法,及使用python编程语言实现拉格朗日函数对数据集的清洗,并给出清洗前后线图用于对比分析。
数据清洗;拉格朗日;插值
目前,数据科学与分析技术引领了经济创新、竞争和生产力。数据科学的前导过程是数据采集和获取。在获取到的数据中,可能存在大量的异常数据,这些异常数据可能对数据分析算法产生不良影响,造成分析结果产生偏差,因此,在数据预处理阶段的数据清洗,是整个数据挖掘与分析过程中不可缺少的一个环节,其结果质量直接关系到模型效果和最终结果。
1 数据清洗的概念
简单说,数据清洗即清理数据中的错误。数据仓库中的数据是面向某一主题的数据的集合,一般情况下,数据是从多个业务系统中抽取而来而且包含历史数据,例如,爬虫获得的数据,从用户的日志文件获得的数据等,专业数据网站获得的数据及自身提供的数据。这些数据可能含有错误数据或者数据相互之间有冲突,也有可能存在空值等。这些不符合要求的数据要按一定的规则进行过滤,称为数据清洗。
数据清洗是数据处理最重要的部分,含义是删除原始数据中的不相关数据、重复数据、平滑噪声数据,对缺失值进行处理,以及处理异常值等,从而更正数据中的错误,保证数据的一致性。常见的数据清洗为缺失值和异常值的处理[1]。
1.1 缺失值数据
缺失值是指在数据集中1个或某些属性的值不完整的值。缺失数据应有的信息,例如供应商的名称缺失、分公司的名称缺失;客户的区域信息丢失,并且业务系统中的主表和明细表不匹配。缺失值数据主要由机械原因与人为因素造成。机械原因主要指在数据收集或保存失败时造成的数据缺失,如数据存储失败、存储损坏、机械故障等导致的数据没有及时收集。人为因素主要是由于主观错误、历史原因或故意造成的数据缺失。将缺失信息的数据过滤出来,按缺失的内容分别写入不同数据文件,补全后才写入数据仓库。
1.2 缺失值处理方法
处理缺失值数据时,采用删除记录的方法、数据插补方法、替换法或者对数据不予处理的方法。删除记录的方法通过删除包含缺失值的记录来完成,是简单的处理方法,然而,这种方法有较大的局限性,是以减少历史数据来换取数据的完备性,丢弃了大量隐藏在记录表中的信息,尤其在数据本身记录不多的情况下,删除记录也许会对后续算法造成影响,以致影响算法的客观性和正确性。因此,删除数据的方法适合应用在数据量大,且缺失值记录占比较少的情况,且记录间不存在关联性。删除记录不影响整体算法时,可对小部分数据删除处理。有些异常数据可能蕴藏着有用的信息,这些异常值可不做处理,而在具有异常值的数据集上进行挖掘建模。有些异常数据或缺失的数据不能删除时使用插补法[2]。
2 数据插补的方法
数据插补法也称数据插值法,根据已有的数据来推测缺失数据的值,常用的方法有拉格朗日插值、牛顿插值、分段插值、样条插值、埃尔米特插值法等。牛顿插值法需设计一个特定函数,此函数利用函数()在某区间中若干点的函数值而设计,在区间中,函数()的近似值由其他点的特定函数的值决定。埃尔米特插值要求在给定的节点处,插值多项式的函数值与原函数值相同,且若干阶导数相同。样条插值法则利用拟合多项式来进行计算,将计算结果插入到实验点中,做拟合曲线。各种插值方法各有特点。
插补方法常见的有均值/中位数/众数插补,使用固定值插补、最近插补、回归方法、插值法。其中均值、中位数或众数插补是最基本的插补方法,计算快速,但均值插补会减少数据的变化差异(方差)。回归方法会使标准差缩小。
平均值/中位数/众数插值根据属性值的类型来决定。将缺失的属性值用一个常量进行替换,可使用固定值插补,比如某地的基本工资可以用来作为插补值。最新的插值方法是在记录中找到最接近丢失样本的位置,以插值此属性的值。
对于具有缺失值的变量,基于现有数据和其他相关变量的数据,使用回归插值法建立拟合模型以预测缺失值的属性值。通过已知点建立合适的插值函数,从对应点X导出的函数值(X)求取近似值。
2.1 拉格朗日插值法
拉格朗日多项式插值法的基本思想是:给出一个恰好穿过二维平面上几个已知点的多项式,利用最小次数的多项式来构建一条光滑曲线,使曲线通过所有已知点。
对于平面中的个已知点(一条直线上无两点),可以找到一个-1次多项式:
使得此多项式对应的曲线通过这个点。将个点的坐标(1,1),(2,2)…(x,y)代入多项式中得到:
…
解得拉格朗日插值多项式如下:
例如,平面上有4个点,(4, 10)、(5, 5.25)、(6, 1)、(18, ?),根据拉格朗日插值法计算缺失“?”的值:
将=18代入可以得到(18)=-11,因此缺失的值是-11[3]。
2.2 Pandas库与Lagrange函数
Pandas是一个基于Numpy的开源工具,用于解决数据分析问题,该工具包含大量库和一些标准数据模型,以提供在大型数据集上有效运行。Pandas需要加载使用,进行数据分析前,Pandas需要读取数据集,可读取数据集的类型如下:读取剪切板数据、读取Csv格式数据、读取Excel格式数据、读取其他统计软件的数据[4]。
Pandas库提供大量快速便捷处理数据和函数的方法,其中Lagrange函数为其中之一。Lagrange(,)中2个主要的参数(,),把一系列点当成是函数关系=()其中对应参数,而对应为。输出结果为函数,根据函数可以求出对应对应的。
例如:=[1,2,4]
=[2,3,8]
=lagrange(,)(3)=6
输出处理后,得到插值的函数。用该函数可以快速实现数据中空值以及异常值的处理。
3 案例:拉格朗日插值的实现
某公司销售数据表1、表2,表中周销售额字段存在异常值,将异常指设为空,使用拉格朗日插值函数对异常值行填补。
表1 插值前销售部分数据
日期周销售额燃料价格物价指数失业人数是否假期温度/℃ 2020-2-524924.52.705211.17642787.808FALSE27.05 2020-2-1246039.492.854210.33742617.808FALSE23.76666667 2020-2-1941595.552.826210.61709347.808FALSE24.68888889 2020-2-2694503.542.759210.89676067.808FALSE26.91111111 2020-3-521827.92.669211.22353337.787FALSE27.17222222 2020-3-1221043.392.668211.45609517.808FALSE26.90555556 2020-3-1922136.642.637211.45377197.808FALSE28.95 2020-3-2626229.212.653211.33865267.808FALSE29.07777778 2020-4-257258.432.623211.10038547.787FALSE28.41666667 2020-4-942960.912.627211.50466217.787FALSE30.64444444 2020-4-1617596.962.642211.1084147.787FALSE26.93333333 2020-4-2316145.352.608211.23514437.787FALSE28.53333333 2020-4-30555.112.64211.36990327.787FALSE27.68888889 2020-5-717413.942.577211.53124797.787FALSE27.33888889 2020-5-1418926.742.692211.63942117.787FALSE30.55555556 2020-5-2114773.042.664211.60336337.787FALSE30.36111111 2020-5-2815580.432.619211.56730567.787FALSE29.56666667 2020-6-417558.092.603211.67198957.838FALSE22.16111111 2020-6-1116637.622.565211.49519027.787TRUE25.93888889 2020-6-1816216.272.582211.52245967.787FALSE27.83888889 2020-6-2516328.722.624211.59722467.787FALSE27.18888889 2020-7-216333.142.72211.81374367.838FALSE19.54444444 2020-7-917688.762.689211.95639397.838FALSE14.85555556 2020-7-1617150.842.633211.74675447.838FALSE17.73888889 2020-7-23160.452.725211.86129377.838FALSE21.03333333 2020-7-3015381.822.716211.90884387.838FALSE20.91111111 2020-8-6117508.412.708211.6071937.838FALSE9.594444444 2020-8-1315536.42.728212.0039447.838FALSE15.33888889 2020-8-2015740.132.771211.88967377.838FALSE10.78333333
表2 插值表
插值点2020-02-262020-04-302020-07-232020-08-062020-10-222020-12-172020-02-18 拉格朗日插值29251.032318166.799215717.534515459.0635832988.194357995.2533361
直接调用Lagrange(,)这个函数,#from scipy. interplotate import lagrange,返回一个对象。参数,分别是每个点的值和值。拉格朗日实现插值部分Python代码:
执行后,得到插值后的销售数据如表3。
表3 插值后的销售部分数据
日期周销售额燃料价格物价指数失业人数是否假期温度/℃ 02020-02-05 00:00:0024924.52.705211.17647.808FALSE27.05 12020-02-12 00:00:0046039.492.854210.33747.808FALSE23.76667 22020-02-19 00:00:0041595.552.826210.61717.808FALSE24.68889 32020-02-26 00:00:0029251.032322.759210.89687.808FALSE26.91111 42020-03-05 00:00:0021827.92.669211.22357.787FALSE27.17222 52020-03-12 00:00:0021043.392.668211.45617.808FALSE26.90556 62020-03-19 00:00:0022136.642.637211.45387.808FALSE28.95 72020-03-26 00:00:0026229.212.653211.33877.808FALSE29.07778 82020-04-02 00:00:0057258.432.623211.10047.787FALSE28.41667 92020-04-09 00:00:0042960.912.627211.50477.787FALSE30.64444 102020-04-16 00:00:0017596.962.642211.10847.787FALSE26.93333 112020-04-23 00:00:0016145.352.608211.23517.787FALSE28.53333 122020-04-30 00:00:0018166.799212.64211.36997.787FALSE27.68889 132020-05-07 00:00:0017413.942.577211.53127.787FALSE27.33889 142020-05-14 00:00:0018926.742.692211.63947.787FALSE30.55556 152020-05-21 00:00:0014773.042.664211.60347.787FALSE30.36111 162020-05-28 00:00:0015580.432.619211.56737.787FALSE29.56667 172020-06-04 00:00:0017558.092.603211.6727.838FALSE22.16111 182020-06-11 00:00:0016637.622.565211.49527.787TRUE25.93889 192020-06-18 00:00:0016216.272.582211.52257.787FALSE27.83889 202020-06-25 00:00:0016328.722.624211.59727.787FALSE27.18889 212020-07-02 00:00:0016333.142.72211.81377.838FALSE19.54444 222020-07-09 00:00:0017688.762.689211.95647.838FALSE14.85556 232020-07-16 00:00:0017150.842.633211.74687.838FALSE17.73889 242020-07-23 00:00:0015717.53452.725211.86137.838FALSE21.03333 252020-07-30 00:00:0015381.822.716211.90887.838FALSE20.91111 262020-08-06 00:00:0015459.063582.708211.60727.838FALSE9.594444 272020-08-13 00:00:0015536.42.728212.00397.838FALSE15.33889 282020-08-20 00:00:0015740.132.771211.88977.838FALSE10.78333
导入数据可视化工具包Matplotlib,Matplotlib是Pytnon的基本绘图包,为Python提供图形框架,提供整套和Matlab相似的命令API,用于基本统计图形的绘制。
将日期与周销售额数据可视化为线图,前后对比如图1、图2所示。
图2 插值后线图
选取几个日期,2020-02-26,2020-04-30,2020-07-23均为周二,是正常日期,经过插值得到的数值符合销售规律,插值结果正常。
4 结语
拉格朗日插值公式结构紧凑,在理论分析中很方便,但是当插值节点递减时,插值多项式就会随之变化。但并不是样本数据越多,得到的插值数据会越精确。理论上说,样本数据过多,得到的插值函数的次数就越高,插值结果的误差可能会更大。
[1] 刘政宇. 基于大数据的数据清洗技术及运用[J]. 数字技术与应用, 2019(4): 92-94.
[2] 刘佳星, 张宏烈, 刘艳菊, 等. 基于缺失率的不完整数据填补算法[J]. 统计与决策, 2021(2): 39-41
[3] 甘勇, 陶红伟. 大数据导论[M]. 北京: 中国铁道出版社, 2019: 20-28.
[4] 朱文强, 钟元生. 数据分析实战[M]. 北京: 清华大学出版社, 2021: 250-287.
Application of Lagrangian Interpolation Method to Data Cleaning
ZHAO Li, SUN Na, LI Li-ping, CUI Jie
(School of Electronics & Information Engineering, Liaoning University of Technology, Jinzhou 121001, China)
In order to improve data quality and adapt data to data analysis and data mining algorithms, data cleaning is needed for the obtained data. This paper discusses methods to handle missing values. Data cleaning is achieved by Lagrangian interpolation method with the help of Python programming language. Line charts of the dataset before and after data cleaning are also shown for comparison and analysis.
data cleaning; Lagrangian; interpolation
10.15916/j.issn1674-3261.2022.02.007
TP312
A
1674-3261(2022)02-0102-04
2021-09-03
赵莉(1966-),女,辽宁绥中人,副教授。
责任编辑:孙 林