Hướng Dẫn Thực Hành NumPy Cho Phân Tích Dữ Liệu

NumPy là thư viện nền tảng cho tính toán số trong Python, cung cấp cấu trúc mảng đa chiều hiệu năng cao (ndarray) cùng hàng loạt hàm toán học tối ưu. Dưới đây là tổng quan thực hành về các khái niệm cốt lõi.

Tạo mảng đa chiều

import numpy as np

# Khởi tạo từ danh sách
matrix_a = np.array([[1, 2], [3, 4], [5, 6]])  # mảng 3x2

# Các hàm tiện ích
zeros_3d = np.zeros((2, 3, 4))          # mảng 3 chiều toàn 0
ones_like_a = np.ones_like(matrix_a)   # giống shape matrix_a, toàn 1
identity_mat = np.eye(4)               # ma trận đơn vị 4x4
sequence = np.arange(5, 15, 2)         # [5, 7, 9, 11, 13]

Thuộc tính cơ bản của ndarray

  • ndim: số chiều (ví dụ: mảng 2D → ndim == 2)
  • shape: tuple biểu diễn kích thước mỗi trục (vd: (3, 4))
  • size: tổng số phần tử (shape[0] * shape[1] * ...)
  • dtype: kiểu dữ liệu nội bộ (ví dụ: np.float32, np.int64)
  • nbytes: tổng bộ nhớ (byte) mà mảng chiếm dụng

Chuyển đổi kiểu dữ liệu

data_int = np.array([1, 2, 3])
data_float = data_int.astype(np.float64)     # hoặc 'float64'
data_str = data_int.astype('U10')            # chuỗi Unicode độ dài tối đa 10 ký tự

Thay đổi cấu trúc mảng

Các thao tác sau đều trả về mảng mới — không ảnh hưởng đến mảng gốc:

grid = np.arange(12).reshape(3, 4)
flattened = grid.ravel()                    # thành vector 1D (tham chiếu nếu có thể)
reshaped = grid.reshape(-1, 2)              # tự động suy ra chiều đầu: (6, 2)
transposed = grid.T                         # chuyển vị: (4, 3)

# Với mảng 3D
cube = np.arange(24).reshape(2, 3, 4)
swapped = cube.swapaxes(0, 2)               # hoán đổi trục thứ nhất và thứ ba → (4, 3, 2)

Ghép nối và phân chia mảng

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# Ghép theo trục hàng (axis=0)
stacked_v = np.vstack([a, b])  # hoặc np.concatenate([a, b], axis=0)

# Ghép theo trục cột (axis=1)
stacked_h = np.hstack([a, b])  # hoặc np.concatenate([a, b], axis=1)

# Chia mảng thành 3 phần dọc theo trục 0
parts = np.split(a, 2, axis=0)

Phát sinh dữ liệu ngẫu nhiên

# Giá trị nguyên ngẫu nhiên trong khoảng [10, 50)
samples_int = np.random.randint(10, 50, size=(3, 4))

# Số thực chuẩn hóa (μ=0, σ=1)
normal_samples = np.random.randn(2, 5)

# Phân phối chuẩn tùy chỉnh (μ=100, σ=15)
iq_scores = np.random.normal(100, 15, size=1000)

# Thiết lập hạt giống để tái tạo kết quả
np.random.seed(42)
shuffled_copy = np.random.permutation([1, 2, 3, 4, 5])

Truy cập và lọc phần tử

  • Chỉ mục hỗ trợ cả dạng arr[i, j]arr[i][j]
  • Cắt lát đa chiều: grid[1:, :2] → hàng từ 1 trở đi, 2 cột đầu
  • Lọc bằng mặt nạ boolean:
    mask = grid > 5
    filtered = grid[mask]
  • Chỉ mục nâng cao (fancy indexing):
    rows = [0, 2]; cols = [1, 3]
    subgrid = grid[np.ix_(rows, cols)]

Phép toán trên mảng

Toán tử vô hướng và mảng:

x = np.array([10, 20, 30])
y = x * 2 + 5             # [25, 45, 65]
z = np.sqrt(x)            # [3.16..., 4.47..., 5.47...]

Hàm toán học phổ quát (ufuncs):

  • np.maximum(a, b): so sánh từng phần tử
  • np.modf(arr): trả về tuple (phần_thập_phân, phần_nguyên)
  • np.where(condition, x, y): chọn phần tử từ x hoặc y dựa trên điều kiện

Tổng hợp thống kê

data = np.array([[1, 2, 3], [4, 5, 6]])

data.sum(axis=0)      # tổng theo cột → [5, 7, 9]
data.mean(axis=1)     # trung bình theo hàng → [2.0, 5.0]
data.std(ddof=1)      # độ lệch chuẩn mẫu
data.argmax()         # chỉ mục phần tử lớn nhất toàn cục

Xử lý tập hợp

  • np.unique(arr): loại bỏ trùng lặp và sắp xếp tăng dần
  • np.isin(arr, [2, 4]): trả về mảng boolean xác định phần tử có trong danh sách hay không
  • np.intersect1d(a, b): phần tử chung giữa hai mảng 1D
  • np.setdiff1d(a, b): phần tử có trong a nhưng không trong b

Đại số tuyến tính cơ bản

A = np.array([[1, 2], [3, 4]])
B = np.array([[5], [6]])

# Nhân ma trận
result = A @ B        # hoặc np.dot(A, B)

# Định thức và nghịch đảo
det_A = np.linalg.det(A)
inv_A = np.linalg.inv(A)

Nhập/xuất dữ liệu

# Đọc từ file CSV với dấu phẩy làm phân cách
dataset = np.loadtxt("data.csv", delimiter=",", skiprows=1, dtype=float)

# Ghi mảng ra file văn bản
np.savetxt("output.txt", dataset, fmt="%.3f", delimiter="\t")

Thẻ: numpy python scientific-computing

Đăng vào ngày 1 tháng 6 lúc 01:12