注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
FoundryTS 是一个用于对时间序列数据运行查询的 Python 库,并且它与代码仓库和代码工作簿集成。
查看时间序列文档以了解更多详情。
首先,确保您已经设置了一个 Python 代码仓库。
使用库窗格将 foundryts
、transforms-timeseries
和 transforms-objects
库添加到您的仓库中。
然后,按照以下说明将要查询的 Object 类型导入仓库并更新项目引用:
项目引用授予 FoundryTS 访问项目外部资源的权限。本节将指导您导入位于项目外部的资源。
如果您通过时间序列属性访问系列,则必须导入以下资源:
如果您通过系列 ID 或搜索查询访问系列,则必须导入以下资源:
在代码工作簿中,通过选择右上工具栏中的环境,然后选择配置环境,将 foundryts
包添加到您的环境中。
在Conda 环境下,选择自定义配置文件,搜索并添加 foundryts。选择更新环境以保存更改。
了解更多关于代码工作簿中的环境配置。
任何查询的 Object 类型(通过时间序列属性访问)或时间序列目录同步(通过系列 ID 或搜索查询访问)必须从左侧内容面板添加为工作簿输入。
作为工作簿输入添加的 Object 类型或时间序列目录同步还必须导入到与工作簿相同的项目中,包括它们的支持数据集。如果不这样做,在使用 foundryts 编写变换时会出错。如果任何工作簿输入不在项目范围内,它们将在工作簿工具栏右上角的设置下拉菜单中的项目范围设置对话框中显示。
在此示例中,我们从具有 Ticker name
属性的 Stock series
Object 类型开始。我们的目标是找到 Technology
部门中的所有系列并计算它们的时间范围。
首先定义变换的输入和输出。我们将 Stock series
Object 类型声明为一个 Object 输入,将时间序列同步声明为一个时间序列输入。
Copied!1@transform( 2 # 定义输出路径为 "/Users/jdoe/foundryts-test-technology-sector" 3 output=Output("/Users/jdoe/foundryts-test-technology-sector"), 4 5 # 定义时间序列输入,使用指定的时间序列资源ID 6 ts=TimeSeriesInput('ri.time-series-catalog.main.sync.6bdbda27-29...'), 7 8 # 定义对象输入,包括对象类型资源ID、本体资源ID和本体分支资源ID 9 objects=ObjectInput( 10 object_type_rid='ri.ontology.main.object-type.4168ed49-00...', 11 ontology_rid='ri.ontology.main.ontology.00000000-00...', 12 ontology_branch_rid='ri.ontology.main.branch.00000000-00...' 13 ) 14)
现在,我们定义变换函数并初始化FoundryTS的实例。请注意,此函数以Object类型、时间序列同步和输出作为参数。
Copied!1def compute(ctx, ts, objects, output): 2 # 实例化一个FoundryTS对象 3 fts = FoundryTS()
接下来,我们在Technology
领域中搜索timeseries-demo-stock-series
对象。对于每个搜索结果,我们将该系列映射到其时间范围(最早和最新点的时间戳)。
Copied!1 search_result = fts.search.series( 2 (ontology('sector') == 'Technology'), # 使用本体过滤出行业为“技术”的数据 3 object_types=['timeseries-demo-stock-series'] # 指定对象类型为“timeseries-demo-stock-series” 4 ).map(F.time_extent()) # 映射时间范围
最后,我们将数据框写入我们的输出数据集。
Copied!1 df = search_result.to_dataframe() # 将搜索结果转换为DataFrame 2 output.write_dataframe(df) # 将DataFrame写入输出
将所有内容整合在一起,完整的变换如下所示:
Copied!1from transforms.api import transform, Output 2from transforms.timeseries import TimeSeriesInput 3from foundryts import FoundryTS 4from foundryts.search import ontology 5import foundryts.functions as F 6from transforms.objects import ObjectInput 7 8# 定义数据转换函数 9@transform( 10 output=Output("/Users/jdoe/foundryts-test-technology-sector"), # 输出路径 11 ts=TimeSeriesInput('ri.time-series-catalog.main.sync.6bdbda27-29...'), # 输入时间序列数据 12 objects=ObjectInput( 13 object_type_rid='ri.ontology.main.object-type.4168ed49-00...', # 对象类型资源ID 14 ontology_rid='ri.ontology.main.ontology.00000000-00...', # 本体资源ID 15 ontology_branch_rid='ri.ontology.main.branch.00000000-00...' # 本体分支资源ID 16 ) 17) 18def compute(ctx, ts, objects, output): 19 fts = FoundryTS() # 创建FoundryTS实例 20 21 # 搜索技术行业的时间序列数据 22 search_result = fts.search.series( 23 (ontology('sector') == 'Technology'), # 条件:行业为“Technology” 24 object_types=['timeseries-demo-stock-series'] # 对象类型为“timeseries-demo-stock-series” 25 ).map(F.time_extent()) # 获取时间范围 26 27 df = search_result.to_dataframe() # 将搜索结果转换为DataFrame 28 output.write_dataframe(df) # 写入输出
输出数据集如下所示: