使用 Python 进行数据预处理中用到的各个扩展库及对应函数 拉格朗日插值法,主成分分析等

一、数据清洗

            删除原始数据集中的无关数据、重复数据,平滑噪声数据,处理缺失值、异常值。

  • 缺失值处理

           删除缺失值、数据插补、不处理

          Scipy拉格朗日插值法

                        from scipy.interpolate import lagrange#导入拉格朗日插值函数

         参考链接:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.lagrange.html#scipy.interpolate.lagrange

                             

  • 异常值处理

         直接删除、视为缺失值、平均值填补、不处理

二、数据集成

           将多个数据源合并存放在一个一致的数据存储(如数据仓库)中的过程

  • 实体识别

          统一不同源数据的矛盾之处:同名异义、异名异义、单位不统一

  • 冗余属性识别

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

使用相关分析检测:给定两个数值型的属性A和B,根据其属性值,用相关系数度量一个属性在多大程度上蕴含另一个属性

计算相关系数

     Pearson 相关系数:分析两个连续变量之间的关系,且连续变量的取值服从正态分布。

     Spearman 秩相关系数:分析不服从正态分布的变量、分类或等级变量见的关联性。

     引入 Pandas 用于读取数据

     计算示例:

      data.corr( )[u'A的销量'] 

      结果:列出所以产品销量与A销量的相关系数

三、数据变换

           对数据进行规范化处理,转换成适于挖掘的形式。

  • 简单函数变换

          平方、开方、取对数、差分运算,以将不具有正态分布的数据变换城具有正态分布的数据。

  • 规范化

         将数据进行标准化处理,按照比例进行缩放,使之落入一个特定的区域,消除指标之间的量纲和取值范围差异的影响。

 引入 Pandas 用于读取数据,numpy  用于计算数据

    最小—最大规范化:离差标准化,是对原始数据的线性变换,将数值映射到 [0,1] 之间。

                                      (不适用于数值集中且某个数值很大的情况)

                                    转化公式:   x*=(x-min)/(max-min)

    max:样本数据的最大值;           min:样本数据的最小值;      max-min为极差

   计算示例: ( data-data.min() ) / ( data.max() - data.min() )

 零—均值规范化:标准差规范化,经过处理的数据的均值为0,标准差为1。

                                      (不适用于数值集中且某个数值很大的情况)

                                   转化公式:    x*= (x-均值) / 标准差

    均值:原始数据的均值;           min:原始数据的标准差; 

   计算示例: ( data-data.mean() ) / data.std() 

 小数定标规范化:通过移动属性值的小数位数,将属性值映射到 [-1,1] 之间。移动的位数取决于属性值绝对值的最大值。

                                      (不适用于数值集中且某个数值很大的情况)

                                   转化公式:    x*= x / 10的K幂

    均值:原始数据的均值;           min:原始数据的标准差; 

   计算示例: data / 10**np.ceil( np.log10( data.abs( ).max( ) )  )

  • 连续属性离散化

          一些分类算法(如ID3算法、Apriori算法)要求数据时分类属性的,所以需要将连续属性变成分类属性,即连续属性离散化。

        在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。

        步骤:确定分类数——>将连续属性值映射到分类值   

        方法:

                 等宽法:将属性的值域分成具有相同宽度的区间。引入 Pandas 用于读取数据

                         计算示例:datafile='../data/abcd.xls'

                                            data=pd.read_excel(datafile)

                                            data=data[u 'a的销售量' ].copy( )

                                            k=4

                                            d1=pd.cut( data,k,labels=range(k) )

                 等频法:将相同数量的记录放进每个区间。引入 Pandas 用于读取数据

                        计算示例: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) )


                基于聚类分析的方法引入 Pandas 用于读取数据,从 scikit-learnsklearn.cluster 引入 KMeans

                    

                        计算示例:from sklearn.cluster import KMeans  #引入KMeans

                                            kmodel=KMeans( n_clusters=k,n_jobs=4 )    #建立模型,n_jobs 是并行数

                                            kmodel.fit(data.reshape( ( len(data),1) ) )    #训练模型,此行reshape报错....待解决

                                            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 j in d[d==j] ], 'o')    # data[d==j] 为 x 轴;  [j for j in d[d==j] ] 为 y 轴;   以 o 圆圈画图

                      plt.ylim( -0.5, k-0.5)   #ylim 设置 y 轴的限制

                      return plt

        

                    cluster_plot ( d1, k ).show( )

                   cluster_plot ( d2, k ).show( )

                   cluster_plot ( d3, k ).show( )

  • 属性构造

          利用已有属性构造新属性,并加入到现有的属性集合中。

         引入 Pandas 用于读取数据        

  • 小波变换

          在时域和频域都具有表征信号局部特征的能力。

         引入 Scipy 的信号处理库和 Pywavelets 信号处理库     

          引入示例:from scipy.io import loadmat  #用 loadmat 读取 mat , mat 是 python 专用格式

                             inputfile='../data/leleccum.mat'

                            mat=loadmat (inputfile)

                           signal=mat['leleccum'][0]

                             import pywt  # 导入 PyWavelets

                            coeffs=pywt.wavedec(signal, 'bior3.7', level=5)               


三、数据归约

           数据归约产生更小单保持数据完整性的新数据集。

  • 属性归约

          寻找最小的属性子集,并确保新数据子集的概率分布尽可能地接近原来数据集的概率分布。

      方法:

  1.          合并属性:将一些旧属性合为新属性
  2.          决策树归纳:利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策树,所有没有出现在这个决策树上的属性均可认为是无关属性,因此将这些属性从初始集合中删除,就可以获得一个较优的属性子集。(属于直接删除不相关属性(维度)方法)
  3.         主成分分析:用较少的变量去解释原始数据中的大部分变量(即所谓主成分),即将许多相关性很高的变量转化成彼此相互独立或不相关的变量。(用于连续属性的数据降维)  

主成分分析的函数位于 Scikit-Learn 下:  sklearn.decomposition.PCA(n_components=None,copy=True,whiten=False)

n_components: PCA 算法中所要保留的主成分个数n, 即保留下来的特征个数 n

copy:是否在运行算法时将原始训练数据复制一份

whiten:使得每个特征具有相同的方差

引入 pandas 和 Scikit-Learn 下的 PCA

计算示例:import pandas as pd

                   inputfile ='../data/abc.xls'

                  outputfile ='../tmp/bcd.xls'  

                  data=pd.read_excel(inputfile, index=False)


                 from sklearn.decomposition import PCA       

                 pca=PCA( )

                 pca.fit(data)

                 pca.components   #返回模型的各个特征向量

                 pca.explained_cariance_ratio_     #$返回各个成分各自的方差百分比

  • 数值归约

          通过选择替代的、较小的数据来减少数据量。

      方法:

           有参数方法:使用一个模型来评估数据,只需存放参数,不需要存实际数据。包括:回归(线性回归、多元回归)(回归系数可以用最小二乘法求解),对数线性模型。

          无参数方法:需要存放实际数据。包括:直方图、聚类、抽样。



小结:

python 主要数据预处理函数:

interpolate:所在扩展库为 Scipy,用于数据插值

               使用格式:f=scipy.interpolate.lagrange(x,y)

unique:所在扩展库为 Pandas 和 Numpy,用于去除数据中的重复元素,得到单值元素列表

             使用格式:D.unique()   #D是一维数据,可以是list、array、Series

isnull:所在扩展库为 Pandas,判断是否空值

notnull:所在扩展库为 Pandas,判断是否非空值。

             使用格式:D.isnull() / D.notnull()   #D是Series

PCA:所在扩展库为 Scikit-Learn,对指标变量矩阵进行主成分分析。

             使用格式:model=PCA()

random:所在扩展库为Numpy,生成随机矩阵。

            使用格式:np.random.rand(k,m,n,...)  生成一个 k×m×n×...随机矩阵,其元素均匀分布在区间(0,1)上

                                np.random.randn(k,m,n,...)  生成一个 k×m×n×...随机矩阵,其元素服从标准正态分布


注:本文属于学习总结笔记,大部分知识来源于书本和网络,非原创。

猜你喜欢

转载自blog.csdn.net/Carolinedy/article/details/80662245