End-to-end data preprocessing toolkit for image, tabular & time-series data
Data Mining Preprocessing Project
Đồ án tiền xử lý dữ liệu cho môn Data Mining 2026, thực hiện khảo sát và cài đặt các kỹ thuật tiền xử lý trên 3 nhóm dữ liệu: Image, Table và Time Series. Đồ án bao gồm phân tích dữ liệu thô, xử lý giá trị thiếu, phát hiện & xử lý outlier, chuẩn hóa, mã hóa đặc trưng, xử lý mất cân bằng lớp, giảm chiều dữ liệu và nhiều kỹ thuật tiền xử lý khác.
- Lý thuyết và thực nghiệm đo chi tiết tại: Notebooks
- Báo cáo thực nghiệm và mô tả chi tiết đồ án tại PDF
- Github: mining-beyond-boundaries
- Dữ liệu: Drive
- Phân công: Google Sheet
Mục lục
- Phần 1 — Tiền xử lý ảnh - Phần 2 — Tiền xử lý dữ liệu bảng - Phần 3 — Tiền xử lý chuỗi thời gian - 5.1. Clone repo - 5.2. Tạo virtual environment - 5.3. Cài dependencies - 6.1. Download trực tiếp trên web - 6.2. Dùng Kaggle CLI - 9.1. Chạy bằng Notebook - 9.2. Chạy module Python trực tiếp1. Thông tin nhóm
| STT | MSSV | Họ và tên | |:---:|:--------:|-------------------| | 1 | 23120146 | Hoàng Ngọc | | 2 | 23122025 | Phạm Ngọc Duy | | 3 | 23122032 | Nguyễn Việt Hùng | | 4 | 23120266 | Võ Trần Duy Hoàng | | 5 | 23122021 | Bùi Duy Bảo |
2. Mô tả tập dữ liệu
Dữ liệu Image — Animals-10
| Thuộc tính | Chi tiết | |---|---| | Nguồn | Kaggle — Animals-10 | | Số lượng ảnh | ~26.000 ảnh | | Số lớp | 10 (dog, cat, horse, spider, butterfly, chicken, sheep, cow, squirrel, elephant) | | Định dạng | JPEG / PNG, kích thước không đồng nhất | | Mô tả | Tập ảnh động vật thu thập từ Google Images, được phân thành 10 thư mục theo loài. Tên thư mục gốc bằng tiếng Ý, cần đổi sang tiếng Anh trước khi sử dụng. | | Ứng dụng trong đồ án | Phân tích mất cân bằng lớp, resize & chuẩn hóa ảnh, augmentation, giảm chiều (PCA, t-SNE), kiểm định Kolmogorov-Smirnov |
Dữ liệu Table — Building Permit Applications
| Thuộc tính | Chi tiết | |---|---| | Nguồn | Kaggle — Building Permit Applications Data | | Số bản ghi | ~198.000 dòng | | Số cột | 43 cột | | Định dạng | CSV (Building_Permits.csv) | | Mô tả | Dữ liệu đơn xin cấp phép xây dựng tại San Francisco từ 01/01/2013 trở đi, bao gồm thông tin về loại công trình, địa chỉ, chi phí ước tính, ngày nộp/cấp phép, trạng thái, v.v. Dữ liệu chứa nhiều giá trị thiếu và outlier, phù hợp cho bài toán tiền xử lý. | | Ứng dụng trong đồ án | Phân tích & xử lý missing values, phát hiện & xử lý outlier, mã hóa đặc trưng (Label, One-Hot, Target, Frequency Encoding), chuẩn hóa (Min-Max, Z-score), xử lý mất cân bằng (SMOTE, ADASYN, Under-sampling), giảm chiều (PCA, t-SNE) |
Dữ liệu Time Series — COVID-19 Time Series
| Thuộc tính | Chi tiết | |---|---| | Nguồn | Kaggle — COVID-19 Time Series Data | | Phạm vi | Dữ liệu chuỗi thời gian COVID-19 toàn cầu (confirmed, deaths, recovered) | | Định dạng | CSV (time-series-19-covid-combined.csv) | | Mô tả | Dữ liệu chuỗi thời gian tổng hợp về số ca xác nhận, tử vong và hồi phục do COVID-19 theo quốc gia/vùng lãnh thổ và theo ngày. | | Ứng dụng trong đồ án | Kiểm định tính dừng (ADF, KPSS), phân tích xu hướng & mùa vụ (seasonal decomposition), xử lý missing values chuỗi thời gian, làm mượt (smoothing), chuẩn hóa chuỗi thời gian |
3. Chức năng
Đồ án thực hiện 3 phần tương ứng với 3 loại dữ liệu (Phần 1 — Ảnh, Phần 2 — Bảng, Phần 3 — Chuỗi thời gian). Bảng dưới đây tóm tắt các tác vụ đã thực hiện cho từng phần. Ngoài ra còn nhiều kỹ thuật khác được trình bày chi tiết trong báo cáo.
Phần 1 — Tiền xử lý ảnh
| Tác vụ | Nội dung chi tiết | |---|---| | Phân tích thống kê tập dữ liệu | Perceptual Hashing (pHash), phân tích mất cân bằng lớp (class imbalance), kiểm định Kolmogorov-Smirnov (KS test) | | Cài đặt kỹ thuật tiền xử lý & đo lường | Resize, chuẩn hóa ảnh, augmentation; đánh giá chất lượng bằng SSIM và PSNR | | Giảm chiều & đánh giá | Ablation study, phân tích không gian đặc trưng bằng PCA và t-SNE |
Phần 2 — Tiền xử lý dữ liệu bảng
| Tác vụ | Nội dung chi tiết | |---|---| | EDA thống kê | Kiểm định phân phối, kiểm định MCAR test cho dữ liệu thiếu | | Phát hiện ngoại lai & mã hóa đặc trưng | Phát hiện outlier (IQR, Z-score), mã hóa đặc trưng đầu vào (Label, One-Hot, Target, Frequency Encoding) | | Lựa chọn đặc trưng & đánh giá | Feature selection, đánh giá mô hình bằng Cross-Validation F1-score |
Phần 3 — Tiền xử lý chuỗi thời gian
| Tác vụ | Nội dung chi tiết | |---|---| | Kiểm định tính dừng & phân rã | Kiểm định ADF, KPSS; phân rã STL (Seasonal-Trend decomposition using LOESS) | | Phát hiện dị thường & xây dựng đặc trưng | Phát hiện anomaly trong chuỗi thời gian, xây dựng ma trận đặc trưng (feature matrix) | | Dự báo & kiểm định nhân quả | Dự báo bằng Random Forest Regressor, kiểm định nhân quả Granger (Granger causality) |
4. Yêu cầu
- Python 3.10+ (khuyến nghị 3.11)
- Git
- VS Code + Python extension + Jupyter extension (nếu chạy notebook)
5. Clone và cài môi trường
5.1. Clone repo
git clone https://github.com/Taylor3691/mining-beyond-boundaries.git
cd mining-beyond-boundaries
5.2. Tạo virtual environment
Windows (PowerShell):
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
macOS/Linux:
python3 -m venv .venv
source .venv/bin/activate
5.3. Cài dependencies
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
6. Tải dataset từ Kaggle
Project dùng 3 nguồn dataset:
- Image: https://www.kaggle.com/datasets/alessiocorrado99/animals10
- Table: https://www.kaggle.com/datasets/aparnashastry/building-permit-applications-data
- Time series: https://www.kaggle.com/datasets/niketchauhan/covid-19-time-series-data
6.1. Cách 1: Download trực tiếp trên web
- Mở từng link Kaggle bên trên.
- Bấm
Download. - Giải nén và đặt file/folder vào đúng vị trí (xem mục 4 bên dưới).
6.2. Cách 2: dùng Kaggle CLI
Bước A: Tạo API token
- Vào Kaggle -> Account -> Create New API Token.
- File
kaggle.jsonsẽ được tải về. - Đặt file vào:
%USERPROFILE%\\.kaggle\\kaggle.json
- macOS/Linux: ~/.kaggle/kaggle.json
Bước B: Cài kaggle cli
pip install kaggle
Bước C: Tải 3 dataset
kaggle datasets download -d alessiocorrado99/animals10 -p data --unzip
kaggle datasets download -d aparnashastry/building-permit-applications-data -p data/table --unzip
kaggle datasets download -d niketchauhan/covid-19-time-series-data -p data/time_series --unzip
Sau khi unzip xong, bạn cần sắp xếp lại thư mục theo đúng cấu trúc ở mục 4.
7. Cấu trúc dữ liệu bắt buộc
Sau khi tải dữ liệu, đảm bảo thư mục data/ có dạng:
data/
image/
butterfly/
cat/
chicken/
cow/
dog/
elephant/
horse/
sheep/
spider/
squirrel/
table/
Building_Permits.csv
time_series/
time-series-19-covid-combined.csv
small/
... (dữ liệu mẫu nhỏ để test nhanh)
Quan trọng:
- Project đăng ký class image theo tên tiếng Anh:
dog, spider, cat, sheep, elephant, chicken, butterfly, cow, squirrel, horse. - Dataset
animals10có thể xuất hiện folder tên tiếng Ý (ví dụcane,gatto, ...). Nếu gặp trường hợp này, bạn cần đổi tên về tiếng Anh như trên.
cane -> doggatto -> catcavallo -> horsepecora -> sheepelefante -> elephantgallina -> chickenfarfalla -> butterflymucca -> cowscoiattolo -> squirrelragno -> spider
8. Kiểm tra nhanh dữ liệu đã đặt đúng chưa
Windows PowerShell:
Test-Path .\data\table\Building_Permits.csv
Test-Path .\data\time_series\time-series-19-covid-combined.csv
Get-ChildItem .\data\image -Directory | Select-Object Name
Nếu kết quả là True cho 2 file CSV và có đủ 10 class ảnh, bạn đã sẵn sàng chạy.
9. Cách chạy đồ án
9.1. Cách khuyến nghị: chạy bằng Notebook
- Mở folder project bằng VS Code.
- Chọn Python interpreter là
.venv. - Mở notebook trong
notebooks/. - Run cell từ trên xuống dưới.
Phần 1 — Image:
| # | Notebook | Nội dung | |---|---|---| | EDA-a | 01-image-EDA-(a).histogram.analysis.ipynb | Phân tích histogram ảnh | | EDA-b | 01-image-EDA-(b).imbalance.ipynb | Phân tích mất cân bằng lớp | | EDA-c | 01-image-EDA-(c).preprocessing.deduplicate.process.ipynb | Phát hiện & loại ảnh trùng (pHash) | | EDA-d | 01-image-EDA-(d).constrast.n.brightness.analysis.ipynb | Phân tích contrast & brightness | | Prep-a | 01-image-preprocessing-(a).resize.ipynb | Resize ảnh | | Prep-b | 01-image-preprocessing-(b).color.conversion.ipynb | Chuyển đổi không gian màu | | Prep-c | 01-image-preprocessing-(c).normalization.ipynb | Chuẩn hóa ảnh & kiểm định KS | | Prep-d | 01-image-preprocessing-(d).data.augmentation.ipynb | Data augmentation | | Bonus-e | 01.bonus-image-(e).analysis.edge.detection.ipynb | Phát hiện cạnh (edge detection) | | Bonus-f | 01.bonus-image-(f).analysis.feature.space.ipynb | Phân tích không gian đặc trưng (PCA, t-SNE) |
Phần 2 — Table:
| # | Notebook | Nội dung | |---|---|---| | EDA-a | 02-table-EDA-(a)distribution.inspect.ipynb | Kiểm tra phân phối dữ liệu | | EDA-b | 02-table-EDA-(b).correlation.ipynb | Phân tích tương quan | | EDA-c | 02-table-EDA-(c).missing.value.ipynb | Phân tích giá trị thiếu | | Prep-b | 02-table-preprocessing-(b).detect.outlier.ipynb | Phát hiện outlier | | Prep-c | 02-table-preprocessing-(c).numeric.normalization.ipynb | Chuẩn hóa dữ liệu số | | Prep-d | 02-table-preprocessing-(d).categorical.encoding.ipynb | Mã hóa đặc trưng phân loại | | Prep-e | 02-table-preprocessing-(e).feature.selection.ipynb | Lựa chọn đặc trưng | | Bonus-f | 02.bonus-table-(f).imbalance.handler.ipynb | Xử lý mất cân bằng lớp |
Phần 3 — Time Series:
| # | Notebook | Nội dung | |---|---|---| | EDA-a | 03-time.series-EDA-(a).data.components.ipynb | Phân tích thành phần dữ liệu | | EDA-b | 03-time.series-EDA-(b).correlation.structure.ipynb | Phân tích cấu trúc tương quan | | EDA-c | 03-time.series-EDA-(c).rolling.statistic.ipynb | Thống kê trượt (rolling) | | Prep-b | 03-time.series-preprocessing-(b).stationarity.testing.ipynb | Kiểm định tính dừng | | Prep-c | 03-time.series-preprocessing-(c).decomposition.ipynb | Phân rã chuỗi thời gian (STL) | | Prep-e | 03-time.series-preprocessing-(e).detect.outlier.ipynb | Phát hiện dị thường | | Prep-f | 03-time.series-preprocessing-(f).feature.matrix.prediction.ipynb | Xây dựng ma trận đặc trưng & dự báo | | Bonus-g | 03.bonus-time.series-(g).Granger.testing.ipynb | Kiểm định nhân quả Granger |
Lưu ý:
- Nhiều notebook đã có đoạn
sys.path.append('../src'), vì vậy nếu mở notebook đúng vị trí trong repo là chạy được.
9.2. Chạy một số module Python trực tiếp
Từ thư mục gốc project, bạn có thể chạy:
python src/image/analysisimbalanceclass.py
python src/image/preprocessing_resize.py
python src/table/preprocessingdetectoutlier.py
10. Cách sử dụng
- Nhóm image:
ImageDataset
- Gọi các service analysis hoặc preprocessing
- Nhóm table:
TableDataset từ Building_Permits.csv
- Chạy preprocessing/analysis từ src/table/
- Nhóm time series:
TimeSeriesDataset từ time-series-19-covid-combined.csv
- Chạy preprocessing/analysis từ src/time_series/
Kết quả thường là:
- log trên terminal/notebook
- bảng thống kê
- biểu đồ phân tích
11. Lỗi thường gặp và cách xử lý
Lỗi 1: ModuleNotFoundError: No module named ...
Fix:
- Kiểm tra đã active
.venvchưa. - Chạy lại:
pip install -r requirements.txt
- Nếu chạy notebook, đảm bảo đã chọn đúng kernel
.venv.
- Nếu vẫn lỗi module, thêm path
srcbằngos.path+sys.path:
import os
import sys
src_path = os.path.abspath(os.path.join(os.getcwd(), "..", "src")) if src_path not in sys.path: sys.path.append(src_path)
Script Python (thêm ở đầu file):
import os
import sys
src_path = os.path.abspath(os.path.join(os.path.dirname(file), "..")) if src_path not in sys.path: sys.path.append(src_path)
Lỗi 2: Không tìm thấy file dataset
Fix:
- Kiểm tra đúng tên file:
Building_Permits.csv - time-series-19-covid-combined.csv - Kiểm tra đúng folder:
data/table/ - data/time_series/ - data/image/<10_classes>/
Lỗi 3: Chạy chậm/tốn RAM khi xử lý image
Fix:
- Test trước với
data/small/. - Sau khi ổn định mới chạy full
data/image/.