SensorData
收藏Affinity 数据集
概述
Affinity 是一个用于从向量数据创建带有良好注释的数据集的工具。它强调数据的意义应与数据本身一同传递。
使用方法
python import affinity as af
class SensorData(af.Dataset):
"""实验数据来自绝密传感器技术。"""
t: af.VectorF32("经过时间(秒)")
channel: af.VectorI8("通道编号(从左到右)")
voltage: af.VectorF64("我们测量的东西(mV)")
is_laser_on: af.VectorBool("灯亮了吗?")
exp_id: af.ScalarI32("外键到 experiment")
这个工作概念涵盖了以下内容:
data = SensorData() # ✅ 空数据集 data = SensorData(**fields) # ✅ 手动构建 data = SensorData.build(...) # ⚒️ 从外部源构建,验证类型 data.df # ✅ 以数据框(Pandas/Polars/Arrow)查看 data.metadata # ✅ 注释(带有列和数据集注释的数据字典),来源 data.origin # ✅ 创建元数据,一些数据来源 data.to_csv(...) # ⚒️ 在头部注释 data.to_excel(...) # ⚒️ 在单独的工作表上注释 data.to_parquet(...) # ⚒️ data.metadata -> Parquet 元数据
工作原理
Affinity 不替代任何数据框库,但可以与任何你喜欢的包一起使用。
af.Dataset 是一个基类,定义了子数据类的行为:
- 简洁的类定义携带注释和预期的数据类型
- 子类属性(向量)可以由任何数组(numpy、pandas、polars、arrow)表示
- 子类实例可以从任何标量或可迭代对象构建
- 子类实例可以转换为任何数据框风格,并导出为任何你喜欢的数据框支持的格式
动机
我们需要为向量数据提供新的解决方案。现有的数据框包(如 pandas、polars、pyarrow)缺少一些重要功能:
- 除了变量和属性名称外,没有好的方法来解释数据集和每个字段的含义;数据的意义与数据本身分离
- 数据框包为处理任何数据类型提供了最大灵活性;这导致数据质量问题,并对存储和计算不友好
Affinity 旨在填补这些空白。




