TÓM TẮT

Giới thiệu chung về histogram

Histogram, hay còn gọi là biểu đồ tần suất, là một trong những công cụ trực quan quan trọng nhất trong lĩnh vực thống kê và phân tích dữ liệu. Khác với biểu đồ cột thông thường, histogram không chỉ thể hiện giá trị của các quan sát mà còn thể hiện cách mà dữ liệu được phân bố trong không gian giá trị. Nhờ vào khả năng mô tả phân bố, histogram giúp chúng ta nhanh chóng nhận diện các đặc điểm như trung vị, độ lệch, độ phân tán, và thậm chí là các bất thường (outlier) trong tập dữ liệu.

Trong thực tiễn, histogram được áp dụng rộng rãi trong nhiều lĩnh vực: từ khoa học dữ liệu, kinh tế, y tế, kỹ thuật cho tới giáo dục. Việc nắm vững cách vẽ histogram không chỉ giúp bạn trình bày dữ liệu một cách chuyên nghiệp mà còn hỗ trợ quá trình đưa ra quyết định dựa trên dữ liệu một cách chính xác hơn.

Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từng bước một, về cách vẽ histogram, bao gồm:

  1. Khái niệm cơ bản và nguyên tắc hoạt động của histogram.
  2. Chuẩn bị dữ liệu: làm sạch, chuẩn hoá, và lựa chọn biến số.
  3. Xác định số lượng và độ rộng các bin (cột) – các phương pháp phổ biến.
  4. Thực hành vẽ histogram bằng các công cụ phổ biến: Excel, Python (Matplotlib, Seaborn, Plotly), R (ggplot2).
  5. Cách tùy chỉnh và làm đẹp histogram: màu sắc, nhãn, tiêu đề, trục, và các yếu tố thẩm mỹ.
  6. Phân tích và giải thích kết quả histogram: nhận diện hình dạng, phát hiện bất thường, so sánh nhiều nhóm dữ liệu.
  7. Một số lưu ý và lỗi thường gặp khi vẽ histogram và cách khắc phục.
  8. Ứng dụng thực tế và ví dụ minh hoạ.

Sau khi đọc xong, bạn sẽ có thể tự tin vẽ và phân tích histogram cho bất kỳ bộ dữ liệu nào, đồng thời tránh được những sai lầm phổ biến mà nhiều người mới bắt đầu thường gặp.

1. Histogram là gì? Nguyên tắc hoạt động

1.1 Định nghĩa

Histogram là biểu đồ cột (bar chart) trong đó các cột (gọi là bin hoặc bucket) đại diện cho các khoảng giá trị (range) của một biến số liên tục. Chiều cao của mỗi cột thể hiện số lượng (count) hoặc tần suất (frequency) của các quan sát nằm trong khoảng giá trị tương ứng.

1.2 Cách histogram hoạt động

Cách Vẽ Histogram
Cách Vẽ Histogram
  1. Phân chia dữ liệu thành các khoảng (bins).
  2. Mỗi bin là một khoảng giá trị liên tục, ví dụ: 0‑10), 10‑20), …
  3. Các bin thường có độ rộng bằng nhau, nhưng cũng có thể thay đổi tùy theo mục tiêu phân tích.

  4. Đếm số quan sát trong mỗi bin.

  5. Nếu dữ liệu có 1000 giá trị và bin 1 chứa 120 giá trị, thì chiều cao của cột tương ứng sẽ là 120 (hoặc 12% nếu hiển thị tần suất phần trăm).

  6. Vẽ biểu đồ.

  7. Trục hoành (x‑axis) biểu diễn các khoảng giá trị (bins).
  8. Trục tung (y‑axis) biểu diễn số lượng hoặc tần suất.

1.3 Lợi ích của histogram

  • Hiểu nhanh phân bố: Nhìn vào hình dạng (đối xứng, lệch trái, lệch phải, đa đỉnh) để đưa ra nhận định sơ bộ.
  • Phát hiện outlier: Các cột riêng lẻ ở đầu hoặc cuối biểu đồ thường là dấu hiệu của giá trị ngoại lệ.
  • So sánh: Có thể vẽ nhiều histogram trên cùng một trục để so sánh sự khác nhau giữa các nhóm (ví dụ: nam vs. nữ).

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

