在DataEase开源数据可视化平台中关联数据集制作宽表

发布于 2022年03月29日

编者注:本文为稀土掘金博主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