昨日はPlottersのサンプルコードをちょっと直してとりあえずhistogramを描く(といいつつまだ見られていない)所まで行ったので今日はそれを出力できるようにしたい、というかそういうことできるようになってんのか?
→ できました
fn main() -> Result<(), Box<dyn std::error:Error>> {
let root = BitMapBackend::new("plotters-doc-data/histogram.png", (640, 480).into_drawing_area();
(略)
}
の::new()
の所に渡す名前がファイルの相対パスになる(project rootからなのでCargo.toml
があるディレクトリから見た相対パス)のでそこを書き換えてやればよかった
無事に以下のようなヒストグラムがかけたので今度は「詳解 確率ロボティクス」の方のデータに対してヒストグラムを描いてみる
一旦ここまでの流れを復習する。まず今できていることだが
sensor_data_200.txt
を読み込みDataFrame形式にする以上の流れを書いたコードが次のようになる
use polars::prelude::*;
use std::fs::File;
fn read_txt() -> Result<DataFrame> {
// データを読み込みDataFrameに格納する
let file = File::open("../sensor_data/sensor_data_200.txt").expect("could not read file");
CsvReader::new(file)
.infer_schema(None)
.has_header(false)
.with_delimiter(b' ')
.finish()
}
fn rename_cols(mut df: DataFrame) -> Result<DataFrame> {
// DataFrameのカラム名が"column_1"のようになっているので変更する
(1..5)
.zip(&["date", "time", "ir", "lidar"])
.for_each(|idx, name| {
df.rename(format!("{}{}", "column_", idx).as_str(), name)
.ok();
});
Ok(df)
}
fn print_state(df: DataFrame) -> Result<DataFrame> {
// DataFrameの状態を標準出力に出す
println!("{:?}", df.head(Some(3)));
Ok(df)
}
fn pipeline() -> Result<DataFrame> {
read_txt()?
.pipe(print_state)
.unwrap()
.pipe(rename_cols)
.expect("could not rename columns")
.pipe(print_state)
}
fn main() {
let _df = pipeline().expect("could not prepare DataFrame");
}
出力はこんな感じになる。
...残念ながらエラーが消せなかったので今日はここまで
明日はDataFrameのデータに対してヒストグラム描く所までやりたい・・・