forked from CorrelAid/lernplattform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
13_abschlussquiz.Rmd
636 lines (561 loc) · 31.9 KB
/
13_abschlussquiz.Rmd
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
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
## **Abschlussquiz**
Hier kannst Du deinen **Wissensstand überprüfen**. Für die Bearbeitung solltest Du zwei Stunden Zeit (**120min**) einplanen. Viel Glück!
### **Theoretischer Teil** (40 Fragen - 60min Zeit)
In diesem Teil fragen wir Euer theoretisches Wissen ab. Ein Großteil der Fragen setzt sich aus den Quiz der Lektionen in den vergangenen Wochen zusammen. Dort könnt Ihr auch nochmal nachlesen, wenn Ihr nicht verstanden habt, warum Eure Antwort nicht richtig war.
```{r quiz_lernzielkontrolle}
quiz(caption = NULL,
question("Datenwissenschaft ist ein interdisziplinäres Feld. Eine Person, die in diesem Bereich tätig ist, sollte...",
answer("analytische Fähigkeiten haben.", correct = TRUE),
answer("technische Fähigkeiten besitzen.", correct = TRUE),
answer("sich mit der Domain (zu dt. Bereich) auskennen.", correct = TRUE),
answer("Keins davon"),
correct = "Richtig!",
incorrect = "Leider falsch: Alle diese Aussagen treffen zu.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Die Datenstrategie Eurer Organisation sollte in erster Linie worauf aufbauen?",
answer("Ungenutzten Daten, die Ihr bereits erhoben habt"),
answer("Daten, die Ihr noch erheben möchtet"),
answer("Neusten, technischen Möglichkeiten"),
answer("Eurer Organisationsstrategie", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Datennutzung ist mit erheblichen Ressourcenaufwendungen verbunden. Datenprojekte kosten Zeit und Geld und innerhalb Eurer Organisation müssen Veränderungsprozesse nicht nur in Euren Systemen sondern auch in Eurer Kultur verankert werden. Deshalb sollte die Datenstrategie auf strategischen Zielsetzungen aufbauen, sodass kostbare Ressourcen nicht an falscher Stelle verbraucht und Projekte umsichtig und inklusiv geplant werden.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Automatisierungen haben generell einen höheren Mehrwert als explorative Analysen",
answer("Korrekt"),
answer("Inkorrekt", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Auch Technologien mit niedrigem analytischen Reifegrad wie explorative Analysen (Visualsierungen und erste Kennwertberechnungen) und manuelle Reports können enormen Mehrwert enthalten - insbesondere im Vergleich zu damit verbundenen Aufwendungen. Technologien müssen deshalb für jeden Anwendungsfalls individuell evaluiert werden.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Quantitative Forschung ist grundsätzlich besser als qualitative Forschung.",
answer("Korrekt"),
answer("Inkorrekt", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Quantitative und qualitative Forschung haben unterschiedlicher Vor- und Nachteile. Am besten kombiniert Ihr die beiden Forschungsmethoden, indem Ihr beispielsweise in Euren Erhebungsdaten geschlossene und offene Fragestellungen wählt.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Aus welchen verfassungsrechtlichen Grundsätzen ergibt sich der Datenschutz?",
answer("Aus Artikel 1, Abs. 1 . - Die Würde des Menschen ist unantastbar"),
answer("Artikel 2 Abs. 1 – Jeder hat
das Recht auf die freie Entfaltung seiner Persönlichkeit"),
answer("Aus Artikel 1, Abs. 1, UND Artikel 2, Abs. 1", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch. Richtig ist: Art 1 I. – Die Würde des Menschen ist unantastbar – und Art 2 I. – Jeder hat das Recht auf die freie Entfaltung seiner Persönlichkeit, die zusammen das Allgemeine Persönlichkeitsrecht (APR) ergeben.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wie ist Datensicherheit definiert? Sie bezeichnet...",
answer("...die Festlegung von einem Regelkatalog im Umgang mit Daten in Organisationen."),
answer("...die Einführung von technischen Hürden bei Datenzugriffen."),
answer("...die praktische Umsetzung des Datenschutzes durch strukturelle Maßnahmen und funktionierende IT.", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch. Zur Umsetzung des verfassungsrechtlich garantierten Rechts auf Datenschutzes ist es notwendig sowohl organisatorische Maßnahmen, wie z.B. Vereinbarungen mit Mitarbeitenden, als auch technische Maßnahmen, wie z.B. Passwortschutz und Verwaltung von Zugriffsrechten, zu ergreifen. ",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Daten werden von der DSGVO geschützt?",
answer("Personenbezogene Daten", correct = TRUE),
answer("Organisations-/Unternehmensdaten"),
answer("Alle Daten"),
correct = "Richtig!",
incorrect = "Richtig wäre: Personenbezogene Daten, also „alle Informationen, durch die eine natürlich ePerson, also Menschen, direkt oder indirekt identifiziert werden oder identifizierbar sind, also durch Merkmale, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind“. Daten von nicht-natürlichen, also juristischen Personen, wie Vereinen und Unternehmen sind also nicht von der DSGVO geschützt. Hier gelten ggf. das Geschäftsgeheimnisgesetz (GeschGehG) sowie bilateral getroffene Vereinbarungen zur Datenverarbeitung.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Kernpflichten umfasst die DSGVO?",
answer("Rechtmäßigkeit", correct = TRUE),
answer("Zweckbindung", correct = TRUE),
answer("Datenminimierung", correct = TRUE),
answer("Richtigkeit", correct = TRUE),
answer("Datenreduktion", correct = TRUE),
answer("Vertraulichkeit", correct = TRUE),
answer("Rechenschaft", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch - richtig sind alle sieben.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Von welchen Kriterien könnt Ihr solche ethischen Überlegungen zu Datenanalysen leiten lassen?",
answer("Ich kann überlegen, ob die Datenanalyse zu Diskriminierung einer Politisierung des Themas und/oder zur strukturellen Benachteiligung von Gruppen führen könnte", correct = TRUE),
answer("Ich kann evaluieren, ob die Datengrundlage überhaupt ausreicht, um den Sachverhalt wissenschaftlich zu bewerten, und das auch sinnvoll ist", correct = TRUE),
answer("Ich kann prüfen, ob die Daten repräsentativ oder eventuell (historisch) verzerrt sind", correct = TRUE),
answer("Ich kann mir bei der Programmierung von Algorithmen Gedanken darüber machen, ob die Entscheidung überhaupt maschinell und automatisiert erfolgen sollte", correct = TRUE),
answer("Ich kann bei der Programmierung von Algorithmen darüber nachdenken, ob Entscheidungen durch Algorithmen auf Basis von sozio-demographischen Merkmalen und deren Proxies im Anwendungsfall überhaupt fair sind", correct = TRUE),
correct = "Richtig! Darüber hinaus gibt es aber noch wesentlich mehr Möglichkeiten. Legt idealerweise selbst einen Katalog an, der Euch als Entscheidungshilfe dient.",
incorrect = " Leider falsch! Zumindest die genannten vier sollten alle angewandt werden. Darüber hinaus gibt es aber noch wesentlich mehr Möglichkeiten. Legt idealerweise selbst einen Katalog an, der Euch als Entscheidungshilfe dient.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("R ist eine statistische Programmiersprache, in der diverse Funktionalitäten und zahlreiche Frameworks über R-Packages kostenfrei genutzt werden können.",
answer("Korrekt", correct = TRUE),
answer("Inkorrekt"),
correct = "Richtig! Dieser Open Source Charakter ist auch das tolle an R - alle können sich R leisten und viele Menschen auf der ganzen Welt tragen zu der Vielfalt und der Langlebigkeit des Datenanalysetools bei.",
incorrect = "Leider falsch: Dieser Open Source Charakter ist ja das tolle an R - alle können sich R leisten und viele Menschen auf der ganzen Welt tragen zu der Vielfalt und der Langlebigkeit des Datenanalysetools bei.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Ich muss nicht auf die Groß- und Kleinschreibung achten, wenn ich in R programmiere.",
answer("Korrekt"),
answer("Inkorrekt", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Es gibt all diese Dateiformate in RStudio.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Code ist über Patent- und Urheberrechte geschützt, deshalb darf ich nichts von anderen Coder:innen benutzen.",
answer("Korrekt"),
answer("Inkorrekt", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Gerade dadurch, dass Code nicht geschützt ist, können wir Packages ja erst nutzen - oder uns in Foren wie StackOverflow austauschen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Aussagen über den Syntax in R und RMDs sind wahr?",
answer("Code Chunks werden in RMDs durch ``` eingeschlossen und sind grau hinterlegt.", correct = TRUE),
answer("Optionen für den Output eines Code Chunks können wir in RMDs durch \"{r code_chunk_label, setting1 =..., ...\" festlegen.", correct = TRUE),
answer("Funktionsaufrufe folgen der Logik \"package::funktion(argument1, argument2, ...)\".", correct = TRUE),
answer("Objekte werden mit \"name <- objekt\" definiert.", correct = TRUE),
answer("Kommentare in Code Chunks werden mit \"#\" geschrieben und dann bei der Auswertung des Codes ignoriert.", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch. Alle Aussagen über den Syntax in R sind wahr.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("IDE steht für Integrated Development Environment (zu dt. integrierte Entwicklungsumgebung). RStudio ist eine integrierte Entwicklungsumgebung für R.",
answer("Korrekt", correct = TRUE),
answer("Inkorrekt"),
correct = "Richtig!",
incorrect = "Leider falsch - die beiden Aussagen sind richtig.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Dateiformate in RStudio sind unter anderem...",
answer("R Markdowns (kurz RMD) zur Erstellung von PDF- und HTML-Reporten.", correct = TRUE),
answer("Shiny Web Apps zur Erstellung von interaktiven Dashboards.", correct = TRUE),
answer("R Skripte ohne bestimmtes Format", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Es gibt all diese Dateiformate in RStudio.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Knitting bedeutet, dass ich aus einem ganzen RMD PDF-, HTML- oder Worddateien erstelle, während \"Run\" bedeutet, dass Code über die Konsole oder in meinem RMD interpretiert werden soll.",
answer("Korrekt", correct = TRUE),
answer("Inkorrekt"),
correct = "Richtig!",
incorrect = "Leider falsch: Die Aussage ist wahr",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wie könnt Ihr in R-Dateien R-Packages und ihre Funktionen integrieren?",
answer("Durch eine einmalige Installation mit: install.packages(\"packagename\")"),
answer("Durch eine einmalige Installation mit: library(packagename)"),
answer("Durch eine einmalige Installation mit: library(packagename), durch das Laden des Packages in jeder Datei mit: install.packages(\"packagename\")"),
answer("Durch eine einmalige Installation mit: install.packages(\"packagename\"), durch das Laden des Packages in jeder Datei mit: library(packagename)", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wie nutzt Ihr die Hilfefunktionalität in RStudio?",
answer("Über die Konsole mit: ?"),
answer("Über die Konsole mit: ?function", correct = TRUE),
answer("Über die Konsole mit: ??function", correct = TRUE),
answer("Über die Konsole mit: help(\"function\")", correct = TRUE),
answer("Über die Konsole mit: hilfe(\"function\")"),
answer("Über die Suchleiste der Help-Reiters (unten rechts in RStudio)", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Ihr müsst spezifieren, bei welcher Funktion Ihr Hilfe braucht.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Schreibweise entspricht entspricht dem \"Best Practice\"?",
answer("function(argument1, argument2,...)"),
answer("packagename::function(argument1, argument2,...)", correct = TRUE),
correct = "Richtig! Der Packagename hilft Anderen (und Eurem zukünftigen Ich) zu verstehen, welche Funktion Ihr genutzt habt und woher sie stammt.",
incorrect = "Leider falsch. Der Packagename hilft Anderen (und Eurem zukünftigen Ich) zu verstehen, welche Funktion Ihr genutzt habt und woher sie stammt.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Informationen können in einer Error Message enthalten sein?",
answer("Die Stelle, an der der Fehler auftritt", correct = TRUE),
answer("Die Fehlerart", correct = TRUE),
answer("Hinweise, wie der Fehler zu beheben ist", correct = TRUE),
correct = "Richtig! Anfangs könnte Ihr einfach die gesamte Fehlermeldung in eine Suchmaschine wie Google kopieren, später hilft einem oft dann schon die Meldung selbst.",
incorrect = "Leider falsch: Alle diese Informationen können enthalten sein - deshalb sind Error Messages für Euch eine riesige Hilfestellung bei der Programmierung in R. Anfangs könnte Ihr einfach die gesamte Fehlermeldung in eine Suchmaschine wie Google kopieren, später hilft einem oft dann schon die Meldung selbst.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wo findet Ihr Hilfestellung, falls Euer Code nicht funktioniert?",
answer("In der Dokumentation der genutzten Packages", correct = TRUE),
answer("Über Plattformen wie Stack Overflow und die Hilfeseiten der R Community", correct = TRUE),
answer("Über eine Recherche in Eurer Suchmaschine", correct = TRUE),
answer("Bei CorrelAid e.V. - z.B. im #help-Channel", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: An all diesen Orten findet Ihr Hilfe.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Faktoren spielen beim Datenimport eine wichtige Rolle?",
answer("Das Dateiformat (erkennbar an der Dateiendung)", correct = TRUE),
answer("Die Dateistruktur mit Codierung, (Dezimal-)Trennzeichen, uvm.", correct = TRUE),
answer("Der Speicherort (lokal oder remote)", correct = TRUE),
answer("Die Art und Weise wie die Daten geladen werden sollen (einmalig, periodisch oder live)", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Alle vier Faktoren sind wichtig.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("An welcher Dateiendung erkennt Ihr Excel-Dateien?",
answer(".xls", correct = TRUE),
answer(".xlsx", correct = TRUE),
answer(".csv"),
correct = "Richtig!",
incorrect = "Leider falsch: CSV-Dateien sind Textdateien - aber Ihr könnt sie natürlich in Excel öffnen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Woran erkennt Ihr CSV-Dateien?",
answer('An dem Trennzeichen ","'),
answer('An der Dateiendung ".csv"', correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: CSV-Dateien sind zwar in der Regel durch Kommata getrennt, es gibt allerdings auch CSV-Dateien, deren Spalten durch Semikolons, Pipes (senkrechte Striche) und Tabstopps getrennt werden.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Optionen habt Ihr lokale Dateien zu importieren?",
answer("Manuell über den File Explorer in RStudio (File -> Import Dataset)", correct = TRUE),
answer("Mit der Funktion import() des rio-Packages", correct = TRUE),
answer("Mit individuellen Funktionen aus verschiedenen Packages für die verschiedenen Dateiformate", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Ihr könnt von allen drei Optionen Gebrauch machen",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Können nur lokal gespeicherte Dateien importiert werden?",
answer("Ja"),
answer("Nein", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Auch das Laden von Dateien über Hyperlinks ist beispielsweise möglich.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Warum ist es best practice Datenquellen live mit Analysetools zu verknüpfen?",
answer("Es ist leichter technisch umzusetzen."),
answer("Es garantiert, dass Daten aktuell und damit qualitativ hochwertiger sind.", correct = TRUE),
answer("Es ist nicht best practice."),
correct = "Richtig! Entscheidungen trefft Ihr damit auf Basis von aktuellen (und nicht eventuall auf der Basis von veralteten) Daten.",
incorrect = "Leider falsch: Zwar sind Live-Verknüpfungen schwer einzurichten, aber dafür sind die Daten auch aktuell. Entscheidungen trefft Ihr damit auf Basis von aktuellen (und nicht eventuall auf der Basis von veralteten) Daten.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Um Datenquellen live zu verknüpfen, ist es immer notwendig, selbst Code zu schreiben, der mit einer API interagiert.",
answer("Wahr"),
answer("Unwahr", correct = TRUE),
correct = "Richtig! Ihr könnt dazu auch R-Packages nutzen, die von der R-Community zahlreich bereitgestellt wurden.",
incorrect = "Leider falsch: Ihr könnt dazu auch R-Packages nutzen, die von der R-Community zahlreich bereitgestellt wurden.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Ihr möchtet Daten bereinigen - welches Package fällt Euch sofort ein?",
answer("ggplot2"),
answer("dplyr", correct = TRUE),
answer("rio"),
answer("shiny"),
correct = "Richtig! Dplyr ist so ziemlich das bekannteste und weit verbreiteste Package zur Datenbereinigung.",
incorrect = "Leider falsch: Dplyr ist so ziemlich das bekannteste und weit verbreiteste Package zur Datenbereinigung.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wie heißen die sechs wichtigsten Funktionen des dplyr-Packages?",
answer("select() - Auswahl von Spalten", correct = TRUE),
answer("filter() - Auswahl von Zeilen", correct = TRUE),
answer("arrange() - Sortierung von Zeilen", correct = TRUE),
answer("mutate() - Erstellung neuer Spalten", correct = TRUE),
answer("group_by() - Gruppierung von Zeilen", correct = TRUE),
answer("ungroup() - Auflösung der Gruppierung von Zeilen"),
answer("summarise() - Zusammenfassung von Werten", correct = TRUE),
answer("dplyr() - Bereinigung von Werten"),
correct = "Richtig!",
incorrect = "Leider falsch: Alle Funktionen außer dplyr() existieren und gehören zum kleinen 1x1 der Datenbereinigung.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wofür kann und sollte man Datenvisualisierung nutzen?",
answer("Zur interaktiven Informationsweitergabe", correct = TRUE),
answer("Um Kausalität nachzuweisen"),
answer("Um Stories zu untermauern", correct = TRUE),
answer("Um möglichst viele Informationen in einer einzigen Visualisierung zu präsentieren"),
answer("Um Muster zu erkennen", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Zum Nachweis der Kausalität oder von Wirkungen braucht es noch mehr. Außerdem sollten nicht zu viele Informationen in einer Datenvisualisierung enthalten sein - sonst verliert die Visualisierung ihre Klarheit.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Packages habt Ihr kennengelernt, um Datenvisualisierungen zu generieren?",
answer("dplyr"),
answer("countrycode"),
answer("ggplot2", correct = TRUE),
answer("echarts4r", correct = TRUE),
answer("rio"),
answer("shiny", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Nur ggplot2, echarts4r und shiny erzeugen (interaktive) Visualisierungen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Welche Faktoren spielen bei der Entscheidung für einen Visualisierungstyp eine Rolle?",
answer("Der Datentyp der Variable(n)", correct = TRUE),
answer("Die Anzahl der Variablen", correct = TRUE),
answer("Die Botschaft (was gezeigt werden soll)", correct = TRUE),
correct = "Richtig!",
incorrect = "Leider falsch: Versuche es einfach nochmal oder schau im Kapitel Datenvisualisierung nach!",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Der Mehrwert von R Markdowns liegt in...",
answer("der leichten Anpassungsfähigkeit ihrer Designs."),
answer("ihrer Reproduzierbarkeit.", correct = TRUE),
answer("ihrem niedrigschwelligen User Interface für nicht so tech-affine Nutzer:innen."),
correct = "Richtig! Glücklicherweise gibt es tolle Layouttemplates und die Möglichkeit der interaktiven Parametrisierung durch GUIs, die es uns vereinfachen, Reports anschaulich und nutzerinnenfreundlich zu gestalten.",
incorrect = "Leider falsch: Das Layout von R Markdowns muss oft in HTML und CSS codiert werden. Deshalb nutzen wir in der Regel Templates. Teilen wir außerdem R Markdowns direkt (also nicht das Outputformat) ist auch die Nutzung in RStudio gar nicht so leicht - wie Ihr ja bereits wisst. Da müssen wir also Zeit in das Set-up und die gute Erklärung des Tools stecken.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("R Markdowns sind reproduzierbar. Das hat den Vorteil, dass...",
answer("sie leicht aktualisiert werden können.", correct = TRUE),
answer("in verschiede Layoutformate übertragen werden können.", correct = TRUE),
answer("sie für verschiedene Szenarien erstellt werden können.", correct = TRUE),
answer("problemlos auf völlig andere Daten übertragen werden können."),
correct = "Richtig!",
incorrect = "Leider falsch: Die Operationen, die Ihr auf Basis von Daten durchführt, sind in den meisten Fällen auf den Datensatz angestimmt. Daher ist es shr wahrscheinlich, dass der gleiche Code nicht mit einem völlig anderen Datengrundlage funktioniert. Die Struktur der Daten sollte deshalb konstant sein, insbesondere wenn Ihr den Bericht parametrisieren wollt.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Parameter sind...",
answer("Platzhalter, die es ermöglichen einen Wert einmal zu definieren, und ihn an verschiedenen Stellen im Code zu übergeben.", correct = TRUE),
answer("eine Maßeinheit der Performance in der Computerwissenschaft."),
correct = "Richtig! Glücklicherweise müssen wir in der Computerwissenschaft keine 100 Parameter-Sprints laufen.",
incorrect = "Leider falsch: Glücklicherweise müssen wir in der Computerwissenschaft keine 100 Parameter-Sprints laufen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wie können Parameter gesetzt und übergeben werden?",
answer("Über den YAML-Header, optional: Mit GUI", correct = TRUE),
answer("In einer beliebigen Stelle im Code"),
answer("Über die Render-Funktion, optional: Mit GUI", correct = TRUE),
correct = "Richtig! Dann kann es ja losgehen...",
incorrect = "Leider falsch: Parameter werden über den YAML-Header oder die Render-Funktion gesetzt.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Was macht das UI (user interface) einer Shiny-App?",
answer("Eine UI bestimmt das Aussehen der Shiny-App", correct = TRUE),
answer("Eine UI ist in der Shiny-App für das Deployen zuständig."),
answer("Eine UI legt fest, wo welche Komponente der Shiny-App dargestellt wird", correct = TRUE),
answer("In einer UI kann der Programmierer das Design der Shiny-App festlegen.", correct = TRUE),
answer("Eine UI nimmt die gesamten Rechenoperationen im Hintergrund vor."),
correct = "Richtig!",
incorrect = "Leider falsch: Versuche es einfach nochmal oder im Kapitel Interaktive Visualisierung nach!",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
),
question("Wofür ist der Server in einer Shiny-App zuständig?",
answer("Der Server ist in der Shiny-App für das Deployen zuständig."),
answer("Der Server legt fest, wo welche Komponente der Shiny-App dargestellt wird"),
answer("Im Server wird der Code (z.B. zur Visualisierung) abgelegt.", correct = TRUE),
answer("Der Server ist quasi das 'Gehirn' der Shiny-App und übernimmt die ganze Rechenleistung im Hintergrund.", correct = TRUE),
answer("Der Server ist kein Bestandteil einer Shiny-App."),
correct = "Richtig!",
incorrect = "Leider falsch: Versuche es einfach nochmal oder schau im Kapitel Interaktive Visualisierung nach!",
allow_retry = TRUE,
try_again_button = "Versucht es nochmal"
),
question("Bei der Umsetzung von Datenprojekten könnt Ihr Anlaufstellen der Zivilgesellschaft nutzen - z.B. das Angebot von CorrelAid e.V. Data4Good-Projekte mit pro-bono Datenwissenschaftler:innen in die Tat umzusetzen.",
answer("Wahr", correct = TRUE),
answer("Unwahr"),
correct = "Richtig! Nach dem Kurs unterstützen wir Euch gerne weiter. Die Idee des Kurses ist, dafür eine gute Grundlage zu schaffen. Neben Data4Good-Projekten bieten wir auch weitere Bildungsformate an - z.B. die Datensprechstunde und das Sponsoring von Lizenzen für die Lernplattform Dataquest. Wir freuen uns auf die weitere Zusammenarbeit mit Euch!",
incorrect = "Leider falsch: Nach dem Kurs unterstützen wir Euch gerne weiter. Die Idee des Kurses ist, dafür eine gute Grundlage zu schaffen. Neben Data4Good-Projekten bieten wir auch weitere Bildungsformate an - z.B. die Datensprechstunde und das Sponsoring von Lizenzen für die Lernplattform Dataquest. Wir freuen uns auf die weitere Zusammenarbeit mit Euch!",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
)
)
```
### **Praktischer Teil** (10 Aufgaben - 60min Zeit)
#### Schritt 1: Packages installieren und laden
Installiert hier das Package "tidyverse".
*Hinweis: Sobald da "Gut gemacht!" steht, ist Euer Code richtig, die Error-Message könnt Ihr ignorieren. Sie resultiert aus dem Set-up der Lernplattform.*
```{r exercise_install, exercise = TRUE}
# Euer Code hier
```
```{r exercise_install-solution}
# tidyverse installieren
install.packages("tidyverse")
```
```{r exercise_install-check}
grade_this_code()
```
Ladet hier das Package "tidyverse".
```{r exercise_library, exercise = TRUE}
# Euer Code hier
```
```{r exercise_library-solution}
# tidyverse laden
library(tidyverse)
```
```{r exercise_library-check}
grade_this_code()
```
#### Schritt 2: Daten importieren
Importiert hier den Datensatz über die URL "https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-01-26/plastics.csv" mit dem `rio-Package` und speichert ihn als R-Objekt mit dem Namen "data_raw" ab.
```{r exercise_dataload, exercise = TRUE}
# Euer Code hier
```
```{r exercise_dataload-solution}
# Hier laden wir mit dem rio-Package und der Funktion "import()" unseren Datensatz.
data_raw <- rio::import('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2021/2021-01-26/plastics.csv')
```
```{r exercise_dataload-check}
grade_this_code()
```
Wie viele Zeilen und Variablen sind im Datensatz enthalten? Lasst es Euch im Codeeditor ausgeben.
```{r quiz_lskpraxis, echo=FALSE}
quiz(caption = NULL,
question("Wie viele Variablen sind im Datensatz enthalten?",
answer("16.643 Zeilen und 8 Variablen"),
answer("13.380 Zeilen und 14 Variablen", correct = TRUE),
answer("14 Zeilen und 13.380 Variablen"),
correct = "Richtig!",
incorrect = "Leider falsch: Mit ncol(), nrow() und dim() könnt Ihr Euch die richtigen Werte anzeigen lassen.",
allow_retry = TRUE,
try_again_button = "Nochmal versuchen"
)
)
```
```{r exercise_explore, exercise = TRUE}
# Euer Code hier
```
#### Schritt 3: Daten bereinigen
Filtert aus dem `data_raw`-Datensatz Zeilen heraus, wo statt dem Land "EMPTY" steht.
```{r exercise_filter, exercise = TRUE}
# Euer Code hier
```
```{r exercise_filter-solution}
# Datenformate überprüfen wir mit "class()"
data_raw %>%
dplyr::filter(country != "EMPTY")
```
```{r exercise_filter-check}
grade_this_code()
```
Ersetzt mit der `mutate`-Funktion alle Herstellernamen, sodass der erste Buchstabe jeden Wortes groß geschrieben wird (z.B. The Coca Cola Company).
*Tipp: Schaut Euch die Funktion `stringr::str_to_title` an.*
```{r exercise_capitalize, exercise = TRUE}
# Euer Code hier
```
```{r exercise_capitalize-solution}
# Hersteller mit großem Anfangsbuchstaben
data_raw %>%
dplyr::mutate(parent_company = stringr::str_to_title(parent_company))
```
```{r exercise_capitalize-check}
grade_this_code()
```
#### Schritt 4: Daten explorieren
Gebt hier die Anzahl an Events aus, die pro Land pro Jahr veranstaltet wurden.
*Tipp: Der Datensatz ist sehr messy. Die Events und Volunteers stehen in jeder Zeile (und sind damit Duplikate). Schaut Euch mal an, ob die Funktion `dplyr::distinct()` zu der Herausforderung passt.*
```{r exercise_events, exercise = TRUE}
# Euer Code hier
```
```{r exercise_events-solution}
# Filtern der einzigartigen Werte für Events
data_raw %>%
dplyr::distinct(country, year, num_events)
```
```{r exercise_events-check}
grade_this_code()
```
Ergänzt Euren Code von oben und berechnet mit den Funktionen `group_by()` und `summarise()`, wie viele Events pro Land in 2019 und 2020 insgesamt veranstaltet wurden.
```{r exercise_groupby, exercise = TRUE}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Euer Code hier
```
```{r exercise_groupby-solution}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Gruppierung Berechnung des Mittelwerts
group_by(country) %>%
summarise(anzahl_events = sum(num_events))
```
```{r exercise_groupby-check}
grade_this_code()
```
Visualisiert die Anzahl an Events pro Land in einem einfachen Boxplot.
```{r exercise_ggplot, exercise = TRUE}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Gruppierung Berechnung des Mittelwerts
group_by(country) %>%
summarise(anzahl_events = sum(num_events)) %>%
# Euer Code hier
```
```{r exercise_ggplot-solution}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Gruppierung Berechnung des Mittelwerts
group_by(country) %>%
summarise(anzahl_events = sum(num_events)) %>%
# Erstellung des ggplots
ggplot(aes(anzahl_events)) +
geom_boxplot()
```
```{r exercise_ggplot-check}
grade_this_code()
```
Nutzt nun `theme_minimal()` um den Plot optisch aufzuwerten.
```{r exercise_theme, exercise = TRUE}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Gruppierung Berechnung des Mittelwerts
group_by(country) %>%
summarise(anzahl_events = sum(num_events)) %>%
# Erstellung des ggplots
ggplot(aes(anzahl_events)) +
geom_boxplot() +
# Euer Code hier
```
```{r exercise_theme-solution}
# Filtern der einzigartigen Werte für Events
data_raw %>%
select(country, year, num_events) %>%
unique() %>%
# Gruppierung Berechnung des Mittelwerts
group_by(country) %>%
summarise(anzahl_events = sum(num_events)) %>%
# Erstellung des ggplots
ggplot(aes(anzahl_events)) +
geom_boxplot() +
# Theme
theme_minimal()
```
```{r exercise_theme-check}
grade_this_code()
```
#### Schritt 5: Ergebnisse teilen
Probiert nun selbst, ob Ihr aus den generierten Ergebnissen lokal ein Rmarkdown oder eine Shiny Web App generieren könnt. Die theoretischen Vorkenntnisse habt Ihr bereits unter Beweis gestellt. Viel Glück!