Big Data Analytics - Introduction à R
Cette section est consacrée à présenter aux utilisateurs le langage de programmation R. R peut être téléchargé à partir du site Web de cran . Pour les utilisateurs de Windows, il est utile d' installer rtools et l' IDE rstudio .
Le concept général derrière R est de servir d'interface avec d'autres logiciels développés dans des langages compilés tels que C, C ++ et Fortran et de donner à l'utilisateur un outil interactif pour analyser les données.
Accédez au dossier du fichier zip du livre bda/part2/R_introduction et ouvrez le R_introduction.Rprojfichier. Cela ouvrira une session RStudio. Ensuite, ouvrez le fichier 01_vectors.R. Exécutez le script ligne par ligne et suivez les commentaires du code. Une autre option utile pour apprendre est de simplement taper le code, cela vous aidera à vous habituer à la syntaxe R. Dans R, les commentaires sont écrits avec le symbole #.
Afin d'afficher les résultats de l'exécution du code R dans le livre, une fois le code évalué, les résultats renvoyés par R sont commentés. De cette façon, vous pouvez copier-coller le code dans le livre et essayer directement des sections de celui-ci dans R.
# 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"
Analysons ce qui s'est passé dans le code précédent. Nous pouvons voir qu'il est possible de créer des vecteurs avec des nombres et avec des lettres. Nous n'avons pas eu besoin de dire à R quel type de type de données nous voulions au préalable. Enfin, nous avons pu créer un vecteur avec des chiffres et des lettres. Le vecteur mixed_vec a contraint les nombres à caractères, nous pouvons le voir en visualisant comment les valeurs sont imprimées entre guillemets.
Le code suivant montre le type de données de différents vecteurs retourné par la classe de fonctions. Il est courant d'utiliser la fonction de classe pour «interroger» un objet, lui demandant quelle est sa classe.
### 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 prend également en charge les objets bidimensionnels. Dans le code suivant, il y a des exemples des deux structures de données les plus populaires utilisées dans R: la matrice et 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
Comme démontré dans l'exemple précédent, il est possible d'utiliser différents types de données dans le même objet. En général, c'est ainsi que les données sont présentées dans les bases de données, une partie des API des données est du texte ou des vecteurs de caractères et d'autres numériques. Le travail d'analyste consiste à déterminer le type de données statistiques à attribuer, puis à utiliser le type de données R correct. En statistique, nous considérons normalement que les variables sont des types suivants -
- Numeric
- Nominal ou catégorique
- Ordinal
Dans R, un vecteur peut être des classes suivantes -
- Numérique - Entier
- Factor
- Facteur commandé
R fournit un type de données pour chaque type statistique de variable. Le facteur ordonné est cependant rarement utilisé, mais peut être créé par le facteur fonction, ou ordonné.
La section suivante traite du concept d'indexation. Cette opération est assez courante et traite du problème de la sélection de sections d'un objet et de leur transformation.
# 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