- Phan Tấn Tài - 22684181
- Hoa Xuân Hoàn - 22689381
- Nguyễn Gia Lâm - 22685611
- Trương Công Đạt - 22685561
Hệ thống dự báo thời tiết là ứng dụng web cung cấp thông tin thời tiết chi tiết và dự báo trong 7 ngày tới cho tất cả các tỉnh thành tại Việt Nam. Dự án sử dụng dữ liệu lịch sử và mô hình Random Forest để thực hiện dự đoán.
- Thu thập dữ liệu thời tiết tự động: Thu thập dữ liệu thời tiết hàng ngày cho 63 tỉnh thành Việt Nam
- Dự báo thời tiết 7 ngày: Dự báo nhiệt độ cao nhất, thấp nhất và mã thời tiết cho 7 ngày tiếp theo
- Giao diện trực quan: Hiển thị thông tin thời tiết dễ đọc với biểu đồ và hình ảnh
- Tìm kiếm theo tỉnh thành: Cho phép người dùng tìm kiếm thời tiết theo tỉnh thành
- Thông tin chi tiết: Hiển thị nhiệt độ, độ ẩm, lượng mưa, tốc độ gió...
- Hỗ trợ đăng ký nhận thông báo: Người dùng có thể đăng ký nhận thông báo về thời tiết qua email
Hệ thống được xây dựng với các thành phần chính:
- Django Backend: Cung cấp API và xử lý logic ứng dụng
- Giao diện người dùng: Frontend được xây dựng với HTML, CSS và JavaScript
- PostgreSQL: Cơ sở dữ liệu lưu trữ thông tin thời tiết
- Apache Airflow: Quản lý các tác vụ định kỳ (lấy dữ liệu thời tiết, xây dựng mô hình dự báo)
- Docker: Đóng gói và triển khai các thành phần
- Docker và Docker Compose
- Git
git clone https://github.com/tontide1/Weather-forecast.git
cd Weather-forecastTạo file .env trong thư mục gốc bằng cách sao chép từ file env_example.txt có sẵn:
Sau đó chỉnh sửa file .env để cập nhật các thông số cấu hình phù hợp với môi trường của bạn. Đặc biệt là cần tạo FERNET_KEY và SECRET_KEY mới.
Bạn có thể tạo Fernet key bằng cách chạy:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"docker-compose up -dDocker Compose sẽ tạo và khởi động các container:
- web: Ứng dụng Django chính chạy trên cổng 8000
- db: PostgreSQL database
- airflow-webserver: Airflow webserver UI chạy trên cổng 8080
- airflow-scheduler: Airflow scheduler
- airflow-init: Khởi tạo Airflow (tạo admin và database)
- Ứng dụng dự báo thời tiết: http://localhost:8000
- Giao diện Airflow: http://localhost:8080 (đăng nhập bằng tài khoản admin đã cấu hình)
- Thu thập dữ liệu: Airflow DAG
Collectorthu thập dữ liệu thời tiết hiện tại và lịch sử từ API - Xây dựng mô hình dự báo: Airflow DAG
Random Forest DAGxây dựng và cập nhật mô hình dự báo - Hiển thị dữ liệu: Ứng dụng Django phục vụ API và giao diện người dùng
Weather-forecast/
├── airflow/ # Cấu hình và DAGs của Airflow
│ ├── dags/ # Các file định nghĩa DAG
│ │ ├── collect_weather_data_dag.py
│ │ └── RandomForest_predict_dag.py
│ ├── Dockerfile # Docker image cho Airflow
│ └── requirements.txt # Thư viện Python cho Airflow
├── src/ # Mã nguồn Django
│ ├── api_app/ # API endpoint
│ ├── static/ # Tài nguyên tĩnh (CSS, JS, hình ảnh)
│ ├── templates/ # Template HTML
│ └── web_app/ # Ứng dụng web
├── src_data/ # Script thu thập dữ liệu
│ └── fetch_old_weather.py
├── test_model/ # Mô hình dự báo
│ └── randomforest_model.py
├── docker-compose.yml # Cấu hình Docker Compose
├── Dockerfile # Docker image cho ứng dụng Django
├── entrypoint.sh # Script khởi động cho container Django
└── requirements.txt # Thư viện Python cho Django
GET /api/get-weather-data/?province={province}: Lấy dữ liệu thời tiết hiện tại cho tỉnh thànhGET /api/get-predict-weather-data/?province={province}: Lấy dữ liệu dự báo cho tỉnh thànhGET /api/get-unique-province/: Lấy danh sách tất cả các tỉnh thànhPOST /api/subscribe/: Đăng ký nhận thông báo thời tiết qua email
- Backend: Django, Django REST framework
- Frontend: HTML, CSS, JavaScript
- Database: PostgreSQL
- Task Scheduling: Apache Airflow
- Containerization: Docker, Docker Compose
- Machine Learning: Scikit-learn (Random Forest)
Dữ liệu thời tiết được lấy từ Open-Meteo API và được lưu trữ trong cơ sở dữ liệu PostgreSQL.
Dự án được phát triển như một công cụ giúp người dùng dễ dàng tiếp cận thông tin thời tiết chính xác cho các tỉnh thành Việt Nam, sử dụng mô hình dự báo hiện đại.
