实战数据分析: 利用开源项目 Superset 搭建自助数据分析平台

8,951 阅读6分钟

引子

数据分析(Data Analytics)以及商业智能(Business Intelligence)是很多企业实现数字化战略的重要业务模块。我们之前在《浅谈数据:数据领域需要掌握些什么?》中介绍过数据领域中不可获取的部分,也就是架构流程方面的软件工具辅助服务。本文将介绍的数据分析开源平台 Apache Superset 就能提供这样的服务。本文将简单介绍如何安装部署以及使用 Superset。

Superset Official Site

Superset 简介

Superset 是 Apache 基金会孵化的开源自助数据分析平台,可以看成开源版的 Power BITableau,不过 Superset 的交互界面仅限于 Web。整个系统基于 Python Flask,集成了 MySQL、Postgres、SQL Server 等主流关系性数据库,以及 ElasticSearch、ClickHouse、Snowflake 等现代数据库。前端可视化分析界面跟 Power BI 和 Tableau 非常类似,操作也相对简便。因此,如果需要搭建一个类似 Power BI 或 Tableau 这样的企业级数据分析平台,在不氪金的情况下,Superset 是个非常不错的选择。

Superset Dashboard

安装 Superset

安装 Superset 最简单的方式是 Docker 容器。对 Docker 不熟悉的朋友,可以查看 Docker 官网或相关资料,或者跳过本章节让懂技术的朋友帮忙安装。

假设你已经安装好了 Docker 以及 Docker Compose,现在可以在指定位置创建容器配置 docker-compose.yml 文件,输入以下内容。其中,我们加入了 MySQL 容器来提供数据库服务。

version: "3.3"
services:
  superset:
    image: apache/superset
    container_name: superset
    volumes:
      - "./startup.sh:/opt/startup.sh"
    ports:
      - "8088:8088"

  mysql:
    image: mysql
    container_name: mysql
    environment:
      MYSQL_DATABASE: "superset"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

然后,在同一个目录下创建初始化脚本文件 startup.sh,输入以下内容。其中,加载演示数据部分已经注释掉,需要查看演示数据的朋友可以取消注释。

#!/bin/sh# create admin account
superset fab create-admin \
  --username admin \
  --firstname Superset \
  --lastname Admin \
  --email admin@superset.com \
  --password admin
​
# upgrade database
superset db upgrade
​
# load examples
#superset load_examples# set up roles
superset init

现在我们已经创建好容器配置文件以及初始化脚本文件,就可以开始启动容器并初始化了。执行以下命令来启动容器以及初始化。

# start docker containers
docker-compose up -d
​
# initialize superset
docker exec -it sh /opt/startup.sh

当上述操作执行完毕后,我们就可以用浏览器打开 http://localhost:8088,进入到 Superset 登陆页面。

Login Page

我们可以输入默认用户名密码 admin/admin 进入界面。

创建第一个数据集

登陆进入 Superset 之后你会发现目前什么也没有(除非之前取消注释了加载数据)。现在我们需要进行两步操作来创建第一个数据集(Dataset)。

连接数据库

将鼠标悬浮在右上角的加号按钮,继续悬浮到 Data,然后点击 Connect database

Connect Database

出现弹窗后,选择 MySQL,并输入数据库连接信息,如下图。然后点击 Connect,继续点击 Finish 完成数据库连接。

Database Settings

设置允许上传文件

为了在 Superset 上尽快体验交互式数据分析,我们将选择上传一个 Excel 数据文件到 Superset。

不过在此之前,我们需要多做一步,即在 MySQL 中允许上传文件。这个可以通过 Superset 界面进行设置。操作如下。

  1. Settings 中点击 Database Connections
  2. 编辑刚刚创建的 MySQL 数据库;
  3. Advanced,在 Security 下勾选 Allow file uploads to database,然后确定。

好了,现在我们可以上传 Excel 文件了!

上传 Excel 数据文件

在右上角点击 Upload file to database 然后点击 Upload Excel file

Upload Excel file

然后,在上传 Excel 页面中,选择要上传的文件,输入表名为 sales,点击下方的 Save 按钮,即可创建数据集。

为了之后的数据分析演示,我们将使用 Kaggle 上的 Sample Sales Data 数据集。由于其默认 CSV 文件上传到 Superset 有数据库编码问题,我已经将其转化为 Excel 文件上传到 GitHub,可以通过 GitHub 链接下载。

上传 Excel 数据文件完毕后,你可以在 Datasets 中看到已经创建好的数据集。

接下来我们来看看如何在 Superset 中分析该数据。

分析销售数据

点击刚才创建好的 sales 数据集,进入到分析页面。如果你对 Power BI 或者 Tableau 熟悉的话,你会发现这其实就是 Power BI 的 Visual,或 Tableau 中的 Chart。其最左侧是数据集的各个字段,旁边是数据操作区域,右侧是图标展示区域。

Data Analysis 1

季节性分析

现在,我们想看看按季度的销售额是多少。将左侧的 SALES 拖到 METRICS,并选择 SUM;然后将 YEAR_IDQTR_ID 拖到 DIMENSIONS;再点 CREATE CHART。我们可以看到如下统计表格。

Quarterly Sales

从上图可以看到,销售额(Sales)似乎受季节性影响:每个冬季,也就是第四季度会有大量的销售额。这是因为,欧美国家会在圣诞节期间大量采购节日礼品以及物资,形成较高的销售额。因此,这个发现也不意外。

相关性分析

接下来,我们想关心一下订单数量(Quantity Ordered)与单价(Price Each)跟优惠力度(Deal Size)的关系。我们选择 View all charts,选择 Bubble Chart,输入相关字段后,生成如下泡泡图。

Bubble Chart

可以看到,优惠力度越大,订单数量越高;而价格与订单数量没有明显的相关关系。

以上,我们通过鼠标操作几下,就创建了两个简单的图表,从而完成了简单的可视化数据分析。Superset 虽然功能上还不及商业软件 Power BI 和 Tableau,但这对于咱们白嫖玩家来说已经完全够用!

总结

本篇文章介绍了如何搭建安装 Superset,以及在 Superset 上创建数据集,以拖拽的方式进行可视化分析,从而帮助我们体验和理解 Superset 在数据分析方面的功能。作为 Apache 基金会孵化出来的开源项目,Superset 是非常优秀的数据分析平台,可以作为一些中小公司的选择,特别是对于有一定运维经验的程序员。不过,Superset 在功能性、易用性、技术生态等方面还达不到同类商业软件 Power BI、Tableau。例如,Power BI 的 Gateway 让其可以轻松的打通各个系统的数据,它其实已经不单是数据可视化工具了,但 Power BI 的商用许可也非常昂贵。Superset 还有其他的一些功能,例如 Dashboard,本文限于篇幅就没有介绍了,以后有机会再详细介绍一下。

社区

如果您对笔者的文章感兴趣,可以加笔者微信 tikazyq1 并注明 "码之道",笔者会将你拉入 "码之道" 交流群。