-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathP1B3-DataStorytellingBasics.qmd
More file actions
490 lines (350 loc) · 12.5 KB
/
P1B3-DataStorytellingBasics.qmd
File metadata and controls
490 lines (350 loc) · 12.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
---
execute:
echo: true
format:
revealjs:
width: 1245
height: 700
controls: true
menu: true
slide-number: true
transition: fade
auto-stretch: false
embed-resources: false
toc: false
center: true
preview-links: false
theme:
- simple
- style/style_background.scss
filters:
- pyodide
---
## { .custom-title }
 
::: {.notes}
“Emplear datos, imágenes y narrativa para convencer a la audiencia y persuadirlos de actuar”
Key content:
- Why Data Storytelling? (Practical Storytelling)
- 5 Data Storytelling Principles
- You cant tell people what to feel. Make them feel it, make it obvious.
- You cant tell people what to think. Make a crumb path for them to get to the discovery. (Example: X means Y. (people reacts to it). I'm from Y, and I have experienced X. So I think if Y, then X.)
- Make people work for their meal. "Ikea effect!"
- Don't make yourself replaceable. You "dance" with your presentation. It's a complement.
- Stories are inevitable, but not predictable. Just like life. You don't know what will happen, but when it happens, it makes sense.
- You can't tell all stories at the same time. Pick one hero, one villain. 1 perspective. (This links to visualization)
- Objective of all stories is change. Something changes, irrevocably. A story without change is dull, is a "semblanza", a description.
- Practical Storytelling is not putting memes on your slide deck. Dont be the meme guy. Avoid common places - reuse them smartly.
ToDo:
:::
---
## { .custom-title }
::: {style="position: absolute; left: 500px; top: 500px; width:2000px; background-color: #ffffff; padding: 10px; border-radius: 5px;"}
[Python and Data Storytelling <br> to create and deliver better presentations]{style="font-size: 40px; font-weight: bold; margin: 0px"} <br>
[Sebastián Flores, EuroPyCon 2025]{style="font-size: 25px;"}
:::
---
## { .custom-title }
::: {style="position: absolute; left: 700px; top: 550px; width:2000px; background-color: #ffffff; padding: 10px; border-radius: 5px;"}
[Part 1 - Block 3]{style="font-size: 20px; margin: 0px;"} <br>
[Data Storytelling Basics]{style="font-size: 30px; font-weight: bold; margin: 0px"} <br>
:::
---
## Agenda { .custom-slide }
::: columns
::: {.column width="30%" .incremental}
*  
* No
* Nope
* No chance
:::
::: {.column width="70%" .fragment}
Never give away the ending!
Always raise the stakes!
:::
:::
---
::: {.callout-warning title="Important"}
[Do whatever works for your presentation. Be as unconventional as you want/can.]{.fragment}
[**You** are in charge of the **narrative** and the **instruments** to tell it.]{.fragment}
:::
---
## { .custom-section }
::: {style="position: absolute; left: 100px; top: 500px; width:2000px; background-color: #ffffff; padding: 10px; border-radius: 5px;"}
[Why Data Storytelling?]{style="font-size: 60px; margin: 0px"} <br>
:::
---
## ¿Storytelling?
::: columns
::: {.column width="50%"}
{fig-align="center"}
:::
::: {.column width="50%" .fragment .center}
 <br><br><br><br>
Stories are the first human technology
It's part of how our brains are wired!
:::
:::
---
What's the main plot of:
- Cinderella, The beauty and the beast, Lillo & Stich, ...
- Jurassic Park, Star Wars, Back to the future, ...
[**Stories are easy to remember.**]{.fragment}
[A presentation **with stories** will be easier to remember.]{.fragment}
---
## The hackable brain
The main point of Data Storytelling is that brains have some [**very predictable patterns**]{.fragment}.
[Storytellers know and exploit this.]{.fragment}
---
## Example #1
::: columns
::: {.column width="45%"}
Peak-End Rule
{fig-align="center"}
[Image by sketplanation]{style="font-size: 0.5em; color: gray"}
:::
::: {.column width="55%" .fragment}
{fig-align="center"}
[Game of Thrones rating, by Kelvin Neo]{style="font-size: 0.5em; color: gray" .fragment}
:::
:::
---
::: {.callout-tip title="Example #1: What did we learn?" .fragment}
Endings are the most important part of the story (and the presentation).
The ending is what gets remembered. It should tie everything together.
Work on your final slides - don't leave it to change. Skip the middle slides if needed, never the last ones.
:::
---
## Example #2
::: columns
::: {.column width="30%" .fragment fragment-index=1}
{fig-align="center"}
:::
::: {.column width="40%" .center}
 <br><br>
How to make millions of people share statistics on social media?
:::
::: {.column width="30%" .fragment fragment-index=1}
{fig-align="center"}
:::
:::
---
::: {.callout-tip title="Example #2: What did we learn?"}
[Statistics get ignored.]{.fragment}
[Emotions are remembered.]{.fragment}
[Stories get shared.]{.fragment}
:::
---
##
::: columns
::: {.column width="60%"}
 <br><br><br>
Data Storytelling:
Using storytelling **tricks** to create presentations that will be **remembered** and that **create impact**
:::
::: {.column width="40%" .fragment}
{fig-align="center"}
:::
:::
. . .
::: {style="text-align: center;"}
Emotions create actions
:::
---
## { .custom-section }
::: {style="position: absolute; left: 100px; top: 500px; width:2000px; background-color: #ffffff; padding: 10px; border-radius: 5px;"}
[5 Data Storytelling Principles]{style="font-size: 60px; margin: 0px"} <br>
:::
---
## Principle #1
[Always raise the stakes!]{.fragment}
[Never give away the ending!]{.fragment}
[This is called **"creating a narrative debt"**]{.fragment}
---
## Hansel and Gretel {.incremental}
::: columns
::: {.column width="70%" style="font-size:0.60em;"}
- **Main Problem**: Food scarsity at home
- **Problem 1**: Father wants to abandon H&G at forest
- *Solution*: Use breadcrumbs to mark the road
- *Problem*: Birds eat breadcrumbs and they get lost
- **Problem 2**: H&G get lost and hungry
- *Solution*: Find a sugar house. Eat it!
- *Problem*: They get captured by house owner: a witch!
- **Problem 3**: Witch has cannibalistic intentions
- *Solution*: Use chicken finger to trick the witch
- *Problem*: She is suspicious
- **Problem 4**: She wants to put them in the oven
- *Solution*: Push witch in oven.
- **Solution**: Return home with witch's treasure.
:::
::: {.column width="25%"}
{fig-align="center" width="100%"}
:::
:::
---
## Principle #2
[Details are important, but not all details are important.]{.fragment}
[Keep only the essential.]{.fragment}
[This is called **"The Chekhov's Gun"**]{.fragment}
---
This manifests in:
- Less text
- Rounding numbers
- Simpler graphs
- Analogies and metaphors
---
[Don't try to look smart by using **fancy words**.]{.fragment}
[Smart people are those who can explain complex ideas in simple ways, not who knows more **jargon**.]{.fragment}
---
## Principle #3
[People like better when they participate on the process.]{.fragment}
[Make people work for their meal (but never too much).]{.fragment}
[This is called **"The IKEA effect"**.]{.fragment}
---
::: columns
::: {.column width="60%"}
<br>
People don't like to be spoonfed nor ignored.
Leave enough breadcrumbs for people to follow and anticipate the story/solution, without revealing the ending.
:::
::: {.column width="35%"}
{fig-align="center"}
:::
:::
---
## Principle #4
Your first draft is always going to be terrible.
---
##
::: columns
::: {.column width="60%"}
 <br><br>
* Use AI chatbots for:
* Analogies and examples
* Prompts to create better images!
* Don't search for images, create them!
:::
::: {.column width="40%" .fragment}
{fig-align="center"}
:::
:::
---
## Principle #5
[Show]{style="color: green"}, [don't tell.]{style="color: red"}
::: {.incremental}
- Don't say "this is the best": show why it's be the best.
- Don't say the code is clean: show the code.
:::
---
## [Show]{style="color: green"}, [don't tell.]{style="color: red"}
::: columns
::: {.column width="50%" .fragment fragment-index=2}
[Guido's eyes lit up as the terminal finally executed without errors. A wide grin spread across his face. He jumped up from his chair, fists raised in triumph. "Yes!" he exclaimed, as he savored the moment of triumph with a deep, contented sigh.]{style="color: green"}
:::
::: {.column width="50%" .fragment fragment-index=1}
[Guido was happy because he solved the bug on his code.]{style="color: red"}
:::
:::
---
## [Show]{style="color: green"}, [don't tell]{style="color: red"} for engineers
### Tell:
```
print(*objects, sep=' ', end='\n', file=None, flush=False)
Print objects to the text stream file, separated by sep and followed by end. sep, end, file, and flush, if present, must be given as keyword arguments.
All non-keyword arguments are converted to strings like str() does and written to the stream, separated by sep and followed by end. Both sep and end must be strings; they can also be None, which means to use the default values. If no objects are given, print() will just write end.
The file argument must be an object with a write(string) method; if it is not present or None, sys.stdout will be used. Since printed arguments are converted to text strings, print() cannot be used with binary mode file objects. For these, use file.write(...) instead.
Output buffering is usually determined by file. However, if flush is true, the stream is forcibly flushed.
Changed in version 3.3: Added the flush keyword argument.
```
---
## [Show]{style="color: green"}, [don't tell]{style="color: red"} for engineers
### Show:
Documentation:
```python
print(*objects, sep=' ', end='\n', file=None, flush=False)
```
Executable code:
```{pyodide-python}
print("Hello", "lovely", "people", sep="\n") # Try: "", " ", "🇨🇿", ...
```
---
## The framework
Brandon Sanderson's storytelling framework:
* **Promise**: [What is the story about?]{.fragment .fragment-index-1}
* **Progress**: [Is the story advancing towards the promise?]{.fragment .fragment-index-2}
* **Payoff**: [Did you fulfill or break the promise?]{.fragment .fragment-index-3}
[Payoff != Ending.]{.fragment}
[Payoff is how satisfactory is the ending of the story.
Was the effort worth it?]{.fragment}
---
## Example: Star Wars IV
::: columns
::: {.column width="20%"}
{fig-align="center" width="100%"}
:::
::: {.column width="80%"}
* **Promise**: [Rebels fight back against the Empire.]{.fragment .fragment-index-1}
* **Progress**: [Luke develops his skills as a Jedi.]{.fragment .fragment-index-2}
* **Payoff**: [The death star explodes!]{.fragment .fragment-index-3}
:::
:::
---
## Example: Jurassic Park I
::: columns
::: {.column width="20%"}
{fig-align="center" width="100%"}
:::
::: {.column width="80%"}
* **Promise**: [Accidents in a park with dinosaurs.]{.fragment .fragment-index-1}
* **Progress**: [Accidents get progressively worse.]{.fragment .fragment-index-2}
* **Payoff**: [Protagonists survive but dinasaurs overrun the park.]{.fragment .fragment-index-3}
:::
:::
---
## Example:
Let's apply it to any story or presentation!
* **Promise**:
* **Progress**:
* **Payoff**:
*Some ideas:
The Lord of the Rings, The Name of the Wind, Ring World, ...*
---
## How does this applies to data and slides?
---
##
Same data, two plots:
::: columns
::: {.column width="50%" .fragment}
{fig-align="center"}
:::
::: {.column width="50%" .fragment}
{fig-align="center"}
:::
:::
. . .
Don't share numbers. Share a story.
[(C) Storytelling with Data, por Cole Nussbaumer Knaflic.]{style="font-size: 0.75em; color: gray"}
---
## Recommended reading - The short list
* Storyworthy, Matthew Dicks
* Storytelling with Data, Cole Nussbaumer Knaflic
* How charts lie, Alberto Cairo
* The Visual Display of Quantitative Information, Edward Tufte
---
## Recommended reading for **Storytelling**
* Storyworthy - Matthew Dicks
* Made to Stick - Chip Heath and Dan Heath
* Bird by Bird – Anne LaMott
* The Science of Storytelling – Will Storr
* A Swim in a Pond in the Rain – George Saunders
* Steering the Craft – Ursula K. Le Guin
---
## Recommended reading for **Data Storytelling**
* Storytelling with Data - Cole Nussbaumer Knaflic
* The Visual Display of Quantitative Information - Edward Tufte
* Beautiful Evidence - Edward Tufte
* How charts lie - Alberto Cairo
* The Truthful Art - Alberto Cairo
* The Functional Art - Alberto Cairo
* Matplotlib Journey (https://www.matplotlib-journey.com/) - Yann Holtz and Joseph Barbier