use std::fs::File;
use dendritic_ndarray::ndarray::NDArray;
use arrow_schema::{DataType, Field, Schema};
use parquet::arrow::arrow_reader::ParquetRecordBatchReaderBuilder;
use parquet::errors::Result;
use crate::utils::*;
use dendritic_preprocessing::standard_scalar::*;
pub fn load_housing_schema() -> Schema {
Schema::new(vec![
Field::new("CRIM", DataType::Float64, false),
Field::new("ZN", DataType::Float64, false),
Field::new("INDUS", DataType::Float64, false),
Field::new("CHAS", DataType::Float64, false),
Field::new("NX", DataType::Float64, false),
Field::new("RM", DataType::Float64, false),
Field::new("AGE", DataType::Float64, false),
Field::new("DIS", DataType::Float64, false),
Field::new("RAD", DataType::Float64, false),
Field::new("TAX", DataType::Float64, false),
Field::new("PTRATIO", DataType::Float64, false),
Field::new("B", DataType::Float64, false),
Field::new("LSTAT", DataType::Float64, false),
Field::new("MEDV", DataType::Float64, false)
])
}
pub fn convert_housing_csv_to_parquet() {
let housing_schema = load_housing_schema();
csv_to_parquet(
housing_schema,
"data/boston_housing.csv",
"data/boston_housing.parquet"
);
}
pub fn load_housing_data() -> Result<(NDArray<f64>, NDArray<f64>)> {
let path = "data/boston_housing.parquet";
let file = File::open(path).unwrap();
let mut reader = ParquetRecordBatchReaderBuilder::try_new(file)?
.build()?;
let batch = reader.next().unwrap().unwrap();
let (input, y_train) = select_features(
batch.clone(),
vec![
"CRIM",
"ZN",
"INDUS",
"CHAS",
"NX",
"RM",
"AGE",
"DIS",
"RAD",
"TAX",
"PTRATIO",
"B",
"LSTAT",
"MEDV"
],
"MEDV"
);
let x_train = min_max_scalar(input).unwrap();
Ok((x_train, y_train))
}