{"id":508,"date":"2021-02-28T15:57:56","date_gmt":"2021-02-28T15:57:56","guid":{"rendered":"https:\/\/gigers.com\/blog\/?p=508"},"modified":"2024-06-24T17:33:33","modified_gmt":"2024-06-24T17:33:33","slug":"deskriptive-auswertung-von-daten-mit-snap","status":"publish","type":"post","link":"https:\/\/gigers.com\/blog\/deskriptive-auswertung-von-daten-mit-snap\/","title":{"rendered":"Deskriptive Auswertung von Daten mit Snap!"},"content":{"rendered":"<p>Die Auswertung von Daten geh\u00f6rt zu den Kernkompetenzen einer Gesellschaft, welche wissensbasiert handeln will. Deshalb erkl\u00e4rt auch der Lehrplan der Deutschschweiz das <a href=\"https:\/\/tg.lehrplan.ch\/index.php?code=b|10|0&amp;la=yes\" target=\"_blank\" rel=\"noopener\">Auswerten von Daten aus der Umwelt<\/a> der Sch\u00fclerinnen und Sch\u00fcler als eines der \u00fcbergeordneten Ziele des Informatikunterrichts. Darauf hat unter anderem auch das Statistische Amt des Kantons Z\u00fcrich reagiert und eine Webseite zum Thema <a href=\"https:\/\/www.zh.ch\/de\/politik-staat\/statistik-daten\/datenwerkstatt\/data-und-statistical-literacy.html#-733204405\" target=\"_blank\" rel=\"noopener\">Daten- &amp; Statistikkompetenz<\/a> aufgeschaltet, welche sich an Lernende wendet. Nebst theoretischen \u00dcberlegungen zur <a href=\"https:\/\/www.zh.ch\/de\/politik-staat\/statistik-daten\/datenwerkstatt\/data-und-statistical-literacy.html#-792208150\" target=\"_blank\" rel=\"noopener\">Wissenspyramide<\/a> stellt das Amt auch einen Datensatz mit <a href=\"https:\/\/raw.githubusercontent.com\/statistikZH\/co2sensoren\/main\/scripts\/sensor_example_data.csv\" target=\"_blank\" rel=\"noopener\">CO2-Daten<\/a> zu Verf\u00fcgung, der von den Lernenden analysiert werden kann. Diese Daten sollen dann mit der <a href=\"https:\/\/www.r-project.org\" target=\"_blank\" rel=\"noopener\">Statistiksoftware R<\/a> und einem <a href=\"https:\/\/raw.githubusercontent.com\/statistikZH\/co2sensoren\/main\/data_and_statistical_literacy\/RSkript_CO2vsCo19.R\" target=\"_blank\" rel=\"noopener\">Beispielskript<\/a> ausgewertet werden.<\/p>\n<h2>R f\u00fcr die Sekundarstufe I?<\/h2>\n<p>R ist ein sehr m\u00e4chtiges, frei erh\u00e4ltliches und quelloffenes Statistikwerkzeug, welches durch zahlreiche Erweiterungen sich an die individuellen Bed\u00fcrfnisse von Statistikerinnen und Statistikern anpassen l\u00e4sst. Da es ausserdem \u00fcber eine Skriptsprache gesteuert wird, lassen sich mit R durchgef\u00fchrte statistische Analysen auch leicht nachvollziehen &#8211; vorausgesetzt, man kennt sich mit dem Werkzeug aus.<\/p>\n<p>Diese Steuerung der Software \u00fcber Textelemente f\u00fchrt aber auch dazu, dass viele Menschen sich mit R schwertun, da die Lernkurve ziemlich steil sein kann. Auf der Sekundarstufe I kommt hinzu, dass man nicht zwingend davon ausgehen kann, dass die Lernenden \u00fcber gen\u00fcgende Fertigkeiten in Bezug auf das Tastaturschreiben verf\u00fcgen, was die H\u00fcrde zus\u00e4tzlich erh\u00f6hen kann. Nun ist es durchaus machbar, mit Sch\u00fclerinnen und Sch\u00fclern dieses Alters R zu verwenden, in der Regel bedarf dies aber viel Unterst\u00fctzung durch die Lehrperson oder dann beschr\u00e4nkt sich die Auseinandersetzung auf eine relativ triviale Abarbeitung eines vorgefertigten Skripts mit geringer Wahrscheinlichkeit auf einen sp\u00e4teren Transfer. Ausserdem steht der Unterricht auf der Sekundarstufe I auch unter einem hohen Druck, die Lernenden dazu zu bef\u00e4higen, die vielf\u00e4ltigen Kompetenzen des Lehrplans zu meistern und der Umgang von Daten ist nur einer von sieben Teilen im Bereich Medien und Informatik.<\/p>\n<h2>Rettung durch die Tabellenkalkulation?<\/h2>\n<p>W\u00e4re es da nicht sinnvoll, auf eine bei den Sch\u00fclerinnen und Sch\u00fclern bekanntere und einfacher zu bedienende Software wie eine Tabellenkalkulation umzusteigen? Um eine Antwort auf diese Frage zu erhalten, m\u00fcssen verschiedene Aspekte ber\u00fccksichtigt werden:<\/p>\n<ol>\n<li>Der Datensatz selbst: Bei einfach aufgebauten oder kleinen Datens\u00e4tzen mag eine Tabellenkalkulation die erste Wahl sein. Der CO2-Datensatz enth\u00e4lt aber \u00fcber 2000 Datens\u00e4tze, was einer Bearbeitung in einer Tabellenkalkulation nicht gerade entgegenkommt. Bei solch grossen Datens\u00e4tzen ist es schwierig, den \u00dcberblick zu behalten.<\/li>\n<li>Das Ziel der Auswertung: Wenn es darum geht, schnell eine Summe zu berechnen oder eine Linien- oder Balkengrafik zu zeichnen, dass ist die Tabellenkalkulation meist die erste Wahl. Wenn aber umfassendere Untersuchungen durchgef\u00fchrt werden sollen, kann es schwierig sein, die einzelnen Schritte im Prozess nachzuvollziehen und auf eine andere Datenlage anzuwenden. Und genau dies soll ja eines der Ziele der Arbeit mit dem CO2-Datensatz sein. Es geht nicht nur darum, Erkenntnisse \u00fcber diesen einzelnen Datensatz zu gewinnen, sondern diese Kenntnisse sp\u00e4ter auch auf andere Daten anzuwenden, bei denen vielleicht eine ganz andere Fragestellung im Fokus steht.<\/li>\n<li>Die Methodik: In der Mathematik, Informatik und den Naturwissenschaften ist es \u00fcblich, mit Werkzeugen zu arbeiten, bei denen Arbeitsschritte nachvollziehbar sind. Eine Reihe von abzuarbeitenden Befehlen erf\u00fcllt diese Aufgabe in der Regel besser, als wenn man auf eine grafische Oberfl\u00e4che setzt, wie dies bei der typischen Tabellenkalkulation der Fall ist. Die schlechte Nachvollziehbarkeit von Analysen mit Tabellenkalkulationen f\u00fchrt dann auch immer wieder zu <a href=\"https:\/\/en.wikipedia.org\/wiki\/Spreadsheet#Spreadsheet_risk\" target=\"_blank\" rel=\"noopener\">Problemen<\/a>.\u00a0 Dass dabei ein Produkt besonders h\u00e4ufig genannt wird, hat weniger mit dessen Qualit\u00e4t als vielmehr dessen grosser Verbreitung zu tun.<\/li>\n<\/ol>\n<p>Diese \u00dcberlegungen zeigen, dass anscheinend nur die Wahl zwischen der unzug\u00e4nglichen Arbeit mit einer Skriptsprache wie R oder der in den Naturwissenschaften eher weniger gern gesehenen, weil schlecht reproduzierbaren Arbeit mit einer Tabellenkalkulation bleibt.<\/p>\n<h2>Zu erreichende Ziele<\/h2>\n<p>In ein solches Dilemma verstrickt, lohnt es, sich noch einmal die Zielsetzungen vor Augen zu f\u00fchren. Was sollen die Lernenden aus der Auseinandersetzung mit dem Lernobjekt (hier ein f\u00fcr Schulverh\u00e4ltnisse vergleichsweise grosser Datensatz) mitnehmen?<\/p>\n<ol>\n<li>Die Lernenden sollen eine grunds\u00e4tzliche Fertigkeit im Umgang mit gr\u00f6sseren Datenmengen erwerben. Dazu geh\u00f6ren unter anderem:<br \/>\nSich einen \u00dcberblick und die Inhalte des Datensatzes zu verschaffen;<br \/>\neinfache statistische Berechnungen auf den Datensatz anzuwenden;<br \/>\nden Datensatz m\u00f6glicherweise visuell auszuwerten (wird in diesem Beitrag nicht behandelt);<\/li>\n<li>Die Lernenden sollen dabei Methoden kennenlernen, welche typisch f\u00fcr das entsprechende professionelle Umfeld sind. Dazu geh\u00f6ren:<br \/>\nDie Arbeitsweise mit einer professionellen Statistiksoftware zumindest in Ans\u00e4tzen kennen lernen;<br \/>\nbei der Arbeit mit Daten auf die Reproduzierbarkeit der Berechnungen zu achten;<br \/>\nEinblick in die Funktionsweise statistischer Methoden erlangen.<\/li>\n<\/ol>\n<p>Grunds\u00e4tzlich w\u00fcrde R diese Bedingungen erf\u00fcllen, den Anwender wird der Einstieg durch die neu zu erlernenden Konzepte mit der gleichzeitig abverlangten Genauigkeit beim Eingeben der Befehle (Tippfehler) aber erschwert. Eine didaktische Reduzierung auf den eigentlichen Kern, die Nutzung von flexiblen, reproduzierbaren Befehlen zum Umgang mit Daten ist also angesagt.<\/p>\n<p>In den folgenden Ausf\u00fchrungen soll nun gezeigt werden, dass eine Sprache wie Snap! aufgrund der blockbasierten Schnittstelle dazu ideale Voraussetzungen bietet und damit den Lernenden einen sp\u00e4teren Umstieg auf ein Statistikprogramm wie R wesentlich erleichtern kann.<\/p>\n<h1>Umsetzung mit Snap!<\/h1>\n<p>Da Snap! es erm\u00f6glicht, eigene Bl\u00f6cke (Funktionen, Befehle, &#8230;) zu schreiben, kann die ben\u00f6tigte Funktionalit\u00e4t den Lernenden entweder zu Verf\u00fcgung gestellt werden, oder, falls dies erw\u00fcnscht ist, k\u00f6nnen diese die Erweiterungen selbst schreiben oder zumindest deren Funktionsweise nachvollziehen.<\/p>\n<p>W\u00e4hrend Snap! schon von Grund auf viele interessante Bl\u00f6cke enth\u00e4lt und diese durch bereits vorhandene Bibliotheken (z.B. Frequency Distribution Analysis, Variadic reporters) erg\u00e4nzt werden k\u00f6nnen, ist zumindest bei einer ersten Auseinandersetzung mit gr\u00f6sseren Daten sinnvoll, den Lernenden entsprechend zugeschnittene Bl\u00f6cke zu Verf\u00fcgung zu stellen.<\/p>\n<p>Deshalb ist es sinnvoll, einmal einen Blick in den entsprechenden Auftrag zum CO2-Datensatz zu werfen (siehe <a href=\"https:\/\/raw.githubusercontent.com\/statistikZH\/co2sensoren\/main\/data_and_statistical_literacy\/RSkript_CO2vsCo19.R\" target=\"_blank\" rel=\"noopener\">R Skript<\/a>). Die Lernenden sollen &#8230;<\/p>\n<ul>\n<li>die Gr\u00f6sse des Datensatzes bestimmen (Anzahl Spalten und Zeilen);<\/li>\n<li>die \u00dcberschriften der einzelnen Spalten herauslesen;<\/li>\n<li>die Zeitabst\u00e4nde zwischen den Messzeitpunkten berechnen;<\/li>\n<li>den Mittelwert (mean), Zentralwert (median) und h\u00e4ufigst vorkommenden Wert (modus) bestimmen;<\/li>\n<li>Minimum und Maximum, sowie die Spannweite feststellen;<\/li>\n<li>die Standardabweichung (standard deviation) und Streuung (variance) berechnen;<\/li>\n<li>eine \u00dcbersichtstabelle (summary) zu den Daten generieren.<\/li>\n<\/ul>\n<p>Nachdem die Aufgabenstellungen klar sind, k\u00f6nnen die entsprechenden Befehle zu Verf\u00fcgung gestellt werden.<\/p>\n<h2>Didaktische \u00dcberlegungen<\/h2>\n<p>Bei der Umsetzung der entsprechenden Bl\u00f6cke stellten sich erneut verschiedene Fragen:<\/p>\n<ul>\n<li>Soll sich die Bezeichnung der Bl\u00f6cke an diejenige der Skriptsprache R anlehnen?<\/li>\n<li>Welchen Abstraktionsgrad sollen die einzelnen Bl\u00f6cke aufweisen?<\/li>\n<li>Wie fehlertolerant sollen die Eingabem\u00f6glichkeiten zu den Bl\u00f6cken gestaltet werden?<\/li>\n<li>Im Zweifelsfalle: Soll der Fokus beim Schreiben von Bl\u00f6cken auf die Effizienz oder Nachvollziehbarkeit gelegt werden?<\/li>\n<\/ul>\n<p>Die Beantwortung dieser Fragen f\u00fchrt unweigerlich zu entsprechenden Designentscheidungen. Grunds\u00e4tzlich k\u00f6nnen diese aber sp\u00e4ter korrigiert werden, zumindest dann, wenn nur die Namen einzelner Bl\u00f6cke und deren Programmierung angepasst werden, nicht aber deren Schnittstelle gegen aussen ge\u00e4ndert wird. Bereits hier zeigt es sich, dass auch vergleichsweise triviale Aufgabenstellungen in Snap! sehr schnell zu Fragen f\u00fchren, die \u00fcber das eigentliche Programmieren hinausgehen und eigentliche Aufgaben der Informatik sind.<\/p>\n<p>F\u00fcr die konkrete Umsetzung wurden die Fragestellungen wie folgt beantwortet:<\/p>\n<ul>\n<li>Eine \u00dcbernahme der genauen Bezeichnungen von R wurde als nicht erstrebenswert angesehen, da es darum geht, die Prinzipien zu verstehen. Ansonsten h\u00e4tte man auch einfach das vorhandene Skript abarbeiten k\u00f6nnen. Die Lernenden sollen die Grundprinzipien erlernen, nicht eine ganz bestimmte Umsetzung in einer Sprache wie R.<\/li>\n<li>Die Bl\u00f6cke d\u00fcrfen einen unterschiedlichen Abstraktionsgrad aufweisen, d.h., die Lernenden sollen bei Bedarf auch Bl\u00f6cke mit einem tieferen Abstraktionsgrad nutzen k\u00f6nnen. Zudem ist es in Snap! bei den meisten (bei allen selbstgeschriebenen) Bl\u00f6cken m\u00f6glich, die entsprechende Programmierung einzusehen.<\/li>\n<li>Die Fehlertoleranz der einzelnen Bl\u00f6cke ist momentan auf unterschiedlichem Niveau (aus Zeitgr\u00fcnden) und soll deshalb erst einmal dokumentiert werden. Diese kann aber sp\u00e4ter bei Bedarf nachger\u00fcstet werden. Didaktisch kann es sinnvoll sein, mit den Lernenden dar\u00fcber zu sprechen, weshalb einige Bl\u00f6cke weniger fehlertolerant sind als andere und was notwendig ist, um eine solche Fehlertoleranz zu erzielen.<\/li>\n<li>Beim Schreiben der Bl\u00f6cke wurde der Fokus auf die Nachvollziehbarkeit gelegt, wobei h\u00e4ufig Prinzipien genutzt werden, die typischerweise auch bei R zu finden sind.<\/li>\n<\/ul>\n<h2>Bl\u00f6cke zum Filtern von Daten<\/h2>\n<p>Die meisten Bl\u00f6cke wurden so umgesetzt, dass sie mit dem ganzen Datensatz (inklusive Spalten\u00fcberschriften) funktionieren. F\u00fcr die bessere Nachvollziehbarkeit werden die Bl\u00f6cke inklusive der entsprechenden Programmierung vorgestellt<\/p>\n<h3>Namen der Spalten\u00fcberschriften bestimmen<\/h3>\n<p>Mit diesem Block wird die Zeile 1 der CSV-Tabelle ausgelesen und als Liste zur\u00fcckgegeben. Die Programmierung zeigt, dass daf\u00fcr eigentlich kein eigener Block notwendig ist, denn er verpackt nur bereits vorhandene Funktionalit\u00e4t und macht sie damit etwas benutzerfreundlicher.<\/p>\n<figure id=\"attachment_512\" aria-describedby=\"caption-attachment-512\" style=\"width: 744px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-512\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/name_of_columns_of.png\" alt=\"\" width=\"744\" height=\"213\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/name_of_columns_of.png 744w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/name_of_columns_of-300x86.png 300w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><figcaption id=\"caption-attachment-512\" class=\"wp-caption-text\">Dieser Block liefert die Spalten\u00fcberschriften zur\u00fcck.<\/figcaption><\/figure>\n<h3><span style=\"color: #333333; font-size: 1.125rem;\">Anzahl der Zeilen und Spalten bestimmen<\/span><\/h3>\n<p>Zeilen und Spalten unterscheiden sich in einer Tabelle in Snap! konzeptionell, weshalb der Zugriff jeweils anders erfolgt. Um die Zahl der Spalten zu erhalten, geht man gleich vor. wie im oberen Beispiel geschildert. Nur bestimmt man zus\u00e4tzlich noch, wie lang die zur\u00fcckgegebene Liste ist.<\/p>\n<figure id=\"attachment_513\" aria-describedby=\"caption-attachment-513\" style=\"width: 762px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-513\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of.png\" alt=\"\" width=\"762\" height=\"225\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of.png 762w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of-300x89.png 300w\" sizes=\"auto, (max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><figcaption id=\"caption-attachment-513\" class=\"wp-caption-text\">Der Befehl gibt die Zahl der Spalten zur\u00fcck.<\/figcaption><\/figure>\n<p>Der Befehl f\u00fcr die Zahl der Zeilen einer Tabelle, verpackt wieder nur einen schon bestehenden Block.<\/p>\n<figure id=\"attachment_518\" aria-describedby=\"caption-attachment-518\" style=\"width: 495px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-518\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rows_of-2.png\" alt=\"\" width=\"495\" height=\"213\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rows_of-2.png 495w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rows_of-2-300x129.png 300w\" sizes=\"auto, (max-width: 495px) 100vw, 495px\" \/><figcaption id=\"caption-attachment-518\" class=\"wp-caption-text\">Der Block gibt die Zahl der Zeilen in einer Tabelle zur\u00fcck.<\/figcaption><\/figure>\n<p>Wenn man ganz auf selbstgeschriebene Bl\u00f6cke verzichten m\u00f6chte, kann man auch einen bereits vorhandenen Block in Snap verwenden:<\/p>\n<figure id=\"attachment_516\" aria-describedby=\"caption-attachment-516\" style=\"width: 408px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-516 size-full\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/dimension_of.png\" alt=\"\" width=\"408\" height=\"57\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/dimension_of.png 408w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/dimension_of-300x42.png 300w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><figcaption id=\"caption-attachment-516\" class=\"wp-caption-text\">Anzahl der Zeilen und Spalten in einer Tabelle<\/figcaption><\/figure>\n<p>Dieser Block liefert die Dimensionen einer Tabelle als Liste der Form (Zeilenzahl, Spaltenzahl) zur\u00fcck.<\/p>\n<h3><span style=\"color: #333333; font-size: 1.125rem;\">Nummer einer Spalte mit einer bestimmten \u00dcberschrift<\/span><\/h3>\n<p>Dieser Block dient nur dem Komfort. Anstatt eine Spalte \u00fcber ihre Nummer zu adressieren, geht dies auch mit der Spalten\u00fcberschrift.<\/p>\n<figure id=\"attachment_522\" aria-describedby=\"caption-attachment-522\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-522\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/index_of_row_with-1024x218.png\" alt=\"\" width=\"525\" height=\"112\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/index_of_row_with-1024x218.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/index_of_row_with-300x64.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/index_of_row_with-768x164.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/index_of_row_with.png 1056w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-522\" class=\"wp-caption-text\">Dieser Block gibt die Nummer der Spalte mit der entsprechenden \u00dcberschrift zur\u00fcck.<\/figcaption><\/figure>\n<p>Hier wurde aufgrund der einfachen Programmierung darauf verzichtet, auf den schon bestehenden Block &#8222;names of colums of&#8220; zur\u00fcckzugreifen.<\/p>\n<h3>Eine Datenzeile auslesen<\/h3>\n<p>Bei diesem Block handelt es sich um eine Verallgemeinerung des Blockes zum Auslesen der Spalten\u00fcberschriften. Damit k\u00f6nnen die Werte einer beliebigen Zeile ausgelesen werden.<\/p>\n<figure id=\"attachment_523\" aria-describedby=\"caption-attachment-523\" style=\"width: 987px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-523\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_value_from_row_in.png\" alt=\"\" width=\"987\" height=\"213\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_value_from_row_in.png 987w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_value_from_row_in-300x65.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_value_from_row_in-768x166.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-523\" class=\"wp-caption-text\">Dieser Block gibt alle Werte in einer bestimmten Zeile der Tabelle zur\u00fcck.<\/figcaption><\/figure>\n<h3>Eine Spalte auslesen<\/h3>\n<p>Da Snap! Tabellen als Listen von Listen darstellt, ist das Auslesen der Werte in einer Spalte etwas komplizierter als bei einer Zeile. Die ersten drei Zeilen des Datensatzes werden bei Snap! so repr\u00e4sentiert:<\/p>\n<figure id=\"attachment_526\" aria-describedby=\"caption-attachment-526\" style=\"width: 297px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-526\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/tabellen_in_snap.png\" alt=\"\" width=\"297\" height=\"517\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/tabellen_in_snap.png 297w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/tabellen_in_snap-172x300.png 172w\" sizes=\"auto, (max-width: 297px) 100vw, 297px\" \/><figcaption id=\"caption-attachment-526\" class=\"wp-caption-text\">Tabellen werden in Snap! als Listen von Listen dargestellt.<\/figcaption><\/figure>\n<p>Aus diesem Grund muss aus jeder Liste (eine Zeile der Daten) jeweils der entsprechende Wert ausgelesen und anschliessend in eine neue Liste geschrieben werden. Dies geschieht mithilfe des map-Blockes.<\/p>\n<figure id=\"attachment_525\" aria-describedby=\"caption-attachment-525\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-525\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_values_from_column_in-1024x204.png\" alt=\"\" width=\"525\" height=\"105\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_values_from_column_in-1024x204.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_values_from_column_in-300x60.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_values_from_column_in-768x153.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/get_values_from_column_in.png 1221w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-525\" class=\"wp-caption-text\">Dieser Block liefert alle Daten in einer Spalte der Tabelle zur\u00fcck.<\/figcaption><\/figure>\n<p><span style=\"font-size: 1rem;\">Der map-Block f\u00fchrt einen Befehl \u00fcber alle Elemente einer Liste aus und ist ein sehr wichtiges Werkzeug, welches auch in R zu Verf\u00fcgung steht. Dort bei Nutzenden, welche R nicht gut kennen, aber gerne durch eine wesentlich ineffizientere for-Schleife ersetzt wird. Fall die Zeit vorhanden ist, lohnt es sich, mit den Lernenden den map-Block eingehender zu behandeln, da damit in vielen F\u00e4llen das Konzept der for-Schleife zu Seite gelegt werden kann.<\/span><\/p>\n<p><span style=\"font-size: 1rem;\">Grunds\u00e4tzlich gilt in Snap!: Wenn m\u00f6glich sollte man eine For-Schlaufe durch einen forEach-Block ersetzen und diesen gegebenenfalls wiederum durch einen map-Block. Dabei verliert man unter Umst\u00e4nden etwas Flexibilit\u00e4t, die Programmierung wird aber eleganter und vor allem werden die Befehle schnell ausgef\u00fchrt.\u00a0<\/span><\/p>\n<h3>Einen Datenbereich auslesen<\/h3>\n<p>Manchmal m\u00f6chte man statt nur einer Zeile oder einer Spalte einen Datenbereich auslesen. Bei sehr grossen Datens\u00e4tzen wendet man beispielsweise beim Schreiben eines Skriptes die Befehle nur auf einen Teil des Datensatzes an, weil sonst die Berechnungen zu lange dauern. Ist man sich sicher, dass das eigene Programm funktioniert, l\u00e4sst man es \u00fcber den ganzen Datensatz laufen.<\/p>\n<p>Einen Ausschnitt aus den Daten zu erhalten, funktioniert auch mit einer Abfolge von Befehlen, einfacher geht es aber mit folgendem Block:<\/p>\n<figure id=\"attachment_529\" aria-describedby=\"caption-attachment-529\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-529\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/values-of-columns-and-rows-1024x1009.png\" alt=\"\" width=\"525\" height=\"517\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/values-of-columns-and-rows-1024x1009.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/values-of-columns-and-rows-300x296.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/values-of-columns-and-rows-768x756.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/values-of-columns-and-rows.png 1401w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-529\" class=\"wp-caption-text\">Dieser Block liefert einen Teilbereich einer Tabelle zur\u00fcck.<\/figcaption><\/figure>\n<p>Nebst dem map-Befehl enth\u00e4lt dieser Block noch die Besonderheit, dass er bei der Eingabe f\u00fcr die Zeile und Spalte sowohl eine Zahl als auch eine Liste entgegennimmt, was normalerweise nicht ohne Weiteres m\u00f6glich ist. Dazu pr\u00fcft der Block, ob es sich bei der Eingabe um eine Zahl handelt und verzweigt dann dementsprechend in einen anderen Zweig der Programmierung. Damit versteckt der Block eine technische Schwierigkeit bei der Programmierung mit Snap! vor den Lernenden. Umgesetzt wurde dieser Ansatz hier, weil f\u00fcr Spezialf\u00e4lle nicht noch eigene Bl\u00f6cke geschrieben werden sollten.<\/p>\n<h3>Tabelle drehen<\/h3>\n<p>Manchmal ist es sinnvoll, eine Tabelle um 90\u00b0 zu drehen, weil dadurch die Auswertung der Daten erleichtert wird.<\/p>\n<figure id=\"attachment_531\" aria-describedby=\"caption-attachment-531\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-531 size-large\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotate_table-1024x319.png\" alt=\"\" width=\"525\" height=\"164\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotate_table-1024x319.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotate_table-300x93.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotate_table-768x239.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotate_table.png 1350w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-531\" class=\"wp-caption-text\">Dieser Block dreht eine Tabelle um 90\u00b0.<\/figcaption><\/figure>\n<p>Ein Beispiel soll zeigen, was damit gemeint ist. In Snap! wird die CO2-Tabelle so dargestellt:<\/p>\n<figure id=\"attachment_532\" aria-describedby=\"caption-attachment-532\" style=\"width: 599px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-532\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/originaltabelle.png\" alt=\"\" width=\"599\" height=\"312\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/originaltabelle.png 599w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/originaltabelle-300x156.png 300w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><figcaption id=\"caption-attachment-532\" class=\"wp-caption-text\">Der Anfang des Datensatzes in der Tabellenansicht von Snap!.<\/figcaption><\/figure>\n<p>Wenn diese um 90\u00b0 gedreht wird, pr\u00e4sentiert sich die Tabelle so:<\/p>\n<figure id=\"attachment_533\" aria-describedby=\"caption-attachment-533\" style=\"width: 678px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-533\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotiertetabelle.png\" alt=\"\" width=\"678\" height=\"241\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotiertetabelle.png 678w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/rotiertetabelle-300x107.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><figcaption id=\"caption-attachment-533\" class=\"wp-caption-text\">Beim Rotieren einer Tabelle werden Zeilen und Spalten vertauscht.<\/figcaption><\/figure>\n<p>Die Zeilen sind zu Spalten geworden und umgekehrt. Die mit verschachtelten map-Bl\u00f6cken umgesetzte Funktionalit\u00e4t kann man seit einiger Zeit auch mit einem vorgegebenen Block noch einfacher umgesetzt werden:<\/p>\n<figure id=\"attachment_534\" aria-describedby=\"caption-attachment-534\" style=\"width: 369px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-534\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of_data.png\" alt=\"\" width=\"369\" height=\"57\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of_data.png 369w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/columns_of_data-300x46.png 300w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><figcaption id=\"caption-attachment-534\" class=\"wp-caption-text\">Unterdessen kennt Snap! einen eigenen Block zum Drehen von Tabellen.<\/figcaption><\/figure>\n<h3>Zusammenf\u00fchren von Datens\u00e4tzen<\/h3>\n<p>Der erw\u00e4hnten Block &#8222;columns of&#8220; kann auch dazu verwendet werden, zwei Tabellen mit wenigen Zeilen Code zusammenzuf\u00fchren.<\/p>\n<figure id=\"attachment_554\" aria-describedby=\"caption-attachment-554\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-554\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unify_table-1024x179.png\" alt=\"\" width=\"525\" height=\"92\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unify_table-1024x179.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unify_table-300x53.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unify_table-768x135.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unify_table.png 1353w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-554\" class=\"wp-caption-text\">Dieser Block f\u00fchrt zwei Tabellen zu einer zusammen.<\/figcaption><\/figure>\n<p>Dabei werden die Daten wieder zuerst gedreht, aneinandergeh\u00e4ngt und schliesslich wieder zur\u00fcckgedreht. Das funktioniert wesentlich einfacher als mit der Verwendung einer expliziten Schlaufe.<\/p>\n<h3>L\u00f6schen von Spalten in einer Tabelle<\/h3>\n<p>Um eine Spalte in einer Tabelle zu l\u00f6schen, wird diese unter Verwendung aller Spalten, die nicht gel\u00f6scht werden sollen, neu geschrieben. Damit dies einigermassen komfortable funktioniert, wird zuerst eine Hilfsfunktion ben\u00f6tigt, welche eine Liste der Spalten generiert, die behalten werden sollen.<\/p>\n<figure id=\"attachment_555\" aria-describedby=\"caption-attachment-555\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-555\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/elinimate_numbers-1024x697.png\" alt=\"\" width=\"525\" height=\"357\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/elinimate_numbers-1024x697.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/elinimate_numbers-300x204.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/elinimate_numbers-768x523.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/elinimate_numbers.png 1221w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-555\" class=\"wp-caption-text\">Dieser Block streicht eine Zahl aus einer Zahlenliste.<\/figcaption><\/figure>\n<p>Dank der Fallunterscheidung funktioniert dies mit einzelnen Zahlen und Listen von Zahlen.<\/p>\n<figure id=\"attachment_556\" aria-describedby=\"caption-attachment-556\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-556\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/delete_row-1024x341.png\" alt=\"\" width=\"525\" height=\"175\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/delete_row-1024x341.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/delete_row-300x100.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/delete_row-768x255.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/delete_row.png 1461w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-556\" class=\"wp-caption-text\">Dieser Block l\u00f6scht eine Spalte aus einer Tabelle.<\/figcaption><\/figure>\n<p>Der Block schreibt also die Tabelle neu und verwendet dabei alle Spalter, ausser derjenigen, die eben gel\u00f6scht werden soll.<\/p>\n<h3>Zusammenfassung der Tabellendaten<\/h3>\n<p>Der Block zur Zusammenfassung der Tabellendaten weist einen wesentlich h\u00f6heren Abstraktionsgrad auf und greift dabei auf verschiedene bereits vorhandene und zus\u00e4tzlich geschriebene Bl\u00f6cke zur\u00fcck.<\/p>\n<figure id=\"attachment_521\" aria-describedby=\"caption-attachment-521\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-521\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/summary_of-1024x458.png\" alt=\"\" width=\"525\" height=\"235\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/summary_of-1024x458.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/summary_of-300x134.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/summary_of-768x344.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/summary_of.png 1428w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-521\" class=\"wp-caption-text\">Dieser Block liefert eine Tabelle mit den wichtigsten Kenndaten eines Datensatzes zur\u00fcck.<\/figcaption><\/figure>\n<p>Grunds\u00e4tzlich erzeugt der Block eine neue Tabelle mit den \u00dcberschriften &#8222;column&#8220;, &#8222;min&#8220;, &#8222;max&#8220;, &#8222;mean&#8220; und &#8222;sd&#8220;. Die eigentliche Tabelle wird erzeugt, indem f\u00fcr jede Spalte die entsprechenden Werte berechnet werden, wobei die Tabelle zur einfacheren Berechnung noch rotiert wird.<\/p>\n<figure id=\"attachment_527\" aria-describedby=\"caption-attachment-527\" style=\"width: 691px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-527\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/result_of_summary.png\" alt=\"\" width=\"691\" height=\"294\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/result_of_summary.png 691w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/result_of_summary-300x128.png 300w\" sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><figcaption id=\"caption-attachment-527\" class=\"wp-caption-text\">Der Block &#8222;summary&#8220; liefert eine Zusammenfassung der wichtigsten Kerngr\u00f6ssen.<\/figcaption><\/figure>\n<h2>Bl\u00f6cke zur Berechnung statistischer Kennwerte<\/h2>\n<p>Im n\u00e4chsten Abschnitt werden Bl\u00f6cke vorgestellt, die zur Berechnung statistischer Kennwerte verwendet werden k\u00f6nnen. Damit diese funktionierten, d\u00fcrfen die zugrundeliegenden Listen in der Regel nur Zahlen enthalten.<\/p>\n<h3>Minimum, Maximum und Spannweite<\/h3>\n<p>Die Bl\u00f6cke zur Berechnung des Minimums und Maximums sortieren die Daten zuerst und holen sich dann den ersten, respektive letzten Wert aus der sortierten Liste.<\/p>\n<figure id=\"attachment_535\" aria-describedby=\"caption-attachment-535\" style=\"width: 999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-535\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/min.png\" alt=\"\" width=\"999\" height=\"252\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/min.png 999w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/min-300x76.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/min-768x194.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-535\" class=\"wp-caption-text\">Dieser Block liefert den minimalen Wert in einer Liste von Zahlen.<\/figcaption><\/figure>\n<figure id=\"attachment_536\" aria-describedby=\"caption-attachment-536\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-536\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/max-1024x251.png\" alt=\"\" width=\"525\" height=\"129\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/max-1024x251.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/max-300x73.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/max-768x188.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/max.png 1029w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-536\" class=\"wp-caption-text\">Dieser Block liefert den Maximalwert aus einer Liste von Zahlen zur\u00fcck.<\/figcaption><\/figure>\n<p>Nat\u00fcrlich h\u00e4tte man den max-Block auch so programmieren k\u00f6nnen, dass man mit dem &#8222;gr\u00f6sser als&#8220;-Zeichen operiert.<\/p>\n<p>Der Block zur Berechnung der Spannweite ruft einfach &#8222;max&#8220; und &#8222;min&#8220; auf und berechnet dann die Differenz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-537\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range.png\" alt=\"\" width=\"942\" height=\"225\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range.png 942w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range-300x72.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range-768x183.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Bei der Programmierung dieses Blocks wurde bewusst auf eine Optimierung (die Liste wird zweimal sortiert) verzichtet, damit klarer wird, dass die Spannweite die Differenz von Maximum und Minimum ist. Wenn mit sehr grossen Datens\u00e4tzen gearbeitet wird, kann es sinnvoll sein, eine optimierte Version zu verwenden. Diese k\u00f6nnte dann so aussehen:<\/p>\n<figure id=\"attachment_538\" aria-describedby=\"caption-attachment-538\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-538\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range_efficient-1024x359.png\" alt=\"\" width=\"525\" height=\"184\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range_efficient-1024x359.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range_efficient-300x105.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range_efficient-768x269.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/range_efficient.png 1326w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-538\" class=\"wp-caption-text\">Durch die Optimierung halbiert sich die Berechnungszeit, daf\u00fcr ist die Programmierung weniger verst\u00e4ndlich.<\/figcaption><\/figure>\n<p>Da bei ca. 2000 Werten die Berechnungszeit auch bei einem langsameren Computer unter einer Sekunde liegen d\u00fcrfte, lohnt sich eine solche Anpassung im Schulgebrauch wahrscheinlich nicht.<\/p>\n<h3>Anzahl unterschiedlicher Werte<\/h3>\n<p>Manchmal ist es praktisch, wenn man weiss, wie viele unterschiedliche Werte sich in einer Spalte einer Tabelle befinden. Programmtechnisch l\u00e4sst sich dies in Snap! einfach umsetzen.<\/p>\n<figure id=\"attachment_545\" aria-describedby=\"caption-attachment-545\" style=\"width: 999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-545\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unique_values.png\" alt=\"\" width=\"999\" height=\"225\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unique_values.png 999w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unique_values-300x68.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/unique_values-768x173.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-545\" class=\"wp-caption-text\">Dieser Block liefert die Anzahl unterschiedlicher Werte in einer Liste zur\u00fcck.<\/figcaption><\/figure>\n<p>Zuerst wird die Liste auf die unterschiedlichen Werte reduziert, anschliessend wird noch die L\u00e4nge dieser reduzierten Liste abgefragt.<\/p>\n<p>Sinnvoll ist die Anwendung eines solchen Befehls vor allem bei Listen, deren Inhalte nicht aus Zahlen bestehen. Will man den Befehl trotzdem mit Zahlen verwenden, kann man diese beispielsweise runden, um deren Vielfalt zu reduzieren.<\/p>\n<h3>Mittelwert, Zentralwert und h\u00e4ufigster Wert<\/h3>\n<p>Die Ausf\u00fchrungen zu den drei statistischen Werten (mean, median, modus) sollen sich hier auf die Umsetzung als Snap!-Bl\u00f6cke beschr\u00e4nken. Am einfachsten ist es, das arithmetische Mittel (mean) zu berechnen.<\/p>\n<figure id=\"attachment_539\" aria-describedby=\"caption-attachment-539\" style=\"width: 990px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-539\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/mean.png\" alt=\"\" width=\"990\" height=\"225\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/mean.png 990w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/mean-300x68.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/mean-768x175.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-539\" class=\"wp-caption-text\">Dieser Block liefert das arithmetische Mittel aller Werte in einer Liste zur\u00fcck.<\/figcaption><\/figure>\n<p>Programmtechnisch wird die Summe aller Werte gebildet, dabei hilft der entsprechende Summenbefehl aus der Bibliothek &#8222;Variadic Reporters&#8220;, die anschliessend durch die Anzahl der Werte dividiert wird.<\/p>\n<p>Komplizierter ist die Berechnung des Zentralwerts, weil dazu die Liste sortiert und ausserdem eine Fallunterscheidung (gerade oder ungerade Anzahl von Werten) vorgenommen werden muss.<\/p>\n<figure id=\"attachment_540\" aria-describedby=\"caption-attachment-540\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-540\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/median-1024x674.png\" alt=\"\" width=\"525\" height=\"346\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/median-1024x674.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/median-300x197.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/median-768x506.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/median.png 1422w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-540\" class=\"wp-caption-text\">Dieser Block liefert den Zentralwert aus einer Liste von Zahlen zur\u00fcck.<\/figcaption><\/figure>\n<p>Zuerst wird mit dem Modulus-Operator gepr\u00fcft, ob die Anzahl der Werte ungerade ist. Wenn dem so ist, wird die Mitte der Liste bestimmt und der entsprechende Wert zur\u00fcckgegeben. Handelt es sich um eine gerade Anzahl von Werten, wird aus den beiden Werten in der Mitte das arithmetische Mittel berechnet. Dabei wurde auf einen Einsatz des schon bestehenden Blockes zur Berechnung des arithmetischen Mittels verzichtet, weil die Division mit Zwei in diesem Fall wohl anschaulicher ist.<\/p>\n<p>Am kompliziertesten ist die Berechnung des h\u00e4ufigsten Wertes, auch wenn dies aus der Anzahl der Blockbefehle nicht unmittelbar ersichtlich ist.<\/p>\n<figure id=\"attachment_541\" aria-describedby=\"caption-attachment-541\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-541\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/modus-1024x280.png\" alt=\"\" width=\"525\" height=\"144\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/modus-1024x280.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/modus-300x82.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/modus-768x210.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/modus.png 1437w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-541\" class=\"wp-caption-text\">Dieser Block liefert den h\u00e4ufigsten in einer Liste von Zahlen vorkommenden Wert zur\u00fcck.<\/figcaption><\/figure>\n<p>Die scheinbar nur aus einem Schritt bestehende Programmierung f\u00fchrt folgende Schritte durch: Zuerst werden die Daten mit &#8222;analyze&#8220; in Gruppen aufgeteilt und gez\u00e4hlt, aus wie vielen Elementen jeder dieser Gruppe besteht. Anschliessend wird die so berechnete Liste nach der Anzahl der Mitglieder sortiert und ganz zuletzt wird der h\u00f6chste Wert f\u00fcr eine Anzahl von Elementen zur\u00fcckgeliefert. Falls es mehrere H\u00f6chstwerte mit der gleichen Anzahl von Elementen gibt, wird dies in der Programmierung nicht ber\u00fccksichtigt. Der Block gibt immer nur einen Wert zur\u00fcck.<\/p>\n<h3>Standardabweichung und Streuung<\/h3>\n<p>Die Standardabweichung (standard deviation) und die Streuung (variance) sind beide statistische Kennwerte, die angeben, wie sehr sich die Daten in einem Datensatz voneinander unterscheiden. Bei beiden Werten gibt es jeweils zwei Rechenverfahren, die abh\u00e4ngig davon sind, ob man eine ganze Population oder nur eine Auswahl davon erfasst hat. Auch hier sollen sich die Ausf\u00fchrungen auf die Programmierung beschr\u00e4nken.<\/p>\n<p>Die Varianz berechnet sich als der Durchschnitt der Quadrate der Abweichungen zum Mittelwert der Daten.<\/p>\n<figure id=\"attachment_543\" aria-describedby=\"caption-attachment-543\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-543\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/variance-1024x576.png\" alt=\"\" width=\"525\" height=\"295\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/variance-1024x576.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/variance-300x169.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/variance-768x432.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/variance.png 1386w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-543\" class=\"wp-caption-text\">Der Block liefert die Streuung zu einer Liste von Zahlen zur\u00fcck.<\/figcaption><\/figure>\n<p>Zuerst wird das arithmetische Mittel berechnet, dann wird f\u00fcr jeden Wert die Abweichung vom Mittelwert quadriert und anschliessend die aufsummierten Quadrate durch die Anzahl der Werte (oder Werte -1) dividiert. Bei der Fallunterscheidung wurde nur der Wert f\u00fcr die Anzahl der Listenelemente angepasst, damit im Programmcode weniger von der eigentlichen Berechnung der Werte abgelenkt wird.<\/p>\n<p>Die Standardabweichung kann nur einfach als Quadratwurzel der Streuung berechnet werden.<\/p>\n<figure id=\"attachment_544\" aria-describedby=\"caption-attachment-544\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-544\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/standard-deviation-1024x221.png\" alt=\"\" width=\"525\" height=\"113\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/standard-deviation-1024x221.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/standard-deviation-300x65.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/standard-deviation-768x166.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/standard-deviation.png 1044w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-544\" class=\"wp-caption-text\">Dieser Block gibt die Standardabweichung zu einer Liste von Zahlen zur\u00fcck.<\/figcaption><\/figure>\n<h3>Umgang mit Zeitangaben<\/h3>\n<p>Zeitangaben am Computer sind ein kompliziertes Problem ,weil die verschiedenen Umrechnungen, z.B. 60 s = 1 min oder 24 h = 1 d, ber\u00fccksichtigt werden m\u00fcssen. Ausserdem gibt es dann noch die Schaltjahre usw. Aus diesem Grund werden Zeitangaben am Computer meist auf Sekunden (oder Millisekunden) umgerechnet, welche seit einem bestimmten Zeitpunkt (beispielsweise dem 1.1.1970) vergangen sind. Bei der Programmierung der entsprechenden Zeitfunktionalit\u00e4t f\u00fcr Snap! wurde ein \u00e4hnlicher Ansatz verfolgt. (Es ist nat\u00fcrlich auch m\u00f6glich, entsprechende Befehle mit einem JavaScript-Block einzuf\u00fcgen, aber das widerspr\u00e4che dem Versuch, den Lernenden die Grundlagen der Informatik zu vermitteln).<\/p>\n<p>Damit am Schluss die Berechnung der Unterschiede zwischen zwei Zeitangaben einigermassen benutzerfreundlich erfolgen kann, wird zuerst eine Hilfsfunktion definiert, welche den Zeitunterschied zum 1.1. im Jahr 0 berechnet. Aufgrund der heutigen 64bit Betriebssysteme ist eine Beschr\u00e4nkung auf einen kleinen Zeitraum wie 1970 nicht mehr notwendig. Allerdings wurde bei der Programmierung die Umstellung des Julianischen auf den Gregorianischen Kalender Ende des 16. Jahrhunderts nicht ber\u00fccksichtigt. Daten k\u00f6nnen aber bis ca. 1600 fast sekundengenaue (Problematik der Schaltsekunde) umgerechnet werden.<\/p>\n<figure id=\"attachment_546\" aria-describedby=\"caption-attachment-546\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-546\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculate_time_from-1024x678.png\" alt=\"\" width=\"525\" height=\"348\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculate_time_from-1024x678.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculate_time_from-300x199.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculate_time_from-768x509.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculate_time_from.png 1449w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-546\" class=\"wp-caption-text\">Der Block gibt die seit dem Jahr Null vergangene Zeit in Sekunden zur\u00fcck.<\/figcaption><\/figure>\n<p>Im Wesentlichen werden alle Bestandteile einer Datums- und Zeitangabe von der Sekunde bis zum Jahr aufaddiert, wobei in Einzelf\u00e4llen noch Rahmenbedingungen (Tage und Monate beginnen bei der Z\u00e4hlung mit 1) und Spezialf\u00e4lle (wie Schaltjahre) ber\u00fccksichtigt werden).<\/p>\n<p>Die Problematik der Schaltjahre wurde dabei wiederum in einen eigenen Block ausgelagert.<\/p>\n<figure id=\"attachment_547\" aria-describedby=\"caption-attachment-547\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-547\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Schaltjahre-1024x736.png\" alt=\"\" width=\"525\" height=\"377\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Schaltjahre-1024x736.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Schaltjahre-300x216.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Schaltjahre-768x552.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Schaltjahre.png 1119w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-547\" class=\"wp-caption-text\">Der Blockliefert die Tage pro Monat oder in einem Jahr unter Ber\u00fccksichtigung eines Schaltjahres zur\u00fcck.<\/figcaption><\/figure>\n<p>Dabei gibt der Block die zu ber\u00fccksichtigen Tage entweder als Liste (Monate) oder als Summe (Jahr) zur\u00fcck.<\/p>\n<p>Mithilfe dieser Bl\u00f6cke kann nun der f\u00fcr die Lernenden eigentlich interessante Block umgesetzt werden. Dieser bietet eine etwas angenehmere Schnittstelle an, bei der die Zeitangaben einfach im in den CO2-Daten vorhandenen Zeitformat \u00fcbernommen werden k\u00f6nnen.<\/p>\n<figure id=\"attachment_549\" aria-describedby=\"caption-attachment-549\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-549\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zeitangaben-in-sekunden-1024x702.png\" alt=\"\" width=\"525\" height=\"360\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zeitangaben-in-sekunden-1024x702.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zeitangaben-in-sekunden-300x206.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zeitangaben-in-sekunden-768x526.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zeitangaben-in-sekunden.png 1335w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-549\" class=\"wp-caption-text\">Dieser Block nimmt Zeitangaben im Format &#8222;yyyy-mm-dd hh:mm:ss&#8220; entgegen und rechnet diese in Sekunden seit dem Jahr Null um.<\/figcaption><\/figure>\n<p>Weil dabei unter Umst\u00e4nden mehr als 2000 Jahre aussummiert werden m\u00fcssen, kann noch mit einer Zeitkorrektur gearbeitet werden, welche die Berechnungszeit wesentlich reduziert.<\/p>\n<h2>Beispiel zur Bearbeitung von Daten<\/h2>\n<p>Eine interessante Fragestellung zu den Daten des Statistischen Amtes des Kantons Z\u00fcrich ist die nach den Zeitabst\u00e4nden zwischen den einzelnen Messungen im Beispieldatensatz. Um mehr dar\u00fcber zu erfahren, k\u00f6nnen in Snap! folgende Schritte ausgef\u00fchrt werden.<\/p>\n<ol>\n<li>Die vorhandenen Zeitangaben werden in Sekunden umgerechnet.<\/li>\n<li>Der Datensatz wird mit diesen Angaben erweitert und die nicht mehr ben\u00f6tigte Spalte &#8222;time&#8220; allenfalls entfernt.<\/li>\n<li>Die Zeitunterschiede zwischen den Messungen werden berechnet und nach der Gr\u00f6sse des Zeitunterschiedes oder der H\u00e4ufigkeit gruppiert.<\/li>\n<\/ol>\n<h3>Umrechnung der Zeitangaben<\/h3>\n<p>F\u00fcr die Umrechnung der Zeitangaben kann man auf den bereits beschriebenen Block zur\u00fcckgreifen. Da alle Zeitangaben in den Beispieldaten aus dem Jahr 2020 stammen, wird die Berechnung aus Effizienzgr\u00fcnden um diesen Wert korrigiert. Die so entstandene Liste wird in einer tempor\u00e4ren Variablen abgespeichert (und kann sp\u00e4ter wieder gel\u00f6scht werden).<\/p>\n<figure id=\"attachment_552\" aria-describedby=\"caption-attachment-552\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-552\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculated_time-1024x235.png\" alt=\"\" width=\"525\" height=\"120\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculated_time-1024x235.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculated_time-300x69.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculated_time-768x177.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/calculated_time.png 1422w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-552\" class=\"wp-caption-text\">Alle Zeitangaben werden in Sekunden umgerechnet.<\/figcaption><\/figure>\n<h3>Anpassen des Datensatzes<\/h3>\n<p>Die so berechneten Werte f\u00fcgen wir nun zur schon vorhandenen Tabelle hinzu.<\/p>\n<figure id=\"attachment_553\" aria-describedby=\"caption-attachment-553\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-553\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/add_data-1024x79.png\" alt=\"\" width=\"525\" height=\"41\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/add_data-1024x79.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/add_data-300x23.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/add_data-768x60.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/add_data.png 1122w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-553\" class=\"wp-caption-text\">Mit dem entsprechenden Befehl k\u00f6nnen Tabellen leicht zusammengef\u00fchrt werden.<\/figcaption><\/figure>\n<p>Zum L\u00f6schen der nun nicht mehr ben\u00f6tigten Spalte &#8222;time&#8220;, kann auf bereits vorhandene Befehle zur\u00fcckgegriffen werden. Um Fehler zu vermeiden, soll dabei die Spaltenzahl aufgrund der Spalten\u00fcberschrift ermittelt werden. Dies verhindert auch Probleme, wenn sich eine Spalte nicht am Ende der Tabelle befindet und Lernende ungeduldig mehrfach einen Block anklicken.<\/p>\n<figure id=\"attachment_558\" aria-describedby=\"caption-attachment-558\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-558\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Spalte_loeschen-1024x118.png\" alt=\"\" width=\"525\" height=\"60\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Spalte_loeschen-1024x118.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Spalte_loeschen-300x35.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Spalte_loeschen-768x89.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/Spalte_loeschen.png 1248w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-558\" class=\"wp-caption-text\">Die nicht mehr ben\u00f6tigte Spalte &#8222;time&#8220; kann gel\u00f6scht werden.<\/figcaption><\/figure>\n<p>Den Erfolg der durchgef\u00fchrten Operation sollte man von Zeit zu Zeit \u00fcberpr\u00fcfen, was mit dem summary-Block geschehen kann.<\/p>\n<figure id=\"attachment_559\" aria-describedby=\"caption-attachment-559\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-559\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zusammenfassung-1024x313.png\" alt=\"\" width=\"525\" height=\"160\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zusammenfassung-1024x313.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zusammenfassung-300x92.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zusammenfassung-768x235.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/zusammenfassung.png 1089w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-559\" class=\"wp-caption-text\">Die Zusammenfassung zeigt, dass die geplanten Operationen erfolgreich durchgef\u00fchrt wurden.<\/figcaption><\/figure>\n<h3>Zeitunterschiede berechnen<\/h3>\n<p>Im n\u00e4chsten Schritt werden nun die Zeitunterschiede zwischen den Messungen berechnet. Da dazu die eigentliche Tabelle nicht ben\u00f6tigt wird, kann auf die tempor\u00e4re Liste &#8222;calculated time&#8220; zur\u00fcckgegriffen werden.<\/p>\n<figure id=\"attachment_560\" aria-describedby=\"caption-attachment-560\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-560\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/time_differences-1024x304.png\" alt=\"\" width=\"525\" height=\"156\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/time_differences-1024x304.png 1024w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/time_differences-300x89.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/time_differences-768x228.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2021\/02\/time_differences.png 1425w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-560\" class=\"wp-caption-text\">Die Zeitdifferenzen k\u00f6nnen mit einem verschachtelten Block berechnet und ausgewertet werden.<\/figcaption><\/figure>\n<p>Der Block berechnet zuerst alle Differenzen zwischen jeweils nachfolgenden Zeilen, wobei der erste und letzte Wert verworfen werden, da diese Berechnungen kein sinnvolles Ergebnis liefern, dann wird ausgez\u00e4hlt wie viele Male jede Differenz vorkommt und die so entstandene Tabelle noch mit entsprechenden \u00dcberschriften versehen.<\/p>\n<h1>Fazit<\/h1>\n<p>Anhand der CO2-Daten des Statistischen Amtes des Kantons Z\u00fcrich wurde aufgezeigt, wie Snap! als Alternative zu einer professionellen Statistiksoftware wie R f\u00fcr die deskriptive Datenanalyse verwendet werden kann. Fehlende Funktionalit\u00e4ten k\u00f6nnen dabei auf beliebigem Abstraktionsniveau erg\u00e4nzt werden. Aufgrund der Flexibilit\u00e4t von Snap! kann damit eine typische Vorgehensweise von R gut nachgebildet werden, ohne dass man sich dabei die Schwierigkeiten einer textbasierten Programmiersprache einhandelt.<\/p>\n<p>Damit eignet sich Snap! gut f\u00fcr die Datenanalyse mit Sch\u00fclerinnen und Sch\u00fclern der Sekundarstufe I und das dabei erworbene Wissen und die erarbeiteten Kompetenzen &#8211; z.B. zur genauen Funktionsweise des map-Blockes &#8211; sollten sich anschliessend vergleichsweise gut auf eine Statistiksoftware wir R \u00fcbertragen lassen.<\/p>\n<p>Die folgenden Einschr\u00e4nkungen sollten aber beachtet werden:<\/p>\n<ol>\n<li>Alle beschriebenen Bl\u00f6cke funktionieren unter der Voraussetzung, dass die Daten sauber sind, d.h. keine fehlenden oder falschen Daten (z.B. Text statt Zahlen) enthalten. In dieser Hinsicht leistet R mehr, weil entsprechende Mechanismen teilweise schon eingebaut sind.<\/li>\n<li>Da Snap! in einem Browser l\u00e4uft und technisch auf eine JavaScript-Umgebung aufbaut, ist R in der Regel erstens schneller und kann zweitens auch mit wesentlich gr\u00f6sseren Datenmengen umgehen.<\/li>\n<li>R verf\u00fcgt mit seinen zahlreichen Erweiterungen nat\u00fcrlich \u00fcber wesentlich mehr Statistikfunktionen als dies bei dem Allrounder Snap! der Fall ist.<\/li>\n<\/ol>\n<p>Trotz dieser Einw\u00e4nde lohnt sich der Einsatz von Snap, denn &#8230;<\/p>\n<ol>\n<li>Auch in R ist die S\u00e4uberung von Datens\u00e4tzen mit grossem Aufwand verbunden und teilweise eine Aufgabe f\u00fcr Expertinnen und Experten.<\/li>\n<li>Die Datenmengen, welche auf der Sekundarstufe I in der Regel bearbeitet werden, d\u00fcrften weit unter dem technisch umsetzbaren Grenzen bei der Programmierung mit Snap! liegen.<\/li>\n<li>Auf der Sekundarstufe I wird nur ein Bruchteil der statistischen Methoden ben\u00f6tigt, die in einem professionellen Umfeld verwendet werden. Ausserdem k\u00f6nnen die gew\u00fcnschten Funktionen als Bl\u00f6cke jederzeit nachprogrammiert werden.<\/li>\n<li>Im Gegensatz zu R sind weitere Anwendungsfelder beispielsweise im Bereich Multimedia einfacher umzusetzen und bed\u00fcrfen daf\u00fcr auch nicht der vorg\u00e4ngigen Installation einer zus\u00e4tzlichen Software auf den Ger\u00e4ten der Lernenden.<\/li>\n<\/ol>\n<p>Insgesamt spricht also vieles f\u00fcr den Einsatz von Snap! auf der Sekundarstufe I und dies auch im Bereich der deskriptiven Statistik. Dass dies bisher wohl kaum geschehen ist, d\u00fcrfte vor allem daran liegen, dass der Fokus der Volksschule bisher einerseits wenig auf der Programmierung lag, wobei die deutliche Abgrenzung zwischen Medien und Informatik im Lehrplan nicht unbedingt hilfreich ist, und wenn die eigentliche Informatik doch einmal im Vordergrund stand, sich diese auf die Umsetzung als &#8222;Informatik ohne Strom&#8220; oder aber auf vergleichsweise banale Umsetzungen in blockbasierten Sprachen wie Scratch beschr\u00e4nkte, bei denen meist nur sehr einfache Konzepte der Informatik umgesetzt wurden.<\/p>\n<p>Es ist zu hoffen, dass mit dem steigenden Bekanntheitsgrad von Snap! die dadurch er\u00f6ffneten M\u00f6glichkeiten zunehmend auch im deutschsprachigen Raum eingesetzt und damit der k\u00fcnstliche Graben zwischen Medien und Informatik \u00fcberwunden werden kann, denn die Datenanalyse mit Snap! ist nur eine von \u00e4usserst vielf\u00e4ltigen Anwendungsm\u00f6glichkeiten und die dabei erworbenen Erkenntnisse k\u00f6nnen anschliessend gut auch im Bereich der Medien genutzt und erweitert werden.<\/p>\n<p>Die beschriebenen Bl\u00f6cke k\u00f6nnen unter <a href=\"https:\/\/snap.berkeley.edu\/snap\/snap.html#present:Username=mattgig&amp;ProjectName=data%20science&amp;editMode&amp;noRun\" target=\"_blank\" rel=\"noopener\">Data Science<\/a> ausprobiert werden.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Auswertung von Daten geh\u00f6rt zu den Kernkompetenzen einer Gesellschaft, welche wissensbasiert handeln will. Deshalb erkl\u00e4rt auch der Lehrplan der Deutschschweiz das Auswerten von Daten aus der Umwelt der Sch\u00fclerinnen und Sch\u00fcler als eines der \u00fcbergeordneten Ziele des Informatikunterrichts. Darauf hat unter anderem auch das Statistische Amt des Kantons Z\u00fcrich reagiert und eine Webseite zum &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gigers.com\/blog\/deskriptive-auswertung-von-daten-mit-snap\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDeskriptive Auswertung von Daten mit Snap!\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-508","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/comments?post=508"}],"version-history":[{"count":19,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/508\/revisions"}],"predecessor-version":[{"id":568,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/508\/revisions\/568"}],"wp:attachment":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/media?parent=508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/categories?post=508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/tags?post=508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}