数据预处理

简介: 数据清洗缺失值处理:拉格朗日插值法(当插值节点增加或删除时插值多项式也会变化)#拉格朗日插值代码import pandas as pd #导入数据分析库Pandasfrom scipy.

数据清洗

缺失值处理:

  • 拉格朗日插值法(当插值节点增加或删除时插值多项式也会变化)
#拉格朗日插值代码
import pandas as pd #导入数据分析库Pandas
from scipy.interpolate import lagrange #导入拉格朗日插值函数

inputfile = 'C:/Users/ecaoyng/Desktop/work space/DataMining/shizhan_source/chapter4/chapter4/chapter4/demo/data/catering_sale.xls' #销量数据路径
outputfile = 'C:/Users/ecaoyng/Desktop/work space/DataMining/shizhan_source/chapter4/chapter4/chapter4/demo/data/tmp/sales.xls' #输出数据路径

data = pd.read_excel(inputfile) #读入数据
data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None #过滤异常值,将其变为空值


#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def 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) #输出结果,写入文件
  • 牛顿插值法(节点变动不影响)
    python的scipy库中,只提供了拉格朗日插值法的函数,如果要用牛顿插值法,需要自行编写

异常值处理

数据集成

数据挖掘所需的数据往往存在不同的数据库中,数据集成就是多个数据源合并存放在数据仓库的过程

数据变换

简单函数变换:

常用数据变换有平方,开方,取对数,差分运算等。简单的数据变换常用来将不具有正态分布的数据转换为正态分布的数据,比如个人收入范围可以 从一万到10亿,可以通过取对数对其进行压缩。

规范化:

离差标准化: x-min/max-min
缺点:若数据集中某个数值很大,则规范化后各个值会趋近于0

标准差标准化: x-x均值/标准差 (最常用)经过处理的数据均值为0,标准差为1

小数定标标准化,通过移动小数位数,将数据行值映射到[-1,1]之间,移动的小数位数却与属性值绝对值的最大值

#-*- coding: utf-8 -*-
#数据规范化
import pandas as pd

datafile = '../data/normalization_data.xls' #参数初始化
data = pd.read_excel(datafile, header = None) #读取数据

(data - data.min())/(data.max() - data.min()) #最小-最大规范化
(data - data.mean())/data.std() #零-均值规范化
data/10**np.ceil(np.log10(data.abs().max())) #小数定标规范化

连续属性离散化

一些数据挖掘算法,特别是分类算法如ID3,Apriori要求数据是分类属性的。这样常常将连续属性变换成分类属性,即连续属性的离散化。

连续属性的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间的数据值,即两步,确定分类数以及如何将连续属性值映射到这些分类上。

  • 等宽法,将属性的值域分成相同宽度的区间
  • 等频法,将相同数量的记录放到每个区间
  • 基于聚类分析的方法。一维聚类的方法包含两个步骤,首先将连续属性的值用聚类算法如k-means进行聚类,然后将聚类得到的簇进行处理。合并到一个簇的连续属性值并做同一标记。聚类分析的离散化方法需要用户指定簇的个数,从而决定产生的区间数
#-*- coding: utf-8 -*-
#数据规范化
import pandas as pd

datafile = 'C:/Users/ecaoyng/Desktop/work space/DataMining/shizhan_source/chapter4/chapter4/chapter4/demo/data/discretization_data.xls' #参数初始化
data = pd.read_excel(datafile) #读取数据
data = data[u'肝气郁结证型系数'].copy()
k = 4

d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3


#等频率离散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1] #使用describe函数自动计算分位数
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data, w, labels = range(k))

from sklearn.cluster import KMeans #引入KMeans
kmodel = KMeans(n_clusters = k, n_jobs = 4) #建立模型,n_jobs是并行数,一般等于CPU数较好
kmodel.fit(data.reshape((len(data), 1))) #训练模型
c = pd.DataFrame(kmodel.cluster_centers_).sort(0) #输出聚类中心,并且排序(默认是随机序的)
w = pd.rolling_mean(c, 2).iloc[1:] #相邻两项求中点,作为边界点
w = [0] + list(w[0]) + [data.max()] #把首末边界点加上
d3 = pd.cut(data, w, labels = range(k))

def cluster_plot(d, k): #自定义作图函数来显示聚类结果
  import matplotlib.pyplot as plt
  plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
  plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

  plt.figure(figsize = (8, 3))
  for j in range(0, k):
    plt.plot(data[d==j], [j for i in d[d==j]], 'o')

  plt.ylim(-0.5, k-0.5)
  return plt

