Superset 可视化分析市场行情
Superset 是一个由 Apache 软件基金会维护的开源数据可视化和数据探索工具。它可以帮助用户快速构建交互式数据仪表盘,并且支持丰富的图表类型。DolphinDB 与 Superset 的结合,可以帮助用户更高效地进行数据分析和可视化,监控关键业务指标,如市场行情、交易量等,实现更好的数据驱动决策。本文将介绍如何结合 DolphinDB 与 Superset 进行可视化数据分析。
1. 安装部署
本章介绍如何使用 Python 虚拟环境安装和部署 Superset。
1.1 安装 Python 运行环境
- 安装 Python 虚拟环境
Miniconda 是一款轻量级、易用的 Python 虚拟环境管理工具。由于 Superset 依赖众多软件包,建议使用 Miniconda 创建虚拟环境,以隔离依赖项,避免兼容性问题。请参考 Miniconda 官方文档 进行安装。
按照 Superset 官方要求,Python 需安装 3.10 或以上版本。可使用以下命令创建并激活虚拟环境:
conda create -n superset python==3.11 conda activate superset
- 安装 Superset
使用 pip 安装 Superset 及其依赖项,请先下载 requirements.txt,然后执行以下命令安装:
pip install -r requirements.txt
安装过程可能较长,如果是中国地区,可使用清华源加速下载。
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装 pydolphindb
安装 1.1.1 或以上版本的 pydolphindb,1.1.1及以上版本的 pydolphindb 包实现了 Superset 所需的 DBAPI2.0 相关数据库元信息接口。
pip install pydolphindb==1.1.1
1.2 配置环境变量及初始化
创建 superset_config.py 并写入密钥,建议密钥为长度 32 位以上的随机字符串。可使用 DolphinDB 脚本生成
rand(33..126, 32).concat("").base64Encode()
。
echo "SECRET_KEY = 'cIgiAjJyZoxb4FfPzxQ8CdLJa+afcA5m+r3ezwe7XGzJ/Qj1VQWnGHRU'" > superset_config.py
配置环境变量并初始化 Superset。
export FLASK_APP=superset
# 替换为你的文件夹位置
export SUPERSET_HOME=/home/peter/superset
# 替换为你的文件位置
export SUPERSET_CONFIG_PATH=/home/peter/superset/superset_config.py
supersetdb upgrade
# 根据提示输入用户名及密码
flask fab create-admin
supersetinit

如图,Superset 初始化完成。
1.3 启动 Superset
启动 Superset,-p
选项可以指定服务端口,-h
指定监听地址。
superset run -h 0.0.0.0 -p 8088 --with-threads --reload --debugger
启动后,可通过浏览器输入地址 http://ip:8088 ( -p 所指定的端口)访问。

至此,Superset 部署完成。更多配置和管理方式,请参考 Configuring Superset | Superset。
2. 数据准备
由于 Superset 使用 catalog,schema 等概念来访问数据库,故需使用3.00.0及以上版本的 DolphinDB。准备可视化分析所需的案例数据集,包括创建 catalog、 snapshot 行情信息表,并使用 MockData 模块模拟一天的股票行情数据。
use MockData
createCatalog("stock")
use catalog stock
//创建行情分布式表snapshot
t = stockSnapShotPT("dfs://level2", "snapshot")
createSchema("stock", "dfs://level2", "level2")
// 生成模拟数据
data = stockSnapshot(2020.01.06, 100)
tableInsert(t, data)
select * from data limit 100
//创建共享表
tmp = select * from level2.snapshot limit 100000
share tmp as snapshotg
3. 连接至DolphinDB
案例数据准备完成之后,分别创建 DolphinDB 连接及数据集,使得 Superset 可以访问并使用 DolphinDB 中的数据。
3.1 创建连接
先点击右上角的 Settings,然后点击 Database Connections。

点击右上角的 + DATABASE 选项,选择连接的数据库为 DolphinDB。

按照dolphindb://user:password@host:port/catalog
的形式输入连接所需的参数,参数说明如下:
参数名称 | 说明 |
---|---|
user | 数据库用户名 |
password | 数据库用户对应的密码 |
host | DolphinDB 所在服务器的主机名或 IP |
port | DolphinDB 监听端口 |
catalog | 数据库目录名称 |
点击 TEST CONNECTION 测试连接能否成功,最后点击 CONNECT 连接数据库。

成功连接后进入数据库界面,页面会展示出相关连接信息。
3.2 创建 dataset
Superset 使用数据集(dataset)管理数据,并以此做为图表的数据源。

点击 +DATASET,依次选择数据库连接,SCHEMA,TABLE,点击 CREATE DATASET AND CREATE CHART,后续的步骤 CREATE CHART 可以先忽略。除了分布式表,也可以选择 _shared_table 来选取共享内存表。在操作时,若 Superset 查询的库表并非最新的元信息(Superset 为了提高与数据库交互的效率,一般会缓存数据库元信息这种不太更新的数据),可以点击刷新按钮更新元数据。
4. 可视化分析
至此准备工作已经完成,进入数据可视化分析环节。可视化的魅力在于,能直观地展示数据情况,使得用户能够洞见数据中隐含的规律。以下案例将通过 Superset 绘制图表分析股票数据 ,包括市场深度趋势、成交量分布、行情展示等。
4.1 市场深度趋势图
市场深度指的是买卖挂单的数量和流动性情况,它反映了市场的供需情况。绘制折线趋势图,查看个股的买卖盘口深度随时间的变化趋势。
首先点击上方导航栏的 Charts,点击右上角的 + CHART 进入创建图表的界面。然后选择上文中创建的 snapshot 数据集,选择图表为 Line Chart,点击 CREATE NEW CHART。

图表相关配置项说明如下,后文不再赘述。
- X-AXIS
X 轴,对于趋势图,通常是选择时间字段。
- TIME GRAIN
时间粒度,对 X 轴的时间列进行聚合,使得图表在更大的时间粒度(Minute,Day,Month等)上展示。
- FILTERS
过滤器,对应于 SQL 中的 where 条件。
- METRICS
图表展示的指标,建议选择 CUSTOM SQL 进行手动编写,比较高效。

