Template - Orangenlimonade(Python)

Übersicht


1: Vorbereitung


1.1: Anlegen der Daten
1.2: Datenmodell


2: Einfache Abfragen mit SQL


2.1: Spalten auswählen
2.2: Datensätze filtern
2.3: Zählen, Summieren und andere Aggregationen
2.4: Daten gruppieren
2.5: Das Ergebnis sortieren


3: Erweiterte Abfragen mit SQL


3.1: Verhältnisgrößen berechnen mit SQL
3.2: Transformieren von Daten mit SQL
    3.2.1: Mehrere Spalten zu einer Spalte zusammenfassen
    3.2.2: Eine Spalte zu einer Zeile zusammenfassen
    3.2.3: Anreichern der Daten mit weiteren Spalten
               a) Regelbasierte Anreicherung
               b) Verwendung von Mapping-Tabellen


4: Statistische Analysen mit SQL


4.1: Lageparameter bestimmen
4.2: Zusammenhänge ermitteln


5: Komplexe Abfragen mit SQL (nicht Teil dieser Einheit)


5.1: Abfragen über mehrere Tabellen (JOINs)
5.2: Mengenoperationen
5.3: Unterabfragen
5.4: Window-Funktionen


Links


Fragebogen & Daten

🔗 Datenmodell Orangenlimonade als XLS
🔗 Fragebogen Orangenlimonade inklusive Codierung (PDF)

SQL

🔗 SQL Cheat Sheet
🔗 Slides zu SQL aus der Veranstaltung "Information Management"
🔗 Spark SQL Funktionsreferenz

1: Vorbereitung

Bevor wir loslegen können, müssen wir die Daten in eure persönlichern Databricks-Accounts laden und uns mit dem Datenmodell vertraut machen.

1.1: Anlegen der Daten


Den Block unten müsset ihr nur einmal ausführen. Der Code legt die benötigte Tabelle limonade an, mit der wir im Folgenden weiter arbeiten werden.

Show codeShow result

1.2: Datenmodell

Eine Liste mit allen Spalten könnt ihr hier als Spreadsheet einsehen. Alternativ könnt ihr euch die Spalten einer Tabelle auch mithilfe des describe Befehls ausgeben lassen.

Den Fragebogen könnt ihr hier herunterladen (Strg gedrückt halten, um in einem neuen Tab zu öffnen): Fragebogen inklusive Codierung (PDF)

%sql
describe limonade
idintnull
f1_gekauftintnull
f1_getrunkenintnull
f1_weder_nochintnull
f2_grund_nichtkaufstringnull
f3_discounterintnull
f3_getraenkemarktintnull
f3_kaufhausintnull
f3_kioskintnull
f3_sonstigestringnull
f3_supermarktintnull
f4_konsumhaeufigkeitintnull
f5_flaschenzahl_025_ABintnull
f5_flaschenzahl_033_ABdoublenull
f5_flaschenzahl_050_ABintnull
f5_flaschenzahl_075_ABintnull
f5_flaschenzahl_100_ABdoublenull
f5_flaschenzahl_150_ABintnull
f6_gebindeartintnull
f7_muell_einwegintnull
f7_muellbergreduz_mehrwegintnull
f7_umweltschutz_mehrwegintnull
f8_info_beimKaufintnull
f8_info_empfehlungintnull
f8_info_papierwerbungintnull
f8_info_sonstigesstringnull
f8_info_website_LEHintnull
f8_info_website_markenintnull
f8_info_werbespotsintnull
f8_info_zeitschriftenintnull
f9_konsum_abendsintnull
f9_konsum_mahlzeitenintnull
f9_konsum_partyintnull
f9_konsum_sonstigesstringnull
f9_konsum_sportintnull
f9_konsum_zwischendurchintnull
f10_kauf_einkaufzettelintnull
f10_kauf_party_pflichtintnull
f10_kauf_spontanintnull
f10_kauf_weiterempfehlungintnull
f11_assoziation_offenstringnull
f12_assozi_abwechselungintnull
f12_assozi_coolintnull
f12_assozi_durstintnull
f12_assozi_erfrischungintnull
f12_assozi_freizeitintnull
f12_assozi_fruchtigintnull
f12_assozi_leckerintnull
f12_assozi_partyintnull
f12_assozi_sommerintnull
f12_assozi_sonneintnull
f12_assozi_sonstigestringnull
f12_assozi_spassintnull
f12_assozi_sportintnull
f12_assozi_urlaubintnull
f12_assozi_zuckerhaltigintnull
f13_weiterempfehlung_NPS_ABintnull
f14_grund_weiterempfehlung_NPSstringnull
f15_markennennung_spontanstringnull
f16_konsum_adelholzenerintnull
f16_konsum_blunaintnull
f16_konsum_deitintnull
f16_konsum_fantaintnull
f16_konsum_fritzintnull
f16_konsum_hermanintnull
f16_konsum_mirindaintnull
f16_konsum_now_sunnyintnull
f16_konsum_oranginaintnull
f16_konsum_riverintnull
f16_konsum_schweppesintnull
f16_konsum_sinalcointnull
f16_konsum_sonstigestringnull
f16_konsum_vilsaintnull
f16_konsum_viointnull
f17_lieblingsmarkeintnull
f17_lieblingsmarke_sonstigestringnull
f18_preisoffen_A_fantadoublenull
f18_preisoffen_A_fritzdoublenull
f18_preisoffen_A_viodoublenull
f19_preisspanne_B_fantaintnull
f19_preisspanne_B_fritzintnull
f19_preisspanne_B_viointnull
f20_fanta_Aintnull
f20_fanta_Bintnull
f20_fritz_Aintnull
f20_fritz_Bintnull
f20_vio_Aintnull
f20_vio_Bintnull
f21_preis_guter_deal_fanta_Adoublenull
f21_preis_guter_deal_fritz_Bdoublenull
f22_preis_zu_teuer_fanta_Adoublenull
f22_preis_zu_teuer_fritz_Bdoublenull
f23_preis_teuer_ok_fanta_Adoublenull
f23_preis_teuer_ok_fritz_Bdoublenull
f24_preis_zu_guenstig_fanta_Adoublenull
f24_preis_zu_guenstig_fritz_Bdoublenull
f25_auf_party_wichtigintnull
f25_beim_essen_ueblichintnull
f25_zum_mixenintnull
f26_besonders_probierenintnull

