对所有从事数据相关工作的人而言,都有一个老生常谈的问题:数据认知!毕竟在真正开始分析、BI 报表开发或者建模前,对数据进行一定的审查和认知是必须的。今天,就在此和大家一同探讨下数据的初步认知。在本文的讲解中,会将数据的初步认知划分为三大步骤:数据质量检查、数据类型认知、指标值统计。一、数据质量检查
1) 关注不同数据源在统计质量上的差异
不同的数据来源,因统计、管控、可共享程度等原因在数据粒度和数据质量的保障上都有天壤之别。根据数据来源的渠道主要可将它划分为:内部数据和外部数据,下面逐个介绍它们之间的特点和差异。
1. 内部数据源
业务数据:主要指后端研发主动存储的业务数据,一般是对公司运营非常核心的数据,如订单数据、用户信息等。这类数据的准确性一般是最高的,因为它往往关系到公司产品能否正常运转,统计的正确性也就至关重要; 埋点数据:通过埋点技术采集的用户访问数据,不论是自建埋点还是采用第三方埋点工具,因为埋点实施、统计上传机制等,都会造成埋点数据的准确性远不如业务数据; 数据仓库的数据:数据仓库数据它是由生产库数据经过一轮或者多轮次的数据转换,中间可能发生的异常情况比生产库的数据更多。诸如:无人维护、转换逻辑与理解不一致等。
对于业务数据、埋点数据、数据仓库数据三种类型的数据源我们检查的侧重点有所不同: 业务数据:业务数据的复杂度主要在于字段含义、表之间关联关系以及字段与业务的实际对应关系,主要检查的也是这三点; 埋点数据:埋点数据主要需要检查埋点是否与你所期望的业务事件匹配,包括埋点采集的是页面访问还是按钮点击、埋点采集时机等; 数据仓库数据:主要了解其中业务指标统计逻辑、计算转换逻辑、脚本更新机制等。
2. 外部数据源
用户调研数据:通过市场调研得到用户反馈数据,存在的风险主要在于市场调研人员的敷衍执行自行捏造数据以及被调研对象自身对自身判断的错误; 行业发展数据:通过百度指数、微信指数、阿里指数或者其它行业观察机构统计的数据来观察行业发展情况的数据; 合作方数据:合作方提供的数据,不同公司之间在指标定义和统计规范上都可能有明显差异,需要重点关注。此外,两家公司之间的用户匹配也是一大难点,需要被重点关注。
外部数据源的数据粒度一般较粗糙,数据质量上也比较难以保证,需要做更多的观察和验证。我们可实施的检查措施也相对较少,只能在使用保持更高的警惕性,慎之又慎才能更多地规避错误。
2) 关注取数过程,检查取数代码
我们通过各种方法获取数据,SQL 查询是数据类工作人员最常见的取数方式。SQL 语句的出错将导致得到的数据集出错,以下是进行 SQL 检查时需要被重点关注的点:
关注 join 处理的逻辑关系,包括采用的 SQL 连接方式 inner、left 还是 outer、两张表之间数据对应关系是 1:1、1:n 还是n:m 等; 关注 SQL 细节,包括是否采用 distinct 去重、采用 case 语句划分类别时的分类区间边界、group by 进行数据聚合的指标粒度是否正确;
多版本代码检查时关注选择条件,对于 SQL 复用的场景,我们要重点关注数据选择条件的更新替换是否完全;
聚合处理时,最好结合 if 条件排除极端值、异常值。
3) 关注处理数据集的空值和异常值
在对数据集是否正确的检查中,最容易发现需要被处理的情况就是空值和异常值。空值出现在数据集中往往一眼便能识别;异常值则需要一定经验性地判断,例如:数值特别夸张、文本特别长、不匹配的数据类型。在后续步骤的数据认知中,对指标进行统计汇总、分布观察等也能帮助识别异常值。
1. 空值处理
空值,如果在平时的汇总统计中可忽略则忽略,如果不可忽略则可采用以下方法来处理: 替换:使用平均值、众数进行替换或者使用最接近的数据替换它,需要仔细对比寻找该行数据的其它值是否相近; 推断:运用模型结合使用非空变量进行推断、预测计算得到这个空值,如:时间序列、回归模型等; 删除:实在无法处理的空值,而且你已经确定它会影响到后续的计算、分析,那么你可以考虑将该行记录删除。如果不确定是否会影响,可考虑暂不处理。
2. 异常值处理初步观察寻找异常值: 在 Excel 中可以通过筛选功能或去除重复值对数据列进行观察; 在 SQL 中可以通过 distinct 进行去重观察; 在 Python 中,可以通过 pandas.drop_duplicates() 等方式进行去重观察。
垃圾数据或者异常值能采取的处理手段较少,当数据记录占比较大,我们首先应去寻找造成数据异常的原因,尝试从源头解决它;当数据记录占比不多时,我们可以采取直接删除的方式。
二、数据类型认知
数据类型的认知主要可从类型、数据单位、数据量纲三个角度去观察、去认知数据。这一过程后,我们一般对数据整体有一个比较粗线条的认识,知道各列的统计单位、各列的数据类型、量纲或者说数量级等。 类型:同一列数据的数据类型必须保持一致!如:时间序列不得与数值型数据混合、数值型数据不得与文本数据混合; 数据单位:同一列数据的单位必须保持一致!否则量级将完全不一致,不具备任何可比性。如:成交金额,不能既有以分为单位也有以元为单位的混合; 数据量纲:不同数据列的量纲有时会有明显差异,主要指整数型数据和百分比数据。如:活跃用户数与平台用户活跃率。当需要进行作图对比观察时候,我们需要对量纲进行处理,这涉及到标准化/归一化,常见的归一化方法有:
标准差标准化:
离差标准化:
对数标准化:
三、指标值统计
1) 通过描述统计对数据集中趋势、离散程度、分布作认知
描述统计指对数据进行一些描述性的统计,包括均值、中位数、方差等。它主要包含三个方面:
1. 平均数
常常说的是算术平均数,即“N 个数字相加后除以 N“。在实际业务中,我们还会使用加权平均数,即“给不同维度的指标赋予不同业务权重后再相加除以权重总和,一般权重可以设为 1”。 平均数的表示含义是:一个群体在某项数据上的一般水平或者集中趋势。
2. 众数
众数,即序列中出现最多的那个数字。 众数真正的价值,不在于数值型数据中的使用而在于用在类别型的数据中。在数值型数字中,可能因为数字精度太细,导致数字出现次数都很少,几乎没有众数;而类别型数据中,众数有时会比较具有代表性。比如:系统每 5 分钟从天气预报网站读取一次实时天气,以小时为单位预测未来天气时,我们可以简单取 12 次读取中出现次数最多的记录作为这个小时的平均天气。
3. 中位数
顾名思义,中位数就是指排在中间位置的数字,将序列分为两部分。 中位数的优势在于它能避免数据的平均水平受到异常值的影响。在数据未进行较完整的清洗时,强烈建议采用中位数代表序列的中间水平。
4. 方差与标准差
方差和标准差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量,衡量数据序列的波动情况。
以上为方差计算公式,开方的结果即为标准差。
5. 四分位数
百分位即降数据升序排列后,具体数据值的序号除以数据值的总数,所得出的百分比,即该数据值对应的百分位数。我们一般比较关心:25%、50%、75% 分位数。
6. 最大值、最小值
顾名思义,最大值、最小值本身没有什么好解释的。 四分位数组合最大值、最小值,可以让我们初步认知数据的分布特征。
7. 数据分布
进行了简单的描述统计,我们想对数据的分布进行简单的观察,得到一个更加直观的感受,可以制作频率分布图、箱线图来进行观察。
2) 相关系数统计,对指标间的相互作用关系进行认知
当我们需要观察两个字段之间是否存在相互影响的关系时,我们可以简单的使用相关系数。以下介绍三种相关系数,在不通场景有不同的适用度。
1. 皮尔逊相关
用于度量两个变量X和Y之间的相关(线性相关),其值介于-1和1之间。 当 r>0 时,表示两变量正相关,r<0 时,两变量为负相关; 当 |r|=1 时,表示两变量为完全线性相关,即为函数关系; 当 r=0 时,表示两变量间无线性相关关系; 当 0<|r|<1 时,表示两变量存在一定程度的线性相关。且 |r| 越接近 1,两变量间线性关系越密切;|r| 越接近于 0,表示两变量的线性相关越弱; 一般可按三级划分:0.8-1.0 极强相关,0.6-0.8 强相关,0.4-0.6 中等程度相关,0.2-0.4 弱相关,0.0-0.2 极弱相关或无相关。
适用条件: 数据(近似)服从正态分布 尽可能没有异常点 用于描述线性相关
缺点:当样本量 n 较小时,相关系数的波动较大;
2. 斯皮尔曼等级相关
斯皮尔曼等级相关是根据等级资料研究两个变量间相关关系的方法,是依据两列成对等级的各对等级数之差来进行计算的。它与相关系数一样,取值在 -1 到 +1 之间,所不同的是它是建立在等级的基础上计算的。 适用条件:斯皮尔曼等级相关对原始变量的分布不作要求,属于非参数统计方法,使用范围更广。 缺点:
3. 肯德尔和谐系数
肯德尔和谐系数是计算多个等级变量相关程度的一种相关量。 前述的斯皮尔曼等级相关讨论的是两个等级变量的相关程度,用于评价时只适用于两个评分者评价 N 个人或N件作品,或同一个人先后两次评价 N 个人或 N 件作品,而肯德尔和谐系数则适用于数据资料是多列相关的等级资料,即可是 k 个评分者评 (N) 个对象,也可以是同一个人先后 k 次评 N 个对象。 通过求得肯德尔和谐系数,可以较为客观地选择好的作品或好的评分者。
3) 多维交叉观察,利用数据进行业务分析
多维交叉观察,其实已经是分析阶段的主要工作。在初步的数据观察中,我们不会进行过多的交叉对比,除非不可避免的要对某些维度进行观察、验证。
以上就是关于数据初步认知的介绍.
文章首发于微信公众号:杏仁技术站
|