数据分析系列之数据预处理

数据预处理的方法有哪些? 数据处理的工作时间占据了整个数据分析项目的70%以上。因此,数据的质量直接决定了分析模型的准确性。那么,数据预处理的方法有哪些呢?比如数据清洗、数据集成、数据规约、数据变换等,其中最常用到的是数据清洗与数据集成,下面小编将来详细介绍一下这2种方法。数据清洗是通过填补缺失值,平滑或删除离群点,纠正数据的不一致来达到清洗的目的。简单来说,就是把数据里面哪些缺胳膊腿的数据、有问题的数据给处理掉。 阅读详情

在数据挖掘过程中,海量的原始数据存在大量的不一致,有缺失的数据,严重影响到数据挖掘的效率和准确率,数据清洗尤为重要,数据清洗之后进行或同时进行数据集成,转换,规约等一系列过程,该过程就是数据预处理.数据预处理一方面提高数据质量,另一方面使数据更好地适应特定的数据挖掘或者工具.

1. 数据清洗

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

1.1 缺失值处理

处理缺失值包括:删除记录,数据插补,不处理三种方法.其中常见的插补方法:

插补方法方法描述
均值/中位数/众数插补根据属性值的类型,用该属性值的平均值/中位数/众数插补
使用固定值将缺失的值使用固定值替换,譬如一年级学生年龄,缺失部分用当地入学平均年龄
最近临插补在记录中找见与缺失样本最接近样本的属性值进行插补
回归方法通过已有数据与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失值
插值法利用已知点建立合适的插值函数f(x),未知值由对应的点x求出的函数值f(x)近似代替.

在数据集记录比较少的情况下,删除小部分记录会丢弃大量隐藏在其中的有用信息,一些模型可以将缺失值作为一种特殊取值,允许在含有缺失值的模型上进行建模,本节介绍拉格朗日插值法和牛顿插值法,其他插值法还有Hermite插值,分段插值,样条插值法等.

  1. 拉格朗日插值法,也就是通过已知n个点得出经过该n个点的近似函数,把缺失值x代入,求出其缺失的近似属性,使用的数学原理被叫做拉格朗日插值法.
    根据数学知识,对于平面n个点可以找到n-1次多项式:
    在这里插入图片描述
    使得该函数满足这n个点(别问为什么,记住,这是定理),所以将n个点代入该多项式:
    在这里插入图片描述
    解出该方程,得到函数:
    在这里插入图片描述
    将缺失值x代入该函数可以得到属性值的近似值,缺陷是当插值节点增减时,解得函数会发生变化,在实际计算中非常不方便,所以提出了牛顿插值法.
  2. 牛顿插值法
    根据数学知识得到n个点的所有的阶差商公式:
    在这里插入图片描述
    联立求解以上差商公式求得P(x)牛顿插值逼近函数,R(x)误差函数:
    在这里插入图片描述
    将缺失值代入函数即可获得近似值,从本质上来说两者给出的结果是一致的,都是基于多项式的插值,只不过表示的形式不同,因此,在Scipy库中,只提供比较容易实现的拉格朗日插值法函数.

下面结合具体案例介绍拉格朗日插值的计算方法,在demo/data/catering_sale.xls中2.14出现数据缺失,我们可以使用拉格朗日插值法进行插补,代码:

#拉格朗日插值代码
import pandas as pd #导入数据分析库Pandas
from 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为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):
  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数,前后5个,共10个
  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) #输出结果,写入文件

在进行插值之前会进行异常值检测,将异常值2.21的属性设为空值,同时与2.14进行插补,获得插补值4275.255和4156.86.

1.2 异常值处理

直接将异常值删除会在记录很少的情况下导致样本量不足,造成结果不准确,视为缺失值的好处是可以利用现有信息进行填补,在很多情况下,先分析异常值出现原因,在判断是否舍弃,异常值处理常用方法:

