mailboxlab11 commited on
Commit
e888e8c
Β·
verified Β·
1 Parent(s): ff1b260

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -35
app.py CHANGED
@@ -1,11 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created on Wed Apr 23 22:57:11 2025
4
-
5
- @author: wIN 10
6
- """
7
-
8
- # app.py
9
  import streamlit as st
10
  import pandas as pd
11
  import numpy as np
@@ -13,35 +5,37 @@ from datetime import date
13
  from sklearn.ensemble import RandomForestClassifier
14
  from catboost import CatBoostClassifier
15
  from sklearn.preprocessing import MinMaxScaler
16
- from sklearn.metrics import classification_report, accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix
17
  from imblearn.under_sampling import RandomUnderSampler
18
  import matplotlib.pyplot as plt
19
  import os
20
 
21
- # Load or initialize dataset
22
  DATA_PATH = "updated_dataset.csv"
23
  if os.path.exists(DATA_PATH):
24
  df = pd.read_csv(DATA_PATH)
25
  else:
26
- st.error("Dataset not found. Please upload 'updated_dataset.csv'.")
27
 
28
  features = ['Temperature (Β°C)', 'Humidity (%)', 'Air Pressure (kPa)', 'Wind Speed (m/s)', 'Wind Direction (Β°)']
29
  target = 'Rain_Label'
30
  df = df[~(df[features] == -999).any(axis=1)]
 
 
31
  scaler = MinMaxScaler()
32
  df[features] = scaler.fit_transform(df[features])
33
 
34
  X = df[features]
35
  y = df[target]
36
- rus = RandomUnderSampler(random_state=42)
37
- X_bal, y_bal = rus.fit_resample(X, y)
38
 
 
39
  rf = RandomForestClassifier(n_estimators=100, random_state=42).fit(X_bal, y_bal)
40
  cat = CatBoostClassifier(verbose=0, random_state=42).fit(X_bal, y_bal)
41
 
42
- # --- Streamlit UI ---
43
  st.title("🌧 Rainfall Early Warning System")
44
- st.markdown("Use weather inputs to predict rainfall & submit real-time data.")
45
 
46
  st.sidebar.header("Weather Input")
47
  temp = st.sidebar.slider("Temperature (Β°C)", 10.0, 50.0, 30.0)
@@ -52,7 +46,6 @@ wind_dir = st.sidebar.slider("Wind Direction (Β°)", 0, 360, 180)
52
  rain_label = st.sidebar.selectbox("Did it Rain Today?", ["No", "Yes"])
53
  rain_val = 1 if rain_label == "Yes" else 0
54
 
55
- # Input Data
56
  input_row = {
57
  'Temperature (Β°C)': temp,
58
  'Humidity (%)': humidity,
@@ -60,42 +53,31 @@ input_row = {
60
  'Wind Speed (m/s)': wind_speed,
61
  'Wind Direction (Β°)': wind_dir,
62
  'Rainfall (mm)': 0.0,
63
- 'Rain_Label': rain_val
 
64
  }
65
 
66
- scaled_input = scaler.transform(pd.DataFrame([input_row])[features])
67
-
68
  # Predict
 
69
  rf_pred = rf.predict(scaled_input)[0]
70
  cat_pred = cat.predict(scaled_input)[0]
71
  rf_prob = rf.predict_proba(scaled_input)[0][1]
72
  cat_prob = cat.predict_proba(scaled_input)[0][1]
73
 
74
- # Show result
75
- st.subheader("πŸ” Prediction")
76
  st.markdown(f"**Random Forest:** {'🌧 Rain' if rf_pred == 1 else 'β˜€οΈ No Rain'} (Prob: {rf_prob:.2f})")
77
  st.markdown(f"**CatBoost:** {'🌧 Rain' if cat_pred == 1 else 'β˜€οΈ No Rain'} (Prob: {cat_prob:.2f})")
78
 
79
- # Warning label
80
- def warning(prob):
81
  if prob < 0.1: return "βœ… No Rain"
82
  elif prob < 0.5: return "🌦 Light Rain"
83
  elif prob < 0.8: return "🌧 Moderate Rain"
84
  else: return "🌧🌧 Heavy Rain"
85
 
86
- st.success(f"πŸ“’ Early Warning: {warning((rf_prob + cat_prob) / 2)}")
87
-
88
- # --- Real-Time Submission ---
89
- st.subheader("πŸ“₯ Submit Today’s Weather Data")
90
- if st.button("βž• Add to Dataset"):
91
- input_row["Date"] = str(date.today())
92
- df_new = pd.read_csv(DATA_PATH)
93
- df_new = pd.concat([df_new, pd.DataFrame([input_row])], ignore_index=True)
94
- df_new.to_csv(DATA_PATH, index=False)
95
- st.success("βœ… Today's data added successfully!")
96
 
97
- # --- Model Evaluation ---
98
- st.subheader("πŸ“Š Evaluation Metrics")
99
  rf_preds = rf.predict(X)
100
  cat_preds = cat.predict(X)
101
  st.markdown("**Random Forest:**")
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import numpy as np
 
5
  from sklearn.ensemble import RandomForestClassifier
6
  from catboost import CatBoostClassifier
7
  from sklearn.preprocessing import MinMaxScaler
8
+ from sklearn.metrics import classification_report
9
  from imblearn.under_sampling import RandomUnderSampler
10
  import matplotlib.pyplot as plt
11
  import os
12
 
13
+ # Load dataset (use relative path)
14
  DATA_PATH = "updated_dataset.csv"
15
  if os.path.exists(DATA_PATH):
16
  df = pd.read_csv(DATA_PATH)
17
  else:
18
+ st.error("❌ Dataset 'updated_dataset.csv' not found. Please upload it.")
19
 
20
  features = ['Temperature (Β°C)', 'Humidity (%)', 'Air Pressure (kPa)', 'Wind Speed (m/s)', 'Wind Direction (Β°)']
21
  target = 'Rain_Label'
22
  df = df[~(df[features] == -999).any(axis=1)]
23
+
24
+ # Normalize
25
  scaler = MinMaxScaler()
26
  df[features] = scaler.fit_transform(df[features])
27
 
28
  X = df[features]
29
  y = df[target]
30
+ X_bal, y_bal = RandomUnderSampler(random_state=42).fit_resample(X, y)
 
31
 
32
+ # Train models
33
  rf = RandomForestClassifier(n_estimators=100, random_state=42).fit(X_bal, y_bal)
34
  cat = CatBoostClassifier(verbose=0, random_state=42).fit(X_bal, y_bal)
35
 
36
+ # Streamlit UI
37
  st.title("🌧 Rainfall Early Warning System")
38
+ st.markdown("Predict rainfall using daily weather inputs. Submit values below to simulate forecasting.")
39
 
40
  st.sidebar.header("Weather Input")
41
  temp = st.sidebar.slider("Temperature (Β°C)", 10.0, 50.0, 30.0)
 
46
  rain_label = st.sidebar.selectbox("Did it Rain Today?", ["No", "Yes"])
47
  rain_val = 1 if rain_label == "Yes" else 0
48
 
 
49
  input_row = {
50
  'Temperature (Β°C)': temp,
51
  'Humidity (%)': humidity,
 
53
  'Wind Speed (m/s)': wind_speed,
54
  'Wind Direction (Β°)': wind_dir,
55
  'Rainfall (mm)': 0.0,
56
+ 'Rain_Label': rain_val,
57
+ 'Date': str(date.today())
58
  }
59
 
 
 
60
  # Predict
61
+ scaled_input = scaler.transform(pd.DataFrame([input_row])[features])
62
  rf_pred = rf.predict(scaled_input)[0]
63
  cat_pred = cat.predict(scaled_input)[0]
64
  rf_prob = rf.predict_proba(scaled_input)[0][1]
65
  cat_prob = cat.predict_proba(scaled_input)[0][1]
66
 
67
+ st.subheader("πŸ” Prediction Results")
 
68
  st.markdown(f"**Random Forest:** {'🌧 Rain' if rf_pred == 1 else 'β˜€οΈ No Rain'} (Prob: {rf_prob:.2f})")
69
  st.markdown(f"**CatBoost:** {'🌧 Rain' if cat_pred == 1 else 'β˜€οΈ No Rain'} (Prob: {cat_prob:.2f})")
70
 
71
+ def warning_label(prob):
 
72
  if prob < 0.1: return "βœ… No Rain"
73
  elif prob < 0.5: return "🌦 Light Rain"
74
  elif prob < 0.8: return "🌧 Moderate Rain"
75
  else: return "🌧🌧 Heavy Rain"
76
 
77
+ st.success(f"πŸ“’ Early Warning: {warning_label((rf_prob + cat_prob) / 2)}")
 
 
 
 
 
 
 
 
 
78
 
79
+ # (Optional) Show evaluation
80
+ st.subheader("πŸ“Š Model Evaluation")
81
  rf_preds = rf.predict(X)
82
  cat_preds = cat.predict(X)
83
  st.markdown("**Random Forest:**")