import streamlit as st import pandas as pd import joblib # MAPPING THE CLASSES weather_mapping = {"rain": 0, "sun": 1, "fog": 2, "drizzle": 3, "snow": 4} reverse_mapping = {v: k for k, v in weather_mapping.items()} # Reverse mapping # FEATURE COLUMNS feature_columns = ["precipitation", "temp_max", "temp_min", "wind"] # STREAMLIT UI st.sidebar.title("🔍 Select Model") model_choice = st.sidebar.radio("Choose a model:", ["Decision Tree (DTC)", "K-Nearest Neighbors (KNN)", "Random Forest (RFC)"]) # Load the chosen model model_filename = { "Decision Tree (DTC)": "DTCweather_model.pkl", "K-Nearest Neighbors (KNN)": "KNNweather_model.pkl", "Random Forest (RFC)": "RFCweather_model.pkl" } model = joblib.load(model_filename[model_choice]) # STREAMLIT TABS app, model_eval = st.tabs(["Application", "Model Evaluation"]) # STREAMLIT APP - TAB 1 with app: st.title("🌦️ Weather Prediction App") st.write(f"Using **{model_choice}**, enter weather conditions, and the model will predict the weather category!") # User Inputs precipitation = st.number_input("Precipitation (mm)", min_value=0.0, max_value=100.0, step=0.1) temp_max = st.number_input("Max Temperature (°C)", min_value=-20.0, max_value=50.0, step=0.1) temp_min = st.number_input("Min Temperature (°C)", min_value=-20.0, max_value=50.0, step=0.1) wind = st.number_input("Wind Speed (km/h)", min_value=0.0, max_value=100.0, step=0.1) if st.button("Predict Weather"): input_data = pd.DataFrame([[precipitation, temp_max, temp_min, wind]], columns=feature_columns) # Predict prediction_num = model.predict(input_data)[0] prediction_label = reverse_mapping.get(prediction_num, "Unknown") st.success(f"🌤️ Predicted Weather: **{prediction_label.capitalize()}**") # MODEL EVALUATION - TAB 2 with model_eval: st.header("📊 Model Evaluation") st.write("The Weather Prediction models were trained to classify weather types based on conditions. The dataset was sourced from Kaggle.") st.write("Dataset by **ANANTH R**. [Link to dataset](https://www.kaggle.com/datasets/ananthr1/weather-prediction)") # CORRELATION MATRIX st.subheader("📌 Correlation Matrix") st.write("This matrix shows the relationships between features.") st.image("correlation_matrix.png") # WEATHER PREDICTION st.subheader("📌 Weather Prediction Results") st.write("Comparison of actual vs predicted weather conditions.") st.header("Decision Tree Classifier Weather Predictions") st.image("DTCweather_predictions.png") st.header("K Nearest Neighbor Weather Predictions") st.image("KNNweather_predictions.png") st.header("Random Forest Classifier Weather Predictions") st.image("RFCweather_predictions.png") # EVALUATION METRICS st.subheader("📌 Evaluation Metrics") st.write("Accuracy, F1 score, and the classification report of the models.") st.header("Decision Tree Classifier Evaluation Metrics") st.write("The image below represents the **Accuracy, F1 score, and classification report** of the Decision Tree Classifier model.") st.image("DTCclassification_report.png") st.header("K Nearest Neighbor Evaluation Metrics") st.write("The image below represents the **Accuracy, F1 score, and classification report** of the K Nearest Neighbor model.") st.image("KNNclassification_report.png") st.header("Random Forest Classifier Metrics") st.write("The image below represents the **Accuracy, F1 score, and classification report** of the Random Forest Classifier model.") st.image("RFCclassification_report.png") st.header("Comparison") st.write("Based on the evaluation metrics, we can assume that out of the three classification algorithms chosen, Ramdom Forest Classifier performs the best using this dataset")