异常值处理方法方法描述
删除含有异常值的记录直接将数据删除
视为缺失值利用缺失值处理的方法进行插补
平均值修正前后两个记录的均值进行修正
不处理直接在具有异常数据集上进行数据挖掘(异常为正确数据)

2. 数据集成

数据挖掘的数据往往在不同的数据源中存储,数据集成就是将多个数据源的数据存储在同一数据仓库的过程,有可能会存在匹配问题,实体识别问题,属性冗余问题,需要将源数据在底层上加以转换提炼和集成.

2.1 实体识别

实体识别是在不同的源数据中识别出现实世界的实体,任务是统一不同源数据的矛盾之初,常见的形式如下:

  1. 同名异义
    数据源A中的属性ID和数据源B中的属性ID分别描述的是客户编号和订单编号,即描述不同实体.
  2. 异名同义
    数据源A的student_name和数据源B中的borrowing_card_name都是描述名字,即student_name=borrowing_card_name.
  3. 单位不统一
    描述一个实体使用不同单位.

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

2.2 冗余属性识别

数据集成往往会导致数据冗余出现:

  1. 同一属性多次出现.
  2. 同一属性不同名字多次出现.

对于冗余属性,要先分析,检测到后再将其删除,有些冗余属性可以使用相关性分析检测,使用相关系数来衡量一个属性值在多大程度影响另一个属性.

3. 数据变换

数据的变换主要是对数据的规范化处理,使数据适合数据挖掘的算法.

3.1 简单函数变换

简单函数变化是对数据进行某些简单的数学变换,常用的变换包括平方,开平方,取对数,差分运算等:
在这里插入图片描述
简单的函数变换将不具有正态分布的数据变为正态分布,在时间序列中,使用对数变换或者差分运算将非平稳序列变为平稳序列.在数据挖掘中,简单的函数变换可以将个人年收入从1w到10亿使用对数变换进行压缩.

3.2 规范化

数据规范化(归一化)是为了消除数据挖掘的多个评价模型之间的量纲和取值范围的影响,将其标准化处理,将数据按照比例进行缩放,使之落入一个特定区域,便于综合分析,其对基于距离的挖掘算法尤为重要.

  1. 最大-最小规范化
    最大最小规范化也叫做离差标准化.对原始数据进行线性变换,映射到[0,1]之间.转换公式:
    在这里插入图片描述
    max为样本最大值,min为样本最小值,max-min为极差.离差标准化是消除量纲保留数据关系的最简单方法,缺点是遇到新的值超过边界值会出现系统错误,需要重新计算.
  2. 零-均值规范化
    又叫做标准差标准化,是目前用到的最多的数据标准化方法,经过处理的数据均值为0,标准差为1,其中x-原始数据的均值,之后除以原始数据标准差,公式:
    在这里插入图片描述
  3. 小数定标规范化
    移动属性值的小数点,将其属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值,公式为:
    在这里插入图片描述

下面通过实例比较三种规范方法处理结果:

#-*- coding: utf-8 -*-
#数据规范化
import pandas as pd
import numpy as np
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())) #小数定标规范化

3.3 连续属性离散化

某些分类的数据挖掘算法(如ID3算法,Apriori算法等),需要数据是分类属性形式,所以,将连续属性变换成分类属性叫做连续属性离散化.

3.3.1 离散化过程

连续属性离散化是在数据的取值范围内设定若干个离散的划分点,将取值范围变为离散化的区间,最后用不同的符号或整数值代表每个子区间的数据集.涉及到两步:确定划分点,将连续属性值映射到离散区间.

3.3.2 常用离散方法