2.1 Thu thập dữ liệu

  • Đảm bảo dữ liệu được thu thập một cách hợp lệ và đại diện cho đối tượng nghiên cứu.
  • Đối với biến số liên tục (độ tuổi, chiều cao, thu nhập…), histogram là công cụ thích hợp.

2.2 Làm sạch dữ liệu

Công việc Mô tả Cách thực hiện
Loại bỏ giá trị thiếu (missing) Xóa hoặc thay thế các giá trị NaN. df.dropna(subset='col') (Python)
Xử lý giá trị ngoại lệ Kiểm tra và loại bỏ hoặc gán lại outlier nếu cần. Sử dụng IQR hoặc Z‑score.
Định dạng kiểu dữ liệu Đảm bảo cột là kiểu số (float/int). df'col' = pd.to_numeric(df'col')

2.3 Lựa chọn biến số

  • Chỉ vẽ histogram cho biến liên tục.
  • Nếu biến là rời rạc (số lần xuất hiện của một giá trị nguyên), bạn có thể dùng biểu đồ cột (bar chart) thay vì histogram.

2.4 Kiểm tra phân bố sơ bộ

Trước khi quyết định số bin, bạn có thể:

  • Xem thống kê mô tả (describe() trong Python, summary() trong R).
  • Vẽ một histogram nhanh với số bin mặc định để cảm nhận hình dạng.

3. Xác định số lượng và độ rộng các bin

Cách Vẽ Histogram
Cách Vẽ Histogram

Số bin ảnh hưởng mạnh mẽ đến cách chúng ta nhìn nhận dữ liệu. Quá ít bin sẽ làm mất chi tiết; quá nhiều bin sẽ gây nhiễu và làm mất tính tổng quan.

3.1 Các quy tắc phổ biến

Quy tắc Công thức Ghi chú
Sturges k = ⌈log₂(n) + 1⌉ Thích hợp cho dữ liệu gần chuẩn, n ≤ 200.
Rice k = ⌈2 n^(1/3)⌉ Đơn giản, phù hợp với dữ liệu lớn.
Scott bin_width = 3.5 σ / n^(1/3) Dựa trên độ lệch chuẩn σ, giảm bias khi dữ liệu không chuẩn.
Freedman‑Diaconis bin_width = 2 IQR / n^(1/3) Sử dụng Interquartile Range, thích hợp khi có outlier.
Doane k = 1 + log₂(n) + log₂(1 + |g₁| / σ_g₁) Mở rộng Sturges, có tính đến độ lệch (skewness).

Trong các công cụ như Python (numpy, pandas) hoặc R, các hàm vẽ histogram thường tích hợp các quy tắc này và cho phép người dùng chọn.

3.2 Lựa chọn thực tiễn

  • Bắt đầu với quy tắc Freedman‑Diaconis nếu dữ liệu có outlier hoặc không chuẩn.
  • Kiểm tra lại: Thay đổi số bin và quan sát sự thay đổi hình dạng để quyết định số bin cuối cùng.
  • Không nhất thiết phải cố định: Đối với các báo cáo, bạn có thể hiển thị 2‑3 histogram với số bin khác nhau để minh họa.

4. Thực hành vẽ histogram bằng các công cụ phổ biến

4.1 Vẽ histogram trong Microsoft Excel

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

  • Đặt dữ liệu trong một cột (ví dụ: A2:A101).

Bước 2: Mở “Insert” → “Histogram”

  • Trong Excel 2026 trở lên, chọn Insert → Statistical Chart → Histogram.

Bước 3: Tùy chỉnh số bin

  • Click vào biểu đồ → “Format Axis” → “Axis Options”.
  • Tại mục “Bin width”, nhập độ rộng mong muốn hoặc chọn “Number of bins”.

Bước 4: Thêm tiêu đề, nhãn trục

  • Click “Chart Title” → nhập tiêu đề.
  • Click vào trục X/Y → “Axis Titles” → nhập nhãn.

Bước 5: Định dạng màu sắc

  • Click vào cột → “Format Data Series” → chọn màu.

Mẹo nhanh:

  • Sử dụng “Data Analysis Toolpak” → “Histogram” để có bảng tần suất chi tiết và tự vẽ biểu đồ.

4.2 Vẽ histogram bằng Python – Matplotlib

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns # 1. Tạo dữ liệu mẫu
np.random.seed(42)
data = np.random.normal(loc=50, scale=15, size=1000) # Phân bố chuẩn # 2. Xác định số bin (Freedman‑Diaconis)
q75, q25 = np.percentile(data, 75 ,25)
iqr = q75 - q25
bin_width = 2 iqr / (len(data) (1/3))
bins = int(np.ceil((data.max() - data.min()) / bin_width)) # 3. Vẽ histogram
plt.figure(figsize=(10,6))
plt.hist(data, bins=bins, edgecolor='black', color='#4c72b0', alpha=0.7)
plt.title('Histogram of Sample Data', fontsize=16)
plt.xlabel('Giá trị')
plt.ylabel('Số quan sát')
plt.grid(axis='y', alpha=0.75)
plt.show()

Giải thích:

  • np.percentile tính Q1 và Q3 để lấy IQR.
  • bin_width dựa trên Freedman‑Diaconis.
  • edgecolor tạo viền cho mỗi cột, giúp biểu đồ rõ ràng.
  • alpha điều chỉnh độ trong suốt.

4.3 Vẽ histogram bằng Seaborn (dựa trên Matplotlib)

Cách Vẽ Histogram
Cách Vẽ Histogram
import seaborn as sns plt.figure(figsize=(10,6))
sns.histplot(data, kde=False, bins=bins, color='steelblue', edgecolor='white')
plt.title('Histogram with Seaborn', fontsize=16)
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.show()
  • kde=False tắt đường mật độ kernel (có thể bật để so sánh).
  • bins dùng cùng giá trị tính ở trên.

4.4 Vẽ histogram bằng Plotly (interactive)

import plotly.express as px
import pandas as pd df = pd.DataFrame({'value': data})
fig = px.histogram(df, x='value', nbins=bins, title='Interactive Histogram', labels={'value':'Giá trị'}, color_discrete_sequence='#ff7f0e')
fig.update_layout(bargap=0.1)
fig.show()
  • Plotly cho phép zoom, hover để xem chi tiết mỗi bin.

4.5 Vẽ histogram trong R – ggplot2

library(ggplot2) set.seed(42)
data <- rnorm(1000, mean = 50, sd = 15) # Tính số bin bằng Freedman‑Diaconis
iqr <- IQR(data)
bin_width <- 2 iqr / length(data)^(1/3)
bins <- ceiling((max(data) - min(data)) / bin_width) ggplot(data = data.frame(x = data), aes(x = x)) + geom_histogram(bins = bins, fill = "#4c72b0", colour = "black", alpha = 0.7) + labs(title = "Histogram in R (ggplot2)", x = "Giá trị", y = "Số quan sát") + theme_minimal()
  • geom_histogram(bins = bins) cho phép tùy chỉnh số bin.
  • theme_minimal() giúp biểu đồ sạch sẽ.

5. Tùy chỉnh và làm đẹp histogram

5.1 Màu sắc và phong cách

Thành phần Mô tả Gợi ý
Màu cột Đổi màu để phù hợp với bảng màu công ty hoặc để phân biệt nhóm. Sử dụng màu sắc trung tính (xám, xanh navy) cho báo cáo chính thức; màu sáng cho trình bày tương tác.
Độ trong suốt (alpha) Giúp nhìn được các cột chồng lên nhau khi so sánh nhiều histogram. alpha = 0.6 cho 2‑3 lớp.
Viền (edgecolor) Tăng độ rõ ràng, tránh cột “dính” nhau. edgecolor='black' hoặc edgecolor='white' tùy nền.
Kiểu đường viền Dùng dashed hoặc dotted để tạo điểm nhấn. linestyle='--' trong Matplotlib.

5.2 Nhãn và tiêu đề

  • Tiêu đề: Nên ngắn gọn, mô tả rõ ràng nội dung (ví dụ: “Phân bố tuổi của khách hàng”).
  • Nhãn trục X: Ghi rõ đơn vị (năm, kg, USD…).
  • Nhãn trục Y: “Số quan sát”, “Tần suất (%)”, “Tỷ lệ phần trăm”.
  • Giá trị trên cột: Thêm nhãn số lượng trực tiếp trên cột nếu số bin ít (<15) để dễ đọc.
# Ví dụ trong Matplotlib
plt.hist(data, bins=bins, edgecolor='black')
for rect in plt.gca().patches: height = rect.get_height() plt.gca().text(rect.get_x() + rect.get_width()/2, height + 2, f'{int(height)}', ha='center', va='bottom')

5.3 Thêm đường mật độ (KDE)

  • Đường mật độ giúp so sánh hình dạng phân bố với histogram.
  • Trong Seaborn: sns.histplot(..., kde=True).
  • Trong Matplotlib: plt.plot(np.linspace(...), scipy.stats.norm.pdf(...), ...).

5.4 Hiển thị tần suất phần trăm

Thay vì hiển thị số lượng, bạn có thể chuẩn hoá thành tỷ lệ phần trăm:

plt.hist(data, bins=bins, density=True, edgecolor='black')
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda y, _: '{:.0%}'.format(y)))

5.5 Vẽ nhiều histogram trên cùng một trục

Khi so sánh hai nhóm (ví dụ: nam vs. nữ):

plt.hist(male_data, female_data, bins=bins, label='Nam', 'Nữ', color='#1f77b4', '#ff7f0e', alpha=0.6, edgecolor='black')
plt.legend()
  • Đảm bảo bins giống nhau cho cả hai nhóm để so sánh hợp lý.

6. Phân tích và giải thích kết quả histogram

Cách Vẽ Histogram
Cách Vẽ Histogram

6.1 Nhận diện hình dạng (distribution shape)

Hình dạng Đặc điểm Ý nghĩa
Đối xứng (Symmetric) Cột ở hai phía trung tâm gần như giống nhau. Dữ liệu có trung bình và trung vị gần nhau, thường gần chuẩn.
Lệch trái (Left‑skewed, negative skew) Đuôi kéo dài về phía bên trái (cột phía trái cao hơn). Trung vị > trung bình, có thể có giá trị nhỏ bất thường.
Lệch phải (Right‑skewed, positive skew) Đuôi kéo dài về phía bên phải. Trung bình > trung vị, thường xuất hiện trong thu nhập, thời gian.
Đa đỉnh (Multimodal) Nhiều đỉnh cao. Dữ liệu có thể là hỗn hợp của nhiều nhóm (cluster).
Phân bố chuẩn (Normal) Đỉnh duy nhất, hình chuông. Thích hợp cho các mô hình thống kê truyền thống.

6.2 Kiểm tra outlier

  • Các cột độc lập ở đầu hoặc cuối, chứa ít quan sát (thường < 5% tổng).
  • Đánh giá xem outlier có phải là lỗi thu thập dữ liệu hay là giá trị thực sự.

6.3 So sánh nhiều nhóm

  • Khi có nhiều histogram chồng, quan sát sự chồng lấn để nhận diện nhóm nào chiếm tỷ lệ lớn hơn trong từng khoảng.
  • Có thể tính cumulative distribution (CDF) để so sánh tổng thể.

6.4 Sử dụng histogram để chọn mô hình

  • Nếu histogram gần chuẩn → có thể dùng Linear Regression, ANOVA.
  • Nếu lệch mạnh → cần log transformation, Box‑Cox, hoặc mô hình phi tuyến.

7. Lưu ý và lỗi thường gặp khi vẽ histogram

Lỗi Nguyên nhân Cách khắc phục
Số bin quá ít Dùng quy tắc Sturges cho dữ liệu lớn. Tăng số bin hoặc dùng Freedman‑Diaconis.
Số bin quá nhiều Độ rộng quá nhỏ, gây “rối mắt”. Tăng độ rộng bin, giảm số bin.
Biểu đồ không hiển thị giá trị âm Dữ liệu có giá trị âm nhưng trục X bắt đầu từ 0. Đặt range hoặc xmin thích hợp.
Cột chồng lấn không rõ Alpha quá cao khi so sánh nhiều nhóm. Giảm alpha, hoặc vẽ histogram riêng và dùng overlay.
Không hiển thị nhãn trục Quên xlabel/ylabel. Thêm plt.xlabel() và plt.ylabel().
Độ lệch do outlier Outlier làm kéo dài bin. Loại bỏ hoặc tạo bin riêng cho outlier.
Mất dữ liệu khi chuẩn hoá Khi dùng density=True mà không chuyển sang tần suất phần trăm. Đặt plt.gca().yaxis.set_major_formatter(…) để hiển thị %.

8. Ứng dụng thực tế và ví dụ minh hoạ

8.1 Ví dụ 1: Phân bố tuổi khách hàng trong một cửa hàng bán lẻ

import pandas as pd
import matplotlib.pyplot as plt # Giả sử df chứa cột 'age'
df = pd.read_csv('customers.csv')
age = df'age'.dropna() plt.figure(figsize=(8,5))
plt.hist(age, bins=range(0, 101, 5), edgecolor='black', color='#2ca02c')
plt.title('Phân bố tuổi khách hàng')
plt.xlabel('Tuổi')
plt.ylabel('Số khách')
plt.grid(axis='y', alpha=0.75)
plt.show()

Kết quả: Histogram cho thấy đỉnh ở khoảng 25‑34 tuổi, lệch nhẹ sang phải, cho thấy đa số khách hàng trẻ tuổi.

Cách Vẽ Histogram
Cách Vẽ Histogram

8.2 Ví dụ 2: So sánh thu nhập nam và nữ

male_income = dfdf'gender'=='Male''income'
female_income = dfdf'gender'=='Female''income' bins = np.arange(0, 200001, 10000) # mỗi bin 10k USD plt.figure(figsize=(10,6))
plt.hist(male_income, female_income, bins=bins, label='Nam','Nữ', color='#1f77b4', '#ff7f0e', alpha=0.6, edgecolor='black')
plt.title('So sánh thu nhập nam và nữ')
plt.xlabel('Thu nhập (USD)')
plt.ylabel('Số người')
plt.legend()
plt.show()

Phân tích: Đường cong của nam có đỉnh cao hơn và dịch sang phải, cho thấy thu nhập trung bình của nam lớn hơn nữ trong mẫu này.

8.3 Ví dụ 3: Kiểm tra phân bố thời gian phản hồi của hệ thống (log‑scale)

response_time = np.random.exponential(scale=2, size=5000) # thời gian (giây) plt.figure(figsize=(9,5))
plt.hist(response_time, bins=50, log=True, edgecolor='gray', color='purple')
plt.title('Phân bố thời gian phản hồi (log scale)')
plt.xlabel('Thời gian (giây)')
plt.ylabel('Số lượng (log scale)')
plt.show()

Giải thích: Sử dụng trục Y log giúp hiển thị được cả các giá trị lớn và rất lớn mà không làm mất chi tiết ở phần đầu.

9. Tổng kết

Histogram là một công cụ mạnh mẽ giúp chúng ta hiểu nhanh và trực quan cách dữ liệu được phân bố. Việc vẽ histogram không chỉ dừng lại ở việc “đưa ra một biểu đồ”, mà còn bao gồm:

  1. Chuẩn bị dữ liệu sạch và phù hợp.
  2. Lựa chọn số bin hợp lý dựa trên quy tắc thống kê và cảm nhận thực tế.
  3. Sử dụng công cụ phù hợp (Excel, Python, R…) để vẽ và tùy chỉnh.
  4. Phân tích hình dạng, outlier và so sánh nhóm để rút ra những nhận định có giá trị.
  5. Tránh các lỗi thường gặp như bin quá ít/phải, màu sắc không rõ ràng, hoặc thiếu nhãn.

Khi áp dụng những nguyên tắc và kỹ thuật trên, bạn sẽ tạo ra những histogram chuyên nghiệp, đầy đủ thông tin và thu hút người xem, đồng thời cung cấp nền tảng vững chắc cho các bước phân tích dữ liệu tiếp theo như kiểm định thống kê, mô hình hoá, hay machine learning.

Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn toàn diện, từ khái niệm cơ bản đến thực hành nâng cao, giúp bạn tự tin vẽ và phân tích histogram cho bất kỳ bộ dữ liệu nào. Chúc bạn thành công trong hành trình khám phá dữ liệu!

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 *