Tin học - Bài 24: Trực quan hóa dữ liệu với matplotlib (Khoa học Dữ liệu & ML)

🔬 Bài 24: Trực quan hóa dữ liệu với matplotlib

🎯 Sau bài này bạn sẽ: dùng plt.bar, plt.plot, plt.scatter để vẽ biểu đồ; thêm tiêu đề và nhãn trục; và nhận ra khi nào một biểu đồ "nói dối" — ngay trên trình duyệt.

bar — cột so sánh nhóm plot — đường xu hướng theo thời gian scatter — rải quan hệ hai đại lượng
Ba loại biểu đồ hay dùng: cột (so sánh), đường (xu hướng), rải (quan hệ).

1. Ba loại biểu đồ — chọn đúng loại

🟢 Lớp A · Trực giác

Mỗi loại biểu đồ kể một câu chuyện khác nhau: cột (bar) để so sánh các nhóm; đường (plot) để xem thay đổi theo thời gian; rải (scatter) để xem hai đại lượng có liên quan không. Chọn sai loại sẽ làm người xem hiểu nhầm.

🔵 Lớp B · Cơ chế

matplotlib vẽ lên một Figure (khung tranh) chứa một hay nhiều Axes (hệ trục). Bạn ra lệnh như plt.bar(x, y), sau đó matplotlib chuyển thành hình ảnh. Trong bài này ta xuất hình ra trực tiếp trên trang.

import matplotlib.pyplot as plt

ten = ["An", "Binh", "Chi"]
diem = [8.5, 7.0, 9.2]
plt.bar(ten, diem)
plt.title("Diem cac ban")
plt.show()
🟣 Lớp C · Nghiên cứu

Trong bài báo khoa học, mỗi hình phải có nhãn trục và đơn vị rõ ràng, chú thích (legend) khi có nhiều đường, và thường kèm thanh sai số (error bar). Hình "đẹp" nhưng thiếu nhãn là hình vô dụng.

2. Trung thực khi trực quan hóa

Cùng dữ liệu — hai cách vẽ ✓ Trung thực (trục từ 0) 0 5052 chênh lệch nhỏ — đúng thực tế ✗ Gây hiểu lầm (trục từ 49) 49 5052 trông như gấp đôi — sai!
Cắt trục y (không bắt đầu từ 0) có thể biến chênh lệch 2 điểm thành "gấp đôi".
🟢 Lớp A · Trực giác

Một thủ thuật hay gặp: cắt bỏ phần dưới của trục dọc để chênh lệch nhỏ trông như khổng lồ. Cùng con số 50 và 52, nếu trục bắt đầu từ 49 thì cột sau trông cao gấp mấy lần — dù thực tế chỉ hơn 4%.

🔵 Lớp B · Cơ chế

Trong matplotlib, phạm vi trục được đặt bằng plt.ylim(thap, cao). Với biểu đồ cột, quy tắc an toàn là để trục y bắt đầu từ 0. Với biểu đồ đường thì có thể linh động hơn, nhưng luôn phải ghi rõ phạm vi.

⚠️ Cấm kị thường gặp: cắt trục y ở biểu đồ cột; dùng 3D không cần thiết; chọn thang màu đánh lừa; bỏ bớt dữ liệu không thuận ý.

🟣 Lớp C · Nghiên cứu

Trực quan hóa trung thực là một phần của đạo đức nghiên cứu. Một hình gây hiểu lầm có thể khiến người đọc rút ra kết luận sai, ngay cả khi số liệu "đúng". Người bình duyệt (reviewer) thường soi rất kỹ phạm vi trục.

3. Thêm nhãn, tiêu đề, chú thích

🟢 Lớp A · Trực giác

Một biểu đồ tốt phải "tự kể chuyện": người xem nhìn là hiểu ngay, không cần hỏi. Vì vậy luôn thêm tiêu đề (title), tên trục (xlabel, ylabel), và chú thích (legend) khi có nhiều đường.

plt.xlabel("Ban")
plt.ylabel("Diem")
plt.ylim(0, 10)   # truc y bat dau tu 0
plt.legend(["Lop 6A"])

4. Bảng ghi nhớ: lệnh matplotlib

ViếtÝ nghĩa
plt.bar(x, y)Biểu đồ cột — so sánh nhóm
plt.plot(x, y)Biểu đồ đường — xu hướng
plt.scatter(x, y)Biểu đồ rải — quan hệ
plt.title(...)Thêm tiêu đề
plt.xlabel/ylabelĐặt tên trục ngang/dọc
plt.ylim(0, ...)Đặt phạm vi trục y (nên từ 0)
plt.show()Hiển biểu đồ

✎ Kiểm tra nhanh (5 câu)

1. Thư viện thường dùng để vẽ biểu đồ trong Python là:

Ta thường viết import matplotlib.pyplot as plt.

2. Để so sánh điểm của từng bạn (các nhóm riêng biệt), loại biểu đồ phù hợp nhất là:

Cột (bar) hợp nhất để so sánh giá trị giữa các nhóm riêng.

3. Để xem xu hướng nhiệt độ thay đổi theo các ngày, ta nên dùng:

Biểu đồ đường (plot) thể hiện thay đổi liên tục theo thời gian.

4. Hai cột là 50 và 52. Để biểu đồ cột trung thực, trục dọc nên:

Với biểu đồ cột, trục y bắt đầu từ 0 để không phóng đại chênh lệch.

5. Lệnh nào đặt tên cho trục dọc?

ylabel = y label = tên trục dọc; xlabel là trục ngang.

💻 Thực hành: vẽ biểu đồ thật

🔬 Phòng thí nghiệm matplotlib. Bấm ▶ Khởi động Python để nạp matplotlib (lần đầu mất vài giây), rồi ▶ Chạy. Biểu đồ sẽ hiện ngay bên dưới. Thử đổi số liệu, tiêu đề, hoặc phạm vi trục.

🔌 Python chưa khởi động. Bấm "Khởi động Python" để bắt đầu.

Biểu đồ kết quả
(biểu đồ và kết quả sẽ hiện ở đây sau khi chạy)
💡 Thử thách: Đổi ax.bar thành ax.plot (biểu đồ đường), rồi thử bỏ dòng set_ylim(0, 10) — bạn thấy biểu đồ thay đổi cảm giác như thế nào?