2: Einfache Abfragen mit SQL

SQL ist eine Abfragesprache, die sich gut für strukturierte Daten eignet. Der Begriff "strukturiert" bedeutet in diesem Zusammenhang, dass wir die Daten in Tabellenform vorliegen haben, ähnlich wie in einem Excel-Spreadsheet. Konkret bedeutet das, dass die Daten in Spalten und Zeilen vorliegen. Jede Spalte besitzt einen Namen und speichert ein Merkmal bezüglich der Daten. Die Daten liegen zeilenweise vor, also z.B. repräsentiert jede Zeile in der Tabelle einen ausgefüllten Fragebogen eines Teilnehmers.

Wir verwenden den SELECT-Befehl, um Daten abzufragen. Dabei können wir mit dem SELECT-Befehl unterschiedliche Methoden anwenden, um das Ergebnis nach unseren Wünschen zu gestalten. Einige dieser Methoden lernen wir anhand der folgenden Aufgabenstellungen kennen.

2.1: Spalten auswählen

Eine wichtige Funktion des SELECT-Befehls ist die Einschränkung der Spalten, die im Ergebnis enthalten sind. Datensätze enthalten häufig sehr viele Spalten, der hier vorliegende Datensatz hat 274 (!) Spalten. Aber nur wenige sind für die Beantwortung einer Fragestellung tatsächlich relevant.

Aufgabe 1


Erstellt eine SQL-Abfrage, die im Ergebnis nur Informationen zum Studium des Teilnehmers beinhaltet!

Aufgabe 2


Wählt aus den gesamten Spalten nur die Spalten für die Frage 12 ("Was verbinden Sie spontan mit dem Begriff Orangenlimonade?") aus!

2.2: Datensätze filtern

SQL lässt uns nicht nur bestimmen, welche Spalten wir im Ergebnis sehen wollen, sondern auch, welche Zeilen. Um das zu anzugeben, können wir so genannte Bedingungen definieren, die für jede Zeile gelten müssen. Gilt eine der Bedingungen nicht, so ist die Zeile nicht im Ergebnis enthalten.

Diese Filterbedingungen erstellen leiten wir mit dem Schlüsselwort WHERE ein, gefolgt von ein oder mehreren Bedingungen. Die folgenden Aufgaben bringen uns die WHERE-Klausel näher.

Aufgabe 3


Wir wollen uns nur die Antworten von Teilnehmern ansehen, deren Haushalt mindestens 2 Personen angehören. Filtert die Datensätze entsprechend!

✓ Die Größe des Haushalts wird in Frage 48 erfasst.

Aufgabe 4


Angenommen es interessieren uns nur Antworten von Teilnehmern, die 1990 oder später geboren wurden. Filtert die Datensätze entsprechend!

✓ Das Geburtsjahr wird in Frage 39 erfasst.

Aufgabe 5


Filtert die Daten so, dass nur Teilnehmer mit dem Status "Noch Schüler", "Volks-/ Hauptschulabschluss" und "Ohne Abschluss" enthalten sind!

✓ Der Schulabschluss wird in Frage 40 erfasst.

Aufgabe 6


Welche der männlichen Teilnehmer essen mehrmals pro Woche Fast-Food?

