拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于 Rerun Blueprint 构建股票时间序列多视图面板:blueprint_stocks 示例深度解析

基于 Rerun Blueprint 构建股票时间序列多视图面板blueprint_stocks 示例深度解析【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun导读blueprint_stocks是 Rerun 官方 Python 示例中聚焦 Blueprint蓝图机制的代表性案例它从 Yahoo Finance 抓取多只股票最近 5 个交易日的行情数据用同一份数据在 Rerun Viewer 中渲染出单图、图文混排、去除峰值、双股对比、全量网格等多种截然不同的界面形态。读完本文你将掌握rrb.Blueprint中视图View、容器Container、面板Panel三大核心构件以及origin、contents查询表达式、布局份额等关键参数的实际用法并能用同一套思路为自己的数据构建可复用、可切换的展示布局。示例概览一份数据六种蓝图本文对应的文档为 examples/python/blueprint_stocks/README.md完整可运行源码位于 examples/python/blueprint_stocks/blueprint_stocks.py工程配置见 examples/python/blueprint_stocks/pyproject.toml。该示例的核心思想用一句话概括数据记录一次展示形态任意切换。脚本从 Yahoo Finance 抓取 AAPL、AMZN、GOOGL、META、MSFT 五只股票最近 5 个交易日、以 5 分钟为间隔的高频行情并按下面的实体层级写入数据存储stocks/{symbol}/{day} # 某股票某天的价格时间序列 stocks/{symbol}/peaks/{day} # 当天最高价峰值标注 stocks/{symbol}/info # 该股票的 Markdown 信息文档随后通过--blueprint命令行参数选择不同的蓝图让同一份stocks/数据呈现出不同的界面auto重置为 Viewer 的自动布局one-stock用过滤器只展示单只股票的单张图表one-stock-with-info用容器把图表与其信息文档垂直排布one-stock-no-peaks用过滤器额外剔除图表中的峰值数据compare-two把多路数据源加入同一张图表grid以网格布局展示全部图表。安装与运行示例通过独立的 Python 包分发依赖信息在 examples/python/blueprint_stocks/pyproject.toml 中声明运行时依赖rerun-sdk、yfinance与humanize并要求 Python 版本不低于 3.10。项目还注册了blueprint_stocks blueprint_stocks:main的控制台入口。pip install -e examples/python/blueprint_stocks python -m blueprint_stocks安装后也可以直接用注册好的命令入口运行blueprint_stocks默认情况下--blueprint缺省值为grid运行后会在 Rerun Viewer 中看到按股票分组的网格布局。不同蓝图可通过--blueprint参数切换例如python -m blueprint_stocks --blueprintone-stock命令行参数全表从 blueprint_stocks.py 的argparse定义可以整理出完整参数表参数取值 / 类型默认值说明--blueprintauto、one-stock、one-stock-with-info、compare-two、one-stock-no-peaks、gridgrid选择要使用的蓝图--show_panels布尔开关store_trueFalse是否显示时间面板与选择面板缺省时二者被折叠rr.script_add_args(parser)注入的参数--serve、--connect、--save、--stdout、--web-viewer等—Rerun SDK 的标准脚本参数控制数据送往本地 Viewer、Rerun Server 或保存为.rrd文件--show_panels的逻辑在main()中体现当蓝图不是auto且未指定--show_panels时视图区会被hide_panels(viewport)包裹将时间面板与选择面板折叠。五种自定义蓝图逐层拆解主脚本 blueprint_stocks.py 中每个函数对应一种蓝图全部返回rrb.ContainerLike即Container或View由main()在解析命令行参数后统一通过rr.send_blueprint(blueprint)发送给 Viewer。下面逐个拆解其实现细节。auto回到 Viewer 的自动布局def auto_blueprint() - rrb.BlueprintLike: return rrb.Blueprint(auto_viewsTrue, auto_layoutTrue)auto蓝图没有显式声明任何视图而是把auto_views与auto_layout同时置为True等价于 Viewer 的默认行为根据数据存储中的内容自动创建视图并自动排布。从 api.py 的Blueprint.__init__源码看这两个参数默认在“未提供任何容器/视图”时自动为True若想创建完全空白的蓝图则必须显式置为False。one-stock最小化单视图蓝图def one_stock(symbol: str) - rrb.ContainerLike: return rrb.TimeSeriesView(namef{symbol}, originf/stocks/{symbol})这是最简单的自定义视图只声明一个TimeSeriesView用origin把视图原点锚定到/stocks/{symbol}。origin是视图的最关键参数之一——从 time_series_view.py 的构造函数签名可以看到其默认值为/contents默认值为$origin/**即“以视图原点为根递归包含其下所有实体”。因此这里只需指定origin该股票各交易日的全部标量曲线就会自动出现在同一张图表中。one-stock-with-infoVertical 容器与布局份额def one_stock_with_info(symbol: str) - rrb.ContainerLike: return rrb.Vertical( rrb.TextDocumentView(namef{symbol}, originf/stocks/{symbol}/info), rrb.TimeSeriesView(namef{symbol}, originf/stocks/{symbol}), row_shares[1, 4], )这个蓝图展示了**容器Container**的用法rrb.Vertical把两个视图垂直堆叠——上方是TextDocumentVieworigin 指向/stocks/{symbol}/info用于渲染股票的基本面 Markdown 文档下方是价格时序图。关键在于row_shares[1, 4]。根据 containers.py 中Vertical的定义row_shares决定每个子视图占用的纵向空间比例第i个视图占shares[i] / total_shares。这里意味着文档区与图表区按 1:4 分配高度图表占大头。同理Horizontal容器支持column_shares按比例分配列宽Grid容器则同时支持两者并可用grid_columns指定列数。one-stock-no-peakscontents 排除表达式def one_stock_no_peaks(symbol: str) - rrb.ContainerLike: return rrb.TimeSeriesView( namef{symbol}, originf/stocks/{symbol}, contents[ $origin/**, - $origin/peaks/**, ], )该蓝图展示了contents查询表达式的威力。contents接受字符串或字符串列表每条表达式的/-前缀分别表示“包含”与“排除”$origin是相对视图原点展开的变量。因此 $origin/**包含原点下所有实体整只股票的全部价格曲线- $origin/peaks/**排除peaks/子目录下的峰值标注。两条规则叠加的效果就是“显示全部价格但剔除峰值”。这与数据侧的记录方式严格对应脚本把峰值单独记录在stocks/{symbol}/peaks/{day}路径下见 blueprint_stocks.py从而可以用路径通配在视图层做细粒度的数据裁剪。这种“数据完整入库、视图按需过滤”的模式正是 Rerun Blueprint 的典型最佳实践。compare-two多数据源汇入单图def compare_two(symbol1: str, symbol2: str, day: Any) - rrb.ContainerLike: return rrb.TimeSeriesView( namef{symbol1} vs {symbol2} ({day}), contents[ f /stocks/{symbol1}/{day}, f /stocks/{symbol2}/{day}, ], )与前面用origin 通配不同这个蓝图完全不设 origin保持默认/而是用两条绝对实体路径把两路数据显式加入同一张TimeSeriesView /stocks/META/{day}与 /stocks/MSFT/{day}。当调用compare_two(META, MSFT, dates[-1])时即对比两只股票最近一个交易日dates[-1]的分时走势。这是多源数据对比的标准写法——路径即过滤器多个条目即可把任意实体汇入同一视图。grid嵌套容器构建网格看板def stock_grid(symbols: list[str], dates: list[Any]) - rrb.ContainerLike: return rrb.Vertical( contents[ rrb.Horizontal( contents[rrb.TextDocumentView(namef{symbol}, originf/stocks/{symbol}/info)] [rrb.TimeSeriesView(namef{day}, originf/stocks/{symbol}/{day}) for day in dates], namesymbol, ) for symbol in symbols ], )grid是默认蓝图也是嵌套容器用法的完整示范外层Vertical按股票逐行堆叠每一行是一个Horizontal列内容为“信息文档 该股票每一天的独立TimeSeriesView”。通过列表推导式为 5 只股票、5 个交易日自动生成 5 行、每行 6 个视图的看板。注意这里每个视图的 origin 精确到/stocks/{symbol}/{day}所以每个日期各占一张独立小图与one-stock中“整只股票一张图”形成鲜明对比——同样的数据视图划分粒度完全由蓝图决定。面板控制hide_panels 与 --show_panelsdef hide_panels(viewport: rrb.ContainerLike) - rrb.BlueprintLike: return rrb.Blueprint( viewport, rrb.TimePanel(statecollapsed), rrb.SelectionPanel(statecollapsed), )hide_panels展示了Blueprint的“视图区 面板”组合能力第一个位置参数是根容器定义 viewport随后可以传入任意面板部件。TimePanel(statecollapsed)与SelectionPanel(statecollapsed)分别把时间面板和选择面板折叠营造沉浸式的图表看板效果。从 api.py 的Panel基类源码看面板支持expanded已废弃与state两种写法state可取expanded/collapsed/hidden且每个面板类型TopPanel、BlueprintPanel、SelectionPanel、TimePanel在同一个Blueprint中最多出现一次。TimePanel还额外支持timeline、playback_speed、fps、play_state、loop_mode、time_selection等播放控制参数。蓝图底层机制View、Container、Panel 如何变成界面理解示例中各种rrb.*对象的本质需要回到蓝图 API 的源码。在 rerun_py/rerun_sdk/rerun/blueprint/api.py 中View视图界面中一个具体的视图单元如TimeSeriesView、TextDocumentView。构造时携带class_identifier如TimeSeries、origin、contents、name以及若干属性 archetype如TimeAxis、ScalarAxis、PlotLegend、PlotBackground、PlotInteraction、VisibleTimeRanges。内部_log_to_stream会把视图以view/{uuid}的蓝图实体路径写入流。Container容器用于排版的组织节点Vertical/Horizontal/Grid/Tabs均为其子类通过ContainerKind区分布局方向通过row_shares/column_shares/grid_columns/active_tab控制空间分配。容器内部以container/{uuid}为路径递归记录其子节点。Panel面板控制 Viewer 顶部、蓝图、选择、时间四个面板的显隐与状态。Blueprint顶层容器内部有一个根容器定义 viewport再叠加若干面板。_log_to_stream最后会把根容器 id 写入viewport实体并把面板状态写入各自路径。最终rr.send_blueprint(blueprint)把整棵“蓝图树”作为普通数据发送给 Viewer。值得一提的是Blueprint还提供save()保存为.rbl蓝图文件与connect_grpc()/spawn()连接或拉起远程 Viewer等方法示例中未使用但值得了解。另外TimeSeriesView本身还支持axis_x、axis_y、plot_legend、background、interaction、time_ranges等属性见 time_series_view.py 中的 docstring 示例可用于设置 Y 轴范围、开关图例、隐藏网格、配置悬浮提示等是扩展本示例图表细节的下一步入口。数据侧实现抓取、样式与实体路径约定蓝图负责“怎么显示”数据侧负责“显示什么”。数据部分同样在 blueprint_stocks.py 中完成可分为三个层次1. 静态元数据与样式staticTrue记录。主循环首先为每只股票、每个交易日记录两组静态数据第 174-178 行rr.log(fstocks/{symbol}/{day}, style_plot(symbol), staticTrue) rr.log(fstocks/{symbol}/peaks/{day}, style_peak(symbol), staticTrue)style_plot与style_peak分别构造rr.SeriesLines与rr.SeriesPoints为曲线与峰值点指定品牌色、图例名与点标记如markersup表示向上三角标记峰值统一使用红色0xFF0000FF。品牌色表第 99-105 行为每只股票定义了唯一颜色使得同一视图中的多曲线天然可区分。2. Markdown 信息文档。使用yf.Ticker(symbol)拉取shortName、industry、marketCap、totalRevenue经humanize.intword格式化为可读文本后以rr.TextDocument(info_md, media_typerr.MediaType.MARKDOWN)记录到stocks/{symbol}/info——这正是one-stock-with-info与grid中TextDocumentView的数据来源。3. 日内行情时间序列。对每个交易日取美东时间 09:30 开盘到 16:00 收盘、间隔 5 分钟的历史数据将索引归一化为相对开盘时间的datetime.timedelta随后rr.set_time(time, durationrow.Index) rr.log(fstocks/{symbol}/{day}, rr.Scalars(row.High)) if row.Index peak: rr.log(fstocks/{symbol}/peaks/{day}, rr.Scalars(row.High))即在time时间轴上按“距开盘的时长”推进时间游标把每根 K 线的高价作为标量逐帧记录同时找出当日最高点hist.High.idxmax()单独记录到peaks/子路径供one-stock-no-peaks的排除表达式使用。注意交易日集合通过x.weekday() 5过滤掉周末保证只拉取真实交易日数据。运行效果与自定义扩展建议运行python -m blueprint_stocks默认grid即可看到 5 行 × 6 列的股票看板依次尝试--blueprintone-stock、one-stock-with-info、one-stock-no-peaks、compare-two可以直观对比“同一份数据在不同蓝图下的呈现差异”这是理解 Rerun “数据与视图解耦”理念最快的路径。在此基础上可以做以下扩展练习仿照compare_two增加compare-all蓝图把五只股票同一日期的数据全部进一张图在TimeSeriesView上追加axis_yrrb.ScalarAxis(range(0.0, 1000.0), zoom_lockTrue)等属性固定纵轴范围属性细节见 time_series_view.py 的 docstring 示例在Blueprint中组合rrb.TopPanel、rrb.BlueprintPanel或把state从collapsed改为hidden体验更强的沉浸式布局用Blueprint.save()把满意的布局导出为.rbl蓝图文件供其他程序或 Viewer 直接加载。小结blueprint_stocks用一组真实可运行的金融数据把 Rerun Blueprint 的核心 API 全部串了起来origin划定视图的数据范围contents的/-表达式实现包含与排除Vertical/Horizontal容器配合row_shares/column_shares完成排版TimePanel/SelectionPanel控制界面沉浸度而auto_views/auto_layout则保留随时回归自动布局的能力。理解了这份示例你就掌握了在 Rerun 中“一份数据、任意形态”的通用方法论——它同样适用于机器人多模态数据、传感器时序数据等其他以时间为主轴的场景。相关文件速查示例文档examples/python/blueprint_stocks/README.md完整源码examples/python/blueprint_stocks/blueprint_stocks.py工程配置examples/python/blueprint_stocks/pyproject.toml蓝图核心 APIrerun_py/rerun_sdk/rerun/blueprint/api.py容器实现rerun_py/rerun_sdk/rerun/blueprint/containers.py时序视图实现rerun_py/rerun_sdk/rerun/blueprint/views/time_series_view.py【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门