常用离散方法包括等宽法,等频法和(一维)聚类.

  1. 等宽法,将属性值域划分相同宽度区间,区间个数有数据本身特点决定,或者有用户决定.
  2. 等频法:将相同数量记录放在每个区间.
    以上两种方法易于操作,缺点在于等宽法对离群点比较敏感,区间数据分布不均衡,破坏决策模型.等频法可能将同一数据复制到不同区间满足个数要求.
  3. 基于聚类分析的方法,一维聚类包括两个步骤,首先将连续的属性的值用聚类算法(如K-Means算法)进行聚类,然后将聚类得到的簇进行处理,合并到一个簇的连续属性值做同一标记.需要用户来指定簇个数,从而决定产生的区间数.

使用以上三种方法对demo/data/discretization_data.xls连续属性离散化,将数据分成4类,然后将每一类打上标识,具体代码:

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

datafile = '../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()

3.4 属性构造

在数据挖掘过程中,为了提取更有用的信息,我们需要利用已有属性构造新的属性,并加入到现有属性集合中.例如在电力漏电用户识别中,已有属性包括供入电量,供出电量(用电量之和),理论上二者应该相等,如果该条线路出现供入电量明显大于供出电量,则表明存在窃漏电行为.为了判断用户是否窃漏电,可以构造一个新的指标-线损率,即(供入电量-供出电量)/供入电量 *100%,一般正常范围在3%-15%.根据计算公式,由供入电量,供出电量进行线损率属性构造代码:

import pandas as pd

#参数初始化
inputfile= '../data/electricity_data.xls' #供入供出电量数据
outputfile = '../tmp/electricity_data.xls' #属性构造后数据文件

data = pd.read_excel(inputfile) #读入数据
data[u'线损率'] = (data[u'供入电量'] - data[u'供出电量'])/data[u'供入电量']

data.to_excel(outputfile, index = False) #保存结果

3.5 小波变换

小波变化在时域和频域都具有表征信号局部特征的能力,而不是傅里叶变换(将信号分为多个不同频率正弦函数)只具有频域分析,提供一种非平稳信号的时频分析手段,可以从信号提取更多有用信息.信号的特征量往往隐藏在某个或某些分量重,小波变换将非平稳信号分解为不同层次不同频率的数据序列,即小波系数.选择适当的小波系数,既可以完成信号的特征量提取.下面介绍信号特征提取方法:
基于小波变换的特征提取方法,详见下表:

基于小波变换的特征提取方法方法描述
基于小波变换的多尺度空间能量分布特征提取方法各尺度空间内的平滑信号和细节信号能提供原始信号的时频局域信息,特别是提供不同频段的信号的构成信息,将能量尺度按顺序排列,形成特征量
基于小波变换的多尺度空间的模极大值特征量提取方法通过小波变换的局域化分析能力,将小波变换模极大值的尺度参数s,平移参数t和其幅值作为目标的特征量.
基于小波包变换的特征提取方法利用小波分解,将时域随机信号序列映射到尺度域各子空间随机系数序列,将不确定性程度最低,将最佳子空间的熵值和二叉树位置参数作为特征量.
基于适应性小波神经网络的特征提取方法把信号通过分析小波拟合表示,进行特征量提取

小波基函数:小波基函数具有局部支持集的函数,平均值为0,常见的小波基函数有Hear小波基,db系列小波基等.
在Python中Scipy本身提供一系列信号处理函数,但不全面,而更好的实现库是pywt,具体示例:

#-*- coding: utf-8 -*-
#利用小波分析进行特征分析

#参数初始化
inputfile= '../data/leleccum.mat' #提取自Matlab的信号文件

from scipy.io import loadmat #mat是MATLAB专用格式,需要用loadmat读取它
mat = loadmat(inputfile)
signal = mat['leleccum'][0]

import pywt #导入PyWavelets
coeffs = pywt.wavedec(signal, 'bior3.7', level = 5)
#返回结果为level+1个数字,第一个数组为逼近系数数组,后面的依次是细节系数数组

4.数据规约

数据规约可以产生更小但保持原数据完整性的新数据集,在规约后的数据集上进行分析和挖掘将更有效率.