✓ Das Geschlecht wird in Frage 53 erfasst.
✓ Die Ernährungsgewohnheiten werden in Frage 38 erfasst.

2.3: Zählen, Summieren und andere Aggregationen

Häufig wollen wir aggregierte Werte aus den Daten ermitteln. Jedes Mal wenn wir fragen "Wie viele..." fragen wir nach einer Zahl, die letztlich das Ergebnis einer Aggregation der Daten ist. Es gibt viele andere Möglichkeiten, Daten zu aggregieren. Einige davon lernen wir anhand der folgenden Aufgaben kennen.

Aufgabe 7


Wie viele Antworten sind im Datensatz insgesamt enthalten?

✓ Die Funktion count() zählt Datensätze!

Aufgabe 8


Wie groß ist der größte Haushalt unter den Antworten?

✓ Die Größe des Haushalts wird in Frage 48 erfasst.
CAST(<col> AS DECIMAL) IS NOT NULL prüft ob der Wert ind er Spalte einen numerischen Wert enthält
✓ Die Funktionen max() und min() sprechen für sich.

Aufgabe 9


Wie wichtig ist den Teilnehmern Orangenlimonade auf Parties im Durchschnitt?

✓ Diese Info findet ihr in Frage 25.
✓ Die Funktion avg() berechnet das arithmetische Mittel.
✓ Vorsicht, ihr müsst etwas beachten. Schaut euch mal das Ergebnis an und überlegt, ob es valide ist.

Aufgabe 10


Wie viele Personen leben in Summe in den Haushalten der Befragten?

✓ Diese Info findet ihr in Frage 48.
✓ Die Funktion sum() summiert numerische Daten.

Aufgabe 11


Aus welchem Geburtsjahrgang stammt der älteste Teilnehmer?

✓ Das Geburtsjahr wird in Frage 39 erhoben.

2.4: Daten Gruppieren

Wir haben oben Aggregationsfunktionen kennengelernt, die uns jeweils einen Wert zurückliefern. Beispiele waren die Summe, der Durchschnitt oder der größte Wert der gesamten Daten. Oft reicht aber ein Wert alleine nicht aus, sondern wir brauchen je einen Durchchnittswert pro irgendeiner Untergruppe. Beispielsweise das Durschnittsalter pro Geschlecht.

Um das mit SQL zu erreichen nutzen wir so genannte Gruppierungen, die wir auf Basis von Spalten (oder Ausdrücken) bilden können. Wir verwenden hierfür das Schlüsselwort group by und nennen dann die zu gruppierenden Spalten (oder Ausdrücke).

Aufgabe 12


Wie ist die Verteilung der Postleitzahlen unter den Antworten?

✓ Die PLZ wird in Frage 51 erhoben.
✓ Erstellt auch eine passende Visualisierung.
✓ Stellt sicher, dass nur gültige PLZ im Ergebnis enthalten sind.

Aufgabe 13


Wie ist die Verteilung der Geschlechter unter den Teilnehmern der Umfrage?

✓ Das Geschlecht wird in Frage 53 erhoben.
✓ Zeigt die Verteilung der absoluten Zahlen.
✓ Erstellt auch eine passende Visualisierung.

Aufgabe 14


Wie sind die Geburtsjahrgänge verteilt?

✓ Die Info findet ihr in Frage 39.
✓ Zeigt die Verteilung der absoluten Zahlen.
✓ Visualisiert das Ergebnis als Balkendiagramm, sortiert nach dem Jahrgang.

Aufgabe 15


Wie ist die Geschlechterverteilung pro Studiengang?

✓ Das Geschlecht wird in Frage 53 erhoben.
✓ Der Studiengang wird in Frage 44 erhoben.
✓ Zeigt die Verteilung der absoluten Zahlen.

2.5: Das Ergebnis sortieren

Oft ist es notwendig, das Resultat einer SQL Abfrage zu sortieren. Häufige Szenarien sind Top-Listen sowie die beste oder schlechteste Zeile im Ergebnis. Die folgenden Aufgaben helfen euch dabei, das Sortieren mit SQL anwenden zu lernen.

Aufgabe 16


Sortiert die Daten nach dem Alter der Befragten, so dass die Ältesten oben stehen!

Aufgabe 17


Welche Einkommensklasse nennt im Durchschnitt den höchsten Preis für einen guten Deal (egal welche Limonadensorte)?

✓ Die Abfrage von Preisgrenzen erfolgt in Frage 21.
✓ Erstellt auch eine passende Visualisierung.

3: Erweiterte Abfragen mit SQL

Der Funktionsumfang von SQL ist weitaus größer als wir ihn im vorigen Teil kennengelernt haben. Aber auch mit den einfachen Mitteln können wir schon sehr viel erreichen. Darum geht es in diesem Abschnitt.