TÓM TẮT

1. Giới thiệu chung về Boxplot

Boxplot, còn được gọi là biểu đồ hộp hay biểu đồ hộp và râu (box‑and‑whisker plot), là một công cụ trực quan mạnh mẽ giúp người dùng hiểu nhanh về phân phối của một tập dữ liệu. Nhờ khả năng tóm tắt các đặc trưng quan trọng như trung vị, các phần tư (quartile), giá trị ngoại lệ (outlier) và phạm vi biến thiên, boxplot thường được sử dụng trong thống kê mô tả, phân tích dữ liệu khám phá (EDA) và so sánh giữa các nhóm.

1.1 Lịch sử và nguồn gốc

Boxplot được giới thiệu lần đầu tiên bởi John W. Tukey trong cuốn sách “Exploratory Data Analysis” (1977). Tukey muốn tạo ra một biểu đồ đơn giản nhưng vẫn truyền tải đầy đủ thông tin về trung vị và độ phân tán, đồng thời giúp người dùng phát hiện các giá trị bất thường một cách nhanh chóng.

1.2 Khi nào nên sử dụng boxplot?

  • So sánh nhiều nhóm: Khi bạn có nhiều tập hợp dữ liệu (ví dụ: chiều cao của nam và nữ) và muốn so sánh mức độ trung vị, độ lệch và mức độ hiện diện của các giá trị ngoại lệ.
  • Phân tích phân phối: Khi muốn nắm bắt nhanh hình dạng phân phối (đối xứng, lệch trái/phải) mà không cần vẽ histogram chi tiết.
  • Kiểm tra giả thuyết: Khi cần kiểm tra giả thuyết về đồng nhất phương sai hoặc sự khác biệt giữa các nhóm.

2. Các thành phần cơ bản của boxplot

Để vẽ một boxplot chuẩn, bạn cần hiểu rõ các thành phần sau:

Thành phần Ký hiệu Ý nghĩa
Hộp (Box) – Phần trung tâm của biểu đồ, chứa 50% dữ liệu nằm giữa Q1 và Q3.
Đường giữa (Median line) – Đường thẳng nằm trong hộp, biểu thị trung vị (Q2).
Râu (Whiskers) – Hai đoạn line mở rộng từ hộp tới giá trị tối đa/minimum không phải là ngoại lệ.
Giá trị ngoại lệ (Outliers) • hoặc ○ Các điểm dữ liệu nằm ngoài khoảng xác định bởi râu, thường được đánh dấu bằng dấu chấm hoặc vòng tròn.
Mốc (Notches) (tùy chọn) – Khoảng tin cậy cho trung vị, giúp so sánh trung vị giữa các nhóm.

2.1 Phân vị (Quartiles)

  • Q1 (25th percentile): Giá trị mà 25% dữ liệu nhỏ hơn hoặc bằng nó.
  • Q2 (Median, 50th percentile): Giá trị trung vị, chia dữ liệu thành hai nửa bằng nhau.
  • Q3 (75th percentile): Giá trị mà 75% dữ liệu nhỏ hơn hoặc bằng nó.

2.2 Khoảng IQR (Inter‑Quartile Range)

Cách Vẽ Boxplot
Cách Vẽ Boxplot

IQR = Q3 – Q1. Đây là độ rộng của hộp và là thước đo chính cho độ phân tán của dữ liệu. Các giá trị ngoại lệ thường được xác định dựa trên IQR:

  • Giá trị ngoại lệ thấp: < Q1 – 1.5 × IQR
  • Giá trị ngoại lệ cao: > Q3 + 1.5 × IQR

3. Chuẩn bị dữ liệu trước khi vẽ

3.1 Thu thập và làm sạch dữ liệu

  1. Kiểm tra missing values: Loại bỏ hoặc thay thế bằng giá trị trung bình, trung vị tùy mục đích.
  2. Kiểm tra outliers: Dù boxplot sẽ hiển thị chúng, bạn nên xác định xem chúng có phải là lỗi thu thập dữ liệu hay không.
  3. Chuẩn hoá (Normalization) hoặc chuẩn hoá (Standardization): Đối với dữ liệu có đơn vị khác nhau, có thể cần chuẩn hoá để so sánh hợp lý.

