Python 的 ibm-watson-studio-lib
库提供对资产的访问权。 它可以在 Notebook 编辑器中创建的 Notebook 中使用。 ibm-watson-studio-lib
支持使用数据资产和连接,以及浏览所有其他资产类型的功能。
ibm-watson-studio-lib
库适用于watsonx.aiStudio,即以前的Watson Studio。有两种类型的数据资产:
- 已存储的数据资产 是指与当前项目关联的存储器中的文件。 库可以装入并保存这些文件。 对于大于 1 兆字节的数据,建议不要这样做。 库要求将数据整体保存在内存中,这在处理大量数据集时可能效率低下。
- 已连接的数据资产 表示必须通过连接访问的数据。 通过使用该库,您可以检索已连接数据资产及其连接的属性 (元数据)。 这些函数不会返回已连接数据资产的数据。 您可以使用在 "代码片段" 窗格上单击 读取数据 以访问数据时为您生成的代码,或者必须编写自己的代码。
ibm-watson-studio-lib
函数不会对数据进行编码或解码。 此外,无法使用 ibm-watson-studio-lib
函数来访问已连接的文件夹资产 (项目存储器路径上的文件)。设置 ibm-watson-studio-lib
库
要从笔记本访问项目资产,请初始化 "ibm-watson-studio-lib
。 预装了Python的 "ibm-watson-studio-lib
库,可在笔记本编辑器中直接导入到笔记本中。
插入可让您访问项目资产的代码:
单击 Notebook 工具栏上的更多图标,然后单击插入项目令牌。
如果存在项目令牌,那么会向 Notebook 中添加一个包含下列信息的单元格:
from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"})
如果项目令牌不存在,你会看到一条警告信息。 单击信息中的链接,跳转到项目的 "访问控制"页面,在这里可以创建项目令牌。 您必须有资格创建项目令牌。 有关详细信息,请参阅手动添加项目令牌。
要创建项目令牌,请执行以下操作:
- 从 管理 选项卡中,选择 " 访问控制 " 页面,然后单击 访问令牌下的 新建访问令牌 。
- 输入名称,选择项目的编辑者角色,然后创建令牌。
- 返回到 Notebook,单击 Notebook 工具栏上的更多图标,然后单击插入项目令牌。
辅助函数
您可以使用 help(wslib)
以编程方式获取 ibm-watson-studio-lib
库中受支持函数的相关信息,也可以使用 help(wslib.<function_name>
(例如 help(wslib.get_connection)
) 以编程方式获取单个函数的相关信息。
您可以使用帮助程序函数 wslib.show(...)
来格式化打印 Python 字典和字典列表,这些字典是 ibm-watson-studio-lib
函数的公共结果输出类型。
ibm-watson-studio-lib
函数
ibm-watson-studio-lib
库公开了一组按以下方式分组的函数:
获取项目信息
在开发代码时,您可能不知道数据资产或连接的确切名称。 以下函数提供资产列表,您可以从中选取相关资产。 在所有示例中,您可以使用 wslib.show(assets)
来漂亮地打印列表。 每个项的索引都打印在项的前面。
list_connections()
此函数返回连接列表。 返回的连接列表未按任何条件排序,当您再次调用该函数时可能会发生更改。 您可以将字典项而不是名称传递到
get_connection
函数。例如:
# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) assets = wslib.list_connections() wslib.show(assets) connprops = wslib.get_connection(assets[0]) wslib.show(connprops)
list_connected_data()
此函数返回已连接的数据资产。 返回的已连接数据资产的列表未按任何条件进行排序,当您再次调用该函数时可能会发生更改。 您可以将字典项而不是名称传递到
get_connected_data
函数。list_stored_data()
此函数返回存储的数据资产 (数据文件) 的列表。 返回的数据资产的列表未按任何条件进行排序,当您再次调用该函数时可能会发生更改。 您可以将字典项而不是名称传递到
load_data
和save_data
函数。注: 将应用启发式方法来区分已连接的数据资产和已存储的数据资产。 但是,在某些情况下,返回的列表中可能显示了错误类型的数据资产。wslib.here
<\br>通过使用此入口点,您可以检索有关库正在使用的项目的元数据。 入口点
wslib.here
提供了以下功能:get_name()
此函数返回项目的名称。
get_description()
此函数返回项目的描述。
get_ID()
此函数返回项目的标识。
get_storage()
此函数返回项目的存储信息。
获取认证令牌
某些任务需要认证令牌。 例如,如果您想针对数据和人工智能通用核心 API 运行自己的请求,就需要一个身份验证令牌。
您可以使用以下函数来获取不记名令牌:
get_current_token()
例如:
from ibm_watson_studio_lib import access_project_or_space
wslib = access_project_or_space({"token":"<ProjectToken>"})
token = wslib.auth.get_current_token()
此函数返回 ibm-watson-studio-lib
库当前使用的不记名令牌。
访存数据
您可以使用以下函数从项目中存储的数据资产 (文件) 访存数据。
load_data(asset_name_or_item, attachment_type_or_item=None)
此函数将存储的数据资产的数据装入到 BytesIO 缓冲区中。 对于非常大的文件,建议不要使用此函数。
此函数采用以下参数:
asset_name_or_item
: (必需) 具有已存储数据资产的名称的字符串或类似list_stored_data()
返回的项的字符串。attachment_type_or_item
: (可选) 要装入的附件类型。 一个数据资产可以有多个包含数据的附件。 如果没有此参数,那么将装入缺省附件类型,即data_asset
。 如果附件类型不是data_asset
,请指定此参数。 例如,如果纯文本数据资产具有来自 Natural Language Analysis 的附加概要文件,那么可以将其作为附件类型data_profile_nlu
装入。以下示例显示了如何装入数据资产的数据:
# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) # Fetch the data from a file my_file = wslib.load_data("MyFile.csv") # Read the CSV data file into a pandas DataFrame my_file.seek(0) import pandas as pd pd.read_csv(my_file, nrows=10)
download_file(asset_name_or_item, file_name=None, attachment_type_or_item=None)
此函数下载已存储的数据资产的数据,并将其存储在运行时的文件系统中的指定文件中。 如果该文件已存在,那么会对其进行覆盖。
此函数采用以下参数:
asset_name_or_item
: (必需) 具有已存储数据资产的名称的字符串或类似list_stored_data()
返回的项的字符串。file_name
: (可选) 将下载的数据存储到的文件的名称。 它缺省为资产的附件名称。attachment_type_or_item
: (可选) 要下载的附件类型。 一个数据资产可以有多个包含数据的附件。 如果没有此参数,那么将下载缺省附件类型,即data_asset
。 如果附件类型不是data_asset
,请指定此参数。 例如,如果纯文本数据资产具有来自 Natural Language Analysis 的附加概要文件,那么可以将其作为附件类型data_profile_nlu
进行下载。以下示例显示了如何使用
download_file
使定制 Python 脚本在 Notebook 中可用:# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) # Let's assume you have a Python script "helpers.py" with helper functions on your local machine. # Upload the script to your project using the Data Panel on the right of the opened notebook. # Download the script to the file system of your runtime wslib.download_file("helpers.py") # import the required functions to use them in your notebook from helpers import my_func my_func()
保存数据
用于在项目存储器中保存数据的函数执行多项操作:
- 将数据存储在项目存储器中
- 将数据作为数据资产 (通过创建资产或覆盖现有资产) 添加到项目中,以便您可以在项目的数据资产列表中查看数据。
- 将资产与存储器中的文件相关联。
您可以使用以下函数来保存数据:
save_data(asset_name_or_item, data, overwrite=None, mime_type=None, file_name=None)
此函数将内存中的数据保存到项目存储器。
此函数采用以下参数:
asset_name_or_item
: (必需)list_stored_data()
返回的已创建资产或列表项的名称。 如果您希望覆盖现有文件,那么可以使用该项。data
: (必需) 要上载的数据。 这可以是类型为bytes-like-object
的任何对象,例如字节缓冲区。overwrite
: (可选) 覆盖已存储的数据资产的数据 (如果已存在)。 缺省情况下,此值设置为 false。 如果传递资产项而不是名称,那么行为是覆盖资产。mime_type
: (可选) 所创建资产的 MIME 类型。 缺省情况下, MIME 类型由资产名称后缀确定。 如果使用不带后缀的资产名称,请在此处指定 MIME 类型。 例如,mime_type=application/text
表示纯文本数据。 覆盖资产时,将忽略此参数。file_name
: (可选) 要在项目存储器中使用的文件名。 数据将保存在与项目关联的存储器中。 创建新资产时,文件名派生自资产名称,但可能有所不同。 如果要直接访问文件,可以指定文件名。 覆盖资产时,将忽略此参数。以下示例显示了如何将数据保存到文件中:
# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) # let's assume you have the pandas DataFrame pandas_df which contains the data # you want to save as a csv file wslib.save_data("my_asset_name.csv", pandas_df.to_csv(index=False).encode()) # the function returns a dict which contains the asset_name, asset_id, file_name and additional information upon successful saving of the data
upload_file(file_path, asset_name=None, file_name=None, overwrite=False, mime_type=None)
此函数将运行时的文件系统中的数据保存到与项目关联的文件中。 此函数采用以下参数:file_path
: (必需) 文件系统中文件的路径。asset_name
: (可选) 创建的数据资产的名称。 它缺省为要上载的文件的名称。file_name
: (可选) 在与项目关联的存储器中创建的文件的名称。 它缺省为要上载的文件的名称。overwrite
: (可选) 覆盖存储器中的现有文件。 缺省值为 false。mime_type
: (可选) 所创建资产的 MIME 类型。 缺省情况下, MIME 类型由资产名称后缀确定。 如果使用不带后缀的资产名称,请在此处指定 MIME 类型。 例如,mime_type='application/text'
表示纯文本数据。 覆盖资产时,将忽略此参数。以下示例显示了如何将文件上载到项目:
# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) # Let's assume you have downloaded a file and want to save it # in your project. import urllib.request urllib.request.urlretrieve("https://some/url/data_file.csv", "data_file.csv") wslib.upload_file("data_file.csv") # The function returns a dictionary which contains the asset_name, asset_id, file_name and additional information upon successful saving of the data.
获取连接信息
您可以使用以下函数来访问给定连接的连接元数据。
get_connection(name_or_item)
此函数返回可用于从连接数据源访存数据的连接的属性 (元数据)。 使用
wslib.show(connprops)
来查看属性。 返回的字典中的特殊键"."
提供有关连接资产的信息。该函数采用以下必需参数:
name_or_item
: 具有连接名称的字符串或类似list_connections()
返回的项。
请注意,当您使用 Notebook 时,可以单击 "代码片段" 窗格上的 读取数据 以生成代码,例如,将数据从连接装入到 pandas DataFrame 中。
获取已连接的数据信息
您可以使用以下函数来访问已连接数据资产的元数据。
get_connected_data(name_or_item)
此函数返回已连接数据资产的属性,包括底层连接的属性。 使用
wslib.show()
来查看属性。 返回的字典中的特殊键"."
提供有关数据和连接资产的信息。该函数采用以下必需参数:
name_or_item
: 具有已连接数据资产的名称的字符串或类似list_connected_data()
返回的项。
请注意,当您使用 Notebook 时,可以单击 "代码片段" 窗格上的 读取数据 以生成代码,例如,将数据从已连接的数据资产装入到 pandas DataFrame 中。
按标识而不是名称访问资产
您最好始终通过唯一名称访问数据资产和连接。 资产名称不一定总是唯一的,当名称不明确时, ibm-watson-studio-lib
函数将产生异常。 您可以在 UI 中重命名数据资产以解决冲突。
可以使用唯一标识访问资产,但建议不要使用唯一标识,因为标识仅在当前项目中有效,并且在传输到其他项目时将中断代码。 例如,在导出和重新导入项目时,可能会发生此情况。 您可以使用相应的列表函数 (例如 list_connections()
) 来获取连接 (已连接或已存储的数据资产) 的标识。
入口点 wslib.by_id
提供了以下功能:
get_connection(asset_id)
此函数通过连接资产标识访问连接。
get_connected_data(asset_id)
此函数通过已连接的数据资产标识访问已连接的数据资产。
load_data(asset_id, attachment_type_or_item=None)
此函数通过传递资产标识来装入存储的数据资产的数据。 请参阅
load_data()
,以获取您可以传递的其他参数的描述。save_data(asset_id, data, overwrite=None, mime_type=None, file_name=None)
此函数通过传递资产标识将数据保存到存储的数据资产。 这意味着
overwrite=True
。 请参阅save_data()
,以获取您可以传递的其他参数的描述。download_file(asset_id, file_name=None, attachment_type_or_item=None)
此函数通过传递资产标识来下载存储的数据资产的数据。 请参阅
download_file()
,以获取您可以传递的其他参数的描述。
直接访问项目存储器
您可以从项目存储器访存数据,并将数据存储在项目存储器中,而无需使用入口点 wslib.storage
同步项目资产。
入口点 wslib.storage
提供了以下功能:
fetch_data(filename)
此函数将文件中的数据作为 BytesIO 缓冲区返回。 该文件不需要注册为数据资产。
该函数采用以下必需参数:
filename
:projectstorage 中文件的名称。
store_data(filename, data, overwrite=False)
此函数将内存中的数据保存到存储器中,但不会创建新的数据资产。 此函数返回包含文件名,文件路径和其他信息的字典。 使用
wslib.show()
来打印信息。此函数采用以下参数:
filename
: (必需) 项目存储器中文件的名称。data
: (必需) 要另存为类似字节的对象的数据。overwrite
: (可选) 覆盖存储器中文件的数据 (如果已存在)。 缺省情况下,此值设置为 false。
download_file(storage_filename, local_filename=None)
此函数将数据下载到存储器中的文件中,并将其存储在指定的本地文件中。 如果本地文件已存在,那么将覆盖该文件。
此函数采用以下参数:
storage_filename
: (必需) 要下载的存储器中文件的名称。local_filename
: (可选) 要将文件下载到的运行时的本地文件系统中的文件的名称。 省略此参数以使用存储文件名。
register_asset(storage_path, asset_name=None, mime_type=None)
此函数将存储器中的文件注册为项目中的数据资产。 如果具有相同名称的数据资产已存在,那么此操作将失败。
如果您有无法通过 save_data() 上传的超大文件,可以使用此函数。您可以将大文件直接上传到项目的IBM Cloud Object Storage桶,例如通过用户界面,然后使用 "
register_asset()
将其注册为数据资产。此函数采用以下参数:
storage_path
: (必需) 存储器中文件的路径。asset_name
: (可选) 已创建资产的名称。 它缺省为文件名。mime_type
: (可选) 所创建资产的 MIME 类型。 缺省情况下, MIME 类型由资产名称后缀确定。 如果文件名没有文件扩展名,或者如果要设置其他 MIME 类型,请使用此参数来指定 MIME 类型。
注: 您可以多次将文件注册为不同的数据资产。 删除项目中的其中一个资产还会删除存储器中的文件,这意味着对该文件的其他资产引用可能会中断。
Spark 支持
入口点 wslib.spark
提供了通过 Spark 访问存储器中文件的功能。 要获取有关可用功能的帮助信息,请使用 help(wslib.spark.API)
。
入口点 wslib.spark
提供了以下功能:
provide_spark_context(sc)
使用此功能来启用 Spark 支持。
该函数采用以下必需参数:
- sc: SparkContext。 它在 Notebook 运行时中提供。
以下示例显示如何设置 Spark 支持:
from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) wslib.spark.provide_spark_context(sc)
get_data_url(asset_name)
此函数返回一个 URL ,以通过 Hadoop从 Spark 访问存储器中的文件。
该函数采用以下必需参数:
asset_name
: 资产的名称。
storage.get_data_url(file_name)
此函数返回一个 URL ,以通过 Hadoop从 Spark 访问存储器中的文件。 该函数需要文件名而不是资产名称。
该函数采用以下必需参数:
file_name
: 项目存储器中文件的名称。
浏览项目资产
入口点 wslib.assets
提供对任何类型的资产的通用只读访问。 对于所选资产类型,有提供其他数据的专用功能。 要获取有关可用功能的帮助,请使用 help(wslib.assets.API)
。
适用的命名约定如下所示:
- 名为
list_<something>
的函数返回 Python 字典列表。 每个字典表示一个资产,并包含标识该资产的一小部分属性 (元数据)。 - 名为
get_<something>
的函数返回具有资产属性的单个 Python 字典。
要漂亮地打印字典或字典列表,请使用 wslib.show()
。
函数期望资产的名称或列表中的项作为参数。 缺省情况下,这些函数仅返回可用资产属性的子集。 通过设置参数 raw=True
,可以获取完整的资产属性集。
入口点 wslib.assets
提供了以下功能:
list_assets(asset_type, name=None, query=None, selector=None, raw=False)
此函数列示给定类型的与给定约束相关的所有资产。
此函数采用以下参数:
asset_type
: (必需) 要列示的资产类型,例如data_asset
。 请参阅list_asset_types()
以获取可用资产类型的列表。 将资产类型asset
用于项目中所有可用资产的列表。name
: (可选) 要列示的资产的名称。 如果存在多个同名资产,请使用此参数。 只能指定name
和query
。query
:(可选)传递给数据和人工智能通用核心 API 的查询字符串,用于搜索资产。 只能指定name
和query
。selector
: (可选) 对候选资产字典项的定制过滤器功能。 如果选择器函数返回True
,那么资产将包含在返回的资产列表中。raw
: (可选) 返回所有可用元数据。 缺省情况下,该参数设置为False
,并且仅返回一部分属性。
使用
list_assets
函数的示例:# Import the lib from ibm_watson_studio_lib import access_project_or_space wslib = access_project_or_space({"token":"<ProjectToken>"}) # List all assets in the project all_assets = wslib.assets.list_assets("asset") wslib.show(all_assets) # List all data assets with name 'MyFile.csv' assets_by_name = wslib.assets.list_assets("data_asset", name="MyFile.csv") # List all data assets whose name starts with "MyF" assets_by_query = wslib.assets.list_assets("data_asset", query="asset.name:(MyF*)") # List all data assets which are larger than 1MB sizeFilter = lambda x: x['metadata']['size'] > 1000000 large_assets = wslib.assets.list_assets("data_asset", selector=sizeFilter, raw=True) # List all notebooks notebooks = wslib.assets.list_assets("notebook")
list_asset_types(raw=False)
此函数列出所有可用资产类型。
该函数可以采用以下参数:
raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
list_datasource_types(raw=False)
此函数列出所有可用的数据源类型。
该函数可以采用以下参数:
raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
get_asset(name_or_item, asset_type=None, raw=False)
此函数返回资产的元数据。
此函数采用以下参数:
name_or_item
: (必需) 资产或类似list_assets()
返回的项的名称asset_type
: (可选) 资产的类型。 如果参数name_or_item
包含资产名称的字符串,那么需要设置asset_type
。raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
使用
list_assets
和get_asset
函数的示例:notebooks = wslib.assets.list_assets('notebook') wslib.show(notebooks) notebook = wslib.assets.get_asset(notebooks[0]) wslib.show(notebook)
get_connection(name_or_item, with_datasourcetype=False, raw=False)
此函数返回连接的元数据。
此函数采用以下参数:
name_or_item
: (必需) 连接或类似list_connections()
返回的项的名称with_datasourcetype
: (可选) 返回有关连接的数据源类型的其他信息。raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
get_connected_data(name_or_item, with_datasourcetype=False, raw=False)
此函数返回已连接数据资产的元数据。
此函数采用以下参数:
name_or_item
: (必需) 已连接的数据资产或类似list_connected_data()
返回的项的名称with_datasourcetype
: (可选) 返回有关关联的已连接数据资产的数据源类型的其他信息。raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
get_stored_data(name_or_item, raw=False)
此函数返回存储的数据资产的元数据。
此函数采用以下参数:
name_or_item
: (必需) 存储的数据资产或类似list_stored_data()
返回的项的名称raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
list_attachments(name_or_item_or_asset, asset_type=None, raw=False)
此函数返回资产附件的列表。
此函数采用以下参数:
name_or_item_or_asset
: (必需) 资产或类似list_stored_data()
或get_asset()
返回的项的名称。asset_type
: (可选) 资产的类型。 它缺省为类型data_asset
。raw
: (可选) 返回完整的元数据集。 缺省情况下,该参数为False
,并且仅返回一部分属性。
使用
list_attachments
函数读取存储数据资产的附件的示例:assets = wslib.list_stored_data() wslib.show(assets) asset = assets[0] attachments = wslib.assets.list_attachments(asset) wslib.show(attachments) buffer = wslib.load_data(asset, attachments[0])