精华内容
下载资源
问答
  • 数据挖掘-数据探索

    千次阅读 2016-04-27 21:35:05
    数据探索  根据观测、调查收集到初步的样本数据集后,接下来要考虑的问题是:样本数据集的数量和质量是否满足模型构建的要求?有没有出现从未设想过的数据状态?其中有没有什么明显的规律和趋势?各因素之间有什么...

    数据探索

            根据观测、调查收集到初步的样本数据集后,接下来要考虑的问题是:样本数据集的数量和质量是否满足模型构建的要求?有没有出现从未设想过的数据状态?其中有没有什么明显的规律和趋势?各因素之间有什么样的关联性?

            数据探索就是通过检验数据集的数据质量、绘制图表、计算某些特征量等手段,对样本数据集的结构和规律进行分析的过程。

    数据探索可以从数据质量分析和数据特征分析等两个角度进行展开。

    一.数据质量分析

         数据质量分析是数据挖掘中数据准备过程中的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据。在数据挖掘中,脏数据包括:

       缺失值

       异常值

       不一致的值

       重复数据及含有特殊符号的数据

    1.1   缺失值分析

         数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确。通过使用简单的统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与缺失率等。

    缺失值产生的原因

    1)有些信息是被遗漏的。可能是因为输入时认为不重要、忘记填写或对数据理解错误等一些人为因素而遗漏的

    2)属性值不存在。

    3)有些信息暂时无法获取,或者获取的代价比较大。

    缺失值的影响

    1)数据挖掘建模将丢失大量的有用信息

    2)数据挖掘模型所表现出的不确定性更加显著,模型中蕴含的规律更难把握

    3)包含空值的数据会使建模过程陷入混乱,导致不可靠的输出

    1.2   异常值分析

         异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,会给结果带来不良影响。

    异常值是指样本中的个别值,其数据明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。异常值分析可以通过以下3种方法来探索。

    1)简单统计量分析

    可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值。

    2)3原则

      如果数据服从于正态分布,在3原则下,异常值被定义为一组测定值与平均值的偏差值超过3倍标准差的值,即|x-u| >3。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

    3)箱型图分析

    箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL -1.5IQR或大于Q+1.5IQR的值。

    1.3   一致性分析

            数据不一致性是指数据的矛盾性、不相容性。直接对不一致性的数据进行挖掘,可能会产生与实际相违背的挖掘结果。

           在数据挖掘过程中,不一致数据的产生主要发生在数据集成的过程中,可能是由于被挖掘数据来自于不同的数据源、对于重复存放的数据未能进行一致性更新造成的。

    二.数据特征分析

          对数据进行质量分析以后,可以通过绘制图表、计算某些特征量等手段进行数据的特征分析。主要通过分布分析、对比分析、统计量分析、周期性分析、贡献度分析、相关性分析等角度进行展开。

    2.1 分布分析

         分布分析能揭示数据的分布特征和分布类型。对于定性数据,可用饼形图和条形图直观的现实分布情况。

    2.2 对比分析

         对比分析是指把两个相互联系的指标进行比较,从数据量上展开和说明研究对象规模的大小,水平的高低,速度的快慢。在对比分析中,选择合适的对比标准是十分关键的步骤。

    2.3  统计量分析

        用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。

    2.4 周期性分析

         周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期性趋势,相对较短的有月度周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。

    2.5 贡献度分析

       贡献度分析又称帕累托分析,它的原理是帕累托法则又称2/8定律。

    2.6 相关性分析

       分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。

     


    展开全文
  • 简介数据探索是在具有较为良好的样本后,对样本数据进行解释性的分析工作。在我看来,数据探索是数据挖掘较为前期的部分。它并不需要应用过多的模型算法。数据探索更偏重于定义数据的本质,描述数据的形态与特征并...

    简介

    数据探索是在具有较为良好的样本后,对样本数据进行解释性的分析工作,它是数据挖掘较为前期的部分。数据探索并不需要应用过多的模型算法,相反,它更偏重于定义数据的本质、描述数据的形态特征并解释数据的相关性。通过数据探索的结果,我们能够更好的开展后续的数据挖掘与数据建模工作。

    一句话解释版本:

    数据探索要弄清楚这些问题:样本数据长什么样子?有什么特点?数据之间有没有关系?样本数据是否能满足建模需求?


    数据分析与挖掘体系位置

    数据挖掘要求我们从一堆数据中寻找潜在的关系与逻辑,并用数学的模型定义出来,以创造更大的价值。而数据探索就是实现这个目标的基石。

    数据探索中的数据一般已经进行过数据预处理。虽然在现实生活中,也会有很多情况是要对未经任何处理的数据进行数据探索。但是严格来说,这种探索已经带有了太多数据加工、数据规约的知识。因此,我并不把得到良好样本之前的数据处理工作归于探索。

    这里的探索,就像前面说的,更加偏重与数据本身的意义以及数据表现出的形态。所以,它位于样本抽取之后的步骤之后,数据建模的步骤之前。



    数据探索的理解

    许多人在定义或者理解数据探索的时候,会更多的联系到数据的前期调研、业务理解、数据抓取、数据清洗等过程。我可以理解这种说法,因为从宽了讲,数据探索其实可以贯穿整个数据分析与挖掘的框架。

    但是,在我构建数据挖掘体系的时候,更希望能够将上面这些小过程一一切割出来,把他们单独放在框架定位、数据准备与样本抽取这些环节讲解,这样做能够避免数据探索这个点中覆盖的知识点太广泛扩散,不易提炼精华。所以,我这里探讨的数据探索方法,可能会与其他地方看到的有所不同。这是因为我将原本可以归属在数据探索中的知识分割出去了。

    理解数据探索,就是理解如何描述数据本身的形态,理解通过数学上的数理统计方法与模型,来解释数据的表象特征与相关关系。


    数据探索的方法

    数据探索的方法可以分成两类:

    1. 数据描述方法
    2. 数理统计方法

    下图是这两种方法的结构分类图:


    数据描述方法

    数据描述方法是最直观,最简单,最容易理解的探索方法。他说直白点,就是看着数据,告诉我:

    • 最多?(众值)
    • 平均?(平均数)
    • 中间?(中位数)
    • 最大?(极值)
    • 最小?(极值)
    • 浮动程度?(方差)
    • 曲线形状?(分布)

    回答上面这些问题,就是需要通过数据描述方法。它主要包括以下三方面:

    1. 集中趋势分析:讨论数据平均处于什么位置,集中于什么位置,数据的中心点的什么位置。对应前面说的最多、平均、中间等问题。
    2. 离中趋势分析:讨论数据的离散程度,即数据的分散程度。对应前面说的最大、最小、浮动程度等问题。
    3. 数据分布关系:讨论数据的形态形状。对应前面说的曲线形状,即分布。
    4. 图分析:用散点图、柱状图、直方图等图表显示并比较数据的形态。

    数理统计方法

    数理统计方法相对来说更偏重数学的公式。它是在用统计学的语言去论证数据的规律。大多数方法,如假设检验、方差分析都是在用统计概率证明一种结论。

    数理统计方法从理解上说要更难一些,同时包括的方法也更多更杂。它主要包括以下5种方法:

    1. 假设检验:分析样本指标与总体指标间是否存在显著性差异。
    2. 方差分析:用于两个以及两个以上样本均数差别的显著性检验。
    3. 相关分析:探索数据之间的正相关、负相关关系。
    4. 回归分析:探索数据之间的因果关系或依赖关系。
    5. 因子分析:从变量群中提取共性因子的统计技术。

    通过这两种方法,一方面能够对整个样本数据的形态有完整的描述,一方面也能够深入的探讨数据之间的关系与内部联系。进而为下一步的数据建模创造良好的前提条件。


    数据探索的题外话

    虽然上面提及的方法都可以在数据探索中派上用场。但是,数据探索更多的与数据分析人员自身的经验以及业务敏感度有关。

    在真实的数据分析与挖掘项目中,我们更希望能有效的通过数据探索,去了解什么样的数据是有价值、有研究意义的,什么样的模型建出来是有价值的,现有的样本是否能支撑模型,样本是否恰当、充足、合适。

    所以说,数据探索是链接前期数据准备工作与后期数据建模工作的桥梁。我们可以通过众多方法去定义数据探索,但是它的最终目的一直是为后期的建模打好基础,确立方向。做到这一点,数据探索便是有价值的。


    展开全文
  • Explore:R软件包,从根本上简化了基础数据的探索(交互式数据探索,可再现的数据科学)
  • 通过检验数据集的数据质量、绘制图表、计算某些特征量等手段,对样本数据集的结构和规律进行分析的过程就是数据探索数据探索有助于选择合适的数据预处理和建模方法,甚至可以完成一些通常由数据挖掘解决的问题。 ...
  • 《Python数据分析与挖掘实战》读书笔记之数据探索与数据预处理 一数据探索 数据分析内容 异常值检测代码 贡献度分析代码菜品盈利帕累托图代码 二数据预处理 数据预处理内容 数据清洗代码拉格朗日...

    《Python数据分析与挖掘实战》读书笔记之数据探索与数据预处理

    文章目录

    ##一、数据探索
    Python中用于数据探索的库主要是Pandas(数据分析)Matplotlib(数据可视化)

    ###数据分析内容
    数据质量分析
    : 缺失值分析
    : 异常值分析
    : 一致性分析

    数据特征分析
    分布分析
    对比分析
    统计量分析
    周期性分析
    贡献度分析
    相关性分析

    ###异常值检测代码

    #-*- coding: utf-8 -*-
    
    import sys
    reload(sys)
    
    sys.setdefaultencoding('utf-8')
    
    import pandas as pd
    
    catering_sale = '../data/catering_sale.xls' #餐饮数据
    data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
    
    import matplotlib.pyplot as plt #导入图像库
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
    plt.figure() #建立图像
    p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
    x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
    y = p['fliers'][0].get_ydata()
    y.sort() #从小到大排序,该方法直接改变原对象
    
    for i in range(len(x)): 
      if i>0:
        plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
      else:
        plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
    
    plt.show() #展示箱线图
    

    运行程序得到箱型图
    python用箱型图进行异常值检测


    ###贡献度分析代码(菜品盈利帕累托图代码)

    #-*- coding: utf-8 -*-
    
    #菜品盈利数据 帕累托图
    from __future__ import print_function
    import pandas as pd
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    #初始化参数
    dish_profit = '../data/catering_dish_profit.xls' #餐饮菜品盈利数据
    data = pd.read_excel(dish_profit, index_col = u'菜品名')
    data = data[u'盈利'].copy()
    data.sort_values(ascending=False)
    #sorted(data,reverse=True)  #或用这句话
    
    import matplotlib.pyplot as plt #导入图像库
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
    plt.figure()
    data.plot(kind='bar')
    plt.ylabel(u'盈利(元)')
    p = 1.0*data.cumsum()/data.sum()
    p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
    plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。
    plt.ylabel(u'盈利(比例)')
    plt.show()
    

    ##二、数据预处理
    ###数据预处理内容
    数据清洗
    : 缺失值处理
    : 异常值处理

    数据集成
    数据变换
    : 函数变换
    : 规范化(归一化)
    : 连续属性离散化(某些算法要求数据是分类属性形式)
    : 属性构造
    : 小波变换


    ###数据清洗代码(拉格朗日法进行插补)

    #coding=utf-8
    #拉格朗日插值代码
    import pandas as pd #导入数据分析库Pandas
    from scipy.interpolate import lagrange #导入拉格朗日插值函数
    pd.options.mode.chained_assignment = None #default='warn'
    inputfile = '../data/catering_sale.xls' #销量数据路径
    outputfile = '../tmp/sales.xls' #输出数据路径
    
    data = pd.read_excel(inputfile) #读入数据
    data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None #过滤异常值,将其变为空值
    #data.loc[:,(u'销量',)][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None #这是对处理后得到一个结果,不能作用到原数据上
    
    #row_indexs=(data[u'销量']<400|(data[u'销量']>5000))
    #data.loc[row_indexs,u'销量']=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.loc[j,i]=ployinterp_column(data[i],j)
    
    data.to_excel(outputfile) #输出结果,写入文件
    

    Pandas报错:Setting With Copy Warning
    添加pd.options.mode.chained_assignment = None #default='warn'
    或用".loc" pandas SettingWithCopyWarning(此代码中异常值未置空)


    ###数据离散化代码

    #-*- coding: utf-8 -*-
    #数据规范化
    import pandas as pd
    atafile = '../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.values.reshape((len(data), 1))) #训练模型
    c = pd.DataFrame(kmodel.cluster_centers_).sort_values(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()
    

    kmeans()含义Python—kmeans算法学习笔记

    按照提示改正error和warning(warning可不改)
    reshape is deprecated and will raise in a subsequent release.
    DataFrame排序sort的问题


    #-*- coding: utf-8 -*-
    #主成分分析 降维
    import pandas as pd
    import numpy as np
    
    #参数初始化
    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=PCA(3)
    pca.fit(data)
    low_d=pca.transform(data) #降低维度
    print low_d
    #df=pd.DataFrame(low_d)
    #print df
    #df.to_html('a.html')
    pd.DataFrame(low_d).to_html('a.html') #数据写入html
    #pd.DataFrame(low_d).to_exel(outputfile)
    pca.inverse_transform(low_d)
    

    Error:‘DataFrame’ object has no attribute ‘to_exel’
    未解决,改为写入html

    DataFrame基本操作
    用python做数据分析4|pandas库介绍之DataFrame基本操作
    Pandas dataframe数据写入文件和数据库

    展开全文
  • 数据探索的方法

    千次阅读 2018-04-15 18:56:02
    介绍数据探索是没有捷径可言的,如果你想凭借机器学习方法来解决所有的数据问题,请相信我你一定会失败的。在很多时候我们的工作内容是在试图提高模型的准确率,在这种情况下,数据探索技术可能会给你带来意想不到的...

    介绍

    数据探索是没有捷径可言的,如果你想凭借机器学习方法来解决所有的数据问题,请相信我你一定会失败的。在很多时候我们的工作内容是在试图提高模型的准确率,在这种情况下,数据探索技术可能会给你带来意想不到的结果。 
    这篇文章主要是介绍数据分析的潜在技术,为了更好的理解某些复杂的概念,本文将穿插一些小例子,最终目的是培养我们在动手建模之前,知道如何对数据进行探索和分析。

    目录

    1.数据探索和准备的步骤 
    2.处理缺失值

    • 为什么缺失值需要处理
    • 为什么数据有缺失值
    • 处理缺失值的方法有那些

    3.检测和处理异常值的方法

    • 什么是异常值
    • 异常值的类型有哪些
    • 异常值产生的原因
    • 异常值对整个数据集的影响
    • 怎么检测异常值
    • 怎么移除异常值

    4.特征工程的艺术

    • 什么是特征工程
    • 特征工程的步骤
    • 什么是变量的转换
    • 什么时候需要使用变量的转换
    • 变量转换的一般方法
    • 产生新特征与其好处

    1.数据探索和准备的步骤

    我们需要知道输入数据的质量决定了模型输出的结果,即数据决定了模型的上限。所以我们需要花大量的时间来对数据进行处理,一般来说数据探索、清洗和预处理将占用整个项目周期的70%时间。下面是在建立预测模型的时候,需要知道的关于清洗和预处理数据的步骤 
    1.变量识别 
    2.单变量分析 
    3.双变量分析 
    4.缺失值处理 
    5.异常值处理 
    6.变量转换 
    7.产生新变量 
    在实际工作中我们会反复迭代步骤4-7,直到我们得到一个满意的模型

    变量识别

    首先需要分清哪个是输入(predictor)变量哪个是输出(Target)变量,然后鉴别数据类型和变量的类别,下面通过一些小练习来理解这一步骤。 
     
    在下面图中,这些变量被分为不同的类别 

    单变量分析

    在这一阶段,我们将对变量进行一一探索。我们需要去判别变量是类别类型还是连续类型,对这两种类型的变量需要分开讨论。 
    连续型变量:对于连续性数据,我们需要知道数据的中心分布趋势和变量的分布。下面是一些统计指标 
     
    注意:在进行单变量分析的时候,我们通常会凸显出异常值或缺失值。在下文中我们会探索如何处理缺失值和异常值 
    类别类型: 对于类别变量,我们一般使用频次表表示每一个类别的分布情况,也可以使用某一类别的占比。它们的衡量指标分别为count和count%,使用柱形图来可视化分布情况。

    双变量分析

    双变量分析目的是为了发现变量之间的关系。我们按照预先设定的重要程度来发掘变量之间的关联,可以在类别类型变量连续变量的任意组合上面使用双变量分析方法,这些组合可以是:类别型和类别型、类别型和连续性、连续型和连续型,针对不同的组合使用不同的分析方法。 
    下面是不同组合的详解: 
    连续型和连续型:当两个变量都是连续型的时候时候,我们应该观看他们的散点图(scatter )分布情况,这是一种很实用的方法来发现变量间的关系,根据散点图的形状能够显示(indicates )出变量是线性(linear )关系还是非线性(non-linear )的关系。 

    散点图只能直观的展示出变量之间的关系,但并不说明化关系的强弱,相关性(Correlation)能够对这个关系进行量化,相关性是一个大于-1小于1的值。

    • -1:强负线性相关
    • +1:强正线性相关
    • 0:不相关 
      相关性的计算公式: 
       
      下面是一个使用python的numpy计算相关系数矩阵的列子,可以看出X和Y的相关系数约为0.65为正相关 

    类别型与类别型:为了发现类别型变量之间的关系,我们可以使用以下方法

    • 双向表(two-way table):我们可以通过建立count和count% 的双向表来分析变量之间的关系,行和列分别表示一个变量,每一个(row,column)为count或者count%的值
    • 堆叠柱状图(stacked column chart):这种方法比双向表更加的直观 

    • 卡方测试(Chi-Square Test):这种方法是用来衡量变量与变量之间的显著性,同时,它用来检验样本中的信息是否足以概括样本总体的关系。卡方测试是基于期望值与真实值的差异计算得来,它得到的是卡方分布与自由度的概率值。 
      概率值为0:说明类别变量之间相互独立 
      概率值为1:说明类别变量之间不独立 
      概率值小于0.05:说明类别变量之间存在关系的置信区间为95% 
      具体例子 
      下面是sklearn计算卡方值:

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    iris = load_iris()
    X, y = iris.data, iris.target
    chiValues = chi(X,y)
    X_new = SelectKBest(chi2, k=2).fit_transform(X, y)

    类别型和连续型:当处理类别型和连续性变量的时候,可以为每一个类别变量绘制箱线图

    2.处理缺失值

    为什么需要处理缺失值?

    训练集中的缺失值会削弱模型的拟合能力或得到有偏差的模型,这是因为模型没有正确学到变量之间的关系,这会得到错误的预测值或分类 
     
    上图是有缺失值的数据集与补全后的数据集,左边的表格是没有对缺失值进行处理,从表中可以推断出男性和女性玩板球的几率相同,但是通过观察右边的表格,可以看得出女性玩半球的概率要高于男性

    为什么会存在缺失值?

    从上面要给例子我们看出了处理缺失值的重要性,接下来让我们来找到产生缺失值的原因,这些原因主要出现在两个阶段:

    • 1.数据提取:在数据提取阶段可能会出现差错,在这种情况下,我们应该用重新查看正确的数据,一些哈希程序能够确保数据是正确的,在提取数据阶段出现的错误比较容易发现并且也容易纠正。
    • 2.数据收集:数据收集阶段出现的错误相对来说 比较难修正,主要分为以下4类:
      • 完全随机丢失:这种情形对于所有观察结果,丢失变量的概率是相同的。 例如:数据收集过程的受访者决定在抛出一个公平的硬币之后,他们将宣布他们的收入。 如果为正面,受访者宣布他/她的收入,反之亦然。 这里每个观察值具有相同的缺失值的机会。
      • 随机丢失:这种情形是变量的值随机丢失并且丢失的比率因其他输入变量的不同值/级别而变化。 例如:我们收集的年龄时,女性的数据的缺失率相对男性来说较高。
      • 不可预测因子导致缺失:这种情形数据并不是随机缺失,而是受一切潜在的因子影响,例如:在医学研究中,如果一个特定的诊断导致病人不舒适,那么这项研究就很有可能被抛弃。这个缺失值并不是随机发生,而是依赖于“不舒适”这一潜在的因子
      • 取决自身的缺失:这种情形是发生缺失的概率受缺失值本身影响,例如:收入较高和较低的人不愿意提供自己的收入。

    处理缺失值的方法有那些

    • 1.删除:有两种方法 List Wise Deletion 和Pair Wise Deletion
      • 在List Wise Deletion方法中,我们删除掉所有有缺失值的样本,该方法的有点主要是简单,但由于该方法减少了样本的大小,会导致模型的拟合能力下降。
      • 在Pair Wise Deletion方法中,对所有我们感兴趣的样本进行分析,该方法的有点是保留了更多的样本用来分析,这种方法的缺点是针对不同的变量使用了大小不同的样本集。 
      • 当缺失数据的性质为“完全丢失随机”时,则将对样本进行删除,否则非随机缺失值可能会让模型的输出产生偏离。
    • 2.均值/模型/中值填充(imputation):填充是一种用估计值来补填缺失值的方法,目标是利用从有效数据集中识别的关系来帮助评估缺失值,均值/模型/中值填充方法是最常用的方法之一,它通过对包括该变量的所有已知值的平均值或中值(定量属性)或模型(定性属性)进行分析来替换给定属性的丢失数据,可以分为两种类型:
      • 一般填补:通过计算该变量下所有非缺失值的平均值或中值来补全缺失值,像上一表中manpower存在缺失值,我们使用其他的非确实只来填充
      • 相似样本填充:这种情况通过分别计算MaleFemal的平均值为29.7和25来分别填充male和femal的缺失值
    • 3.预测模型:预测模型是处理丢失数据的复杂方法之一,通过建立预测模型来填补缺失值,这种情况下我们把数据集分为两份,一份是没有缺失值的一份有缺失值的。第一份数据集就是训练集第二份就是测试集,而缺失的变量就是预测目标。下一步根据训练集的其他变量来训练模型,填充缺失值。可以使用回归、分类等方法来完成填充,有两个缺点
      • 1 预测出来的值往往更加”规范“
      • 2 如果变量之间不存在关系,那么得到的缺失值将不准确
      1. KNN填充方法:这种方法是利用与该样本最相似样本的值来填充,使用距离指标来代表相似,该方法的优缺点:
      • 优点
      • KNN能定量和定性的填充
      • 不需要为缺少数据的每个属性创建预测模型
      • 对于存在多个缺失值的样本也容易填充
      • 数据的相关结构被考虑在内
      • 缺点
      • KNN非常耗时,因为它需要遍历整个数据集
      • K值的选择,K过大会引入无关的因素,K较小将丢失一些重要的特征 
        处理过缺失值之后,下一步就要处理异常点,通常我们倾向忽略异常点的影响,然而这是一个不好的方法,异常点会让我们的数据产生倾斜并影响准确率

    3.检测和处理异常值的方法

    异常值是分析师和数据科学家常用的术语,因为它需要密切关注,否则可能导致出现错误的估计。 简单来说,异常点是一个远远超出整个样本总体的观测值,我们来举个例子,我们做客户分析,发现客户的年平均收入是80万美元。 但是,有两个客户的年收入为4美元和420万美元。 这两个客户的年收入远远高于其他人口。 这两个观察将被视为异常值。 

    异常值的类型有哪些

    异常值可以分为两种类型:单变量和多变量。 刚才我们讨论了单变量异常值的例子。 当我们看到单个变量的分布时,可以找到这些异常值。 多变量异常值是n维空间中的异常值,为了找到它们,我们必须查看多维度的分布情况。 
    让我们用一个例子来理解这一点。 我们要了解身高和体重之间的关系,下面的例子是身高,体重的单变量和双变量分布。 通过观察箱线图,我们没有找到任何异常值(高于和低于1.5 * IQR)。 然后再看散点图,可以看出有两个样本在一个特定的身高和体重的平均值以下。 

    异常值产生的原因

    无论何时我们遇到异常值,处理这些异常值的理想方法就是找出有这些异常值的原因,那么处理它们的方法将取决于它们发生的原因。 异常值的原因可分为两大类:

    • 人为/非自然
    • 自然

    让我们更加详细地了解各种异常值:

    • 数据输入误差:在数据收集,输入的记录或输入过程中引起人为错误可能导致数据中的异常值。 例如:客户的年收入是10万美元。 数据录入人员多加了一个零。现在的收入是100万美元,是原来的10倍。 显然,这个样本与其他的人口相比将是异常值。
    • 测量误差:这是异常值最常见的来源, 当使用的测量仪器出现故障时就会引起这种情况。 例如:有10台称重机, 其中9台是正常的,1台是有故障,此机器上的测量的重量将比组中的其他结果要高/低。 因此在故障机器上测量的重量可能导致异常值。
    • 实验误差:实验误差也会导致出现异常值,例如:在7名运动员再100米冲刺中,有一名选手错过了发令枪起跑晚了。因此,这使运动员的跑步时间比其他运动员更长,他的总时间可能是一个异常值。
    • 有意造成的异常值:这通常发生在一些涉及敏感数据的报告中。 例如:青少年通常会报告他们消费的酒精量,他们可能只会上报比真实结果要小的值。
    • 数据处理造成的误差:可能再操作或数据提取的过程中造成异常值
    • 采样误差:例如,我们要测量运动员的身高,而我们在样本中包括几名篮球运动员, 这种就可能会导致数据集中出现异常值。

    异常值对整个数据集的影响

    异常值可以大幅改变数据分析和统计建模的结果,数据集中的异常值会有很多不利影响:

    • 增加错误方差,降低模型的拟合能力
    • 如果异常值是非随机分布的,它们可以降低正态性
    • 与真实值可能存在偏差
    • 它们也可以影响回归,方差分析等统计模型假设的基本假设。 
      为了更加深刻的理解异常值的影响,下面举一个例子对有/无异常值的数据集进行对比,观察会出现什么情况: 
      Example 
       
      如上图所示,具有异常值的数据集,具有显著不同的平均值和标准偏差。 在无异常值的情况下平均值是5.45。 但随着异常值的加入平均值上升到30,这将彻底改变估计。

    怎么检测异常值

    常用的异常值检测方法是将其可视化,有很多异常值可视化的工具例如箱线图直方图散点图(在上面我们使用了箱线图和散点图进行了可视化),下面是一些比较赞的异常值探索方法:

    • 箱线图不在-1.5*IQR和1.5IQR的样本点 
    • 使用封顶方法, 在第5和第95百分位数范围之外的任何值都可以被认为是异常值
    • 对于距离平均值为三倍标准差(standard deviation)或更大的数据点被认为是异常值
    • 异常值只是有影响的数据点进行检测的特殊情况,它的选择也取决于对业务的理解
    • 二维或多维的异常通过测量距离的方法来进行判断,例如:马氏距离( Mahalanobis’ distance )

    怎么移除异常值

    处理异常值的大多数方法和处理缺失值的方法类似,例如删除观测值、转换、将他们合并、将它们视为一个单独的组、估算值和其他的统计方法,下面我们介绍一些常用的方法来处理异常值:

    • 删除观察值:如果是由输入误差、数据处理误差或者异常值很小,我们可以直接将它们删除
    • 转换:数据转换可以消除异常值,对数据取对数log会减轻由于极值引起的变化 
      • 填充:像处理缺失值那样,我们可以对异常点进行修改,使用平均值、中值或其他的一些填补方法。在填补之前我们需要分析异常值是自然的异常值还是人为造成的。如果是人为造成的那就可以进行填充,也可以使用预测模型来填充。
    • 区别对待“:如果存在大量的异常值,我们应该在统计模型中分别对待它们, 其中一个方法将它们分为两个不同的组并为两组建立单个模型,然后再将其输出合并。

    截至目前,我们已经学习数据探索过程中的缺失值处理、异常值检测和处理,这三个阶段将会使你的原始数据在包含信息能力和准确率上面有所提升,下一步将介绍特征工程

    4.特征工程的艺术

    什么是特征工程

    特征工程是从现有数据中提取更多有效信息的一门科学(和艺术),在不增加数据的前提下,如何让现有的数据更有用 
    例如,你正根据根据日期预测商场的人数,如果你直接使用日期,那么可能不能够从日期中获得有价值的信息,这是因为商场的人数受一个月中的某一天的影响比一星期中的某一天的影响小,而一周中的某一天隐含在日期中,我们需要将这些信息挖掘出来,让我们的模型变得更好。这个从数据中提取有价值的信息的小练习就是特征工程。

    特征工程的步骤?

    特征工程主要分为2步:

    • 变量的转换
    • 变量/特征的创建 
      这两个步骤虽然字少,但是在数据挖掘中至关重要,对模型的能力有着重大的影响,下面就详细介绍这两个步骤:

    什么是变量的转换

    在数据建模过程中,变换是指通过函数来替换变量,例如,通过平方/立方根或对数x替换变量x就是一个变换。换句话说,转换是一个改变变量的分布或关系的过程。 
    下面让我们看一看变量转换有用的情况。

    什么时候需要使用变量的转换

    下面是需要进行数据转换的情况:

    • 当我们想改变一个变量的比例或标准化一个变量的值,以便更好的理解。 如果的数据具有不同的缩放比例(scale),那么这个转换是必须的并且这个转换并不会更改变量分布。
    • 当我们将数据从复杂的非线性关系转化为线性关系时,与非线性或弯曲关系相比,变量之间存在线性关系更容易理解, 转换有助于我们将非线性关系转换为线性关系。 散点图常被用来查找两个连续变量之间的关系,通这些转换也可以改善预测的结果。 log是一种常用的转换方式。 
    • 对称的分布要好于倾斜的分布,因为它容易解释和做出推论,一些建模技术需要变量服从正态分布,所以,当我们有一个偏斜的分布,我们可以进行减少倾斜的变换。 对于向右倾斜分布,我们取变量的平方/立方根或对数。对于向左倾斜的分布,我们取变量的平方/立方或指数。 
    • 从实施者的角度进行变量转换,就员工的绩效来说,我发现年龄与绩效有关,年龄越大表现越好。从实现的角度来说基于年龄的程序可能挑战较大,但是我们可以将年龄分成不同的组,例如小于30,30-45,45以上。然后为每一个组制定不同的策略,这种方法被成为变量的分组。

    变量转换的一般方法

    有各种各样的变量转换方法, 如前面所讨论的其中一些包括平方根,立方根,对数,合并,倒数等等。 下面来看看这些方法的细节,突出说明这些转换方法的利弊:

    • log:**对变量取对数,常被用来在分布图上更改变量分布形状。 它通常用于向右倾斜的分布。这种方法的缺点是,它也不能应用于零值或负值的变量。
    • 平方/立方根:变量的平方根和立方根具有对变量分布有波形的影响。但它并没有对数变换那么重要。 立方根变换有自己的优势, 它可以应用于负值包括零。平方根可以应用于包括零的正值。
    • 分箱(离散):常被用来对变量进行分类,它可以基于原始值、百分比或频率等对变量进行转换,具体需要基于具体的业务,例如,我们可以将收入分为三类:高,中,低。 我们还可以根据多个变量对变量进行分箱。

    产生新特征与其好处

    特征/变量创建是基于现有变量生成新变量/特征的过程。 例如,我们将date(dd-mm-yy)作为数据集中的输入变量,将日期拆分我们可以生成新的变量,如日,月,年,周,工作日,可能与目标变量有更好的关系。 下面这个步骤用于突出变量中的隐藏关系: 
     
    有很多产生新变量的方法,下面是一些常用方法:

    • 创建派生变量:是指使用一组函数或不同方法从现有变量创建新的变量。在某个数据集中年龄缺少值, 为了预测缺失的价值,我们以名称的称呼(Master,Mr,Miss,Mrs)作为新变量。 我们如何决定要创建的变量? 老实说,这取决于分析师对业务的理解,他的好奇心以及他对这个问题的一套假设。 诸如对变量取对数、分箱和其他变量变换方法等方法也可用于创建新变量。
    • 创建哑变量:哑变量方法是将类别型变量转化为数值型,下面是一个例子,来表示性别 
       
      上面的这些只是数据探索过程方法中的冰山一角,前期对数据探索的工作量直接影响着模型结果的好坏。完
    展开全文
  • 数据挖掘之数据探索分析(EDA)

    千次阅读 2020-03-24 21:08:18
    数据探索在机器学习中我们一般称为EDA(Exploratory Data Analysis): 是指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据...
  • 数据探索和数据准备的步骤

    千次阅读 2015-07-04 11:21:26
    数据探索和数据准备的步骤前言如我们所知,数据分析工作的70%的时间都用作于数据清洗,数据探索和数据准备当中,这可以说是数据分析的核心所在。数据清洗主要是工具层面上的,这里先不讨论。我们这里讨论数据探索和...
  • 而在数据探索期间,pandas和matplotlib 则是我们进行数据探索的利器.本文主要分为三个部分,第一部分是利用pandas进行一些基础的数据分析,第二部分是利用pandas自身功能进行一些有用的数据探索,最重要的是第三部分,...
  • 数据探索(一)

    千次阅读 2017-07-30 20:24:05
    数据探索是拿到数据要做的第一步,目的是对要分析的数据有个大概的了解。弄清数据集大小,特征和样本数量,数据类型,数据的概率分布等。下面结合奔驰车数据做个梳理,也是个人学习的记录。
  • 数据探索–&gt;数据预处理–&gt;挖掘建模–&gt;模型评价 第一章、数据 挖掘的数据类型:时间序列,序列,数据流,时间空间数据,多媒体数据,文本数据,图,社会网络和web数据;  挖掘:知识类型、...
  • 数据探索与数据清洗没有严格的先后顺序,经常在一个阶段进行。 数据探索 数据质量分析(与数据清洗密切相关) 数据特征分析(分布/对比/周期/相关性/描述性统计分析/常见统计量等) 数据清洗 缺失值处理 ...
  • Pandas数据探索与实践

    千次阅读 2015-08-27 22:51:13
    Pandas数据探索与实践介绍只要我们要用Python来做数据分析,就避免不了用到Pandas。Python有很多用于数据清洗和数据准备的库,但是很少有数据分析和数据建模的库。Pandas的出现,使得我们能在Python中解决大多数数据...
  • MATLAB数据探索性分析(原书第二版),各章节例题代码
  • 浅析数据探索阶段

    千次阅读 2012-03-14 17:19:41
    在数据仓库项目中,数据探索阶段的主要目的是什么? 答: 在逻辑数据映射进行之前,需要首先对所有的源系统进行分析。对源系统的分析通常包括两个阶段,一个是数据探索阶段(Data Discovery Phase),另一个是异常...
  • 数据挖掘之数据探索

    千次阅读 2018-09-25 16:08:18
    以上为个人整理资料,资料来源百度。 
  • 华为2019算法大赛CTR预估数据探索

    千次阅读 2019-05-23 17:22:47
    华为2019算法大赛CTR预估数据探索训练集时间信息siteId(媒体Id)slotId(广告位Id)netType(网络连接类型)id类信息测试集媒体id网络型号测试集与训练集分布adID 训练集 这个训练集有159837655个样本,负样本1.5...
  • 数据挖掘的第一步数据探索,包括汇总统计和可视化,介绍了相关概念,并结合鸢尾花数据展示了如何用Python进行汇总统计量的计算以及常用的可视化来帮助我们分析数据的性质。
  • Kaggle房价预测:数据探索——练习

    千次阅读 2017-07-15 12:48:33
    主要借鉴了Kaggle基础问题——房价预测的两篇教程Comprehensive...本篇,主要进行数据探索,对数据的基本特征有一个全局的大致了解。import pandas as pd import numpy as np import matplotlib.pyplot as plt from skl
  • 本篇文章主要分享在华为云NAIE的数据服务中,完成数据入湖、数据处理后,进行数据时序标注、数据探索。 参考:【华为云-上云之路】网络AI模型开发(1)创建IAM用户、订阅AI服务 【华为云-上云之路】网络AI模型开发...
  • R语言数据探索功能总结

    千次阅读 2018-04-06 16:13:22
    #str dim attribute head tail summary quantile hist cov cor aggregate pairs boxplot scatterplot3d plot3d heatmap#使用iris数据集进行数据探索的练习 #本次练习点: #str dim attribute head tail summary ...
  • 内含MATLAB数据探索性分析(原书第二版)例题代码,其中的一些工具或函数算法需自行下载
  • 如何利用Watson Analytics进行数据探索

    千次阅读 2016-06-01 15:15:30
    本期主要讲解如何使用Watson Analytics进行数据探索,以及介绍Watson Analytics的具体功能。
  • 数据探索之数据质量分析

    千次阅读 2018-03-13 15:33:50
    数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般指的是不符合要求,以及不能直接进行相应分析的数据数据的质量分析侧重于脏数据的发现,而数据清洗则是对这些脏数据的修正或者丢弃。一般情况下...
  • #机器学习--第1章:EDA数据探索性分析

    千次阅读 多人点赞 2020-03-24 19:14:04
    #机器学习--第1章:EDA数据探索性分析一、序言二、EDA的意义三、EDA的流程1、载入数据并简略观察数据 一、序言   本系列博客包含:数据分析、特征工程、模型训练等通用流程。将会一步一步引领大家完成一次完整的...
  • 《机器学习实战-数据探索(1、变量识别;2、单变量分析;3、双变量分析)》机器学习实战-数据探索(缺失值处理) 上面两篇文章介绍了数据探索的前四步,机器学习更多内容可以关注github项目:machine learning ...
  • 1.主要内容查看数据 diamonds 截取子集 set.seed(123) diamonds [sample(nrow(diamonds), 1000),]查看概要 summary()、str()探索 价格和克拉的关系:geom_point(),映射颜色和形状价格分布:geom_histogram(),映射...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 341,019
精华内容 136,407
关键字:

数据探索