📊 Rust กับโลก Data Science
หลายคนอาจคุ้นชินกับ Python เมื่อพูดถึง Data Science แต่จริง ๆ แล้ว Rust ก็เป็นภาษาหนึ่งที่กำลังได้รับความนิยมเพิ่มขึ้นในงานวิเคราะห์ข้อมูลเชิงประสิทธิภาพ ด้วยการใช้ไลบรารีอย่าง Polars และ Arrow เราสามารถทำ DataFrame processing ได้แบบเร็วมาก และใช้หน่วยความจำน้อย เหมาะกับงานระดับ production และ pipeline automation
🧰 แนะนำไลบรารีหลัก
- Polars – DataFrame library ที่มี API คล้าย Pandas แต่เขียนด้วย Rust
- Arrow – เป็น standard columnar memory format ที่ใช้ร่วมกับหลายภาษา
- Serde / CSV / JSON – สำหรับโหลดไฟล์เข้าระบบ
🚀 เริ่มต้นโปรเจค Data Science ด้วย Rust
สร้างโปรเจคใหม่:
cargo new rust-data-analysis cd rust-data-analysis
📦 แก้ไข Cargo.toml
[dependencies]
polars = { version = “0.37”, features = [“lazy”, “csv-file”] } arrow = “51.0” serde = { version = “1.0”, features = [“derive”] } serde_json = “1.0”
📁 โหลดและแสดงข้อมูลจาก CSV
use polars::prelude::*;
fn main() -> Result<()> {
let df = CsvReader::from_path("data.csv")?
.has_header(true)
.finish()?;
println!("{}", df);
Ok(())
}

📊 วิเคราะห์ข้อมูลด้วย LazyFrame
LazyFrame จะช่วย optimize query ได้เหมือนกับ Spark หรือ Dask
fn main() -> Result<()> {
let lf = LazyCsvReader::new("data.csv")
.has_header(true)
.finish()?;
let result = lf
.filter(col("age").gt(lit(30)))
.groupby([col("country")])
.agg([col("income").mean()])
.sort("income", Default::default())
.collect()?;
println!("{:?}", result);
Ok(())
}
📦 ใช้ Arrow สำหรับ data exchange หรือ memory efficiency
use arrow::array::{Int32Array, ArrayRef};
use arrow::record_batch::RecordBatch;
use arrow::datatypes::{Field, Schema, DataType};
use std::sync::Arc;
fn arrow_example() {
let schema = Arc::new(Schema::new(vec![
Field::new("id", DataType::Int32, false),
Field::new("value", DataType::Int32, false),
]));
let batch = RecordBatch::try_new(
schema,
vec![
Arc::new(Int32Array::from(vec![1, 2, 3])) as ArrayRef,
Arc::new(Int32Array::from(vec![10, 20, 30])) as ArrayRef,
],
).unwrap();
println!("{:?}", batch);
}

🧠 เหตุผลที่ Rust เหมาะกับ Data Science
- Memory safety – ไม่มีปัญหา segmentation fault หรือ memory leak
- Performance – เร็วกว่า Python หลายเท่า
- Interop – รองรับ WASM, Python binding, และ cross-platform
- ใช้งานร่วมกับ Polars ได้ในหลายภาษา เช่น Python → Rust ได้ทันที
🧪 Benchmarks: Rust Polars vs Python Pandas
- โหลดไฟล์ CSV ขนาด 1 ล้านแถว
- Filter + Groupby + Aggregate
| Language | Library | Time (s) |
|---|---|---|
| Python | Pandas | 3.2 |
| Rust | Polars (lazy) | 0.42 |
📚 แหล่งเรียนรู้เพิ่มเติม
💬 สรุป
หากคุณกำลังมองหาเครื่องมือวิเคราะห์ข้อมูลที่ทั้งเร็วและปลอดภัย Rust คือทางเลือกใหม่ที่ไม่ควรมองข้าม โดยเฉพาะเมื่อใช้ร่วมกับ Polars และ Arrow คุณจะได้ performance ที่เหนือชั้น และโค้ดที่สะอาด ปลอดภัย พร้อมใช้ใน production หรือ system level data processing อย่างแท้จริง
บทความนี้ใช้เวลาอ่านประมาณ 20 นาที โดยทีมงาน poolsawat.com