Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách nạp dữ liệu Machine Learning từ File trong Python
Trong Machine Learning, định dạng dữ liệu phổ biến nhất là file CSV (Comma Separated Values - giá trị được phân tách bằng dấu phẩy). Trong bài viết này, tôi sẽ hướng dẫn bạn 4 cách khác nhau để nạp dữ liệu từ các file CSV và chuẩn bị dữ liệu để xử lý.
Ngoài ra, bài viết sẽ chia sẻ một số thực hành tốt nhất khi làm việc với dữ liệu, bao gồm:
- Xử lý đúng kiểu dữ liệu.
- Giải quyết các giá trị bị thiếu (missing values).
- Quản lý file với header tùy chọn.
Các phương pháp chính trong Python
- Sử dụng
csv
module - Sử dụng
numpy
: np.loadtxt() và np.genfromtxt() - Sử dụng
pandas
: pd.read_csv()
Chuẩn bị mã nguồn
Cài đặt môi trường
Đảm bảo bạn đã cài đặt các thư viện cần thiết trong Python. Nếu chưa, bạn có thể cài đặt thông qua pip:
pip install numpy pandas
Mã nguồn hoàn chỉnh
Tải dữ liệu
Ví dụ sử dụng file spambase.data
, bạn có thể tải về tại: https://archive.ics.uci.edu/ml/datasets/spambase
Bài viết này được đăng tại [free tuts .net]
import csv import numpy as np import pandas as pd # Tên file dữ liệu CSV FILE_NAME = "spambase.data" ### 1) Tải dữ liệu bằng csv module ### print("1) Load bằng csv module") with open(FILE_NAME, 'r') as f: data = list(csv.reader(f, delimiter=",")) # Đọc dữ liệu theo delimiter ',' data = np.array(data, dtype=np.float32) # Chuyển thành mảng numpy và ép kiểu float32 print("Kích thước dữ liệu:", data.shape) # In kích thước dữ liệu (hàng, cột) ### 2) Tải dữ liệu bằng np.loadtxt() ### print("\n2) Load bằng numpy np.loadtxt()") data = np.loadtxt(FILE_NAME, delimiter=",", dtype=np.float32) print("Kích thước dữ liệu:", data.shape, ", Kiểu dữ liệu:", data.dtype) ### 3) Tải dữ liệu bằng np.genfromtxt() ### print("\n3) Load bằng numpy np.genfromtxt()") data = np.genfromtxt(FILE_NAME, delimiter=",", dtype=np.float32) print("Kích thước dữ liệu:", data.shape) # Tách dữ liệu thành X (features) và y (label) n_samples, n_features = data.shape # Lấy số hàng và cột n_features -= 1 # Trừ cột label X = data[:, 0:n_features] # Các cột đầu làm input (X) y = data[:, n_features] # Cột cuối là output (y) print("Kích thước X:", X.shape, ", Kích thước y:", y.shape) print("5 giá trị đầu của X:", X[0, 0:5]) # Nếu nhãn (y) nằm ở cột đầu tiên thì sử dụng dòng sau: # X = data[:, 1:n_features+1] # y = data[:, 0] ### 4) Tải dữ liệu bằng pandas pd.read_csv() ### print("\n4) Load bằng pandas pd.read_csv()") # Đọc file CSV và xử lý giá trị bị thiếu (nếu có) df = pd.read_csv(FILE_NAME, header=None, skiprows=0, dtype=np.float32) # Không có header df = df.fillna(0.0) # Thay thế giá trị rỗng bằng 0.0 # Chuyển từ DataFrame sang numpy data = df.to_numpy() print("Kích thước dữ liệu:", data.shape) print("5 giá trị đầu của hàng thứ 5:", data[4, 0:5]) ### Chuyển đổi kiểu dữ liệu trong numpy ### # data = np.asarray(data, dtype=np.float32) # print("Kiểu dữ liệu sau khi chuyển đổi:", data.dtype)
Giải thích các phương pháp
csv
module:
Đây là cách cơ bản nhất. Module csv
của Python giúp đọc file dữ liệu từng dòng một và sau đó chuyển sang mảng numpy.
np.loadtxt()
:
- Dùng để đọc file văn bản trực tiếp.
- Có thể chỉ định delimiter (ký tự phân tách) và kiểu dữ liệu (
dtype
). - Thích hợp cho các file có định dạng đơn giản, ít lỗi dữ liệu.
np.genfromtxt()
:
- Mạnh hơn
np.loadtxt()
do khả năng xử lý các giá trị bị thiếu (missing_values
) và gán giá trị mặc định (filling_values
). - Thích hợp khi file có nhiều dòng bị thiếu dữ liệu.
pd.read_csv()
:
pandas
cung cấp một công cụ mạnh mẽ để đọc dữ liệu, với nhiều tùy chọn như: bỏ qua header, thay giá trị rỗng (na_values), chuyển dữ liệu sangDataFrame
.- Sau khi tải dữ liệu vào
DataFrame
, bạn có thể chuyển sangnumpy
dễ dàng bằngto_numpy()
.
Kết bài
Khi chạy mã nguồn trên, bạn sẽ thấy kích thước và các mẫu dữ liệu được in ra cho từng phương pháp. Điều này giúp bạn lựa chọn cách phù hợp nhất tùy vào độ phức tạp của file CSV.