CodeGym /Khóa học Java /Python SELF VI /Xây dựng biểu đồ histogram để trực quan hóa phân phối dữ ...

Xây dựng biểu đồ histogram để trực quan hóa phân phối dữ liệu

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Cơ bản về biểu đồ histogram

Nếu bạn từng nhìn vào một bàn tiệc buffet và cố gắng quyết định loại món ăn vặt nào chiếm ưu thế nhất, thì bạn đã phần nào hiểu về phân phối dữ liệu rồi. Trong lập trình, chúng ta sử dụng biểu đồ histogram để nhận diện các quy luật trong dữ liệu mà thoạt nhìn có thể không rõ ràng. Histogram giúp phân tích trực quan cách dữ liệu được phân phối qua các danh mục hoặc khoảng giá trị nào đó. Hãy bắt đầu thôi!

Histogram là gì?

Histogram là một loại biểu đồ giúp trực quan hóa phân phối dữ liệu thông qua các khoảng hoặc "bin" (đôi khi gọi là "giỏ" hoặc "thùng"). Ví dụ, nếu bạn muốn biết có bao nhiêu lần học sinh đạt được một số điểm nhất định trong bài kiểm tra, thì biểu đồ histogram là cách tốt nhất để minh họa điều đó.

Các tham số chính của histogram

Histogram được tạo từ các cột (bin), trong đó mỗi cột biểu thị số lượng giá trị nằm trong khoảng tương ứng. Các tham số chính của histogram:

  • Bin (bins): số lượng khoảng mà phạm vi dữ liệu được chia thành.
  • Màu sắc và viền (coloredgecolor): xác định giao diện của các cột.
  • Phạm vi (range): xác định giá trị tối thiểu và tối đa hiển thị.
  • Mật độ (density): nếu đặt True, histogram sẽ được chuẩn hóa sao cho tổng diện tích của cột bằng một.

Sử dụng hàm hist() để tạo histogram

Thư viện Matplotlib có một hàm gọi là hist(), giúp đơn giản hóa việc tạo histogram. Hãy xem một ví dụ đơn giản:

Python

import matplotlib.pyplot as plt
import numpy as np

# Tạo tập dữ liệu
data = np.random.normal(0, 1, 1000)

# Tạo histogram
plt.hist(data, bins=30, alpha=0.7, color='blue')
plt.title('Histogram phân phối dữ liệu')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.show()

Ở đây chúng ta tạo tập dữ liệu bằng cách sử dụng hàm np.random.normal(), tạo ra phân phối chuẩn. Chúng ta chia dữ liệu thành 30 bin và đặt độ trong suốt của các cột bằng tham số alpha để trực quan hơn.

2. Tùy chỉnh bin và phong cách biểu đồ

Xác định số lượng và kích thước bin

Số lượng và kích thước bin có thể ảnh hưởng đáng kể đến cách diễn giải histogram. Bin quá lớn có thể làm mất đi chi tiết quan trọng, trong khi bin quá nhỏ có thể làm biểu đồ trở nên rối và khó hiểu.

Ví dụ thực tế:

Python

# Thay đổi số lượng và kích thước bin
plt.hist(data, bins=10, color='green', edgecolor='black')
plt.title('Histogram với 10 bin')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.show()

plt.hist(data, bins=50, color='red', edgecolor='black')
plt.title('Histogram với 50 bin')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')
plt.show()

Hãy xem cách biểu đồ thay đổi khi sử dụng 10 và 50 bin. Thấy sự khác biệt không? Đây chính là trường hợp mà kích thước rất quan trọng!

Ví dụ thực tế về thay đổi tham số histogram

Histogram có thể được tùy biến không chỉ dựa trên số lượng bin mà còn bằng cách thay đổi màu sắc, độ trong suốt, và thậm chí cả kiểu cột. Đây là vài ví dụ khác:

Python

# Các tham số tùy chỉnh khác
plt.hist(data, bins=30, density=True, color='purple', edgecolor='white', linestyle='dashed')
plt.title('Histogram mật độ với kiểu dáng thay đổi')
plt.xlabel('Giá trị')
plt.ylabel('Mật độ')
plt.grid(True)
plt.show()

Trong ví dụ này, chúng ta thêm tham số density=True, chuẩn hóa histogram sao cho diện tích dưới đồ thị bằng 1. Điều này có thể rất hữu ích khi muốn phân tích mật độ xác suất phân phối.

3. Ví dụ sử dụng histogram

Histogram được ứng dụng trong nhiều lĩnh vực khác nhau, từ phân tích dữ liệu tài chính đến thí nghiệm vật lý. Hãy xem cách sử dụng histogram với một tập dữ liệu thực tế.

Tạo histogram với tập dữ liệu thực tế

Hãy tưởng tượng rằng chúng ta có một tập dữ liệu đại diện cho nhiệt độ trung bình hàng ngày trong một năm. Chúng ta muốn phân tích xem nhiệt độ thường nằm trong khoảng nào.

Python

# Dữ liệu nhiệt độ (đơn giản hóa cho ví dụ)
temperatures = [15, 16, 15, 14, 19, 22, 24, 25, 17, 18, 15, 16, 23, 24, 21, 19, 18, 20, 22, 25, 26, 27]

# Tạo histogram
plt.hist(temperatures, bins=5, color='navy', edgecolor='black')
plt.title('Histogram nhiệt độ')
plt.xlabel('Nhiệt độ (°C)')
plt.ylabel('Tần suất')
plt.show()

Trong ví dụ này, chúng ta sử dụng 5 bin để tìm hiểu cách dữ liệu được phân phối. Histogram cho thấy rằng hầu hết nhiệt độ nằm trong khoảng từ 15 đến 20°C.

So sánh phân phối trên cùng một histogram

Đôi khi bạn cần so sánh phân phối của nhiều tập dữ liệu trên cùng một histogram. Trong Matplotlib, bạn có thể chồng các histogram bằng cách sử dụng tham số alpha (độ trong suốt).

Ví dụ 3: So sánh phân phối

Python

import matplotlib.pyplot as plt

# Tạo dữ liệu
data1 = [5, 10, 10, 15, 15, 20, 25, 30, 30, 35, 40]
data2 = [5, 7, 9, 10, 11, 13, 15, 17, 19, 20, 25]

# Tạo các histogram chồng lấp
plt.hist(data1, bins=5, color="blue", alpha=0.5, label="Tập 1")
plt.hist(data2, bins=5, color="green", alpha=0.5, label="Tập 2")
plt.xlabel("Giá trị")
plt.ylabel("Tần suất")
plt.title("So sánh hai phân phối")
plt.legend()
plt.show()

Trong ví dụ này, chúng ta sử dụng tham số alpha=0.5 cho từng histogram, điều này làm các cột trở nên trong suốt, cho phép so sánh trực quan các giao nhau giữa các phân phối.

Mẹo hữu ích khi làm việc với histogram

  • Lựa chọn số bin tối ưu: Chọn số lượng bin dựa trên kích thước và đặc điểm của dữ liệu. Số lượng bin quá lớn hoặc quá nhỏ có thể làm sai lệch phân phối.
  • So sánh phân phối: Sử dụng độ trong suốt (alpha) để chồng các histogram và so sánh phân phối.
  • Thêm lưới: Lưới giúp dễ dàng diễn giải dữ liệu hơn. Có thể thêm bằng hàm plt.grid(True).
  • Tham số density: Sử dụng density=True để hiển thị dữ liệu dưới dạng mật độ xác suất, rất hữu ích khi so sánh các phân phối.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION