Sahil0605 commited on
Commit
ee36296
·
1 Parent(s): abaca12

first push

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +51 -32
src/streamlit_app.py CHANGED
@@ -8,69 +8,82 @@ from sklearn.neighbors import KNeighborsClassifier
8
  from sklearn.tree import DecisionTreeClassifier
9
  from sklearn.metrics import accuracy_score, r2_score
10
 
11
- # Initialize session state variables
12
- if "uploaded_file_name" not in st.session_state:
13
- st.session_state.uploaded_file_name = None
14
- if "df" not in st.session_state:
15
- st.session_state.df = None
16
- if "processed_df" not in st.session_state:
17
- st.session_state.processed_df = None
18
- if "encoders" not in st.session_state:
19
- st.session_state.encoders = {}
20
- if "models" not in st.session_state:
21
- st.session_state.models = {}
22
- if "final_model" not in st.session_state:
23
- st.session_state.final_model = None
24
- if "problem_type" not in st.session_state:
25
- st.session_state.problem_type = None
26
- if "target_encoder" not in st.session_state:
27
- st.session_state.target_encoder = None
28
-
 
 
29
  st.sidebar.title("Navigation")
30
- page = st.sidebar.selectbox("Go to", ["Upload File", "Preprocess Data", "Train & Select Model", "Create App"])
31
-
32
- # ========================
 
 
 
 
 
33
  # Upload File Page
34
- # ========================
35
  if page == "Upload File":
36
  st.title("Upload CSV or SQL File")
37
  uploaded_file = st.file_uploader("Upload a CSV or SQL file", type=["csv", "sql"])
38
 
39
  if uploaded_file is not None:
40
  st.session_state.uploaded_file_name = uploaded_file.name
 
41
  if uploaded_file.name.endswith(".csv"):
42
  st.session_state.df = pd.read_csv(uploaded_file)
43
  st.dataframe(st.session_state.df)
 
44
  elif uploaded_file.name.endswith(".sql"):
45
  sql_content = uploaded_file.read().decode("utf-8")
46
  st.text_area("SQL Content", sql_content, height=300)
 
47
  st.success("File loaded into memory!")
48
 
49
- # ========================
50
  # Preprocess Data Page
51
- # ========================
52
  elif page == "Preprocess Data":
53
  st.title("Preprocess Uploaded CSV")
54
  if st.session_state.df is not None:
55
  st.write("Current Data:")
56
  st.dataframe(st.session_state.df)
57
 
 
58
  missing_placeholders = [
59
  "?", "NA", "N/A", "na", "null", "NULL", "none", "None",
60
  "missing", "Missing", "not available", "Not Available",
61
  "--", "---", "-", "_", ""
62
  ]
63
-
64
  if st.button("Drop Missing / Placeholder Values"):
65
- st.session_state.df = st.session_state.df.replace(missing_placeholders, pd.NA)
66
- st.session_state.df = st.session_state.df.dropna()
 
67
  st.success("Missing values dropped!")
68
 
 
69
  col_to_drop = st.multiselect("Select columns to drop", st.session_state.df.columns)
70
  if st.button("Drop Selected Columns"):
71
  st.session_state.df = st.session_state.df.drop(columns=col_to_drop)
72
  st.success(f"Dropped columns: {col_to_drop}")
73
 
 
74
  if st.button("Label Encode Object Columns"):
75
  st.session_state.encoders = {}
76
  for col in st.session_state.df.select_dtypes(include=['object']).columns:
@@ -79,15 +92,16 @@ elif page == "Preprocess Data":
79
  st.session_state.encoders[col] = le
80
  st.success("Object columns label-encoded!")
81
 
 
82
  if st.button("Save Preprocessed Data"):
83
  st.session_state.processed_df = st.session_state.df.copy()
84
  st.success("Preprocessed data saved in memory!")
85
  else:
86
  st.warning("Please upload a CSV first.")
87
 
88
- # ========================
89
  # Train & Select Model Page
90
- # ========================
91
  elif page == "Train & Select Model":
92
  st.title("Train Models and Select the Best One")
93
 
@@ -99,13 +113,17 @@ elif page == "Train & Select Model":
99
  X = df.drop(columns=[target_col])
100
  y = df[target_col]
101
 
 
102
  if y.dtype == "object" or len(y.unique()) <= 20:
103
  st.session_state.problem_type = "classification"
104
  else:
105
  st.session_state.problem_type = "regression"
106
 
 
107
  test_size = st.slider("Test size (%)", 20, 50, 30, step=5)
108
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size/100, random_state=42)
 
 
109
 
110
  results = {}
111
  st.session_state.models = {}
@@ -134,6 +152,7 @@ elif page == "Train & Select Model":
134
  results[name] = score
135
  st.session_state.models[name] = model
136
 
 
137
  st.subheader("Model Scores")
138
  for name, score in results.items():
139
  st.write(f"{name}: {score:.4f}")
@@ -145,9 +164,9 @@ elif page == "Train & Select Model":
145
  else:
146
  st.warning("Please preprocess a file first.")
