<原创:大师兄2020-03-05


“业务理解篇”上线之后,不少朋友就迫不及待的想要看“数据理解篇”。今天,我就要给大家开启“数据分析零基础系列(2):数据理解篇”。


开篇之前,我还是希望和大家继续聊聊数据和业务的那些事情,因为它实在太重要了。纵览各行各业的数据应用情况,数据的价值,始终是要建立在具体的业务场景之上,尤其是依赖于那些带有强烈不确定性的业务场景,不确定性越高,数据需求越强,创造的价值潜力就越大。


比如疫情期间,北京要求外地返京人士隔离14天,那怎么能够精准识别某个人是否在北京隔离了14天,除了小区居委会开的证明,也可通过运营商收集到的用户地理位置数据,精准判断一个人的行为轨迹,来识别个人最近14天的活动范围。这个数据对于在疫情期间,做好人口的流动管理,非常有价值。




所以,我始终坚持,场景第一,数据第二,算法第三。


天底下算法都是一个老师教出来的,都是确定的,可学习的,各种算法的组合也都是确定的,所以说算法最不会造成一个人或者一个企业的竞争优势。往往数据的独特性和唯一性,能够形成比较大的竞争优势。比如很多企业看不到消费者的消费记录,支付宝,它牛逼,它能看到,所以它能把征信做的很牛逼,使用简单的逻辑回归,都能做的比别人好。但是假如有一个好的场景,不做数据分析都能赚钱,做数据分析就更赚钱了。比如淘宝,流量够大了,不做数据分析,随便看看昨天什么卖的好,今天就推荐什么,虽不是最优,但也差不到哪去。


言归正传,我们今天好好聊聊“数据理解”。


数据理解是从原始数据集开始熟悉和了解数据,并初步探索数据知识,或者挖掘有深层含义的数据子集来形成对隐藏信息的假设。数据理解可以理解为数据的可行性研究,即通过先期的基本数据认识来确定当前数据条件是否可以满足数据挖掘所需条件并初步判断如何实现的问题。


数据理解阶段,需要确定源数据标准如数据来源、范围、状态或者时间性特征,数据集基本特征如数据类型、最大值、最小值、均值、标准差、偏度、唯一性、有效记录数及数据分布规律等。接下来,给大家展示七种方法来帮助大家理解数据。


  • 简单地查看前几行数据

  • 审查数据的行数和列数

  • 审查字段的数据类型

  • 查看分类字段的分布情况

  • 通过描述统计分析数据

  • 理解各字段的相关性

  • 审查各字段的分布状况



模拟数据集生成


首先,为了便于理解这些方法,模拟一个虚拟数据集给大家示例下,该数据集共769行和9列,具体的Python代码如下:

import numpy as npimport pandas as pdpd.set_option('display.float_format', lambda x: '%.3f' % x)#显示3位小数perg=np.random.randint(0,27,size=769)plas=np.random.randint(0,199,size=769)pres=np.random.randint(0,122,size=769)skin=np.random.randint(0,99,size=769)test=np.random.randint(0,846,size=769)mass=np.random.uniform(0,68,size=769)pedi=np.random.uniform(0,2.5,size=769)age=np.random.randint(21,81,size=769)Class=np.random.randint(0,2,size=769)data=pd.DataFrame()data['perg']=pergdata['plas']=plasdata['pres']=presdata['skin']=skindata['test']=testdata['mass']=massdata['pedi']=pedidata['age']=agedata['Class']=Class



简单地查看前几行数据


对数据的简单审视,是加强对数据理解最有效的方法之一。通过对数据的观察,可以提前了解数据有哪些字段,每个字段属于什么数据类型,是整数型,还是浮点型,还是字符型,这些发现有助于对数据进行整理。接下来通过一个简单的例子展示一下如何查看数据。这个例子是查看前10行数据。代码如下:

import numpy as npimport pandas as pd#简单查看数据,显示前10行peek=data.head(10)
  perg  plas  pres  skin  test  mass  pedi  age  Class0  23  81  66  2  817  52.550  0.055  35  01  20  84  45  52  558  37.238  1.955  67  12  15  14  89  2  593  17.838  0.300  78  13  22  42  90  80  325  51.667  0.479  24  04  10  50  13  22  328  65.769  0.887  62  05  8  89  30  60  754  56.617  0.328  71  06  8  48  90  12  582  23.732  2.192  31  17  5  180  48  96  169  54.091  2.002  59  18  5  169  95  93  220  46.859  0.079  39  19  22  26  86  15  680  6.406  1.700  66  0



审查数据的行数和列数


在数据分析中,数据量过大,假如分析工具选择不合适,分析效率会比较低。数据量过小,假如数据有太多的特征,会导致分析结果有效性比较低。所以,我们需要要注意数据的行和列,必须对所拥有的数据非常了解,要知道有多少行和多少列。通过DataFrame的shape属性,可以很方便地查看数据集中有多少行和多少列。代码如下:

import numpy as npimport pandas as pdprint(data.shape)
(769, 9)



审查字段的数据类型


类型是数据很重要的一个属性。数据的类型,直接会影响到模型的选择。比如,分类模型,会要求字符串转化成数值型,以便于计算和分类。可以通过DataFrame的Type属性来查看每一个字段的数据类型。代码如下:

import numpy as npimport pandas as pdprint(data.dtypes)
perg       int32plas       int32pres       int32skin       int32test       int32mass     float64pedi     float64age        int32Class      int32dtype: object


查看分类字段的分布情


