Trực quan hóa dữ liệu là yếu tố quan trọng trong việc phân tích dữ liệu và trong nhiều năm dường như mathplotlib
viết bằng Python là lựa chọn hiển nhiên. Tuy nhiên, trong thực tế, đặc biệt là trong môi trường Production, các ứng dụng ngày càng đòi hỏi phải có tốc độ cao hơn, khả năng xử lý khối lượng dữ liệu lớn hơn nhưng không làm cháy túi vì chi tiêu cho tài nguyên hệ thống (RAM, CPU/GPU), có khả năng mở rộng tốt hơn, và do đó các lập trình viên luôn cố tìm kiếm những lựa chọn khả dĩ hơn. plotter-rs
là một thư viện viết bằng Rust, có khả năng giải quyết các vấn đề này nhưng không đánh đổi bất cứ chức năng nào mà mathplotlib
có.
Để tìm hiểu về cách sử dụng plotter-rs
tronng Jupyter Notebook, hãy xem video "#0033 - Vẽ đồ thị với plotters-rs (Phần 01)” trên kênh Youtube RustDEV Vietnam. Đây là video đầu tiên trong chuỗi video về chủ đề này.
Tại sao nên thử plotter-rs?
Chúng ta đã có mathplotlib
, vậy tại sao lại nên thử dùng plotter-rs
? Vậy chúng ta hãy cùng lướt qua một vài khác biệt cơ bản giữa hai thư viện này nhé!
mathplotlib
và các thư viện trực quan hóa dữ liệu dựa trên nó (ví dụ: plotly) đều dùng Python, một ngôn ngữ thông dịch. plotter-rs
được viết bằng Rust, một ngôn ngữ biên dịch. Sự khác biệt về tốc độ và tối ưu sử dụng tài nguyên hệ thông (với giả thiết trên cùng một thuật toán, cho cùng một chức năng) giữa các chương trình thông dịch và biên dịch là rất khác nhau. Các chương trình biên dịch luôn chiếm ưu thế đặc biệt khi phải xử lý các khối dữ liệu lớn hoặc có tính toán phức tạp.
Rust được thiết kế để đảm bảo “zero-cost abstraction” trong khi đó Python chưa có khả năng này, càng nhiều lớp trừu tượng hóa càng ảnh hưởng đến tốc độ và việc sử dụng tài nguyên của chương trình. Rõ ràng rằng, cả plotter-rs
và mathplotlib
đều là thư viện, do đó sẽ phải sử dụng rất nhiều lớp trừu tượng hóa để tăng tính kế thừa và mở rộng.
Mô hình “ownership” của Rust loại bỏ tất cả các vấn đề về sử dụng bộ nhớ mà các ngôn ngữ khác gặp phải trong đó có cả Python nhưng tất nhiên không làm ảnh hưởng chút nào đến tốc độ và năng lực xử lý của chương trình. Tất cả được xử lý và đảm bảo chắc chắn ngay từ khi biên dịch, trong khi đó Python dựa vào một “garbage collector” và kết quả là các lập trình viên không thể kiểm soát chi tiết bộ nhớ và khi mathplotlib
phải vẽ những độ thị phức tạp thì hiện tượng phân mảnh bộ nhớ là khó tránh khỏi.
plotter-rs
hỗ trợ rất tốt WebAssembly. Trên thực tế, Rust có thể coi là ngôn ngữ hỗ trợ WebAssembly tốt nhất. Python thì chưa có khả năng này do vậy mathplotlib
cũng chưa hỗ trợ WebAssembly. Rust cũng hộ trợ rất tốt WebGPU do vậy plotter-rs
chắc chắn sẽ được tích hợp trực tiếp khả năng này trong tương lai gần (tại thời điểm viết bài này, việc kết hợp plotter-rs
với WebGPU mới chỉ là gián tiếp qua cơ chế mở rộng “backend” với thư viện bên thứ ba wgpu-rs
). Python cũng có hỗ trợ WebGPU nhưng do bản chất ngôn ngữ nên cũng có những giới hạn so với Rust, hơn nữa, mathplotlib
thì hoàn toàn không được thiết kế để hỗ trợ.
Cuối cùng, tất nhiên việc chọn lựa thư viện, công cụ nào phụ thuộc rất nhiều vào mục đích. Nếu chúng ta muốn liền mạch từ mô phỏng, thử nghiệm mô hình giải pháp trực quan hóa dữ liệu trên các khối dữ liệu lớn, tính toán phức tạp đến triển khai vào Production thì tôi cho rằng plotter-rs
sẽ là lựa chọn tối ưu. Đặc biệt, khi bạn mới bắt đầu với khoa học dữ liệu và tìm hiểu về trực quan hóa dữ liệu thì nên bắt đầu luôn với plotter-rs
.
Để tìm hiểu về cách sử dụng plotter-rs
tronng Jupyter Notebook, hãy xem video "#0033 - Vẽ đồ thị với plotters-rs (Phần 01)” trên kênh Youtube RustDEV Vietnam. Đây là video đầu tiên trong chuỗi video về chủ đề này.