分别输入sum(rowSum(OfferOrderQty)
, sum(rowSum(BidOrderQty)
计算买卖队列。CUSTOM SQL 输入框中可以使用所有合法的 DolphinDB
SQL,包括使用内置函数与自定义函数。因此您可以借助 DolphinDB 的分析能力(函数库及编程语言)完成一些复杂指标的可视化。 点击 CREATE
CHART 生成图表。

对于复杂的 SQL, 可以通过右上角的扩展菜单 View query 确认通过界面配置而生成的 SQL 是否正确。这也是常用的一个 debug 技巧。对于上述图表,SQL 如下。
SELECT minute(_"TradeTime") as _"minute_TradeTime", SUM(rowSum(OfferOrderQty)) as _"SUM_rowSum_OfferOrderQty", SUM(rowSum(BidOrderQty)) as _"SUM_rowSum_BidOrderQty"
FROM snapshotg
WHERE _"TradeTime" >= time("09:30:00.000") && _"TradeTime" < time("11:30:00.000") GROUP BY minute(_"TradeTime") ORDER BY _"SUM_rowSum_OfferOrderQty" desc
LIMIT 10000;
最后,点击右上角的 SAVE,输入 CHART NAME 保存图表。
图表调整
在图表编辑 CUSTOMIZE 栏页中,可以对图表的格式进行调整。

例如给 X,Y 轴加上标签,调整 X, Y 轴的单位显示格式等。
4.2 最新行情信息
查看某个股票的最新的100笔行情信息,包括交易时间、价格、买卖10档量价(ArrayVector类型)等。
首先选择 Table,然后 FILTERS 中拖拽 SecurityID 选择股票。请注意字符串不需要手动加上引号或者双引号。接着,设置 ORDERING 按交易时间倒序,ROW LIMIT 选项设置为50。

图中,如果要调整字段展示格式的(默认是显示为 datetime 类型),选择 CUSTOMIZE → CUSTOMIZE COLUME → %Y-%m-%d , 将 tradeDate 显示为日期格式。

4.3 成交量分布图
使用柱状图查看 “000076” 和 “000024” 股票每分钟的成交量。
首先,选择 Bar Char 图表,按照下图配置查询参数。然后 DIMENSIONS 中选择 “SecurityID”,FILTERS 筛选器中拖拽 “SecurityID”,“TradeDate” 字段,选择目标股票及交易日期。

在 CUSTOMIZE中 可以选择水平/垂直控制柱形图的方向,点击 DATA ZOOM 可以缩放 X 轴范围,对感兴趣的 X 轴区间进行详细展示。

4.4 市场成交词云图
词云图可以非常直观地显示热点事件,在股票市场中,适合显示热门股票。
首先,选择 WordCloud 图表,按照下图配置查询参数。

然后,DIMENSION 选择 ”SecurityID“,METRIC 设置为 sum(totalValueTrade), 以成交金额控制词条的大小。

在 CUSTOMIZE 菜单栏中可以控制词条旋转的方向(随机、水平、平方)及字体大小。
4.5 总成交量图
使用 BIG NUMBER 图表展示个股在某个交易日的总成交量。
首先,选择 Big Number 图表,按照下图配置查询参数。然后在 METRIC 里写入 sum(NumTrades) 计算成交量,接着 FILTERS 中选择对应得股票。

4.6 使用仪表盘
4.6.1 创建仪表盘
仪表盘可以组合多个图表,展示多维度数据情况,并形成一定的叙事逻辑。使得用户能够从不同视角分析业务表现,发现规律和潜在问题。
点击 Dashboards 菜单创建仪表盘,将右侧的图表拖入仪表盘中,图表可以进行拖拽改变位置和大小。

点击右上角 … 按钮,选择菜单中的 Edit properties 调整仪表盘属性,可以设置仪表盘的名称、权限、色彩主题等。

4.6.2 共享仪表盘
可以通过 Share → Copy permanlink to clipboard 可以获取仪表盘 URL 进行团队共享,访问者需要具备登录 Superset 的权限。Superset 支持工程化的权限管理,包括创建用户/组、设置图表的访问、编辑权限。在 Settings → List Users/List Roles 可以对用户、角色的权限进行设置。

默认生成的 URL 形如 http://ip:port/superset/dashboard/p/8pGRY22dK9D/,比较难以记忆,可以在 URL SLUG 设置一个助记码,如图4-13中的 stockMarket,并通过
http://ip:port/superset/dashboard/stockMarket 访问该仪表盘。
5. 总结
本文讲解了如何结合 DolphinDB 和 Superset 进行可视化分析,通过与 DolphinDB 的集成,Superset 可以实现一些复杂统计分析的可视化。总体而言,Superset 是一个图表丰富、简单易用的可视化软件。它通过调用 pydolphindb 的相关元数据接口来实现与 DolphinDB 交互数据,目前有些功能尚未完全兼容,说明如下:
- 在 Superset 所展示的数据中,您会观察到 TIME 类型的字段会加上固定的日期部分 1970-01-01, 这是因为 Superset 统一使用 pandas.datetime 来显示时间,故必须要将 DolphinDB TIME 转为 YYYY-MM-dd HH:mm:ss 的形式。
- TIME GRAIN 不支持 Week,Month,Quarter 。
- 暂不支持Handlebars 图、Event Flow 图,Map 图。
有关 Superset 各图表的使用细节请参阅 Exploring Data in Superset。
另外需要说明的是,模拟数据和真实的市场数据差距较大,使得部分图表的展示效果可能与业务直觉不相符,仅用于学习和参考。