4.1 属性规约

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

属性规约方法方法描述方法解析
合并属性将旧属性合并新属性初始属性集{A1,A2,B1,B2,C}规约后的属性集{A,B,C}
逐步向前选择从一个空的属性集开始,逐步从原有属性集中选择当前最优属性添加到空集中,直至没有或者满足阈值约束初始属性集{A1,A2,A3,A4,A5},{} => {A1} => {A1,A4} => 规约后的{A1,A4,A5}
逐步向后删除从当前属性集开始,逐步删除当前最差属性,直至没有或者满足阈值约束初始属性集{A1,A2,A3,A4,A5}=>{A1,A3,A4,A5}=>规约后的属性集{A1,A4,A5}
决策树归纳利用决策树归纳对初始集进行归纳学习,删除没有出现的数据属性初始属性集{A1,A2,A3,A4,A5}=>A4决策树归纳=>规约后的属性集{A1,A4,A5}
主成分分析用较少的变量去解释原始数据中的大部分变量,即将许多相关性高的变量转化为不相关变量详见下例

前三种方法都是直接删除不相关属性方法,主成分分析是一种用于连续属性的数据降维方法.通过正交变换,去除原始空间基底下的相关性,只使用少量变量即可解释原始数据中的大部分变异,少量变量即被称为主成分,来代替原始变量进行建模,计算步骤我们略过,具体可以参考图书Python数据分析与挖掘实战,我们来介绍分装后的代码:

#-*- 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_ #返回各个成分各自的方差百分比

其中PCA()函数默认参数为sklearn.decomposition.PCA(n_components = None,copy = True , whiten = False),参数说明

  1. n_components为算法中保留的主成分个数,也就是保留下来的特征个数n,int或者string,缺省时所有的成分保留,n_components=1,将把原始数据维度降到1,n_components=‘mle’,自动选取特征个数,使得满足所要求的的方差百分比.
  2. copy类型为bool,默认为True,表示是否将原始数据复制一份,默认对原始数据不会有任何改变.
  3. whiten类型为bool,默认为False,白化,使得每个特征具有相同的方法.

运行以上程序获得8个特征根,对应的单位特征向量和各自的方差百分比(贡献率),其中贡献率越大,向量权重越大:

>>> pca.components_ #返回模型的各个特征向量
array([[ 0.56788461,  0.2280431 ,  0.23281436,  0.22427336,  0.3358618 ,
         0.43679539,  0.03861081,  0.46466998],
       [ 0.64801531,  0.24732373, -0.17085432, -0.2089819 , -0.36050922,
        -0.55908747,  0.00186891,  0.05910423],
       [-0.45139763,  0.23802089, -0.17685792, -0.11843804, -0.05173347,
        -0.20091919, -0.00124421,  0.80699041],
       [-0.19404741,  0.9021939 , -0.00730164, -0.01424541,  0.03106289,
         0.12563004,  0.11152105, -0.3448924 ],
       [-0.06133747, -0.03383817,  0.12652433,  0.64325682, -0.3896425 ,
        -0.10681901,  0.63233277,  0.04720838],
       [ 0.02579655, -0.06678747,  0.12816343, -0.57023937, -0.52642373,
         0.52280144,  0.31167833,  0.0754221 ],
       [-0.03800378,  0.09520111,  0.15593386,  0.34300352, -0.56640021,
         0.18985251, -0.69902952,  0.04505823],
       [-0.10147399,  0.03937889,  0.91023327, -0.18760016,  0.06193777,
        -0.34598258, -0.02090066,  0.02137393]])
>>> pca.explained_variance_ratio_ #返回各个成分各自的方差百分比
array([7.74011263e-01, 1.56949443e-01, 4.27594216e-02, 2.40659228e-02,
       1.50278048e-03, 4.10990447e-04, 2.07718405e-04, 9.24594471e-05])

