• analyse-de-donnes-cestad
  • analytics_tools_original
  • data-minig1
  • data-minig2
  • Data-Mining-1030
  • Big-data-azzurro
  • marketing-statistics
Enquêtes
Collete des données
Traitement des données
Analyse des données
 
Programmation
Programmation statistique
Developpement des macros
Modélisation et plus encore
 
Data Mining
Exploration des données
Modélisation prédictive
Big Data
 
Formations certifiantes
Formations à la carte
Semilaires et conférences

 

 

 

R a une variété de structures de données. Ici, nous allons esquisser quelques-unes des structures les plus fréquemment utilisées pour vous donner un aperçu de R avant de plonger dans les détails. De cette façon, vous pouvez au moins commencer avec des exemples significatifs, même si l'histoire derrière eux doit attendre.


1 Vecteurs, le cheval de trait R
Le type de vecteur est vraiment le coeur de R. Il est difficile d'imaginer du code R, ou même une session R interactive, qui n'implique pas de vecteurs.

Les éléments d'un vecteur doivent tous avoir le même mode ou le même type de données. Vous pouvez avoir un vecteur composé de trois chaînes de caractères (de type mode) ou trois entiers (de mode entier), mais pas un vecteur avec un élément integer et deux éléments de chaîne de caractères.
Nous parlerons plus de vecteurs dans le chapitre 2.


1.4.1.1 Scalaires
Les scalaires, ou nombres individuels, n'existent pas vraiment dans R. Comme mentionné plus haut, ce qui semble être des nombres individuels sont en réalité des vecteurs à un élément. considérer ce qui suit:

  1. > x <- 8
  2. > x
  3. [1] 8
Source code

Rappelons que [1] signifie ici que la rangée de chiffres suivante commence par l'élément 1 d'un vecteur - dans ce cas, x [i]. Ainsi, vous pouvez voir que R était considéré comme un vecteur, mais un vecteur avec un seul élément.


2 Chaînes de caractères
Les chaînes de caractères sont en fait des vecteurs mono-élément de caractère de mode (plutôt que mode numérique):

  1. > x <- c(5,12,13)
  2. > x
  3. [1] 5 12 13
  4. > length(x)
  5. [1] 3
  6. > mode(x)
  7. [1] "numeric"
  8. > y <- "abc"
  9. > y
  10. [1] "abc"
  11. > length(y)
  12. [1] 1
  13. > mode(y)
  14. [1] "character"
  15. > z <- c("abc","29 88")
  16. > length(z)
  17. [1] 2
  18. > mode(z)
  19. [1] "character"
Source code

