animal | jump_length | flea_count | weight | grade | infected |
---|---|---|---|---|---|
dog | 5.7 | 18 | 2.1 | 8 | FALSE |
dog | 8.9 | 22 | 2.3 | 8 | TRUE |
dog | 11.8 | 17 | 2.8 | 6 | TRUE |
dog | 5.6 | 12 | 2.4 | 8 | FALSE |
dog | 9.1 | 23 | 1.2 | 7 | TRUE |
dog | 8.2 | 18 | 4.1 | 7 | FALSE |
dog | 7.6 | 21 | 3.2 | 9 | FALSE |
cat | 3.2 | 12 | 1.1 | 7 | TRUE |
cat | 2.2 | 13 | 2.1 | 5 | FALSE |
cat | 5.4 | 11 | 2.4 | 7 | FALSE |
cat | 4.1 | 12 | 2.1 | 6 | FALSE |
cat | 4.3 | 16 | 1.5 | 6 | TRUE |
cat | 7.9 | 9 | 3.7 | 6 | FALSE |
cat | 6.1 | 7 | 2.9 | 5 | FALSE |
8 Buchstaben und Zahlen
Letzte Änderung am 02. April 2024 um 09:52:43
“Beyond this place there be dragons (lat. Hic sunt dracones)” — Captain Picard, Star Trek: The Next Generation, Where Silence Has Lease
Was ist eigentlich das Problem mit den Buchstaben und Zahlen? Anscheinend haben Programmiersprachen ein Problem Zahlen und Buchstaben auseinander zuhalten. Eigentlich eher die Arten von Zahlen und Buchstaben die es so gibt. Es gibt nicht nur die eine Zahl und den einen Buchstaben. Je nach Kontext hat eine Zahl und ein Buchstabe eine andere Bedeutung. In den vorherigen Beispielen haben wir uns die Sprungweiten und andere Eigenschaften von Hunden und Katzen angeschaut. Bevor wir uns weiter mit statistischen Kennzahlen beschäftigen, wollen wir uns einmal die Realisierung des Beispiels in R anschauen. Das heißt, wie ist eine Tabelle in R aufgebaut und was sehen wir da eigentlich?
Hier siehst du nochmal die Tabelle, wie wir die Tabelle in Microsoft Word darstellen würden.
Wir wollen jetzt an der Datentabelle die Besonderheiten von Zahlen und Buchstaben in einer Programmiersprache verstehen. Da wir uns jetzt hier mit der Programmiersprache R beschäftigen wollen, konzentrieren wir uns auf den Fall R. In anderen Programmiersprachen ist die Sachlage ähnlich aber nicht unbedingt gleich. Dabei wollen wir insbesondere die Eigenschaften von Zahlen und Buchstaben lernen, die notwendig sind um mit einem Programm wie R kommunizieren zu können. Nun haben wir in der Tabelle 8.1 mit Daten zu verschiedenen Outcomes, wie Sprungweite [cm], Anzahl an Flöhen auf Hunden und Katzen, die Boniturnoten oder aber den Infektionsstatus. Die Tabelle ist zwar nicht groß aber auch nicht wirklich klein. Wir wollen uns nun damit beschäftigen, die Zahlen sinnvoll in R darzustellen. Wir wollen mit der Darstellung einer Datentabelle in R beginnen, einem tibble()
.
8.1 Daten in R sind tibble()
Im Folgenden sehen wir die Daten aus der Tabelle 8.1 in R als tibble
dargestellt. Was ist nun ein tibble
? Ein tibble
ist zu aller erst ein Speicher für Daten in R. Das heißt wir lagern unsere Daten in Spalten und Zeilen. Jede Spalte repräsentiert eine Messung oder Variable und die Zeilen jeweils eine Beobachtung.
# A tibble: 14 x 6
animal jump_length flea_count weight grade infected
<chr> <dbl> <int> <dbl> <dbl> <lgl>
1 dog 5.7 18 2.1 8 FALSE
2 dog 8.9 22 2.3 8 TRUE
3 dog 11.8 17 2.8 6 TRUE
4 dog 5.6 12 2.4 8 FALSE
5 dog 9.1 23 1.2 7 TRUE
6 dog 8.2 18 4.1 7 FALSE
7 dog 7.6 21 3.2 9 FALSE
8 cat 3.2 12 1.1 7 TRUE
9 cat 2.2 13 2.1 5 FALSE
10 cat 5.4 11 2.4 7 FALSE
11 cat 4.1 12 2.1 6 FALSE
12 cat 4.3 16 1.5 6 TRUE
13 cat 7.9 9 3.7 6 FALSE
14 cat 6.1 7 2.9 5 FALSE
Schauen wir uns also ein tibble()
der obigen Datentabelle einmal näher an. Als erstes erfahren wir, dass wir einen A tibble: 14 x 5
vorliegen haben. Das heißt, wir haben 14 Zeile und 5 Spalten. In einem tibble
wird immer in der ersten Zeile angezeigt wie viele Beobachtungen wir in dem Datensatz haben. Wenn das tibble
zu groß wird, werden wir nicht mehr das ganze tibble
sehen sondern nur noch einen Ausschnitt. Im Weiteren hat jede Spalte noch eine Eigenschaft unter dem Spaltennamen:
<chr>
bedeutetcharacter
. Wir haben also hier Worte vorliegen.<dbl>
bedeutetdouble
. Eindouble
ist eine Zahl mit Kommastellen.<int>
bedeutetinteger
. Eininteger
ist eine ganze Zahl ohne Kommastellen.<lgl>
bedeutetlogical
oderboolean
. Hier gibt es nur die Ausprägung wahr oder falsch. SomitTRUE
oderFALSE
. Statt den WortenTRUE
oderFALSE
kann hier auch 0 oder 1 stehen.<str>
bedeutetstring
der aus verschiedenencharacter
besteht kann, getrennt durch Leerzeichen.
Wieso ist das wichtig? Wir sehen hier, was R glaubt in den Spalten an Zahlen und Buchstaben vorzufinden. Es mag aber sein, dass R sich irrt. Dann müssen wir die Eigenschaften der Spalte ändern.
8.2 Faktoren als Wörter zu Zahlen
Ein Computer und somit auch eine Programmsprache wie R kann keine Buchstaben verrechnen. Ein Programm kann nur mit Zahlen rechnen. Wir haben aber in der Tabelle 8.1 in der Spalte animal
Buchstaben stehen. Da wir hier einen Kompromiss eingehen müssen führen wir Faktoren ein. Ein Faktor kombiniert Buchstaben mit Zahlen. Wir als Anwender sehen die Buchstaben, die Wörter bilden. Intern steht aber jedes Wort für eine Zahl, so dass R mit den Zahlen rechnen kann. Klingt ein wenig kryptisch, aber wir schauen uns einen factor
einmal in R an.
$animal[1:8] data_tbl
[1] "dog" "dog" "dog" "dog" "dog" "dog" "dog" "cat"
$
Symbol kannst du im Kapitel 9.7 mehr erfahren.Was haben wir gemacht? Als erstes haben wir die Spalte animal
aus dem Datensatz data_tbl
mit dem Dollarzeichen $
herausgezogen. Mit dem $
Zeichen können wir uns eine einzelne Spalte aus dem Datensatz data_tbl
raus ziehen. Du kannst dir das $
wie einen Kleiderbügel und das data_tbl
als einen Schrank für Kleiderbügel verstellen. An dem Kleiderbügel hängen dann die einzelnen Zahlen und Worte. Wir nehmen aber nicht den ganzen Vektor sondern nur die Zahlen 1 bis 8, dargestellt durch [1:8]
. Die Gänsefüßchen "
um dog
zeigen uns, dass wir hier Wörter oder character
vorliegen haben. Schauen wir auf das Ergebnis, so erhalten wir sieben Mal dog
und einmal cat
. Insgesamt die ersten acht Einträge der Datentabelle. Wir wollen diesen Vektor uns nun einmal als Faktor anschauen. Wir nutzen die Funktion as_factor()
.
as.factor(data_tbl$animal[1:8])
[1] dog dog dog dog dog dog dog cat
Levels: cat dog
Im direkten Vergleich verschwinden die Gänsefüßchen "
um dog
und zeigen uns, dass wir hier keine character
mehr vorliegen haben. Darüber hinaus sehen wir auch, dass die der Faktor jetzt Levels
hat. Exakt zwei Stück. Jeweils einen für dog
und einen für cat
. Wir werden später Faktoren benötigen, wenn wir zum Beispiel eine einfaktorielle ANOVA rechnen. Hier siehst du schon den Begriff Faktor wieder.
8.3 Von Wörtern und Objekten
Das mag etwas verwirrend sein, denn es gibt in R Wörter string <str>
oder character <chr>
. Wörter sind was anderes als Objekte. Streng genommen sind beides Wörter, aber in Objekten werden Dinge gespeichert wohin gegen das Wort einfach ein Wort ist. Deshalb kennzeichnen wir Wörter auch mit Gänsefüßchen als "wort"
und zeigen damit, dass es sich hier um einen String handelt.
Wir tippen "animal"
in R und erhalten "animal"
als Wort zurück. Das sehen wir auch an dem Ausdruck mit den Gänsefüßchen.
"animal"
[1] "animal"
<-
kannst du im Kapitel 9.5 mehr erfahren.Wir tippen animal
ohne die Anführungszeichen in R und erhalten den Inhalt von animal
ausgegeben. Dafür müssen wir aber das Objekt animal
erst einmal über den Zuweisungspfeil <-
erschaffen.
<- c("dog", "cat", "fox")
animal animal
[1] "dog" "cat" "fox"
Sollte es das Objekt animal
nicht geben, also nicht über den Zuweisungspfeil <-
erschaffen worden, dann wird eine Fehlermeldung von R ausgegeben:
Fehler in eval(expr, envir, enclos) : Objekt 'animal' nicht gefunden
Das Konzept des Objekts als Speicher für Dinge und der Unterschied zum Wort ist hier etwas sehr abstrakt. Wenn wir aber in R anfangen zu arbeiten wird dir das Konzept klarer werden. Hier müssen wir aber einmal Objekte einführen, damit wir auch etwas in R speichern können und nicht immer wieder neu erschaffen müssen.
8.4 Zusammenfassung
tibble
Tabelle 8.2 zeigt eine Übersicht wie einzelne Variablennamen und deren zugehörigen Beispielen sowie den Namen in R, der Informatik allgemein, als Skalenniveau und welcher Verteilungsfamilie die Variable angehören würde. Leider ist es so, dass wieder gleiche Dinge unterschiedliche benannt werden. Aber an dieses doppelte Benennen können wir uns in der Statistik schon mal gewöhnen.
Variablenname | Beispiel | R | Infomatik | Skalenniveau | Verteilungsfamilie |
---|---|---|---|---|---|
weight | 12.3, 12.4, 5.4, 21.3, 13.4 | numeric | double | continuous | Gaussian |
count | 5, 0, 12, 23, 1, 4, 21 | integer | integer | discrete | Poisson |
dosis | low, mid, high | ordered | categorical / ordinal | Ordinal | |
field | mainz, berlin, kiel | factor | categorical | Multinomial | |
cancer | 0, 1 | factor | dichotomous / binary / nominal | Binomial | |
treatment | “placebo”, “aspirin” | character | character/string | dichotomous / binary / nominal | Binomial |
birth | 2001-12-02, 2005-05-23 | date |