在分类算法中,需要知道每个分类的数据大概有多少条记录,以及数据分布是否平衡。如果数据分布的平衡性很差,需要在数据加工阶段(抽样)进行数据处理,来提高数据分布的平衡性。利用Pandas的属性和方法,可以很方便地查看数据的分布情况。代码如下:

import numpy as npimport pandas as pdprint(data.groupby('Class').size())
Class0    3821    387dtype: int64


通过描述统计分析数据


描述性统计可以给出一个更加直观、更加清晰的视角,以加强对数据的理解。在这里可以通过DataFrame的describe()方法来查看描述性统计的内容。这个方法给我们展示了八方面的信息:数据记录数、平均值、标准方差、最小值、下四分位数、中位数、上四分位数、最大值。这些信息主要用来描述数据的分布情况。代码如下:

import numpy as npimport pandas as pdpd.set_option('display.width', 100)print(data.describe())
 perg    plas    pres    skin    test    mass    pedi     age   Classcount 769.000 769.000 769.000 769.000 769.000 769.000 769.000 769.000 769.000mean   12.770  99.945  59.559  49.843 421.537  34.420   1.236  49.191   0.503std     7.870  56.267  34.603  28.696 240.698  19.250   0.730  17.826   0.500min     0.000   0.000   0.000   0.000   0.000   0.126   0.000  21.000   0.00025%     6.000  50.000  30.000  25.000 214.000  18.486   0.581  33.000   0.00050%    13.000 101.000  60.000  50.000 431.000  34.398   1.214  48.000   1.00075%    19.000 150.000  89.000  74.000 631.000  51.427   1.905  65.000   1.000max    26.000 198.000 121.000  98.000 845.000  67.826   2.497  80.000   1.000


理解各字段的相关性


各字段的相关性是指数据的两个字段是否互相影响,以及这种影响是什么方式的等。通用的计算两个字段的相关性的方法是皮尔逊相关系数,皮尔逊相关系数是度量两个变量间相关程度的方法。它是一个介于1和-1之间的值,其中,1表示变量完全正相关,0表示无关,-1表示完全负相关。在数据挖掘建模过程中,当数据的关联性比较高时,有些算法(如线性回归、逻辑回归等)的性能会降低。所以在开始训练算法前,查看一下字段的关联性是一个很好的方法。当数据字段的相关性比较高时,应该考虑对特征进行降维处理。下面通过使用DataFrame的corr()方法来计算数据集中数据属性之间的关联关系矩阵。代码如下:

import numpy as npimport pandas as pdprint(data.corr(method='pearson'))
 perg   plas   pres   skin   test   mass   pedi    age  Classperg   1.000 -0.011 -0.008 -0.029  0.001  0.023  0.052  0.017  0.012plas  -0.011  1.000  0.009  0.031  0.062  0.023  0.050  0.004  0.024pres  -0.008  0.009  1.000 -0.041  0.034 -0.025  0.008  0.017 -0.004skin  -0.029  0.031 -0.041  1.000  0.000 -0.012 -0.041  0.018 -0.032test   0.001  0.062  0.034  0.000  1.000 -0.007 -0.057  0.072  0.054mass   0.023  0.023 -0.025 -0.012 -0.007  1.000 -0.022  0.013 -0.002pedi   0.052  0.050  0.008 -0.041 -0.057 -0.022  1.000 -0.055  0.010age    0.017  0.004  0.017  0.018  0.072  0.013 -0.055  1.000 -0.061Class  0.012  0.024 -0.004 -0.032  0.054 -0.002  0.010 -0.061  1.000


审查各字段的分布情况


通过分析数据的高斯分布情况来确认数据的偏离情况。高斯分布又叫正态分布,是在数据、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响。高斯分布的曲线呈钟形,两头低,中间高,左右对称。在高斯分布图中,y轴两点之间的面积是发生的概率。很多算法都会假定数据遵循高斯分布,先计算数据的高斯偏离状况,再根据偏离状况准备数据。我们可以使用DataFrame的skew()方法来计算所有数据属性的高斯分布偏离情况。代码如下:

import numpy as npimport pandas as pdprint(data.skew())
perg     0.034plas    -0.037pres    -0.027skin    -0.030test    -0.032mass    -0.047pedi     0.043age      0.105Class   -0.013dtype: float64


掌握这些方法后,在审查数据的时候,还需要记住以下几个小技巧。


审查数据:通常描述性分析给出的数据对数据的理解是不充分的,应该多观察和思考数据的特点,找到数据的内在联系和对解决问题有什么益处。


问为什么:审查数据后多问几个“为什么”,如你是如何看到和为什么看到这些数据的特殊性的,这些数据和问题如何关联到一起的,以及这些数据和我们的问题有什么关系等。


写下想法:写下自己通过观察得到的想法,将观察到的数据各维度的关联关系和我们的想法都记录下来。例如,数据代表什么,将采用什么样的技术继续挖掘数据等。写下的这些想法将会给新的尝试带来极大的参考价值。


数据分析或者数据挖掘中,通过对数据的理解,可以选择有效的算法来建立模型。本篇文章介绍了七种方法来观察和理解数据,这为发现数据的特征和选择合适的算法提供了思路。大家也可以尝试用另外一种观察数据的有效手段,就是通过Python的Matplotlib包提供的可视化图表来展示数据,以便于发现数据的特征。


以上介绍,对于零基础的数据分析小白,也会很困惑,里面涉及到理论知识,都是统计学中的基本概念,所以要求大家必须熟练掌握统计学的基础知识。另外一个,就是Python工具,这是数据分析的常用工具,需要大家掌握。

点赞(46) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部