Snigs98 commited on
Commit
ac799e2
·
verified ·
1 Parent(s): b23f33c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -0
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import zipfile
2
+ import os
3
+ import pandas as pd
4
+ import gradio as gr
5
+ import numpy as np
6
+ from sklearn.model_selection import train_test_split
7
+ from sklearn.preprocessing import LabelEncoder, StandardScaler
8
+ from sklearn.ensemble import RandomForestClassifier
9
+
10
+ # Extract ZIP file
11
+ zip_path = "ROAD TRAFFIC ACCIDENTS.zip"
12
+ extract_folder = "road_traffic_accidents/"
13
+
14
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
15
+ zip_ref.extractall(extract_folder)
16
+
17
+ # Load dataset
18
+ csv_path = os.path.join(extract_folder, "cleaned.csv")
19
+ df = pd.read_csv(csv_path)
20
+
21
+ # Select relevant columns
22
+ selected_columns = [
23
+ "Age_band_of_driver", "Sex_of_driver", "Educational_level",
24
+ "Vehicle_driver_relation", "Driving_experience", "Lanes_or_Medians",
25
+ "Types_of_Junction", "Road_surface_type", "Light_conditions",
26
+ "Weather_conditions", "Type_of_collision", "Vehicle_movement",
27
+ "Pedestrian_movement", "Cause_of_accident", "Accident_severity"
28
+ ]
29
+ df = df[selected_columns]
30
+
31
+ # Encode categorical features using LabelEncoder
32
+ label_encoders = {}
33
+ for col in df.columns:
34
+ if df[col].dtype == 'object':
35
+ le = LabelEncoder()
36
+ df[col] = le.fit_transform(df[col])
37
+ label_encoders[col] = le # Save encoder for decoding later
38
+
39
+ # Encode target variable separately
40
+ severity_encoder = LabelEncoder()
41
+ df["Accident_severity"] = severity_encoder.fit_transform(df["Accident_severity"])
42
+
43
+ # Split data into features (X) and target (y)
44
+ X = df.drop(columns=["Accident_severity"])
45
+ y = df["Accident_severity"]
46
+
47
+ # Standardize numerical features
48
+ scaler = StandardScaler()
49
+ X_scaled = scaler.fit_transform(X)
50
+
51
+ # Train-test split
52
+ X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
53
+
54
+ # Train RandomForest model
55
+ model = RandomForestClassifier(n_estimators=100, random_state=42)
56
+ model.fit(X_train, y_train)
57
+
58
+ # Get severity mapping
59
+ severity_mapping = {index: label for index, label in enumerate(severity_encoder.classes_)}
60
+
61
+ # Define the prediction function
62
+ def predict_accident(*features):
63
+ # Convert the features back to the original categorical encoded values
64
+ feature_values = []
65
+ for i, (col, le) in enumerate(label_encoders.items()):
66
+ feature_values.append(le.transform([features[i]])[0]) # Convert to encoded value
67
+ features_scaled = scaler.transform([feature_values]) # Scale the features
68
+ prediction = model.predict(features_scaled)[0]
69
+ return severity_mapping.get(prediction, "Unknown")
70
+
71
+ # Create Gradio UI with dropdowns instead of text inputs
72
+ input_features = [
73
+ gr.Dropdown(choices=list(label_encoders[col].classes_), label=col)
74
+ for col in X.columns
75
+ ]
76
+
77
+ iface = gr.Interface(
78
+ fn=predict_accident,
79
+ inputs=input_features,
80
+ outputs="text",
81
+ title="Traffic Accident Severity Prediction",
82
+ description="Select accident-related details to predict severity."
83
+ )
84
+
85
+ # Run the app
86
+ if __name__ == "__main__":
87
+ iface.launch()