3.2 Định dạng dữ liệu

  • Dạng vector (một chiều): Dùng cho một boxplot duy nhất.
  • Dạng dataframe (nhiều cột): Mỗi cột thường đại diện cho một nhóm, thích hợp cho việc vẽ nhiều boxplot cạnh nhau.

4. Cách vẽ boxplot bằng các công cụ phổ biến

4.1 Vẽ boxplot bằng Python (matplotlib và seaborn)

4.1.1 Sử dụng matplotlib

import matplotlib.pyplot as plt
import numpy as np # Tạo dữ liệu mẫu
np.random.seed(0)
data1 = np.random.normal(loc=50, scale=10, size=200)
data2 = np.random.normal(loc=60, scale=15, size=200) # Vẽ boxplot
plt.boxplot(data1, data2, vert=True, # Hộp đứng patch_artist=True, # Đổ màu labels='Nhóm A', 'Nhóm B') plt.title('Boxplot so sánh Nhóm A và Nhóm B')
plt.ylabel('Giá trị')
plt.grid(True, axis='y', linestyle='--', alpha=0.7)
plt.show()

4.1.2 Sử dụng seaborn (đồ họa cao cấp)

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt # Tạo dataframe
df = pd.DataFrame({ 'Giá trị': np.concatenate(data1, data2), 'Nhóm': 'A'len(data1) + 'B'len(data2)
}) # Vẽ boxplot với seaborn
sns.boxplot(x='Nhóm', y='Giá trị', data=df, palette='Pastel1', notch=True) # Thêm notch để hiển thị khoảng tin cậy trung vị plt.title('Boxplot với Notch - So sánh Nhóm A và B')
plt.show()

Lưu ý: Seaborn tự động xử lý outliers và hiển thị chúng bằng dấu chấm. Tham số notch=True giúp hiển thị khoảng tin cậy cho trung vị, hữu ích khi so sánh.

Cách Vẽ Boxplot
Cách Vẽ Boxplot

4.2 Vẽ boxplot bằng R (ggplot2)

library(ggplot2) # Tạo dữ liệu mẫu
set.seed(123)
data <- data.frame( Nhóm = rep(c("A", "B"), each = 200), Giá_trị = c(rnorm(200, mean = 50, sd = 10), rnorm(200, mean = 60, sd = 15))
) # Vẽ boxplot
ggplot(data, aes(x = Nhóm, y = Giá_trị, fill = Nhóm)) + geom_boxplot(notch = TRUE, outlier.shape = 16, outlier.colour = "red") + labs(title = "Boxplot so sánh Nhóm A và B", x = "Nhóm", y = "Giá trị") + theme_minimal()
  • notch = TRUE: Thêm notch cho trung vị.
  • outlier.shape và outlier.colour: Tùy chỉnh hiển thị giá trị ngoại lệ.

4.3 Vẽ boxplot bằng Excel

  1. Chuẩn bị dữ liệu: Đặt các nhóm dữ liệu vào các cột riêng biệt.
  2. Chọn Insert → Insert Statistic Chart → Box and Whisker.
  3. Tùy chỉnh:
  4. Click chuột phải vào biểu đồ → Format Chart Area → Series Options để thay đổi màu, độ rộng.
  5. Sử dụng “Chart Elements” để thêm tiêu đề, nhãn trục và hiển thị outliers.

4.4 Vẽ boxplot bằng Power BI

  1. Load dữ liệu vào Power BI Desktop.
  2. Chọn Visualizations → Box and Whisker chart (cần cài đặt custom visual từ marketplace nếu không có).
  3. Kéo trường dữ liệu vào Axis (nhóm) và Values (giá trị).
  4. Tùy chỉnh: Thêm tiêu đề, định dạng màu, hiển thị outliers.

5. Đọc và giải thích boxplot

5.1 Đánh giá trung vị và độ lệch

  • Trung vị ở vị trí trung tâm: Nếu median line gần giữa Q1 và Q3, phân phối gần đối xứng.
  • Nếu median lệch về phía trên (gần Q3): Dữ liệu có xu hướng lệch trái (skewed left).
  • Nếu median lệch về phía dưới (gần Q1): Dữ liệu lệch phải (skewed right).

5.2 Độ rộng của hộp (IQR)

  • Hộp rộng: Độ biến thiên lớn, dữ liệu phân tán rộng.
  • Hộp hẹp: Dữ liệu tập trung, độ biến thiên nhỏ.

5.3 Râu (Whiskers)

  • Râu dài: Cho thấy phạm vi giá trị không phải ngoại lệ rộng.
  • Râu ngắn: Phạm vi hẹp, ít giá trị nằm ngoài IQR.

5.4 Giá trị ngoại lệ (Outliers)

Cách Vẽ Boxplot
Cách Vẽ Boxplot
  • Nhiều outliers: Có thể gây ảnh hưởng lớn đến các thống kê trung bình, cần xem xét loại bỏ hoặc phân tích riêng.
  • Outliers phía trên/bên trái: Thường là dữ liệu bất thường, có thể do lỗi thu thập hoặc hiện tượng thực tế.

5.5 Notches (khoảng tin cậy cho trung vị)

  • Khi hai notch không chồng lên nhau, trung vị của hai nhóm có thể khác nhau một cách có ý nghĩa thống kê (độ tin cậy 95%).

6. Các biến thể và nâng cao

6.1 Boxplot đa chiều (Grouped boxplot)

Khi muốn so sánh nhiều nhóm theo hai yếu tố (ví dụ: giới tính và khu vực), bạn có thể tạo grouped boxplot:

sns.boxplot(x='Khu_vực', y='Giá_trị', hue='Giới_tính', data=df, palette='Set2')

6.2 Violin plot – Kết hợp boxplot và KDE

Violin plot hiển thị dạng mật độ (Kernel Density Estimate) cùng với boxplot, giúp nhìn rõ hơn về hình dạng phân phối.

sns.violinplot(x='Nhóm', y='Giá trị', data=df, inner='box')

6.3 Boxplot với dữ liệu thời gian (Time series)

Cách Vẽ Boxplot
Cách Vẽ Boxplot

Khi dữ liệu được phân theo thời gian (tháng, năm), bạn có thể vẽ boxplot theo từng khoảng thời gian để quan sát xu hướng biến thiên.

df'Tháng' = pd.to_datetime(df'Ngày').dt.to_period('M')
sns.boxplot(x='Tháng', y='Giá trị', data=df)

6.4 Tùy chỉnh râu (whisker) theo quy tắc khác

Mặc định, râu dựa trên 1.5 × IQR. Tuy nhiên, trong một số ngành (ví dụ: tài chính), người ta dùng range toàn bộ (min‑max) hoặc percentile (5th‑95th). Trong matplotlib:

plt.boxplot(data, whis=5, 95) # Râu từ 5th đến 95th percentile

7. Thực hành: Phân tích dữ liệu thực tế

7.1 Dữ liệu: Điểm thi Toán của 3 lớp

Giả sử chúng ta có 3 lớp (A, B, C) với điểm thi Toán của 100 học sinh mỗi lớp. Dưới đây là quy trình phân tích bằng boxplot.

Bước 1: Chuẩn bị dữ liệu (Python)

import pandas as pd
import numpy as np np.random.seed(42)
data = pd.DataFrame({ 'Lop': np.repeat('A','B','C', 100), 'Diem': np.concatenate( np.random.normal(70, 8, 100), # Lớp A np.random.normal(65, 12, 100), # Lớp B np.random.normal(75, 7, 100) # Lớp C )
})

Bước 2: Vẽ boxplot

import seaborn as sns
import matplotlib.pyplot as plt sns.boxplot(x='Lop', y='Diem', data=data, palette='coolwarm', notch=True)
plt.title('So sánh điểm Toán giữa 3 lớp')
plt.show()

Bước 3: Đọc kết quả

  • Lớp C: Hộp cao và hẹp → trung bình cao, độ biến thiên thấp.
  • Lớp B: Hộp rộng, median thấp hơn → hiệu suất chung kém hơn, biến thiên lớn.
  • Lớp A: Trung vị khoảng 70, râu dài ở phía trên → có một số học sinh xuất sắc.

Bước 4: Kiểm tra outliers

outliers = data.groupby('Lop').apply( lambda g: g(g'Diem' < g'Diem'.quantile(0.25) - 1.5(g'Diem'.quantile(0.75)-g'Diem'.quantile(0.25))) | (g'Diem' > g'Diem'.quantile(0.75) + 1.5(g'Diem'.quantile(0.75)-g'Diem'.quantile(0.25)))
)
print(outliers)

Kết quả cho thấy một số học sinh lớp A và C có điểm ngoại lệ cao (≥ 95), có thể là học sinh tài năng.

Cách Vẽ Boxplot
Cách Vẽ Boxplot

7.2 Dữ liệu: Giá nhà theo khu vực

Giả sử dữ liệu về giá nhà (triệu đồng) ở 4 khu vực: Bắc, Nam, Trung, Tây.

df_house = pd.read_csv('gia_nha.csv') # cột: Khu_vuc, Gia sns.boxplot(x='Khu_vuc', y='Gia', data=df_house, palette='Set3', showfliers=False) # ẩn outliers để nhìn xu hướng tổng thể
plt.title('Giá nhà theo khu vực')
plt.show()
  • Khu vực Bắc: Hộp cao, râu dài → giá trung bình cao nhưng biến động lớn.
  • Khu vực Trung: Hộp thấp, râu ngắn → giá ổn định, ít ngoại lệ.

8. Các lỗi thường gặp khi vẽ boxplot và cách khắc phục

Lỗi Nguyên nhân Cách khắc phục
Không hiện outliers Tham số showfliers=False (matplotlib) hoặc outlier.shape=None (seaborn). Đặt lại tham số để hiển thị hoặc kiểm tra dữ liệu.
Boxplot bị lệch trục Dữ liệu không đồng nhất (có giá trị rất lớn so với phần còn lại). Xem xét log‑scale hoặc loại bỏ/biến đổi giá trị cực đoan.
Không có nhãn trục Quên thêm plt.xlabel, plt.ylabel hoặc labs trong ggplot. Thêm nhãn mô tả rõ ràng.
Râu quá ngắn hoặc không hiện Số quan sát quá ít (<5) hoặc whis được đặt quá chặt. Tăng số quan sát hoặc điều chỉnh whis.
Notch không xuất hiện Thư viện không hỗ trợ (ví dụ: matplotlib version cũ). Cập nhật phiên bản hoặc dùng seaborn/ggplot.

9. Khi nào nên tránh sử dụng boxplot?

  • Dữ liệu có kích thước mẫu rất nhỏ (<10): Các phân vị không ổn định, boxplot có thể gây hiểu lầm.
  • Phân phối có nhiều mode (đa đỉnh): Boxplot không thể hiện chi tiết các mode; nên dùng violin plot hoặc histogram.
  • Yêu cầu độ chính xác cao về giá trị ngoại lệ: Boxplot chỉ đưa ra một cách ước lượng; cần kiểm tra chi tiết bằng phương pháp thống kê khác.

10. Tổng kết

Boxplot là một công cụ cực kỳ hữu ích trong việc tóm tắt và so sánh phân phối dữ liệu. Từ việc hiểu rõ các thành phần cơ bản (quartile, IQR, outlier) đến việc áp dụng các công cụ phần mềm như Python (matplotlib, seaborn), R (ggplot2), Excel, Power BI, bạn có thể nhanh chóng tạo ra những biểu đồ trực quan, hỗ trợ quyết định và phát hiện bất thường.

Các bước quan trọng để vẽ boxplot chuẩn:

  1. Chuẩn bị dữ liệu sạch: Xử lý missing values và outliers (nếu cần).
  2. Tính toán các phân vị: Q1, Q2, Q3 và IQR.
  3. Chọn công cụ vẽ: Python, R, Excel tùy nhu cầu.
  4. Tùy chỉnh hiển thị: Màu sắc, notch, outlier marker.
  5. Đọc và giải thích: Trung vị, độ lệch, độ rộng hộp, râu và outliers.
  6. Kiểm tra lại: Đảm bảo không có lỗi hiển thị và biểu đồ phản ánh đúng dữ liệu.

Bằng việc nắm vững “cách vẽ boxplot”, bạn sẽ có thêm một vũ khí mạnh mẽ trong tay để khai thác dữ liệu, truyền tải thông tin một cách ngắn gọn và hiệu quả. Hãy thực hành trên các bộ dữ liệu thực tế, từ thống kê học sinh, giá bất động sản, tới các chỉ số tài chính, để cảm nhận sức mạnh của boxplot trong việc khám phá và truyền đạt thông tin.

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *