Big Data Analytics - Einführung in R.
Dieser Abschnitt ist dazu gedacht, den Benutzern die Programmiersprache R vorzustellen. R kann von der Cran-Website heruntergeladen werden . Für Windows-Benutzer ist es hilfreich, rtools und die rstudio-IDE zu installieren .
Das allgemeine Konzept dahinter R soll als Schnittstelle zu anderer Software dienen, die in kompilierten Sprachen wie C, C ++ und Fortran entwickelt wurde, und dem Benutzer ein interaktives Tool zur Datenanalyse bieten.
Navigieren Sie zum Ordner der Buch-Zip-Datei bda/part2/R_introduction und öffnen Sie die R_introduction.RprojDatei. Dies öffnet eine RStudio-Sitzung. Öffnen Sie dann die Datei 01_vectors.R. Führen Sie das Skript Zeile für Zeile aus und folgen Sie den Kommentaren im Code. Eine weitere nützliche Option zum Lernen ist die Eingabe des Codes. Dies hilft Ihnen, sich an die R-Syntax zu gewöhnen. In R werden Kommentare mit dem Symbol # geschrieben.
Um die Ergebnisse der Ausführung von R-Code im Buch anzuzeigen, werden nach der Auswertung des Codes die Ergebnisse, die R zurückgibt, kommentiert. Auf diese Weise können Sie den Code kopieren, in das Buch einfügen und direkt Abschnitte davon in R ausprobieren.
# Create a vector of numbers
numbers = c(1, 2, 3, 4, 5)
print(numbers)
# [1] 1 2 3 4 5
# Create a vector of letters
ltrs = c('a', 'b', 'c', 'd', 'e')
# [1] "a" "b" "c" "d" "e"
# Concatenate both
mixed_vec = c(numbers, ltrs)
print(mixed_vec)
# [1] "1" "2" "3" "4" "5" "a" "b" "c" "d" "e"
Lassen Sie uns analysieren, was im vorherigen Code passiert ist. Wir können sehen, dass es möglich ist, Vektoren mit Zahlen und Buchstaben zu erstellen. Wir mussten R nicht vorher mitteilen, welchen Datentyp wir wollten. Schließlich konnten wir einen Vektor mit Zahlen und Buchstaben erstellen. Der Vektor gemischte_vec hat die Zahlen zum Zeichen gezwungen. Wir können dies sehen, indem wir visualisieren, wie die Werte in Anführungszeichen gedruckt werden.
Der folgende Code zeigt den Datentyp verschiedener Vektoren, wie er von der Funktionsklasse zurückgegeben wird. Es ist üblich, die Klassenfunktion zu verwenden, um ein Objekt "abzufragen" und ihn zu fragen, was seine Klasse ist.
### Evaluate the data types using class
### One dimensional objects
# Integer vector
num = 1:10
class(num)
# [1] "integer"
# Numeric vector, it has a float, 10.5
num = c(1:10, 10.5)
class(num)
# [1] "numeric"
# Character vector
ltrs = letters[1:10]
class(ltrs)
# [1] "character"
# Factor vector
fac = as.factor(ltrs)
class(fac)
# [1] "factor"
R unterstützt auch zweidimensionale Objekte. Im folgenden Code finden Sie Beispiele für die beiden beliebtesten Datenstrukturen, die in R verwendet werden: die Matrix und data.frame.
# Matrix
M = matrix(1:12, ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] 1 4 7 10
# [2,] 2 5 8 11
# [3,] 3 6 9 12
lM = matrix(letters[1:12], ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] "a" "d" "g" "j"
# [2,] "b" "e" "h" "k"
# [3,] "c" "f" "i" "l"
# Coerces the numbers to character
# cbind concatenates two matrices (or vectors) in one matrix
cbind(M, lM)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] "1" "4" "7" "10" "a" "d" "g" "j"
# [2,] "2" "5" "8" "11" "b" "e" "h" "k"
# [3,] "3" "6" "9" "12" "c" "f" "i" "l"
class(M)
# [1] "matrix"
class(lM)
# [1] "matrix"
# data.frame
# One of the main objects of R, handles different data types in the same object.
# It is possible to have numeric, character and factor vectors in the same data.frame
df = data.frame(n = 1:5, l = letters[1:5])
df
# n l
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
Wie im vorherigen Beispiel gezeigt, können im selben Objekt unterschiedliche Datentypen verwendet werden. Im Allgemeinen werden Daten auf diese Weise in Datenbanken dargestellt. APIs Teil der Daten sind Text- oder Zeichenvektoren und andere numerische Elemente. In ist der Analystenjob, um zu bestimmen, welcher statistische Datentyp zugewiesen werden soll, und dann den richtigen R-Datentyp dafür zu verwenden. In der Statistik betrachten wir normalerweise Variablen vom folgenden Typ:
- Numeric
- Nominal oder kategorisch
- Ordinal
In R kann ein Vektor der folgenden Klassen angehören:
- Numerisch - Ganzzahl
- Factor
- Bestellfaktor
R liefert einen Datentyp für jeden statistischen Variablentyp. Der geordnete Faktor wird jedoch selten verwendet, kann jedoch durch den Funktionsfaktor erstellt oder geordnet werden.
Der folgende Abschnitt behandelt das Konzept der Indizierung. Dies ist eine recht häufige Operation und befasst sich mit dem Problem, Abschnitte eines Objekts auszuwählen und Transformationen an ihnen vorzunehmen.
# Let's create a data.frame
df = data.frame(numbers = 1:26, letters)
head(df)
# numbers letters
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# str gives the structure of a data.frame, it’s a good summary to inspect an object
str(df)
# 'data.frame': 26 obs. of 2 variables:
# $ numbers: int 1 2 3 4 5 6 7 8 9 10 ...
# $ letters: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
# The latter shows the letters character vector was coerced as a factor.
# This can be explained by the stringsAsFactors = TRUE argumnet in data.frame
# read ?data.frame for more information
class(df)
# [1] "data.frame"
### Indexing
# Get the first row
df[1, ]
# numbers letters
# 1 1 a
# Used for programming normally - returns the output as a list
df[1, , drop = TRUE]
# $numbers
# [1] 1
#
# $letters
# [1] a
# Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
# Get several rows of the data.frame
df[5:7, ]
# numbers letters
# 5 5 e
# 6 6 f
# 7 7 g
### Add one column that mixes the numeric column with the factor column
df$mixed = paste(df$numbers, df$letters, sep = ’’)
str(df)
# 'data.frame': 26 obs. of 3 variables:
# $ numbers: int 1 2 3 4 5 6 7 8 9 10 ...
# $ letters: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ...
# $ mixed : chr "1a" "2b" "3c" "4d" ...
### Get columns
# Get the first column
df[, 1]
# It returns a one dimensional vector with that column
# Get two columns
df2 = df[, 1:2]
head(df2)
# numbers letters
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
# 5 5 e
# 6 6 f
# Get the first and third columns
df3 = df[, c(1, 3)]
df3[1:3, ]
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
### Index columns from their names
names(df)
# [1] "numbers" "letters" "mixed"
# This is the best practice in programming, as many times indeces change, but
variable names don’t
# We create a variable with the names we want to subset
keep_vars = c("numbers", "mixed")
df4 = df[, keep_vars]
head(df4)
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# 6 6 6f
### subset rows and columns
# Keep the first five rows
df5 = df[1:5, keep_vars]
df5
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# subset rows using a logical condition
df6 = df[df$numbers < 10, keep_vars]
df6
# numbers mixed
# 1 1 1a
# 2 2 2b
# 3 3 3c
# 4 4 4d
# 5 5 5e
# 6 6 6f
# 7 7 7g
# 8 8 8h
# 9 9 9i