Marcel0123 commited on
Commit
b0a2308
·
verified ·
1 Parent(s): 8c2ab35

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -19
app.py CHANGED
@@ -49,6 +49,17 @@ def hero_path():
49
  return n
50
  return None
51
 
 
 
 
 
 
 
 
 
 
 
 
52
  def make_plot(fig, title):
53
  fig.update_layout(
54
  title=title,
@@ -122,23 +133,18 @@ def train_and_embed_solid():
122
  INTRO_MD = """
123
  # 🛳️ Titanic Data Adventure
124
  ### Een datagedreven reis door hoop, hiërarchie en toeval
125
-
126
  **April 1912.**
127
  De RMS *Titanic* vertrekt richting New York: een drijvend paleis, gevuld met verwachtingen.
128
  Aan boord: industriëlen in avondkleding, jonge gezinnen met één koffer, bemanningsleden met routine.
129
  De zee is kalm; de toekomst lijkt maakbaar.
130
-
131
  Meer dan een eeuw later kijken wij mee — niet met verrekijkers of logboeken, maar met **data**.
132
  Elk record in deze dataset is een menselijk verhaal: iemand met een plek aan tafel, een ticket, een familie, een keuze.
133
  Door de gegevens te verkennen, begrijpen we beter **wie overleefde — en waarom**.
134
-
135
  ---
136
-
137
  ### ⚓ De nacht die geschiedenis werd
138
  Op **14 april 1912**, net voor middernacht, raakte de *Titanic* een **ijsberg** in de ijskoude Noord-Atlantische Oceaan.
139
  Binnen drie uur zonk het schip – het “onzinkbare” symbool van vooruitgang bleek kwetsbaar.
140
  Meer dan **1.500 mensen** kwamen om, slechts een derde van de opvarenden vond redding in de sloepen.
141
-
142
  De verdeling tussen rijk en arm, man en vrouw, jong en oud bleek letterlijk van levensbelang.
143
  In deze applicatie duiken we opnieuw die nacht in – niet met reddingsvesten, maar met grafieken, modellen en cijfers
144
  die het menselijk verhaal achter de ramp zichtbaar maken.
@@ -152,18 +158,14 @@ EXPLAIN_MD_SIDE = """
152
  Bij het opstarten traint de computer een **RandomForest-model** dat leert wie op de Titanic **overleefde** – en waarom.
153
  Het kijkt naar **klasse**, **geslacht**, **leeftijd**, **familieomvang**, **ticketprijs** en **haven van vertrek**.
154
  De nauwkeurigheid (bijv. *74%*) betekent: in 74 van de 100 gevallen voorspelt het model correct.
155
-
156
  ---
157
-
158
  ### 🗺️ Landkaart van passagiers
159
  Elk **bolletje** is één persoon. Met **PCA** brengen we veel kenmerken terug naar **2 dimensies**.
160
  - **Blauw** → overleefd
161
  - **Grijs** → niet overleefd
162
  - **Vorm** → klasse
163
  Dichter bij elkaar = vergelijkbare profielen. **Hover** voor details.
164
-
165
  ---
166
-
167
  ### 💬 Jij in dit verhaal
168
  Vul onderaan je **eigen profiel** in, ontdek jouw kans en lees je scène uit die nacht.
169
  """
@@ -214,11 +216,8 @@ def predict_and_story(pclass, sex, age, sibsp, parch, fare, embarked):
214
  tone, ending = ("Het ziet er somber uit.",
215
  "Je klampt je vast terwijl de oceaan meedogenloos wordt.")
216
  return f"""### 🔮 Jouw overlevingskans: **{pct:.1f}%**
217
-
218
  **Situatie:** {rol_txt}, **{klasse_txt} klasse**, inscheping **{haven_txt}** — leeftijd **{int(age)}**, familie **{int(sibsp)}+{int(parch)}** (totaal {int(sibsp)+int(parch)+1}), ticket **£{float(fare):.2f}**.
219
-
220
  **Analyse:** {tone} Het model weegt o.a. klasse, geslacht, leeftijd en familieomvang mee.
221
-
222
  **Avontuur:** De nacht is stil; fluiten, geroep, voetstappen. {ending}
223
  """
224
 
@@ -269,7 +268,7 @@ body { background:#FFFFFF; color:#0B1C3F; }
269
  .gradio-container { background:#FFFFFF; }
270
  h1, h2, h3, h4 { color:#1B4B91; }
271
  .panel, .intro-card { background:#F9FBFF; border:1px solid #E0E6F3; border-radius:12px; padding:16px; }
272
- .hero-img img { border-radius:12px; border:1px solid #E0E6F3; }
273
  .kpi { display:flex; flex-direction:column; align-items:center; justify-content:center;
274
  background:#FFFFFF; border:1px solid #E0E6F3; border-radius:12px; padding:14px; }
275
  .kpi .value { font-size:1.6rem; font-weight:800; color:#1B4B91; }
@@ -317,9 +316,9 @@ with gr.Blocks(css=CUSTOM_CSS, theme=gr.themes.Default(primary_hue="blue")) as d
317
  # Tekstblok + gauge naast elkaar
318
  with gr.Row():
319
  with gr.Column(scale=2, min_width=420):
320
- gr.Markdown("""## 🔮 Jouw scenariobereken je overlevingskans en lees je scène
321
- Hier kun je ontdekken **hoe groot jouw kans op overleving** zou zijn geweest aan boord van de *Titanic* en meteen het **verhaal van jouw nacht** lezen.
322
-
323
  1. **Kies je profiel**
324
  - **Klasse:** 1e, 2e of 3e klasse (je reiscomfort en dekpositie).
325
  - **Geslacht:** man of vrouw — dit had invloed op reddingsvoorrang.
@@ -327,16 +326,17 @@ Hier kun je ontdekken **hoe groot jouw kans op overleving** zou zijn geweest aan
327
  - **Broers/zussen** en **ouders/kinderen**: hoeveel familieleden reisden met je mee.
328
  - **Ticketprijs (£):** hoe duur je passage was.
329
  - **Vertrekhaven:** Cherbourg (C), Queenstown (Q) of Southampton (S).
330
-
331
  2. **Klik op de knop “🎲 Bereken én vertel mijn verhaal”**
332
  Het model schat jouw **overlevingskans** op basis van historische patronen.
333
-
334
  3. **Lees je persoonlijke scène**
335
  Onder de knop verschijnt een korte beschrijving die je meeneemt naar die nacht —
336
  gebaseerd op jouw ingevulde profiel en de berekende kans.
337
-
338
  > 💡 *De voorspelling is een statistische schatting, geen oordeel.
339
  > Ze helpt je zien hoe factoren zoals klasse, geslacht en leeftijd destijds iemands lot konden bepalen.*""")
 
 
 
 
340
  with gr.Column(scale=1, min_width=320):
341
  viz_plot = gr.Plot(label="Jouw overlevingskans (live)")
342
 
 
49
  return n
50
  return None
51
 
52
+ def story_image_path():
53
+ """
54
+ Zoek naar de afbeelding voor het 'witte vlak' naast de gauge.
55
+ We checken zowel de projectroot als /mnt/data (handig voor Spaces).
56
+ """
57
+ candidates = ["sink.png", os.path.join("/mnt/data", "sink.png")]
58
+ for p in candidates:
59
+ if os.path.exists(p):
60
+ return p
61
+ return None
62
+
63
  def make_plot(fig, title):
64
  fig.update_layout(
65
  title=title,
 
133
  INTRO_MD = """
134
  # 🛳️ Titanic Data Adventure
135
  ### Een datagedreven reis door hoop, hiërarchie en toeval
 
136
  **April 1912.**
137
  De RMS *Titanic* vertrekt richting New York: een drijvend paleis, gevuld met verwachtingen.
138
  Aan boord: industriëlen in avondkleding, jonge gezinnen met één koffer, bemanningsleden met routine.
139
  De zee is kalm; de toekomst lijkt maakbaar.
 
140
  Meer dan een eeuw later kijken wij mee — niet met verrekijkers of logboeken, maar met **data**.
141
  Elk record in deze dataset is een menselijk verhaal: iemand met een plek aan tafel, een ticket, een familie, een keuze.
142
  Door de gegevens te verkennen, begrijpen we beter **wie overleefde — en waarom**.
 
143
  ---
 
144
  ### ⚓ De nacht die geschiedenis werd
145
  Op **14 april 1912**, net voor middernacht, raakte de *Titanic* een **ijsberg** in de ijskoude Noord-Atlantische Oceaan.
146
  Binnen drie uur zonk het schip – het “onzinkbare” symbool van vooruitgang bleek kwetsbaar.
147
  Meer dan **1.500 mensen** kwamen om, slechts een derde van de opvarenden vond redding in de sloepen.
 
148
  De verdeling tussen rijk en arm, man en vrouw, jong en oud bleek letterlijk van levensbelang.
149
  In deze applicatie duiken we opnieuw die nacht in – niet met reddingsvesten, maar met grafieken, modellen en cijfers
150
  die het menselijk verhaal achter de ramp zichtbaar maken.
 
158
  Bij het opstarten traint de computer een **RandomForest-model** dat leert wie op de Titanic **overleefde** – en waarom.
159
  Het kijkt naar **klasse**, **geslacht**, **leeftijd**, **familieomvang**, **ticketprijs** en **haven van vertrek**.
160
  De nauwkeurigheid (bijv. *74%*) betekent: in 74 van de 100 gevallen voorspelt het model correct.
 
161
  ---
 
162
  ### 🗺️ Landkaart van passagiers
163
  Elk **bolletje** is één persoon. Met **PCA** brengen we veel kenmerken terug naar **2 dimensies**.
164
  - **Blauw** → overleefd
165
  - **Grijs** → niet overleefd
166
  - **Vorm** → klasse
167
  Dichter bij elkaar = vergelijkbare profielen. **Hover** voor details.
 
168
  ---
 
169
  ### 💬 Jij in dit verhaal
170
  Vul onderaan je **eigen profiel** in, ontdek jouw kans en lees je scène uit die nacht.
171
  """
 
216
  tone, ending = ("Het ziet er somber uit.",
217
  "Je klampt je vast terwijl de oceaan meedogenloos wordt.")
218
  return f"""### 🔮 Jouw overlevingskans: **{pct:.1f}%**
 
219
  **Situatie:** {rol_txt}, **{klasse_txt} klasse**, inscheping **{haven_txt}** — leeftijd **{int(age)}**, familie **{int(sibsp)}+{int(parch)}** (totaal {int(sibsp)+int(parch)+1}), ticket **£{float(fare):.2f}**.
 
220
  **Analyse:** {tone} Het model weegt o.a. klasse, geslacht, leeftijd en familieomvang mee.
 
221
  **Avontuur:** De nacht is stil; fluiten, geroep, voetstappen. {ending}
222
  """
223
 
 
268
  .gradio-container { background:#FFFFFF; }
269
  h1, h2, h3, h4 { color:#1B4B91; }
270
  .panel, .intro-card { background:#F9FBFF; border:1px solid #E0E6F3; border-radius:12px; padding:16px; }
271
+ .hero-img img { border-radius:12px; border:1px solid #E0E6F3; width:100%; height:auto; }
272
  .kpi { display:flex; flex-direction:column; align-items:center; justify-content:center;
273
  background:#FFFFFF; border:1px solid #E0E6F3; border-radius:12px; padding:14px; }
274
  .kpi .value { font-size:1.6rem; font-weight:800; color:#1B4B91; }
 
316
  # Tekstblok + gauge naast elkaar
317
  with gr.Row():
318
  with gr.Column(scale=2, min_width=420):
319
+ # Let op: de zin 'en meteen het verhaal van jouw nacht lezen.' is weggelaten
320
+ gr.Markdown("""## 🔮 Jouw scenariobereken je overlevingskans
321
+ Hier kun je ontdekken **hoe groot jouw kans op overleving** zou zijn geweest aan boord van de *Titanic*.
322
  1. **Kies je profiel**
323
  - **Klasse:** 1e, 2e of 3e klasse (je reiscomfort en dekpositie).
324
  - **Geslacht:** man of vrouw — dit had invloed op reddingsvoorrang.
 
326
  - **Broers/zussen** en **ouders/kinderen**: hoeveel familieleden reisden met je mee.
327
  - **Ticketprijs (£):** hoe duur je passage was.
328
  - **Vertrekhaven:** Cherbourg (C), Queenstown (Q) of Southampton (S).
 
329
  2. **Klik op de knop “🎲 Bereken én vertel mijn verhaal”**
330
  Het model schat jouw **overlevingskans** op basis van historische patronen.
 
331
  3. **Lees je persoonlijke scène**
332
  Onder de knop verschijnt een korte beschrijving die je meeneemt naar die nacht —
333
  gebaseerd op jouw ingevulde profiel en de berekende kans.
 
334
  > 💡 *De voorspelling is een statistische schatting, geen oordeel.
335
  > Ze helpt je zien hoe factoren zoals klasse, geslacht en leeftijd destijds iemands lot konden bepalen.*""")
336
+ sp = story_image_path()
337
+ if sp:
338
+ # Plaats de afbeelding in het witte vlak onder de tekst
339
+ gr.Image(value=sp, interactive=False, show_label=False, elem_classes=["hero-img"])
340
  with gr.Column(scale=1, min_width=320):
341
  viz_plot = gr.Plot(label="Jouw overlevingskans (live)")
342