通过贡献率分析,选取前3个就已经大于97.3%,因此重建PCA模型设置n_components=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(3)
pca.fit(data)
data
low_d = pca.transform(data)
pd.DataFrame(low_d).to_excel(outputfile) #保存结果
pca.inverse_transform(low_d) #必要时复原数据

原始数据从8维降为3维,同时这3维占据了原始数据97%以上的信息.

>>> low_d
array([[  8.19133694,  16.90402785,   3.90991029],
       [  0.28527403,  -6.48074989,  -4.62870368],
       [-23.70739074,  -2.85245701,  -0.4965231 ],
       [-14.43202637,   2.29917325,  -1.50272151],
       [  5.4304568 ,  10.00704077,   9.52086923],
       [ 24.15955898,  -9.36428589,   0.72657857],
       [ -3.66134607,  -7.60198615,  -2.36439873],
       [ 13.96761214,  13.89123979,  -6.44917778],
       [ 40.88093588, -13.25685287,   4.16539368],
       [ -1.74887665,  -4.23112299,  -0.58980995],
       [-21.94321959,  -2.36645883,   1.33203832],
       [-36.70868069,  -6.00536554,   3.97183515],
       [  3.28750663,   4.86380886,   1.00424688],
       [  5.99885871,   4.19398863,  -8.59953736]])

4.2 数值规约

数值规约指通过选择替代的,较小的数据来减少数据量,包括有参数方法和无参数方法两类.有参数方法是使用一个模型来评估数据,只需存放参数,而不需存放实际数据,例如回归(线性回归和多元回归)和对数线性模型(近似离散属性集中的多维概率分布).无参数方法需要存放实际数据,例如直方图,聚类,抽样(采样).

  1. 直方图,直方图使用分箱来近似数据分布,属性A的直方图将属性A的数据划分为互斥的子集(桶),如果每个桶只代表单个数据,这个桶叫做单桶.通常,桶是一个连续区间.如果数据集A的值{1,2,3,4,5,6,7,8,9,2,4,5,6,7,8,4,5,6,7,5},第一张图使用单桶显示数据直方图:
    在这里插入图片描述
    为了进一步压缩数据,通常让每一个桶代表一个连续值域,例如每一桶代表3的区间,可以分为三组,1-3,4-6,7-9:
    在这里插入图片描述
  2. 聚类:聚类技术将数据元组(即记录Series,数据表中每一行)视为处理对象,它将对象划分为簇,使一个簇中对象相互相似,而与其他对象簇相斥.在数据规约中,将用数据的簇替换实际数据,该技术的有效性依赖于簇的定义是否符合数据的分布性质.
  3. 抽样: 抽样用比原始数据小的多的随机样本数据集代表原始数据.假定原始数据集D包括N个元组,抽取S个样本下面介绍常用方法:
    S个样本无放回简单随机抽样:从D的N个元组中抽取S个样本,其中D中任意元组被抽取概率为1/N,即抽取等可能性.
    S个样本有放回简单随机抽样:每一次元组从D中抽取后,记录它,然后返回原处.
    聚类抽样:将D中元素划分为N个互斥的簇,可以进行S个簇的简单随机抽样,得到S后在对每一簇抽取.
    分层抽样:将D中元素划分为N个互斥的层,可以进行S个层的简单随机抽样,得到S后在对每一层抽取.
    用于数据规约时,抽样经常被用来估计聚集查询结果,通过中间极限定理指定固定样本大小,通过改变样本使集合求精.
  4. 参数回归:简单线性模型和对数线性模型可以用来近似描述给定的数据.简单的线性模型对数据建模,使之拟合直线,通过最小二乘法得到斜率和截距.对数线性模型用于维规约(由于低维空间的点通常比原来点占据较少空间)和数据光滑(与较高维空间估计相比低维空间的聚集估计较少受抽样方差影响).

5. Python主要数据预处理函数

下面给出本文用到的数据预处理函数:

