Timjerdine/Rainfall
0
1import streamlit as st
2import pandas as pd
3import pickle
4import numpy as np
5
6# Configuration de la page
7st.set_page_config(page_title="Rainfall Predictor", page_icon="🌧️")
8
9# 1. Fonction pour charger le modèle
10@st.cache_resource
11def load_model():
12 # Assurez-vous que le nom du fichier .pkl est EXACTEMENT celui-ci
13 with open("rainfall_prediction_model.pkl", "rb") as f:
14 data = pickle.load(f)
15 return data
16
17try:
18 model_data = load_model()
19 model = model_data["model"]
20 # Les colonnes exactes attendues par votre RandomForest
21 feature_names = model_data["feature_names"]
22except Exception as e:
23 st.error(f"Erreur de chargement du modèle : {e}")
24 st.stop()
25
26st.title("🌧️ Prédiction de Pluie")
27st.markdown("Saisissez les paramètres météo pour savoir s'il va pleuvoir ou non.")
28
29# 2. Formulaire de saisie
30with st.form("my_form"):
31 st.subheader("Paramètres Atmosphériques")
32
33 col1, col2 = st.columns(2)
34
35 with col1:
36 pressure = st.number_input("Pression (hPa)", value=1015.0, step=0.1)
37 maxtemp = st.number_input("Température Max (°C)", value=22.0, step=0.1)
38 temparature = st.number_input("Température Moyenne (°C)", value=18.0, step=0.1)
39 mintemp = st.number_input("Température Min (°C)", value=14.0, step=0.1)
40 dewpoint = st.number_input("Point de Rosée", value=12.0, step=0.1)
41
42 with col2:
43 humidity = st.slider("Humidité (%)", 0, 100, 75)
44 cloud = st.slider("Couverture Nuageuse (%)", 0, 100, 50)
45 sunshine = st.number_input("Ensoleillement (heures)", value=5.0, step=0.1)
46 winddirection = st.number_input("Direction du vent (degrés)", value=180, step=1)
47 windspeed = st.number_input("Vitesse du vent (km/h)", value=15.0, step=0.1)
48
49 submit_button = st.form_submit_button(label="Prédire")
50
51# 3. Traitement de la prédiction
52if submit_button:
53 # Création du dictionnaire avec les noms EXACTS du CSV original
54 # Note : Attention aux espaces dans 'pressure ', 'humidity ' et 'cloud '
55 input_dict = {
56 'pressure ': pressure,
57 'maxtemp': maxtemp,
58 'temparature': temparature,
59 'mintemp': mintemp,
60 'dewpoint': dewpoint,
61 'humidity ': humidity,
62 'cloud ': cloud,
63 'sunshine': sunshine,
64 'winddirection': winddirection,
65 'windspeed': windspeed
66 }
67
68 # Transformation en DataFrame (ordre respecté via feature_names)
69 input_df = pd.DataFrame([input_dict])[feature_names]
70
71 # Prédiction
72 prediction = model.predict(input_df)
73 probability = model.predict_proba(input_df)
74
75 st.divider()
76
77 if prediction[0] == 1:
78 st.error(f"### 🌧️ Résultat : IL VA PLEUVOIR")
79 st.write(f"Probabilité de pluie : **{probability[0][1]:.2%}**")
80 else:
81 st.success(f"### ☀️ Résultat : PAS DE PLUIE")
82 st.write(f"Probabilité de ciel sec : **{probability[0][0]:.2%}**")
83
84st.info("Note : Ce modèle utilise un RandomForestClassifier entraîné sur votre dataset Rainfall.")