4个简单的数据管理技巧
它发生在我们所有人身上,你会收到新的A/B测试结果和需要验证的数据。或者你将最新漏斗分析转化到一个数据应用中,这样就可以不断地收获你努力工作带来的好处。当在检查你工作的时候,你会发现数字没有增加。数据验证是任何与数据密切相关的人的生活的一部分。也类似于跟踪和调试代码,两者都会导致失败和看似丢失工作时间。用实际的例子,我将会给一些提示和技巧,以便在你数据分析时,可以快速识别当中的错误。
不要假设任何事情
只是因为它似乎是正确的,但并不意味着它真的正确。因为我们常会被自己的大脑所欺骗。我已经注意到这种想法,尤其是当分析师在重新开始或产品化地分析。尽管,最初的查询或脚本看起来是一样的,一个更深层次的调查并非如此。
接下来,让我们看一个人们常碰到的问题:更改一个聚合查询。
看看以下两个查询:
SELECT
Month,
Group1,
Group2,
Group3,
CONCAT(Group1, “-”, Group2) as NewGroup,
SUM(Usage) as total_usage
FROM usage
GROUP BY 1, 2, 3, 4, 5
SELECT
Month,
CONCAT(Group1, “-”, Group2) as NewGroup,
SUM(Usage) as total_usage
FROM usage
GROUP BY 1, 2
起初,许多人看到这2个查询后会认为它们实际上是相同的效果。左边的查询仅包含了一些额外的列,对吗?但这并不算什么,在左边查询中有五个级别的聚合,右边仅有两个。由于该组织更加精细化,左边查询将返回更小的总数。这取决于你所做的进一步分析,如窗口函数或甚至过滤,这些额外的组可能会造成严重的破坏。如果你只是把他们放在管道做未来的查询,那么你就不再有不同的分组。
聚合错误是最常见导致数据错误的原因。即使一开始看起来正确,多两遍你就会恍然大悟。
这是一个快速的
由此,我指出另一个常见的数据错误,在过去四年里,我遇到可把快照表作为一位分析师和一位老师。这些都是数据表在给定时间段内 (每月、 每周、 每天),及时采取数码快照。
无论出于何种原因,这些类型的表格牵绊着许多人。首先,他们往往确定性很差。我这里的意思是,对于该表中一个新的消费者,作为快照表不会被立即识别,这样会造成用户误操作数据。一个简单的解决方案是预防诸如命名表来反映其内部结构。
如果你怀疑一个快照表及如何与其一起工作,那么,你可以使用快照表中的最大标识符,所有指标过于夸大。你采取一周后得到的结果数据,看起来是否是大了5-7倍?幸运的是,这是一个简单对这些表进行修复的工作。你可以缩小到一天,就像你时间周期的最后一天或采用最大价值。可参阅下面的例子:
选择一天:
SELECT
TD_TIME_FORMAT(time, ‘yyyy-MM’) as MONTH,
category,
usage
FROM usage_snapshot
WHERE TD_TIME_RANGE(time, ‘2016-04-01’)
找到最大值:
SELECT
TD_TIME_FORMAT(time, ‘yyyy-MM’) as MONTH,
category,
MAX(usage) as total_max_usase
FROM usage_snapshot
你决定如何与快照表工作一致是很关键的。根据上下文和目标,两种处理的方法是有效的。
寻找模式
当调查数据验证问题时,我发现它很有用,试图找到模式中的一些错误。比如,像这样的一些问题:
- 所有的数据都受到影响吗?
- 受影响的数据都来自同一组吗?
- 这些差异是成正比的,还是随机的?
- 有没有日期的模式?
帮助你缩小一个潜在的原因。如果所有的数据都受到影响,罪魁祸首通常是在脚本或查询中,而不是在数据本身。然而,如果我注意到某个月或某天有明显偏低,我将去调查基础数据。这可能意味着数据收集的问题发生在那个时间段。
如果数据验证往往按比例与原始数据相比,它可能意味着一些数据一直没有被捕获在你的聚合中。基本逻辑错误往往呈现出“随机”,意思似乎没有可识别的模式。然而,这种情况是由于不正确处理或简单,故障逻辑的边缘情况下发生的。
从头开始搜查
你已经尝试了一切,你仍然无法搞明白。现在,是时候开始挖掘了。虽然这很容易从错误的答案开始并且逆向工作,或从这个地方开始你认为这都是错的,但你必须从头开始。
数据中的错误刚开始可能为良性的,但随着你的工作分析,带来的问题是指数变的更差。就像一个数学题:从一开始,找到错的位置。这部分可能繁琐和耗时,但在用完了所有技术后,回到最初状态,观察你的数据是如何一步步的变化的,这有助于查询断点以及断点位置。
- 常见测试术语解析
- 秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
- 开源组件NanUI一周年-使用HTML/CSS/JS来构建.Net Winform应用程序界面
- 邱寒:新零售笔记(四)基于区块链大数据的人工智能
- 腾讯云GAME-TECH沙龙干货回顾:网龙《英魂之刃口袋版》开发经验分享
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
- 黄荣奎:如何快速、便捷开发小程序
- 熊普江: BGP网络架构助力开发者快速构建、优化业务
- 唐良:云端架构给电商行业带来创新力
- 邹方明:看腾讯云如何架构海量存储系统
- 王之捷:AI智能云端架构大幅提升智能语音识别能力
- 精彩大放送 | 腾讯云:容器架构向无服务架构的演进
- Python 数据分析学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter底部不规则导航的实现过程
- Flutter实现用视频背景的登录页的示例代码
- Flutter实现可循环轮播图效果
- Android判断登录情况
- linux尝试登录失败后锁定用户账户的两种方法
- Linux内存泄漏检测shell脚本
- 详解Linux系统中网卡MAC地址克隆方法
- linux下日志定时轮询的流程详解
- Vim中查找替换及正则表达式的使用详解
- CentOS 7下部署php7.1和开启MySQL扩展的方法教程
- Ubuntu系统下用Crontab命令定时执行PHP文件详解
- CentOS7 LNMP+phpmyadmin环境搭建 第三篇phpmyadmin安装
- Linux有限状态机FSM的理解与实现
- Linux下浅谈crond与crontab的命令用法
- centos 7系统下安装Jenkins的步骤详解