data_06_visual_readiness_summary/
data_06_visual_readiness_summary.rs1use matten_data::{MattenDataError, Table};
11
12fn print_schema(summary: &matten_data::SchemaSummary) {
13 println!("rows {}", summary.rows);
14 println!("columns {}", summary.columns);
15 for col in summary.column_summaries() {
16 println!(
17 "column {:<8} kind={:<7} missing={}",
18 col.name, col.kind, col.missing
19 );
20 }
21}
22
23fn main() -> Result<(), MattenDataError> {
24 let csv = "\
25region,sales,cost,note
26north,100,40,ok
27south,150,,review
28east,120,55,ok";
29
30 let table = Table::from_csv_str(csv)?;
31 let source = table.schema_summary();
32
33 println!("== Source table ==");
34 println!("source columns {:?}", table.column_names());
35 print_schema(&source);
36 assert_eq!(table.column_names(), &["region", "sales", "cost", "note"]);
37 assert_eq!(source.rows, 3);
38 assert_eq!(source.columns, 4);
39 assert_eq!(
40 source
41 .column_summaries()
42 .iter()
43 .find(|col| col.name == "cost")
44 .map(|col| col.missing),
45 Some(1)
46 );
47
48 println!();
49 println!("== Selection ==");
50 let selected = table.select_columns(["sales", "cost"])?;
51 println!("selected columns {:?}", selected.column_names());
52 println!("left out [\"region\", \"note\"]");
53 assert_eq!(selected.column_names(), &["sales", "cost"]);
54
55 match selected.try_numeric() {
56 Err(MattenDataError::MissingValue { column, row }) => {
57 println!("strict numeric Err: missing column={column}, csv_line={row}");
58 assert_eq!(column, "cost");
59 assert_eq!(row, 3);
60 }
61 other => panic!("expected MissingValue, got {other:?}"),
62 }
63
64 println!();
65 println!("== Explicit cleanup ==");
66 let filled = selected.fill_missing(0.0)?;
67 let numeric = filled.try_numeric()?;
68 println!("numeric rows {}", numeric.row_count());
69 println!("numeric columns {}", numeric.column_count());
70 println!("numeric names {:?}", numeric.column_names());
71 assert_eq!(numeric.row_count(), 3);
72 assert_eq!(numeric.column_count(), 2);
73 assert_eq!(numeric.column_names(), &["sales", "cost"]);
74
75 let tensor = numeric.to_tensor()?;
76 println!("tensor shape {:?}", tensor.shape());
77 println!("row-major values {:?}", tensor.as_slice());
78 assert_eq!(tensor.shape(), &[3, 2]);
79 assert_eq!(tensor.as_slice(), &[100.0, 40.0, 150.0, 0.0, 120.0, 55.0]);
80
81 println!();
82 println!("data_06_visual_readiness_summary: OK");
83 Ok(())
84}