Ứng dụng web được tái cấu trúc theo kiến trúc mô-đun chuyên nghiệp, tách biệt các khối xử lý dữ liệu, vẽ biểu đồ và giao diện UI, hỗ trợ kiểm thử tự động bằng pytest.
easy-visualize/
├── .streamlit/
│ └── config.toml # Cấu hình Theme giao diện Streamlit (Dark slate & Purple)
├── app/
│ ├── __init__.py
│ ├── config.py # Cấu hình UI, các hằng số CSS & phong cách premium
│ ├── data_loader.py # Quét thư mục, phân tích dữ liệu & các bộ giả lập mẫu
│ └── charts.py # Hàm vẽ biểu đồ chuyên sâu (Plotly & Seaborn)
├── datasets/
│ ├── phan_khuc_khach_hang.csv # Dữ liệu mẫu phân khúc khách hàng
│ └── gia_nha_dat.csv # Dữ liệu mẫu dự báo giá nhà
├── tests/
│ ├── __init__.py
│ └── test_data_loader.py # Các kịch bản kiểm thử tự động (Unit test)
├── main.py # Điểm khởi chạy chính (Orchestrator tập hợp UI và luồng dữ liệu)
├── pyproject.toml # Khai báo thư viện và cấu hình dự án (uv/pip)
└── README.md # Tài liệu hướng dẫn dự án
-
🧱 Kiến trúc Mô-đun (Modular Architecture):
- app/config.py: Tập trung hóa toàn bộ định nghĩa CSS và hằng số cấu hình trang.
- app/data_loader.py: Tách biệt toàn bộ logic I/O, kiểm tra định dạng file, điền/khử NaN và phát hiện kiểu nhãn.
- app/charts.py: Đóng gói các hàm vẽ đồ thị riêng lẻ, trả về đối tượng Figure thuần túy giúp dễ dàng tái sử dụng hoặc kiểm thử.
- main.py: Vai trò điều phối gọn nhẹ, chỉ chịu trách nhiệm tổ chức giao diện hiển thị (View).
-
🎨 Streamlit Theme Customization:
- Định nghĩa giao diện tối (Dark slate và Purple accents) thông qua tệp cấu hình chuẩn hóa của Streamlit tại .streamlit/config.toml. Không còn phụ thuộc hoàn toàn vào việc tiêm CSS thủ công.
-
🧪 Kiểm thử tự động (Unit Testing):
- Tích hợp khung kiểm thử
pytestnhằm bảo đảm độ tin cậy của các hàm xử lý dữ liệu trước khi đưa lên UI.
- Tích hợp khung kiểm thử
-
📁 Chuẩn hóa Thư mục Dữ liệu:
- Toàn bộ dữ liệu được quản lý tập trung trong thư mục
datasets/thay vì để tràn lan ở thư mục gốc.
- Toàn bộ dữ liệu được quản lý tập trung trong thư mục
Sử dụng uv để chạy trực tiếp ứng dụng:
uv run streamlit run main.pyHoặc chạy chỉ định sẵn các file dữ liệu qua đối số CLI:
uv run streamlit run main.py -- datasets/phan_khuc_khach_hang.csv datasets/gia_nha_dat.csvĐể chạy toàn bộ các ca kiểm thử trong thư mục tests/ để đảm bảo code hoạt động hoàn hảo:
PYTHONPATH=. uv run pytest- 1. Biểu đồ phân tán 2D (2D Scatter Plot): Quan sát mối liên quan giữa 2 features.
- 2. Biểu đồ phân tán 3D (3D Scatter Plot): Không gian 3D tương tác.
- 3. Đường đồng mức mật độ 2D (2D Density Contour): Biểu diễn mật độ đồng mức.
- 4. Phân phối mật độ 1D (Seaborn KDE): Biểu đồ mật độ xác suất 1D tĩnh.
- 5. Biểu đồ cột tổng hợp (Grouped Bar Chart): Tổng hợp thống kê của features theo nhãn.
- 6. Biểu đồ hộp & Violin (Box & Violin): Phân phối phân vị.
- 7. Ma trận tương quan Pearson: Tương quan giữa các biến số.
- 8. Bản đồ nhiệt mật độ lưới 2D (2D Density Heatmap): Bản đồ mật độ ô lưới.