拉格朗日插值法

来源:互联网 发布:软件测试黑盒 编辑:程序博客网 时间:2024/05/17 09:29

在数据挖掘中,海量的原始数据中存在着大量 不完整数据(有缺失值)、不一致、有异常的数据,严重影响到数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同事进行数据集成、转换、规约等一系列的处理,改过程就是数据预处理。

数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定到挖掘技术或工具。统计发现,在数据挖掘的过程中,数据预处理工作量占到整个过程的60%。

数据预处理主要内容包括数据清洗、数据集成、数据变换和数据规约。

一、数据清洗

数据清洗主要是删除原始数据中的无关数据、重复数据、平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等。

二、缺失值处理

处理缺失值的方法可分为3类:删除记录、数据插补和不处理。本无我重点介绍一下 插值法;

先看看 一段代码:

#-*- coding: utf-8 -*-#拉格朗日插值代码import pandas as pd #导入数据分析库Pandasfrom scipy.interpolate import lagrange #导入拉格朗日插值函数inputfile = '../data/catering_sale.xls' #销量数据路径outputfile = '../tmp/sales.xls' #输出数据路径data = pd.read_excel(inputfile) #读入数据data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None #过滤异常值,将其变为空值#自定义列向量插值函数#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5def ployinterp_column(s, n, k=5):  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数  y = y[y.notnull()] #剔除空值  return lagrange(y.index, list(y))(n) #插值并返回插值结果#逐个元素判断是否需要插值for i in data.columns:  for j in range(len(data)):    if (data[i].isnull())[j]: #如果为空即插值。      data[i][j] = ployinterp_column(data[i], j)data.to_excel(outputfile) #输出结果,写入文件

0 0
原创粉丝点击