1个不稳定版本
使用旧Rust 2015
0.1.0 | 2017年12月7日 |
---|
#19 在 #unsigned
83KB
1.5K SLoC
ETL
这是一个通用的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