147
 
148
- # ========================
149
  # Create App Page
150
- # ========================
151
  elif page == "Create App":
152
  st.title("Use Model for Prediction")
153
 
 
8
  from sklearn.tree import DecisionTreeClassifier
9
  from sklearn.metrics import accuracy_score, r2_score
10
 
11
+ # -------------------
12
+ # Session State Setup
13
+ # -------------------
14
+ defaults = {
15
+ "uploaded_file_name": None,
16
+ "df": None,
17
+ "processed_df": None,
18
+ "encoders": {},
19
+ "models": {},
20
+ "final_model": None,
21
+ "problem_type": None,
22
+ "target_encoder": None
23
+ }
24
+ for key, value in defaults.items():
25
+ if key not in st.session_state:
26
+ st.session_state[key] = value
27
+
28
+ # -------------------
29
+ # Sidebar Navigation
30
+ # -------------------
31
  st.sidebar.title("Navigation")
32
+ page = st.sidebar.selectbox("Go to", [
33
+ "Upload File",
34
+ "Preprocess Data",
35
+ "Train & Select Model",
36
+ "Create App"
37
+ ])
38
+
39
+ # -------------------
40
  # Upload File Page
41
+ # -------------------
42
  if page == "Upload File":
43
  st.title("Upload CSV or SQL File")
44
  uploaded_file = st.file_uploader("Upload a CSV or SQL file", type=["csv", "sql"])
45
 
46
  if uploaded_file is not None:
47
  st.session_state.uploaded_file_name = uploaded_file.name
48
+
49
  if uploaded_file.name.endswith(".csv"):
50
  st.session_state.df = pd.read_csv(uploaded_file)
51
  st.dataframe(st.session_state.df)
52
+
53
  elif uploaded_file.name.endswith(".sql"):
54
  sql_content = uploaded_file.read().decode("utf-8")
55
  st.text_area("SQL Content", sql_content, height=300)
56
+
57
  st.success("File loaded into memory!")
58
 
59
+ # -------------------
60
  # Preprocess Data Page
61
+ # -------------------
62
  elif page == "Preprocess Data":
63
  st.title("Preprocess Uploaded CSV")
64
  if st.session_state.df is not None:
65
  st.write("Current Data:")
66
  st.dataframe(st.session_state.df)
67
 
68
+ # Drop missing
69
  missing_placeholders = [
70
  "?", "NA", "N/A", "na", "null", "NULL", "none", "None",
71
  "missing", "Missing", "not available", "Not Available",
72
  "--", "---", "-", "_", ""
73
  ]
 
74
  if st.button("Drop Missing / Placeholder Values"):
75
+ df = st.session_state.df.replace(missing_placeholders, pd.NA)
76
+ df = df.dropna()
77
+ st.session_state.df = df
78
  st.success("Missing values dropped!")
79
 
80
+ # Drop selected columns
81
  col_to_drop = st.multiselect("Select columns to drop", st.session_state.df.columns)
82
  if st.button("Drop Selected Columns"):
83
  st.session_state.df = st.session_state.df.drop(columns=col_to_drop)
84
  st.success(f"Dropped columns: {col_to_drop}")
85
 
86
+ # Label encode
87
  if st.button("Label Encode Object Columns"):
88
  st.session_state.encoders = {}
89
  for col in st.session_state.df.select_dtypes(include=['object']).columns:
 
92
  st.session_state.encoders[col] = le
93
  st.success("Object columns label-encoded!")
94
 
95
+ # Save processed
96
  if st.button("Save Preprocessed Data"):
97
  st.session_state.processed_df = st.session_state.df.copy()
98
  st.success("Preprocessed data saved in memory!")
99
  else:
100
  st.warning("Please upload a CSV first.")
101
 
102
+ # -------------------
103
  # Train & Select Model Page
104
+ # -------------------
105
  elif page == "Train & Select Model":
106
  st.title("Train Models and Select the Best One")
107
 
 
113
  X = df.drop(columns=[target_col])
114
  y = df[target_col]
115
 
116
+ # Detect problem type
117
  if y.dtype == "object" or len(y.unique()) <= 20:
118
  st.session_state.problem_type = "classification"
119
  else:
120
  st.session_state.problem_type = "regression"
121
 
122
+ # Train/test split
123
  test_size = st.slider("Test size (%)", 20, 50, 30, step=5)
124
+ X_train, X_test, y_train, y_test = train_test_split(
125
+ X, y, test_size=test_size/100, random_state=42
126
+ )
127
 
128
  results = {}
129
  st.session_state.models = {}
 
152
  results[name] = score
153
  st.session_state.models[name] = model
154
 
155
+ # Show results
156
  st.subheader("Model Scores")
157
  for name, score in results.items():
158
  st.write(f"{name}: {score:.4f}")
 
164
  else:
165
  st.warning("Please preprocess a file first.")
166
 
167
+ # -------------------
168
  # Create App Page
169
+ # -------------------
170
  elif page == "Create App":
171
  st.title("Use Model for Prediction")
172