Dans le premier exemple, nous créons un vecteur x de nombres, donc de mode numérique. Ensuite, nous créons deux vecteurs de caractère de mode: y est un vecteur à un élément (c'est-à-dire, une chaîne), et z est constitué de deux chaînes.
R possède diverses fonctions de manipulation de chaînes. Beaucoup traitent de l'assemblage de chaînes ou de leur démontage, comme les deux illustrés ici:

  1. > u <- paste("abc","de","f") # concatène les chaînes
  2. > u
  3. [1] "abc de f"
  4. > v <- strsplit(u," ") # fractionne la chaîne en fonction des blancs
  5. > v
  6. [[1]]
  7. [1] "abc" "de" "f"
Source code

 

 

3 Matrices
Une matrice R correspond au concept mathématique du même nom: un tableau rectangulaire de nombres. Techniquement, une matrice est un vecteur, mais avec deux
attributs supplémentaires: le nombre de lignes et le nombre de colonnes. Voici un exemple de code matriciel:

  1. > m <- rbind(c(1,4),c(2,2))
  2. > m
  3. [,1] [,2]
  4. [1,] 1 4
  5. [2,] 2 2
  6. > m %*% c(1,1)
  7. [,1]
  8. [1,] 5
  9. [2,] 4
Source code

Premièrement, nous utilisons la fonction rbind () pour construire une matrice à partir de deux vecteurs qui serviront de lignes, en stockant le résultat dans m. (Une fonction de correspondance, cbind (), combine plusieurs colonnes dans une matrice.) Ensuite, entrer le nom de la variable seule, qui, nous le savons, imprimera la variable, confirme que la matrice voulue a été produite. Enfin, nous calculons le produit matriciel du vecteur (1,1) et m. L'opérateur de multiplication matricielle, que vous pouvez connaître à partir des cours d'algèbre linéaire, est % *% dans R.
Les matrices sont indexées en utilisant un indice double, comme en C / C ++, bien que les indices commencent à 1 au lieu de 0.

  1. > m [1,2]
  2. [1] 4
  3. > m [2,2]
  4. [1] 2
Source code

Une caractéristique extrêmement utile de R est que vous pouvez extraire des sous-matrices à partir d'une matrice, tout comme vous extrayez des sous-vecteurs à partir de vecteurs. Voici un exemple:
  1. > m [1,] # rangée 1
  2. [1] 1 4
  3. > m [, 2] # colonne 2
  4. [1] 4 2
Source code

Nous parlerons plus de matrices dans le chapitre 3.


4 Listes
Comme un vecteur R, une liste R est un conteneur pour les valeurs, mais son contenu peut être des éléments de types de données différents. (Les programmeurs C / C ++ remarqueront l'analogie avec une structure en C). On accède aux éléments de liste en utilisant des noms en deux parties, qui sont indiqués par le symbole dollar $ dans R. Voici un exemple rapide:

  1. > x <- list(u=2, v="abc")
  2. > x
  3. $u
  4. [1] 2
  5. $v
  6. [1] "abc"
  7. > x$u
  8. [1] 2
Source code

L'expression x$u fait référence à la composante u de la liste x. Ce dernier contient un autre composant, noté v.
Une utilisation courante des listes consiste à combiner plusieurs valeurs en un seul paquet pouvant être retourné par une fonction. Ceci est particulièrement utile pour les fonctions statistiques, qui peuvent avoir des résultats élaborés. A titre d'exemple, considérons la fonction d'histogramme de base de R, hist (), présentée dans la Section 1.2. Nous avons appelé la fonction sur l'ensemble de données intégré dans le Nil de R:

Source code

Cela a produit un graphique, mais hist () renvoie également une valeur, que nous pouvons sauvegarder:
  1. > hn <- hist (Nile)
Source code

Qu'est-ce qui est en hn? Nous allons jeter un coup d'oeil:

  1. > print(hn)
  2. $breaks
  3. [1] 400 500 600 700 800 900 1000 1100 1200 1300 1400
  4. $counts
  5. [1] 1 0 5 20 25 19 12 11 6 1
  6. $intensities
  7. [1] 9.999998e-05 0.000000e+00 5.000000e-04 2.000000e-03 2.500000e-03
  8. [6] 1.900000e-03 1.200000e-03 1.100000e-03 6.000000e-04 1.000000e-04
  9. $density
  10. [1] 9.999998e-05 0.000000e+00 5.000000e-04 2.000000e-03 2.500000e-03
  11. [6] 1.900000e-03 1.200000e-03 1.100000e-03 6.000000e-04 1.000000e-04
  12. $mids
  13. [1] 450 550 650 750 850 950 1050 1150 1250 1350
  14. $xname
  15. [1] "Nile"
  16. $equidist
  17. [1] TRUE
  18. attr(,"class")
  19. [1] "histogram"
Source code

N'essayez pas de comprendre tout cela tout de suite. Pour l'instant, le fait est que, en plus de faire un graphique, hist () retourne une liste avec un certain nombre de composants. Ici, ces composants décrivent les caractéristiques de l'histogramme. Par exemple, le composant breaks nous indique où commencent et se terminent les bins dans l'histogramme, et le composant count est le nombre d'observations dans chaque bin.
Les concepteurs de R ont décidé de regrouper toutes les informations renvoyées par hist () dans une liste R, qui peut être consultée et manipulée par d'autres commandes R via le symbole du dollar.
Rappelez-vous que nous pourrions aussi imprimer hn simplement en tapant son nom:
> hn
Mais une alternative plus compacte pour imprimer des listes comme celle-ci est str ():

  1. > str(hn)
  2. List of 7
  3. $ breaks : num [1:11] 400 500 600 700 800 900 1000 1100 1200 1300 ...
  4. $ counts : int [1:10] 1 0 5 20 25 19 12 11 6 1
  5. $ intensities: num [1:10] 0.0001 0 0.0005 0.002 0.0025 ...
  6. $ density : num [1:10] 0.0001 0 0.0005 0.002 0.0025 ...
  7. $ mids : num [1:10] 450 550 650 750 850 950 1050 1150 1250 1350
  8. $ xname : chr "Nile"
  9. $ equidist : logi TRUE
  10. - attr(*, "class")= chr "histogram"
Source code

Ici, str signifie structure. Cette fonction montre la structure interne de n'importe quel objet R, pas seulement les listes.


1.4.5 Cadres de données
Un ensemble de données typique contient des données de différents modes. Dans un ensemble de données employé, par exemple, nous pouvons avoir des données de chaîne de caractères, telles que des noms d'employés, et des données numériques, telles que les salaires. Donc, bien qu'un ensemble de données de (disons)
50 employés avec 4 variables par travailleur ont l'aspect et la convivialité d'une matrice de 50 par 4, il n'est pas considéré comme tel dans R, car il mélange les types.
Au lieu d'une matrice, nous utilisons une trame de données. Une trame de données dans R est une liste, chaque composante de la liste étant un vecteur correspondant à une colonne de notre "matrice" de données. En effet, vous pouvez créer des trames de données injustes de cette façon:

  1. > d <- data.frame(list(kids=c("Jack","Jill"),ages=c(12,10)))
  2. > d
  3. kids ages
  4. 1 Jack 12
  5. 2 Jill 10
  6. > d$ages
  7. [1] 12 10
Source code

Généralement, cependant, les trames de données sont créées en lisant dans un ensemble de données à partir d'un fichier ou d'une base de données.
Nous parlerons plus au sujet des trames de données dans le chapitre 5.


1.4.6 Classes
R est un langage orienté objet. Les objets sont des instances de classes. Les classes sont un peu plus abstraites que les types de données que vous avez déjà rencontrés. Ici, nous verrons brièvement le concept en utilisant les classes S3 de R. (Le nom provient de leur utilisation dans l'ancien langage S, version 3, qui a été l'inspiration pour R.) La plupart de R est basé sur ces classes, et elles sont extrêmement simples. Leurs instances sont simplement des listes R mais avec un attribut supplémentaire: le nom de la classe.

Par exemple, nous avons noté plus haut que la sortie (non graphique) de la fonction histogramme hist () est une liste avec divers composants, tels que les composants break et count. Il y avait aussi un attribut, qui spécifiait la classe de la liste, à savoir l'histogramme.

  1. > print(hn)
  2. $breaks
  3. [1] 400 500 600 700 800 900 1000 1100 1200 1300 1400
  4. $counts
  5. [1] 1 0 5 20 25 19 12 11 6 1
  6. ...
  7. ...
  8. attr(,"class")
  9. [1] "histogram"
Source code

À ce stade, vous vous demandez peut-être: «Si les objets de classe S3 ne sont que des listes, pourquoi en avons-nous besoin?» La réponse est que les classes sont utilisées par des fonctions génériques. Une fonction générique représente une famille de fonctions, toutes servant un but similaire, mais chacune étant appropriée à une classe spécifique.
Une fonction générique couramment utilisée est summary (). Un utilisateur R qui veut utiliser une fonction statistique, comme hist (), mais qui ne sait pas comment gérer sa sortie (qui peut être volumineuse), peut simplement appeler summary () sur la sortie, qui n'est pas seulement une liste mais une instance d'une classe S3.
La fonction summary (), à son tour, est en réalité une famille de fonctions de synthèse, chacune gérant des objets d'une classe particulière. Lorsque vous appelez summary () sur une sortie, R recherche une fonction de résumé appropriée à la classe en cours et l'utilise pour donner une représentation plus conviviale de la liste. Ainsi, calling summary () sur la sortie de hist () produit un résumé adapté à cette fonction, et l'appel de summary () sur la sortie de la fonction de régression lm () produit un résumé approprié pour cette fonction.
La fonction plot () est une autre fonction générique. Vous pouvez utiliser plot () sur n'importe quel objet R. R trouvera une fonction de traçage appropriée basée sur la classe de l'objet.
Les classes sont utilisées pour organiser les objets. Conjointement avec les fonctions génériques, ils permettent de développer un code flexible pour gérer une variété de tâches différentes mais connexes. Le chapitre 9 couvre les cours en profondeur.