函数名函数功能所属扩展库
interpolate一维,高维数据插值Scipy
unique除去数据中重复元素,得到单值元素列表,对象方法名Pandas/Numpy
isnull判断是否空值Pandas
notnull判断是否非空值Pandas
PCA对指标变量矩阵进行主要成分分析Scikit-Learn
random生成随机矩阵Numpy
  1. interpolate,是Scipy的一个子库,包括大量插值函数,如拉格朗日插值,样条插值,高维插值等,使用前需要导入 from scipy.interpolate import *引入对应插值函数,示例拉格朗日f=scipy.interpolate.lagrange(x,y),x,y为对应的因变量自变量数据.
  2. unique,除去数据中重复元素,得到单值元素列表,既是Numpy的函数(np.unique()),又是Series方法.使用格式为np.unique(D),D是一维数组,可以是list,array,Series.也可以D.unique(),D是Pandas的Series对象.
  3. isnull/notnull,判断每一个元素是否是空值/非空值,使用格式D.isnull()/D.notnull(),D为Series对象,返回一个布尔Series.通过D[D.isnull()]或者D[D.notnull()]找出D中的空值或非空值.
  4. random是Numpy的一个子库,可以生成服从特定分布的随机矩阵,抽样时使用,使用格式np.random.rand(k,m,n,…),生成kmn*…随机矩阵,其元素均匀分布在(0,1)区间上,np.randn(k,m,n,…),生成kmn*…随机矩阵,其元素服从标准正态分布.
  5. PCA对指标变量矩阵上进行主成分分析,使用前需要from sklearn.decomposition import PCA引入该函数,使用格式model = PCA().在Scikit-Learn下的PCA是一个建模式对象,也就是符合一般建模流程,首先PCA()建模,然后model.fit(D)训练模型,D是进行主成分分析矩阵,训练结束后获得模型参数,如.components_获取特征向量,以及.explained_variance_ratio_获取各个属性贡献.
大数据——数据预处理 数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一系列处理,如对大部分地球物理面积性观测数据在进行转换或增强处理之前,首先将不规则分布的测网经过插值转换为规则网的处理,以利于计算机的运算。数据预处理是大数据分析中不可或缺的一环,涉及数据清洗、集成、规约和变换等多个步骤。通过清洗,去除无关、缺失和异常数据;集成,合并多个数据源;规约,精简数据量;变换,规范化和离散化数据,使之更适合挖掘和分析。数据预处理能显著提升数据质量,确保分析结果的准确性和稳定性。 阅读详情

相关推荐

深入解析数据预处理技术

数据清洗是数据预处理的重要环节,可以帮助提高数据质量,减少错误和噪声的影响,使数据更适合后续分析和应用。数据清洗的对象是数据,目的是发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。理解数据:在选择数据预处理方法之前,首先要深入理解数据的特点、分布和含义。这包括了解数据的类型(数值型、类别型、文本型等)、数据的缺失情况、数据的分布和偏度等。只有对数据有深入的理解,才能选择合适的预处理方法。选择合适的缺失值处理方法:根据缺失值的类型和缺失值的比例选择合适的缺失值处理方法。

whm0802_的博客 1953

数据预处理

介绍了数据预处理的基本概念,缺失值,异常值,重复值的处理方法,以及数据转换的方法,数据预处理常用的一些类库

JasonH2021的博客 1万+

大数据平台的搭建和数据分析

  行内人士皆知,大数据分析平台的搭建有利于帮助企业构建统一的数据存储和数据处理资源,围绕企业业务开展大数据应用建设,最终形成面向服务化的数据资产。今天我们就以大数据平台为例,透过平台所包含的系统模块来看看其应该具备哪些实际功能?   一般的大数据平台从平台搭建到数据分析大概包括以下几个步骤:   1、Linux系统安装   一般使用开源版的Redhat系统--CentOS...

