编者注:本文为稀土掘金博主plateauandsp的原创文章。
原文链接:
https://juejin.cn/post/7078555707561213989
大宽表是数据挖掘模型训练中经常需要使用到的手段之一。出于工作中对数据挖掘以及宽表制作的需求,我近期从网上了解到一个方便好用、号称“人人可用”的数据可视化工具——DataEase,从而在DataEase中采用模拟数据生成宽表,看看是否能够满足需求。本文详细介绍一下我的操作思路和步骤。
宽表的定义与作用
从字面意义上讲,宽表就是字段比较多的数据库表,通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范。随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询的便捷与性能的提升。
宽表的设计广泛应用于数据挖掘模型训练前的数据准备。通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率。也就是说,用空间换时间,便于训练迭代、减少表关联数量,修改少量数据时就不需要改多张表。
DataEase的关联数据集
DataEase(https://dataease.io)是开源的数据可视化分析工具,可以帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便地与他人分享。
DataEase关联数据集的步骤如下图所示。采用多数据集间关联关系的构建,以及通过对数据集字段的选择展示组合完成,更易理解,也更加方便使用。在DataEase中,对于宽表的操作主要就是利用关联数据集来创建和生成。
基础数据说明
为了方便展示,我预先准备了所需的表和测试数据。使用的所有数据均通过函数伪造生成,如果类似,纯属巧合。文章末尾会提供Demo数据,需要的话可以将它们导入SQL文件练习操作。
ER图(Entity Relationship Diagram,即实体-联系图,一般用来描述现实世界的概念模型)如下:
具体表的内容说明
■ 学生表:student,包含10000条数据。
■ 学院表:faculty,包含5条数据。
■ 专业表:major,包含21条数据。
■ 课程表:course,包含2个基础课程数据。
■ 成绩表:scores,包含每个学生的每个课程分数。
生成宽表
此宽表的生成需要将上述五张表中的数据进行整合,且需要在一张表中包含以下信息:学生、年龄、入学时间、电话、院系、专业、课程、成绩等。
第一步:接入数据源。将原生数据导入MySQL数据库中(demo.sql),在DataEase数据源中接入MySQL数据源,如下图所示:
第二步:在数据集中创建名为“考试成绩”的独立目录。用于存放数据集。
第三步:创建数据库数据集,将五张表全部导入。可以采用直连或者抽取的方式,本次我采用的是直连方式。
第四步:创建关联数据集。将数据库数据集中的五张表以学生表开始,采用右连接的方式一一关联。
① 创建关联数据集
② 选择学生表
③ 关联成绩表
④ 设置学生表和成绩表关联关系
⑤ 设置成绩表和课程表的关联关系
⑥ 依此类推,可以设置课程表和专业表的关联关系,以及专业表和学院表的关联关系。
最终得到我们需要的宽表如下:
关于表连接的说明
Join(连接)是SQL的一种语法,可以通过不同的运算方式将多张表中的数据集中在同一张表里。在DataEase中支持以下几种连接:
■ Left Join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
SQL语法:
select a.name,b.job from A a left join B b on a.id=b.A_id
■ Right Join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
SQL语法:
select a.name,b.job from A a right join B b on a.id=b.A_id
■ Inner Join (等值连接又称内连接):只返回两个表中连接字段相等的行。
SQL语法:
select a.name,b.job from A a inner join B b on a.id=b.A_id
在仪表板中使用
宽表完成后,可以在DataEase的仪表板中进行使用。
附件
本文用到的测试数据SQL:
链接:
https://pan.baidu.com/s/1XaBbGSOoN9qVioiRzKmAFw
提取码:wlwn