python数据分析(4)——数据预处理(上)

python小能手

发布日期: 2018-12-25 14:24:18 浏览量: 944
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

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

1 数据清洗

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

1.1 缺失值处理

方法主要分为删除记录、数据插补和不处理,其中常用的数据插补方法如下。

这里主要介绍拉格朗日插值法和牛顿插值法。其他的插值方法还有Hermite插值、分段插值和样条插值。

P(x)是牛顿插值逼近函数,R(x)是误差函数。

3)将缺失的函数值对应的点x代入插值多项式得到缺失值的近似值f(x).

牛顿插值法也是多项式插值,但采用了另一种构造插值多项式的方法,与拉格朗日插值相比,具有承袭型和易于变动节点的特点。从本质上来说,两者给出的结果是一样的(相同次数、相同系数的多项式),只不过表示的形式不同。因此,在Python的Scipy库中,只提供了拉格朗日插值法的函数(因为实现上比较容易),如果需要牛顿插值法,则需要自行编写函数。

例子是catering_sale.xls

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

1.2 异常值处理

我们一般将异常值视为缺失值进行插补。

python中判断每个元素是否空值/非空值

D.isnull/notnull()

2. 数据集成

2.1 实体识别

实体识别是指从不同数据源识别出现实世界的实体,它的任务是统一不同源数据的矛盾之处。

2.1.1 同名异义

数据源中同样是属性ID,不一定是同一实体。

2.1.2 异名同义

不同数据源中不同名字的数据项表示是同一实体。

2.1.3 单位不统一

描述同一个实体分别用的是国际单位和中国传统的计量单位。

检测和解决这些冲突就是实体识别的任务。

2.2 冗余属性识别

  • 同一属性多次出现
  • 同一属性命名不一致导致重复

有些冗余属性可以用相关分析检测。

python去除数据中的重复元素

D.unique()

np.unique(D)

上传的附件 cloud_download lagrange_newton_interp.py ( 1.00kb,?9次下载 ) cloud_download catering_sale.xls ( 32.77kb,?8次下载 )

发送私信

学习python,勤学勤练,永不放弃

13
文章数
3
评论数
eject