1个不稳定版本

使用旧Rust 2015

0.1.0 2017年12月7日

#19#unsigned

自定义许可

83KB
1.5K SLoC

ETL

Build Status

这是一个通用的Rust Extract-Transform-Load(ETL)库,用于将任意纯文本文件加载到数据框对象中。

功能

  • 分隔符指定(逗号、制表符等)
  • 数据类型
    • 有符号/无符号整数
    • 浮点数
    • 文本字段
    • 布尔值
  • 转换
    • 连接(文本字段)
    • 映射(从文本字段到另一个文本字段)
    • 类型转换
    • 值缩放(对于数值,例如在-1和1之间)
    • 值归一化
    • 向量化(一键或特征哈希)
  • 筛选

配置通过TOML文件处理。例如

## data_config.toml

[[source_files]]
name = "source1.csv"
delimiter = ","
fields = [ { source_name = "a_text_field", field_type = "Text", add_to_frame = false },
           { source_name = "another_text_field", field_type = "Text", add_to_frame = false } ]

[[source_files]]
name = "sourc2.tsv"
delimiter = "\t"
fields = [ { source_name = "an_integer", field_type = "Signed" },
           { source_name = "another_integer", field_type = "Signed" },
           { source_name = "a_category", field_type = "Text" },
           { source_name = "an_unused_float", field_type = "Float", add_to_frame = false } ]

[[transforms]]
method = { action = "Concatenate",  separator = " & " }
source_fields = [ "a_text_field", "another_text_field" ]
target_name = "a_new_text_field"

[[transforms]]
source_fields = [ "a_category" ]
target_name = "category_mapped_to_integers"

[transforms.method]
action = "Map"
default_value = "-1"
map = { "first_category" = "0", "second_category" = "1" }

加载配置文件

let data_path = PathBuf::from(file!()).parent().unwrap().join("data_config.toml");

let (config, df) = DataFrame::load(data_path.as_path()).unwrap();

let mut fieldnames = df.fieldnames();
fieldnames.sort();
assert_eq!(fieldnames, ["a_category", "a_new_text_field", "an_integer", "another_integer"
    "category_mapped_to_integers"]);

一旦加载,文件可以转换为一个矩阵,以进行进一步处理。

let (config, df) = DataFrame::load(data_path.as_path()).unwrap();
let (fieldnames, mat) = df.as_matrix().unwrap();

依赖项

~70MB
~1M SLoC