Marcel0123 commited on
Commit
3c90c43
·
verified ·
1 Parent(s): 8e2d7a7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -28
app.py CHANGED
@@ -13,7 +13,7 @@ import os
13
  # =======================
14
  # DATA LADEN
15
  # =======================
16
- REQUIRED_COLS = {"survived","pclass","sex","age","sibsp","parch","fare","embarked"}
17
 
18
  def load_data(csv_path="Titanic-Dataset.csv"):
19
  if not os.path.exists(csv_path):
@@ -44,7 +44,9 @@ def train_model(modeltype="Random Forest"):
44
  for c in X.select_dtypes("object").columns:
45
  le = LabelEncoder()
46
  X[c] = le.fit_transform(X[c])
47
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
 
 
48
  if modeltype == "Random Forest":
49
  model = RandomForestClassifier(n_estimators=300, random_state=42)
50
  else:
@@ -74,15 +76,20 @@ def tab_intro():
74
 
75
  # Tab 2 – Verkenning
76
  def tab_verkenning():
77
- # Interactieve Plotly-grafieken
78
  fig1 = px.histogram(
79
- df, x="age", color=df["survived"].map({0:"Niet overleefd",1:"Overleefd"}),
80
- nbins=30, title="Leeftijdsverdeling per overlevingsstatus"
 
 
 
81
  )
82
  fig1.update_layout(legend_title_text="Status", bargap=0.05)
83
  fig2 = px.box(
84
- df, x="pclass", y="fare", color=df["survived"].map({0:"Niet overleefd",1:"Overleefd"}),
85
- title="Ticketprijs per klasse"
 
 
 
86
  )
87
  fig2.update_layout(legend_title_text="Status")
88
  return fig1, fig2
@@ -93,11 +100,10 @@ def tab_model(model_type):
93
  _, acc = train_model(model_type)
94
  return f"Het {model_type}-model behaalt een nauwkeurigheid van **{acc:.2%}**."
95
  except Exception as e:
96
- return f"Fout bij trainen: {e}"
97
 
98
  # Tab 4 – Voorspelling
99
  def predict_overleven(pclass, sex, age, sibsp, parch, fare, embarked):
100
- # Train snel RF op de volledige dataset (demo-doeleinden)
101
  X = df.drop("survived", axis=1).copy()
102
  y = df["survived"].astype(int).copy()
103
  for c in X.select_dtypes("object").columns:
@@ -105,19 +111,17 @@ def predict_overleven(pclass, sex, age, sibsp, parch, fare, embarked):
105
  X[c] = le.fit_transform(X[c])
106
  rf = RandomForestClassifier(n_estimators=300, random_state=42)
107
  rf.fit(X, y)
108
- # encode invoer
109
  sex_enc = 1 if str(sex).lower().startswith("v") else 0 # Vrouw=1, Man=0
110
  embarked_enc = {"C": 0, "Q": 1, "S": 2}.get(str(embarked).strip()[0].upper(), 2)
111
- row = [[int(pclass), int(sex_enc), float(age), int(sibsp), int(parch), float(fare), int(embarked_enc)]]
112
  p = rf.predict_proba(row)[0, 1]
113
  return f"🎯 Je geschatte overlevingskans is **{p:.1%}**."
114
 
115
  # =======================
116
  # UI – Gradio
117
  # =======================
