EDA-探索性数据分析

前言:想要从事DA/DS行业的一个很重要的工作部分貌似就是处理数据,处理数据有很多概念:data engineering(DE), data mining(DM) ,data cleaning(DC)又或者是Exploratory Data Analysis。以前我对这些名称都特别迷糊,不知道是什么意思,但是看了一些博客和自己用Python写了一些东西以后就大概懂了一点。最大的概念可以是EDA,其中包括了DE/DM/DC作为预处理的部分

EDA和传统分析的区别:

EDA是可视化分析输入数据的关联性---->然后预处理---->最后再建模。
传统分析是简单预处理---->然后直接建模(假设正态分布)---->然后分析这个模型的特性,是否拟合,效果怎么样。

预处理基本操作 Data Cleaning

缺省值有吗?

  • 检测:看有没有NaN
  • 解决方法:
    - 可以drop,就完全删掉这行
    - 可以fill mean,median,most frequence value,可以用均值,模数或者最大频数来填充,看每个人的想法

有异常值吗?Outlier? Abnormality?

  • 检测:用箱型图或者计算出1/4Quantile----3/4Quantile然后看有没有在外面的数字
  • 解决方法:
    - 可以简单drop
    - 如果不是特别奇葩的outlier可以保留

样本是否均衡?normal distributed?

  • 检测:画histogram看是不是基本符合正态分布
  • 解决方法:
    - 如果特别不均衡,我们可以normalize使它均衡,但是这样很可能会丢失某些原始信息,得好好考虑。

样本是否重复? duplicated row?

  • 检测:value_count?如果是数据内部的错误导致多复制了一列。
  • 解决方法:
    - drop_duplicate

是否需要重新抽样?resample?

  • 理由:比如说我们有一个365天的时间序列,经典的气候模型数据,我们想知道每个月的平均天气,那么我们就要降频率,重新抽每个月的第一天,或者简单计算每个月的均值。
  • 解决方法:
    - pandas里面将datestamp拆开成年月日小时分钟秒,然后将月单独新增一个attribute然后aggregate().apply(np.mean)

类型是否需要转换?type convertion?

  • 场景:
    - 数值型:int->float/float->int?是否需要取整?
    - 字符型categorical:我们需要将文字转成数字,才能来给我们建模/ml
    - 时间序列:我们需要将时间也拆成数字
  • 解决方法:
    - 数值型:各种np方法
    - 字符型:one-hot encoding/frequency encoding/其他我不知道的encoding
    - 时间序列:拆成年月日/直接作为index

是否需要添加新的特征?new attribute?

  • 理由:很有必要,这我个人认为是EDA的精华所在,也是提高之后ML准确率的非常关键的一点,但是很多时候这需要我们大胆的猜想,以及对于数据相关度的分析证明了我们的猜想。
  • 解决方法:这里存在的太多我知道的太少
    - 上面说的时间序列拆年月日
    - 分区间(比如工资3000-8000可以分5档分别是0-4)
    - 很多domain knowledge,比如说根据人体数据来预测60岁是否患癌,懂医学的朋友可能可以一些参数算出另一个更重要的参数(比如:血小板数)
    - 等等
  • 这一步和之后的data engineering是互相迭代的过程,可能我们之后发现了一些新的想法可以加进来,所以其实数据处理并没有严格的先后顺序。

数据可视化分析 data engineering

这里大家貌似用pandas的时候都约定俗成的做一些相同的操作,那么我们也就把这个作为一个分析的步骤来看吧。
然后这个著名的图:

步骤

  1. 第一印象:df.head() ---> 看index是什么,column names是什么,看每个特征里面有哪些值,哪些是数值还是字符型等等
  2. 看数据的整体情况:df.shape,df.dtypes,df.info(),df.describe() 【profile data数据质量】
  3. 检查缺省值,异常值,重复值等预处理操作的可能数据问题 【wrangle data清理数据】
  4. 探索每个变量的统计分布 【individual variable单独数据的分布】
    • 分析方法:单变量峰度和偏度分析(左偏还是右偏)/直接plot视觉观察
    • 数据变换操作:取log
  5. 确定自变量(variable)和应变量(target),并探索两个变量之间的关系---->可以用heatmap/scatter plot【relationship】
  6. 确定自变量之间的关系(variable)---->可以用heatmap/scatter plot【relationship】
  7. 数据按不同维度切分成新表---->比如同一国家(地理),同一时间段(时间)等等

小结

关键在于有对于数据domain的知识,按照步骤分析,并且适当的建立新的特征。pandas,seaborn的具体应用待做。