Trong thời đại dữ liệu, việc phân tích kết quả học tập của sinh viên không chỉ dừng lại ở việc thống kê đơn giản mà còn cần đến trực quan hóa để phát hiện xu hướng, sự khác biệt giữa các nhóm và hỗ trợ ra quyết định giáo dục. Python cùng thư viện Seaborn cung cấp một công cụ mạnh mẽ để thực hiện điều này. Nhờ khả năng vẽ biểu đồ đẹp và dễ dùng, bạn có thể tạo ra những báo cáo sinh động, giúp giáo viên và quản lý giáo dục hiểu rõ hơn về dữ liệu học sinh.
Nếu bạn đang thực hiện Phân tích dữ liệu điểm danh sinh viên theo thời gian hay cần Tạo phân tích dữ liệu cho đồ án quản lý sinh viên, bài viết này sẽ hướng dẫn bạn từng bước từ tải dữ liệu, xử lý đến trực quan hóa bằng Python. Với thư viện Pandas và Seaborn, bạn có thể tạo ra những biểu đồ sinh động, trực quan ngay cả khi mới bắt đầu học lập trình.
Tập dữ liệu: StudentsPerformance.csv
Để thực hiện phân tích, chúng ta sẽ sử dụng dataset “Students Performance” nổi tiếng, được cung cấp trên Kaggle. Bộ dữ liệu này chứa thông tin về kết quả học tập của 1.000 học sinh, bao gồm điểm số các môn Toán, Đọc hiểu và Viết, cùng các yếu tố liên quan như giới tính, chủng tộc, mức học vấn của phụ huynh, chế độ ăn trưa và khóa học chuẩn bị kiểm tra. Đây là bộ dữ liệu lý tưởng để thực hành trực quan hóa dữ liệu vì nó vừa đơn giản, vừa bao quát nhiều biến phân loại và liên tục.
Bạn có thể tải dữ liệu tại đây:
👉 Students Performance Dataset trên Kaggle
Sau khi tải về, bạn sẽ nhận được file StudentsPerformance.csv gồm các cột:
| Cột | Ý nghĩa |
|---|---|
| gender | Giới tính học sinh |
| race/ethnicity | Chủng tộc / nhóm dân tộc |
| parental level of education | Mức học vấn cao nhất của phụ huynh |
| lunch | Chế độ ăn trưa (chuẩn hoặc miễn phí) |
| test preparation course | Học sinh có tham gia khóa học chuẩn bị thi hay không |
| math score | Điểm môn Toán (0–100) |
| reading score | Điểm môn Đọc hiểu (0–100) |
| writing score | Điểm môn Viết (0–100) |
Bộ dữ liệu này hoàn toàn miễn phí và dễ tải. Bạn chỉ cần đăng nhập vào Kaggle, nhấn nút Download để tải file CSV về và lưu cùng thư mục với project Python để sử dụng.
Nạp và khám phá dữ liệu
Trước khi trực quan hóa, bạn cần hiểu dữ liệu: cấu trúc, loại biến, và xem xét dữ liệu có thiếu hay bất thường không. Khám phá dữ liệu còn giúp xác định những biến đáng chú ý để phân tích sâu hơn.
Hãy dùng pandas để đọc dữ liệu và kiểm tra thông tin cơ bản.
import pandas as pd
df = pd.read_csv('StudentsPerformance.csv')
print(df.head())
print(df.info())
print(df.describe())
Ở đây, bạn sẽ thấy các cột như math score, reading score, writing score, cùng các biến phân loại như gender, race/ethnicity, parental level of education, lunch, test preparation course. Việc hiểu rõ biến là điều kiện tiên quyết để lựa chọn biểu đồ phù hợp và xử lý dữ liệu đúng cách trước khi phân tích sâu.
Phân phối điểm từng môn
Tiếp theo, ta nên quan sát phân phối điểm của từng môn để xem dữ liệu có xu hướng Gaussian, lệch trái, phải, hay có nhiều outlier không. Đây là bước quan trọng để xác định mô hình phân tích hoặc tiếp tục tiền xử lý như normalization nếu cần.
Dùng Seaborn để vẽ biểu đồ histogram + KDE kết hợp:
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(15,4))
for i, subject in enumerate(['math score', 'reading score', 'writing score']):
plt.subplot(1,3,i+1)
sns.histplot(df[subject], kde=True, bins=20)
plt.title(subject)
plt.tight_layout()
plt.show()
Kết quả giúp bạn dễ dàng nhận thấy môn Toán có phân phối khác so với Đọc/Viết, từ đó lựa chọn phương pháp phân tích phù hợp hơn như log-transform hoặc xác định mức điều chỉnh.
So sánh điểm theo giới tính và chuẩn bị thi
Ở bước này, mục tiêu là tìm hiểu sự khác biệt giữa học sinh nam và nữ, cũng như giữa nhóm đã hoàn thành khóa chuẩn bị (test preparation) và chưa. Thông tin này giúp bạn hiểu tác động của các yếu tố nền tảng lên hiệu quả học tập.
Chúng ta sẽ dùng boxplot kết hợp violinplot để nắm rõ phân phối điểm:
plt.figure(figsize=(12,8))
sns.boxplot(x='gender', y='math score', data=df)
sns.violinplot(x='gender', y='math score', data=df, inner=None, color=".8")
plt.title('So sánh điểm Toán theo giới tính')
plt.show()
plt.figure(figsize=(12,8))
sns.boxplot(x='test preparation course', y='math score', data=df)
sns.violinplot(x='test preparation course', y='math score', data=df, inner=None, color=".8")
plt.title('So sánh điểm Toán theo khóa chuẩn bị thi')
plt.show()
Qua biểu đồ, bạn dễ dàng nhận thấy phân phối điểm của từng nhóm sinh viên khác nhau. Ví dụ, nữ thường có điểm Toán cao hơn, hoặc nhóm đã học khóa chuẩn bị có phân phối tập trung hơn, ít dùng hộp lớn.
Mối tương quan giữa các môn học
Một cách để khám phá mối quan hệ giữa điểm Toán – Đọc – Viết là dùng heatmap ma trận tương quan. Điều này giúp phát hiện xem môn nào tác động mạnh đến môn khác.