118
-
119
  custom_css = """
120
- /* Achtergrond + leesbaarheid */
121
  body {
122
  background: url('titanic_bg.png') no-repeat center center fixed;
123
  background-size: cover;
@@ -126,8 +130,6 @@ body {
126
  .gradio-container {
127
  background: rgba(10, 16, 26, 0.70);
128
  }
129
-
130
- /* Glossy zonsondergang rechtsboven */
131
  .gradio-container::before {
132
  content: '';
133
  position: fixed;
@@ -137,19 +139,13 @@ body {
137
  pointer-events: none;
138
  z-index: 0;
139
  }
140
-
141
- /* Tekstcontrasten */
142
  h1, h2, h3, p, label, .gr-markdown { color: #eef5ff !important; }
143
  label { font-weight: 600; }
144
-
145
- /* Kaarten / secties */
146
  div.svelte-1ipelgc, .block.padded {
147
  background: rgba(20, 28, 42, 0.70) !important;
148
  border-radius: 16px;
149
  border: 1px solid rgba(60, 80, 110, 0.5);
150
  }
151
-
152
- /* Tabs */
153
  button.svelte-1ipelgc, .tabitem {
154
  backdrop-filter: blur(2px);
155
  }
@@ -163,13 +159,17 @@ with gr.Blocks(css=custom_css, theme=gr.themes.Soft(primary_hue="blue", secondar
163
 
164
  with gr.Tab("Verkenning"):
165
  btn1 = gr.Button("Toon grafieken")
166
- out1 = gr.Plotl(label="Leeftijdsverdeling")
167
- out2 = gr.Plotl(label="Ticketprijs per klasse")
168
  btn1.click(fn=tab_verkenning, outputs=[out1, out2])
169
 
170
  with gr.Tab("Machine Learning"):
171
  with gr.Row():
172
- model_dropdown = gr.Dropdown(["Random Forest", "Logistic Regression"], label="Kies modeltype", value="Random Forest")
 
 
 
 
173
  btn2 = gr.Button("Train model")
174
  out3 = gr.Markdown()
175
  btn2.click(fn=tab_model, inputs=model_dropdown, outputs=out3)
@@ -186,8 +186,10 @@ with gr.Blocks(css=custom_css, theme=gr.themes.Soft(primary_hue="blue", secondar
186
  embarked = gr.Radio(["C", "Q", "S"], label="Vertrekhaven", value="S")
187
  btn3 = gr.Button("Voorspel")
188
  out4 = gr.Markdown()
189
- btn3.click(fn=predict_overleven,
190
- inputs=[pclass, sex, age, sibsp, parch, fare, embarked],
191
- outputs=out4)
 
 
192
 
193
- demo.launch()
 
13
  # =======================
14
  # DATA LADEN
15
  # =======================
16
+ REQUIRED_COLS = {"survived", "pclass", "sex", "age", "sibsp", "parch", "fare", "embarked"}
17
 
18
  def load_data(csv_path="Titanic-Dataset.csv"):
19
  if not os.path.exists(csv_path):
 
44
  for c in X.select_dtypes("object").columns:
45
  le = LabelEncoder()
46
  X[c] = le.fit_transform(X[c])
47
+ X_train, X_test, y_train, y_test = train_test_split(
48
+ X, y, test_size=0.2, random_state=42, stratify=y
49
+ )
50
  if modeltype == "Random Forest":
51
  model = RandomForestClassifier(n_estimators=300, random_state=42)
52
  else:
 
76
 
77
  # Tab 2 – Verkenning
78
  def tab_verkenning():
 
79
  fig1 = px.histogram(
80
+ df,
81
+ x="age",
82
+ color=df["survived"].map({0: "Niet overleefd", 1: "Overleefd"}),
83
+ nbins=30,
84
+ title="Leeftijdsverdeling per overlevingsstatus",
85
  )
86
  fig1.update_layout(legend_title_text="Status", bargap=0.05)
87
  fig2 = px.box(
88
+ df,
89
+ x="pclass",
90
+ y="fare",
91
+ color=df["survived"].map({0: "Niet overleefd", 1: "Overleefd"}),
92
+ title="Ticketprijs per klasse",
93
  )
94
  fig2.update_layout(legend_title_text="Status")
95
  return fig1, fig2
 
100
  _, acc = train_model(model_type)
101
  return f"Het {model_type}-model behaalt een nauwkeurigheid van **{acc:.2%}**."
102
  except Exception as e:
103
+ return f"⚠️ Fout bij trainen: {e}"
104
 
105
  # Tab 4 – Voorspelling
106
  def predict_overleven(pclass, sex, age, sibsp, parch, fare, embarked):
 
107
  X = df.drop("survived", axis=1).copy()
108
  y = df["survived"].astype(int).copy()
109
  for c in X.select_dtypes("object").columns:
 
111
  X[c] = le.fit_transform(X[c])
112
  rf = RandomForestClassifier(n_estimators=300, random_state=42)
113
  rf.fit(X, y)
114
+ # Encode invoer
115
  sex_enc = 1 if str(sex).lower().startswith("v") else 0 # Vrouw=1, Man=0
116
  embarked_enc = {"C": 0, "Q": 1, "S": 2}.get(str(embarked).strip()[0].upper(), 2)
117
+ row = [[int(pclass), sex_enc, float(age), int(sibsp), int(parch), float(fare), embarked_enc]]
118
  p = rf.predict_proba(row)[0, 1]
119
  return f"🎯 Je geschatte overlevingskans is **{p:.1%}**."
120
 
121
  # =======================
122
  # UI – Gradio
123
  # =======================
 
124
  custom_css = """
 
125
  body {
126
  background: url('titanic_bg.png') no-repeat center center fixed;
127
  background-size: cover;
 
130
  .gradio-container {
131
  background: rgba(10, 16, 26, 0.70);
132
  }
 
 
133
  .gradio-container::before {
134
  content: '';
135
  position: fixed;
 
139
  pointer-events: none;
140
  z-index: 0;
141
  }
 
 
142
  h1, h2, h3, p, label, .gr-markdown { color: #eef5ff !important; }
143
  label { font-weight: 600; }
 
 
144
  div.svelte-1ipelgc, .block.padded {
145
  background: rgba(20, 28, 42, 0.70) !important;
146
  border-radius: 16px;
147
  border: 1px solid rgba(60, 80, 110, 0.5);
148
  }
 
 
149
  button.svelte-1ipelgc, .tabitem {
150
  backdrop-filter: blur(2px);
151
  }
 
159
 
160
  with gr.Tab("Verkenning"):
161
  btn1 = gr.Button("Toon grafieken")
162
+ out1 = gr.Plot(label="Leeftijdsverdeling")
163
+ out2 = gr.Plot(label="Ticketprijs per klasse")
164
  btn1.click(fn=tab_verkenning, outputs=[out1, out2])
165
 
166
  with gr.Tab("Machine Learning"):
167
  with gr.Row():
168
+ model_dropdown = gr.Dropdown(
169
+ ["Random Forest", "Logistic Regression"],
170
+ label="Kies modeltype",
171
+ value="Random Forest",
172
+ )
173
  btn2 = gr.Button("Train model")
174
  out3 = gr.Markdown()
175
  btn2.click(fn=tab_model, inputs=model_dropdown, outputs=out3)
 
186
  embarked = gr.Radio(["C", "Q", "S"], label="Vertrekhaven", value="S")
187
  btn3 = gr.Button("Voorspel")
188
  out4 = gr.Markdown()
189
+ btn3.click(
190
+ fn=predict_overleven,
191
+ inputs=[pclass, sex, age, sibsp, parch, fare, embarked],
192
+ outputs=out4,
193
+ )
194
 
195
+ demo.launch()