cluster_plot(d1, k).show()

cluster_plot(d2, k).show()
cluster_plot(d3, k).show()

这里写图片描述

这里写图片描述

这里写图片描述

小波变换

数据规约

在大数据集上进行复杂的挖掘和分析需要长时间,数据规约产生更小但是保持数据完整性的新数据集,在规约后的数据集上分析更有效率。

数据规约的意义:

  1. 降低无效,错误数据对建模的影响,提高建模的准确性
  2. 少量且具有代表性的数据将大幅减少数据挖掘所需要的时间
  3. 减低存储数据的成本

属性规约:
属性规约是通过属性合并来创建新属性位数,或者直接删除不相关的属性来减少数据维数。目标是寻找出最小的属性子集并确保新数据子集的概率分布尽可能的接近原来的概率分布。

常用方法,合并属性,逐步向前选择,逐步向后选择,决策树归纳,主成分分析(用较少的变量去解释原始数据中大部分变量,即将许多相关性很高的变量转化成彼此相互独立或者不相关的变量)

使用主成分分析降维的代码如下

#-*- coding: utf-8 -*-
#主成分分析 降维
import pandas as pd

#参数初始化
inputfile = '../data/principal_component.xls'
outputfile = '../tmp/dimention_reducted.xls' #降维后的数据

data = pd.read_excel(inputfile, header = None) #读入数据

from sklearn.decomposition import PCA

pca = PCA()
pca.fit(data)
pca.components_ #返回模型的各个特征向量
pca.explained_variance_ratio_ #返回各个成分各自的方差百分比

方差百分比越大说明向量的权重越大,选择三维数据占了原始8维度的95%

数值规约是通过选择替代的,较小的数据来减少数据量,包括有参数方法和无参数方法。有参数方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际的数据。例如回归和对数线性模型。无参数方法就需要存放实际数据如直方图,聚类,抽样

聚类技术将数据元组(即记录,数据表中的一行)视为对象,他将对象划分为簇,使一个簇中的对象相互相似,而与其他簇中的对象相异

目录
相关文章
|
8月前
|
数据采集 机器学习/深度学习 数据挖掘
【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值
【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值
281 0
|
2月前
|
数据采集 监控 安全
数据预处理
【2月更文挑战第25天】
|
18天前
|
数据采集 机器学习/深度学习 算法
scikit-learn中的数据预处理:从清洗到转换
【4月更文挑战第17天】在机器学习中,scikit-learn是用于数据预处理的强大Python库,涵盖数据清洗和转换。数据清洗涉及处理缺失值(如使用SimpleImputer和IterativeImputer填充)和异常值,以及分类数据的编码(如标签编码和独热编码)。数据转换包括特征缩放(如StandardScaler和MinMaxScaler)和特征选择(过滤、包装和嵌入方法)。这些工具能提升数据质量,优化模型性能,但需根据具体问题选择合适方法。
|
2月前
|
数据采集 Python
数据清洗是数据预处理的重要步骤
数据清洗是数据预处理的重要步骤
19 0
|
3月前
|
数据采集 机器学习/深度学习 Python
掌握XGBoost:特征工程与数据预处理
掌握XGBoost:特征工程与数据预处理
124 3
|
5月前
|
机器学习/深度学习 数据采集 算法
特征工程
特征工程是指对原始数据进行转换和提取,以创建新的特征,使得机器学习算法能够更好地理解和预测数据。特征工程是机器学习中非常重要的一个步骤,它能够改善模型的性能,提高模型的准确性和鲁棒性。
61 2
|
7月前
|
数据采集 存储 数据挖掘
数据挖掘(2.1)--数据预处理
数据对象(一条记录、一个实体、一个案例、一个样本等)是对一个事物或者物理对象的描述。 数据对象的属性则是这个对象的性质或特征,例如一个人的肤色、眼球颜色等是这个人的属性。
64 0
|
8月前
|
分布式计算 大数据 Hadoop
大数据预处理
大数据预处理
63 0
|
11月前
|
机器学习/深度学习 数据采集 数据处理
数据预处理与特征工程:提升机器学习模型性能
在机器学习领域,数据预处理和特征工程是构建强大、准确的模型的关键步骤。这些步骤的正确实施可以显著提高模型的性能和鲁棒性。本文将探讨数据预处理和特征工程的重要性,以及一些常用的技术和策略,帮助您在构建机器学习模型时取得更好的结果。
244 0
|
机器学习/深度学习 数据采集 算法
【机器学习】(27)使用sklearn实现数据预处理
【机器学习】(27)使用sklearn实现数据预处理
118 0