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