中琛魔方大数据 993

数据预处理及预处理方法(附思维导图)

数据预处理简单来说就是在进行数据探索数据处理之前对数据进行一系列处理,将数据中的脏数据去除,之后进行数据分析的时候保证结果的准确性。数据预处理主要分为三个部分:数据清洗、数据集成、数据归约。

qq_57629191的博客 7876

数据分析系列--③RapidMiner算子说明及数据预处理

状态灯说明:(1)状态指示灯:红色:指示灯说明有参数未被设置或输入端口未被连接等问题;黄色:指示灯说明还未执行算子,不管配置是否基本齐全;绿色:指示灯说明一切正常,已成功执行算子。(2)三角警示牌:用于表明是否有算子的状态信息出现。(3)断点:用于表明分析员是否在这个算子前面或是后面暂停了流程,以检测中间效果。(4)注释:如果这个算子中出现了注释,则会通过这个图标表示出来。(5)子流程:这个图标用来指示是否有子流程。双击算子可以进入子流程。

灰灰老师 1407

优化Cartographer重定位速度:从子图筛选到参数调优的完整思路

本文详细介绍了优化Cartographer重定位速度的完整方法,从子图筛选到参数调优,帮助工程师在已知初始位姿的前提下将重定位耗时降低50%以上。重点分析了性能瓶颈、子图筛选策略、匹配算法选择及环境自适应的参数优化策略,并通过实战案例展示了显著效果提升。

weixin_28704565的博客 463

【数据分析系列】Python数据预处理总结篇

史上最全的Python数据分析预处理总结篇,不看后悔!!!

m0_49263811的博客 1万+

MICROSAR OS:第一个task是如何执行起来的?

MICROSAR OS是Vector公司开发的符合AUTOSAR OS规范的实时操作系统。本文介绍MICROSAR

humu7733的博客 2569

数据分析系列 之python中数据探索与预处理

1 概述 1.1 数据探索 检查数据错误,了解数据分布特征和内在规律 1.2 数据预处理 数据清洗 Data cleaning 数据集成 Data integration 数据变换 Data transformation 数据规约 Data reduction 2 数据清洗 2.1 缺失值处理 删除 填充:固定值、均值、中位数、上下数据、插值函数、最可能的值(回归分析填充) 举例:DataFrame缺失值处理 x = pd.read_csv('A.csv',index_col='Date') #检测空值 x

langxiaolin的博客 904

ROS Navigation global_planner框架解析

ROS Navigation global_planner框架解析主要讲一下我看源码总结的框架,如果大家跟着这个框架看源码的话可能会看的比较快。主要讲解global_planner关键配置参数含义及关键函数Astar,Dijkstra,QuadraticCalculator::calculatePotential,PotentialCalculator::calculatePotential,GridPath::getPath,GradientPath::getPath.

Jeff_Lee_的博客 4694

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 484

图解数据分析:从入门到精通系列教程

数据分析是一项应用非常广泛的技能。本系列教程展开讲解数据分析。这套数据分析教程不同于其他文字版教程,我们以最直挂的「图示」对每个内容和关键点「可视化」,配以最精准精简的代码,让大家尽快入。.........

ShowMeAI研究中心 1万+

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1979

Python数据分析与挖掘

Python数据分析与挖掘是一个结合了数据处理、统计分析和机器学习技术的领域,它利用Python语言的强大功能来从大量数据中提取有价值的信息和知识。以下是一些关于Python数据分析与挖掘的详细介绍:### Python数据分析与挖掘的基本概念- **数据分析**:涉及使用统计方法和算法对数据集进行探索和分析,以发现数据中的模式、趋势和关联【1】。 - **数据挖掘**:是数据分析的一个分支,专注于从大型数据集中通过算法和统计模型提取有价值的信息【4】。### Python语言在数据分析与挖掘中的优势- *

2401_84204413的博客 1823

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

