ヒストグラムの出力をしてみる

昨日は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があるディレクトリから見た相対パス)のでそこを書き換えてやればよかった

詳解 確率ロボティクスのデータでヒストグラムを描く

無事に以下のようなヒストグラムがかけたので今度は「詳解 確率ロボティクス」の方のデータに対してヒストグラムを描いてみる

一旦ここまでの流れを復習する。まず今できていることだが

以上の流れを書いたコードが次のようになる

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のデータに対してヒストグラム描く所までやりたい・・・