Amazing-Python-Scripts
121 строка · 3.4 Кб
1import numpy as np
2import pandas as pd
3import streamlit as st
4import joblib
5from sklearn.preprocessing import LabelEncoder
6from sklearn.model_selection import train_test_split
7from sklearn.ensemble import RandomForestRegressor
8
9
10df = pd.read_csv("city_day.csv", na_values="=")
11
12numeric_cols = df.select_dtypes(include=[np.number]).columns
13df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].mean())
14
15
16df = df.drop(["Date", "AQI_Bucket"], axis=1)
17
18
19label_encoder = LabelEncoder()
20df["City"] = label_encoder.fit_transform(df["City"])
21city_mapping = {
22'Ahmedabad': 0,
23'Amaravati': 1,
24'Aizawl': 2,
25'Amritsar': 3,
26'Bengaluru': 4,
27'Bhopal': 5,
28'Brajrajnagar': 6,
29'Chandigarh': 7,
30'Chennai': 8,
31'Coimbatore': 9,
32'Delhi': 10,
33'Ernakulam': 11,
34'Gurugram': 12,
35'Guwahati': 13,
36'Hyderabad': 14,
37'Jaipur': 15,
38'Jorapokhar': 16,
39'Kochi': 17,
40'Kolkata': 18,
41'Lucknow': 19,
42'Mumbai': 20,
43'Patna': 21,
44'Shillong': 22,
45'Talcher': 23,
46'Thiruvananthapuram': 24,
47'Visakhapatnam': 25
48}
49
50
51y = df.pop("AQI")
52
53
54x_train, x_test, y_train, y_test = train_test_split(
55df, y, test_size=0.2, random_state=0)
56
57
58model = RandomForestRegressor(max_depth=50, random_state=0)
59model.fit(x_train, y_train)
60
61
62def main():
63st.title("Air Quality Index Prediction")
64
65st.write("## User Input Features")
66
67city = st.selectbox("City", df["City"].unique())
68pm2_5 = st.slider("PM2.5", float(df["PM2.5"].min()), float(
69df["PM2.5"].max()), float(df["PM2.5"].mean()))
70pm10 = st.slider("PM10", float(df["PM10"].min()), float(
71df["PM10"].max()), float(df["PM10"].mean()))
72no = st.slider("NO", float(df["NO"].min()), float(
73df["NO"].max()), float(df["NO"].mean()))
74no2 = st.slider("NO2", float(df["NO2"].min()), float(
75df["NO2"].max()), float(df["NO2"].mean()))
76nox = st.slider("NOx", float(df["NOx"].min()), float(
77df["NOx"].max()), float(df["NOx"].mean()))
78nh3 = st.slider("NH3", float(df["NH3"].min()), float(
79df["NH3"].max()), float(df["NH3"].mean()))
80co = st.slider("CO", float(df["CO"].min()), float(
81df["CO"].max()), float(df["CO"].mean()))
82so2 = st.slider("SO2", float(df["SO2"].min()), float(
83df["SO2"].max()), float(df["SO2"].mean()))
84o3 = st.slider("O3", float(df["O3"].min()), float(
85df["O3"].max()), float(df["O3"].mean()))
86benzene = st.slider("Benzene", float(df["Benzene"].min()), float(
87df["Benzene"].max()), float(df["Benzene"].mean()))
88toluene = st.slider("Toluene", float(df["Toluene"].min()), float(
89df["Toluene"].max()), float(df["Toluene"].mean()))
90xylene = st.slider("Xylene", float(df["Xylene"].min()), float(
91df["Xylene"].max()), float(df["Xylene"].mean()))
92
93input_data = pd.DataFrame(
94{
95"City": [city],
96"PM2.5": [pm2_5],
97"PM10": [pm10],
98"NO": [no],
99"NO2": [no2],
100"NOx": [nox],
101"NH3": [nh3],
102"CO": [co],
103"SO2": [so2],
104"O3": [o3],
105"Benzene": [benzene],
106"Toluene": [toluene],
107"Xylene": [xylene]
108}
109)
110
111st.sidebar.write("## City Label Mapping")
112st.sidebar.write(city_mapping)
113
114prediction = model.predict(input_data)
115
116st.write("## Prediction")
117st.write(f"Predicted AQI: {prediction[0]}")
118
119
120if __name__ == "__main__":
121main()
122