44位abogus补环境与纯算逆向分析

44位ab参数补环境与纯算加密流程逆向分析

吴秋霖的博客 2769

书单——数据分析(喜欢的可以下单)

1024书单数据分析精益数据分析本书围绕精益创业展开讨论,融合了精益创业法、客户开发、商业模式画布和敏捷/ 持续集成的精华。本书汇聚了100多位创始人、投资人、内部创业者和创新者的成功创业经验,呈现了30多个极具价值的案例分析,可以为各阶段的创业者提供行为准则。R语言实战(第2版)|两版合计印刷50+次,总销量超17万册|深受读者好评,豆瓣评分9.0|从实际数据分析出发,全面掌握R编程...

huzechen的博客 263

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握

m0_73659489的博客 143

python数据分析_在知乎上学 Python - 数据分析篇

知乎是个好地方。从内容质量和专业性来说,知乎可以算是国内数一数二的知识型社区。不少同学都是通过知乎发现了我们编程教室,我自己也经常会通过知乎去寻求一些专业知识的解答和参考。之前,我们先后整理过两期知乎上有关 Python 学习的优质问答和文章索引,以方便大家更好地挖掘及使用知乎上有价值的信息。参见:在知乎上学 Python - 入门篇在知乎上学Python - 爬虫篇今天我们要继续这个系列,分享一...

weixin_39585378的博客 591

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Orange3数据预处理(分类器组件)

从字符串属性创建类属性

坚持到底 610

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python中数据预处理基本方法

本文将介绍 Python 数据预处理的基本方法,包括 Pandas 库的使用、缺失值处理、数据类型转换和数据重复处理等操作。

winnerxrj的博客 993

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数据分析怎么学?我画了一个导图,又找到22本书

导读:数据分析史上最强书单!数据分析是从数据中提取信息的过程,其在各个领域发挥着非常重要的作用。数据分析是检查、清理、转换和建模数据的过程,它有助于从数据中发现规律并制定更加科学的决策,已...

华章IT官方博客 499

python商业数据分析_Python数据分析案例—商圈客流量特征分析

这是 python 数据分析案例系列的第二篇,主要是聚类分析,实现起来较为简单。后续还会继续更新,欢迎关注交流! 在处理实际的数据分析案例时,我们面临的往往是比较复杂的研究对象,如果能把相似的样品(或指标)归成类,处理起来大为方便。 聚类分析目的就是把相似的研究对象归成类先贴上总结的聚类分析基本步骤: 算法过程如下:1)从N个文档随机选取K个文档作为 质心2)对剩余的每个文档测量其到每个 质心 的...

weixin_39644713的博客 1648

MATLAB统计分析与应用100案例:开启数据分析之旅

MATLAB统计分析与应用100案例:开启数据分析之旅 【下载地址】MATLAB统计分析与应用100案例案例001使用Importdata函数导入TXT数据 MATLAB统计分析与应用100案例——案例001:使用Importdata函数导入TXT数据欢迎来到“MATLAB统计分析与应用”系列的起点,本系列旨在通过100...

gitblog_06549的博客 1091

数据分析处理库-Pandas

print (food_info["Iron_(mg)"]) div_1000 = food_info["Iron_(mg)"]/1000 print (div_1000) #排序 从小到大 food_info.sort_values("Sodium_(mg)",inplace = True) print (food_info["Sodium_(mg)"]) #排序 从大到小 food_info...

qq_14815661的博客 511

像Excel一样使用python进行数据分析

Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作。在Python中pandas库用于数据处理 ,我们从1787页的pandas官网文档中总结出最常用的36个函数,通过这些函数介绍如何通过python完成数据生成和导入,数据清洗,预处理,以及最常见的数据分类,数据筛选,分类 汇总,透视等最常见...

weixin_34037977的博客 1595
上一篇: 数据分析系列之数据探索
下一篇: 使用码云加速Github文件下载
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值