of 23

Module 2 Introduction au langage R

0 views
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Share
Description
Module 2 Introduction au langage R Sommaire 2.1 Langage R Comment R fonctionne? Chargement des données dans R
Transcript
Module 2 Introduction au langage R Sommaire 2.1 Langage R Comment R fonctionne? Chargement des données dans R Chargement d'un chier CSV dans R Chargement d'un chier Excel dans R Chargement d'un chier texte dans R Chargement d'un chier SPSS dans R Manipulation des données avec R Selection d'un sous-ensemble de données Sélection conditionnelle Sélection aléatoire Gestion des données manquantes Fusion des données 2.2.6 Quelques statistiques de base Visualisation des données Dernière mise à jour le 19 septembre 2018 Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 2/ 23 Introduction L'apparition du domaine de la fouille des données dans les années 1990 a entraîné l'apparition de plusieurs langages de programmation/outils/librairies/modules pour l'analyse des données. Nous pouvons citer à titre d'exemple Clementine de SPSS, Enterprise Miner de SAS, Insightfull Miner de Splus, KXEN, SPAD, Statistica Data Miner, Statsoft, WEKA, R, Python et plusieurs autres. Avec l'évolution du domaine de la science des données, les langages R et Python ont pris une place considérable au sein de la communauté de la science des données du fait de leur exibilité et leur simplicité. Bien que R fut développé à l'origine pour le calcul statistique, il est largement utilisé à la fois par les programmeurs et par les non programmeurs. Contrairement à R, Python est destiné aux programmeurs, donc la connaissance de la programmation aiderait à bien avancer avec Python. Vu la simplicité et la exibilité du langage R, nous avons choisi de l'utiliser dans le cadre du cours. Tous les exemples et exercices présentés dans ce cours se basent sur le langage R. Dans ce qui suit, nous allons introduire les bases de R et quelques librairies et fonctions pertinentes pour l'analyse des données. Notez bien que l'objectif de ce module n'est pas d'introduire en détails le langage R, mais plutôt de présenter les concepts de base qui vous aideront 1) à suivre les modules suivants, et 2) à répondre à un problème de science des données dans toutes ses étapes, à savoir l'analyse des données, le traitement et la visualisation. Les possibilités oertes par R étant très vastes, il est utile dans un premier temps d'assimiler certaines notions et concepts an d'évoluer plus aisément par la suite. 2.1 Langage R R est un langage de programmation et un logiciel d'analyse statistique et graphique créé par Ross Ihaka et Robert Gentleman 1. R est distribué librement sous les termes de 1. Ihaka R. and Gentleman R R : a language for data analysis and graphics. Journal of Computational and Graphic al Statistics 5 : Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 3/ 23 la GNU General Public Licence et est facile à installer à partir de la page du CRAN (Comprehensive R Archive Network) 2. Dans le site du CRAN, on peut trouver toutes les informations et ressources nécessaires à l'utilisateur, à savoir des chiers d'installation, des mises à jour, des librairies, FAQ, newsletter, documentation, etc. R est le langage le plus utilisé au sein de la communauté statistique académique. Il est également en croissante utilisation chez les industriels particulièrement dans les services R&D des entreprises, et par les organismes gouvernementaux. Par exemple, le gouvernement anglais utilise R pour moderniser les rapports des statistiques ocielles 3, et la cité de Chicago qui utilise R pour émettre des alertes sur la sécurité des plages 4. R comporte de nombreuses fonctions pour l'analyse statistique et la visualisation. R ore également la possibilité d'exporter les graphiques générées sous diérents formats à savoir jpg, png, pdf, ps, etc. dépendamment du système d'exploitation utilisé Comment R fonctionne? R est un langage interprété et non compilé, c'est-à-dire, les commandes tapés au clavier sont directement exécutées sans qu'il soit besoin de construire un programme complet comme c'est le cas avec d'autres langages de programmation (C, Pascal, Fortran, etc.) 5. La syntaxe de R est très simple et intuitive. D'une manière générale, le nom d'une fonction, ou son abbréviation, reète le sens et l'objectif de cette fonction. À titre d'exemple, la commande lm(y X) désigne une modèle de régression linéaire. De la même façon, les fonctions de lecture, read, et d'écriture, write, désignent respectivement la lecture et écriture des données. Toute fonction est appelée avec son nom suivi des parenthèses. Même si la fonction n'a pas d'argument, on spécie quand même les deux parenthèses vides. Si les parenthèses ne sont pas fournies, R ache une description détaillée du contenu des instructions de la fonction en question. 2. http ://cran.r-project.org/ 3. http ://blog.revolutionanalytics.com/government/ 4. http ://blog.revolutionanalytics.com/government/ 5. https : //cran.r project.org/doc/contrib/p aradis rdebuts f r.pdf Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 4/ 23 Quand on utilise R, les variables, les données, les fonctions, et les résultats sont stockés dans la mémoire de l'ordinateur sous forme d'objets qui ont chacun un nom. Nous pouvons donc agir sur ces objets avec des opérateurs (arithmétiques, logiques, etc.) ou avec des fonctions qui sont elles-mêmes des objets. Dans, les sections suivantes, nous allons donner plus de détails sur les fonctions de R relatives au chargement, à l'exploration et à la visualisation des données. Rappelons que l'objectif de ce module est d'introduire les bases de R pour que vous puissiez progresser dans ce cours, et non pas de fournir une introduction exhaustive à R. Nous allons utiliser l'éditeur RStudio 6 dans tous les exemples présentés dans ce module Chargement des données dans R Dans cette section, nous allons présenter les diérentes fonctions de R qui permettent de charger des données externes dans l'environnement de R pour pouvoir les exploiter. Les fonctions de lecture des données externes sont multiples et sont utilisées en fonction du format (chier) dans lequel ces données sont stockées (CSV, Excel, texte, dat, etc.) Chargement d'un chier CSV dans R Les chiers CSV représentent le format le plus utilisé pour stocker des données structurées en colonnes. Pour lire un chier CSV dans R, nous allons procéder comme suit : 1 # Lecture d ' un fichier CSV MyData - read. csv ( icecream. csv , header = T, sep = ',') Dans le code ci-dessus, le contenu du chier CSV est stocké dans la variable MyData. La fonction read.csv lit le chier icecream.csv avec son entête. Nous avons également spécié le caractère qui sépare les colonnes dans le chier icecream.csv , dans ce cas une virgule. Dans l'éditeur RStudio, l'exécution de ce bout de code donne le résultat présenté dans la Figure https :// Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 5/ 23 Figure 2.1: Lecture d'un chier CSV avec la fonction read.csv. Si le chier CSV est volumineux. Il existe des fonctions plus ecaces que la fonction read.csv. Par exemple, la fonction fread de la librairie data.table pourrait être utilisée dans ce contexte comme suit : # Lecture d ' un fichier CSV volumineux 2 MyData - fread ( icecream. csv , header = T, sep = ',') Il est toujours important d'importer l'entête du chier en mettant l'attribut header à TRUE (T). Cela permet de manipuler les colonnes avec leurs noms et non pas des noms de variables générées automatiquement par R Chargement d'un chier Excel dans R De la même façon qu'avec les chiers CSV, les chiers Excel sont importés dans R avec des fonctions comme readworksheetfromfile de la librairie XLConnect, ou la fonction read.xlsx de la librairie xlsx pour les chiers Excel avec une extension xlsx. Il existe Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 6/ 23 évidemment d'autres fonctions et librairies pour l'importation des chiers Excel dans R comme la fonction read_excel de la librairie readxl, et la fonction read.xls de la librairie gdata. Nous n'allons pas passer en revue de toutes ces fonctions, mais l'idée est de présenter la façon dont les chiers Excel sont importés. Rappelons que certaines librairies ne sont pas installées par défaut dans R. Par conséquent, si la librairie n'est pas installée, vous devriez tout d'abord l'installer avec la commande install.packages('nom de la librairie'). # Lecture d ' un fichier excel avec la librairie gdata 2 library ( gdata ) MyData - read. xls ( Iris. xls , sheet = 1, header = T) Nous pouvons toujours vérier dans l'environnement RStudio que le chier a été chargé correctement comme le montre la Figure 2.2. Figure 2.2: Lecture d'un chier excel en R avec la fonction read.xls. Voici un autre exemple de lecture d'un chier excel avec la librairie XLConnect : Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 7/ 23 1 # Lecture d ' un fichier excel avec la librairie XLConnect library ( gdata ) 3 MyData - read. xls ( Iris. xls , sheet = 1, header = T) library ( XLConnect ) 5 wk - loadworkbook ( Iris. xls ) MyData - readworksheet ( wk, sheet = 1) Dans les deux cas, nous avons le même nombre d'observations (150) et de colonnes (9) Chargement d'un chier texte dans R Nous pouvons toujours avoir le cas où les données sont stockées dans un chier texte. Dans ce cas, il existe des librairies dédiées à ce genre de situation. Nous pouvons citer, à titre d'exemple, la librairie utils avec les fonctions data.table, et read.delim. Dans l'exemple suivant, nous utilisons la fonction read.table pour charger le contenu d'un chier texte. # Lecture d ' un fichier texte avec la librairie utils 2 MyData - read. table ( Icecream. txt , header = T, sep = ',') Chargement d'un chier SPSS dans R Les utilisateurs du logiciel SPSS peuvent également exporter leur données sous format SPSS et l'importer en suite dans R pour des manipulations avancées. La lecture d'un chier SPSS dans R pourrait se faire avec la librairie foreign de la façon suivante : # Lecture d ' un fichier SPSS avec la librairie foreign 2 library ( foreign ) Mydata - read. spss ( Cancer. sav , to. data. frame = T) Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 8/ 23 Notez bien que toutes les données chargées, tel que nous l'avons vu précédemment, sont stockées dans des objets de type Data Frame notés généralement dataframe ou simplement df. Les objets de type dataframe orent beaucoup de exibilité lors de la manipulation des données. Nous allons voir dans les sections suivantes, comment ces objets facilitent la manipulation des données. On peut s'informer de la nature de cet objet en utilisant la fonction class(nom_de_l'objet). Nous pouvons également passer d'un type dataframe à un type de données matrix(matrice) en utilisant des fonctions comme par exemple as.matrix. 2.2 Manipulation des données avec R Dans la section précédente, nous avons présentés quelques fonctions pour la lecture des diérents types de chiers de données dans R. Dans cette section, nous allons présenter quelques concepts liés à la manipulation des données une fois importées dans R Selection d'un sous-ensemble de données Il arrive souvent de manipuler des sous-ensembles de données au lieu de la totalité des données. Par exemple, manipuler un certain nombre de colonnes, de lignes ou des requêtes spéciques. Pour cela, nous aurons besoin de méthodes simples et ecaces pour extraire ces sous-ensembles de données à partir de l'objet contenant la totalité des données. R ore plusieurs mécanismes pour extraire des sous-ensembles de données à partir d'un objet dataframe. Par exemple, pour sélectionner les deux colonnes income et price à partir de l'objet MyData après la lecture du chier csv, nous procéderons comme suit : Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 9/ 23 1 # Sélectionner certaines colonnes par leur noms MyData - read. csv ( icecream. csv , header = T, sep = ',') 3 MyData _ income _ price - subset ( MyData, select = c( income , price )) Figure 2.3: Sélection des colonnes par leurs noms. Nous pouvons vérier l'objet MyData_income_price en achant son contenu : 1 # Résultat de la requête de sélection des données avec la condition price MyData _ income _ price 3 income price Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 10/ 23 Nous pouvons également sélectionner les deux colonnes en spéciant leurs indexes dans l'objet MyData comme suit : 1 # Sélectionner certaines colonnes par leur indexes MyData - read. csv ( icecream. csv , header = T, sep = ',') 3 MyData _ income _ price - subset ( MyData, select = c (3,4) ) Rappelons qu'il existe d'autres façons de sélectionner les colonnes comme l'expression MyData[, c(3,4)] qui donne le même résultat que les deux autres méthodes présentées ci-dessus Sélection conditionnelle Nous pouvons avoir la situation où nous devons travailler avec des données qui satisfassent certaines conditions. Par exemple, des données dont la date est égale à une certaine date, ou des valeurs numériques qui sont non nulles, etc. Prenons l'exemple du chier icecream.csv, nous pouvons sélectionner uniquement les données correspondant à un prix (price 0.270). Pour cela, nous pouvons écrire : 1 # Sélectionner des données avec la condition price MyData - read. csv ( icecream. csv , header = T, sep = , ) 3 MyData _ selection - MyData [ MyData $ price 0.270, ] Puisque la sélection concerne les lignes, donc la condition doit se faire dans la partie gauche des crochets [], et la partie droite doit rester vide pour dire que nous aurons besoin de toutes les colonnes. Le résultat de cette requête est présenté ci-dessous : Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 11/ 23 1 # Résultat de la requête de sélection des données avec la condition price MyData _ selection 3 X cons income price temp Il existe également des fonctions de ltrage comme la fonction filter de la librairie dplyr qui pourrait être utilisée comme suit : 1 # Sélectionner des données avec la fonction \ textbf { filter } library ( dplyr ) 3 MyData - read. csv ( icecream. csv , header = T, sep = , ) MyData _ selection _ filter - filter ( MyData, MyData $ price ) Nous pouvons bien évidemment ajouter plusieurs conditions à la fois qui touchent plusieurs colonnes. Par exemple : # Sélectionner des données avec la fonction \ textbf { filter } 2 library ( dplyr ) MyData - read. csv ( icecream. csv , header = T, sep = , ) 4 MyData _ selection _ filter _ conditions - filter ( MyData, MyData $ price & MyData $ income 80) Ce qui donne le résultat suivant : # Résultat de la requête de sélection des données avec la condition price et income 80 2 MyData _ selection _ filter _ conditions Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 12/ 23 X cons income price temp Sélection aléatoire La sélection aléatoire consiste à choisir de façon aléatoire un sous-ensemble de données. La sélection aléatoire est largement utilisée dans l'entraînement des algorithmes d'apprentissage automatique. Il existe deux types de sélection aléatoire : avec remise et sans remise. Dans la première, les données sélectionnées sont remises pour pouvoir les réutiliser dans la prochaine sélection, tandis que dans la sélection sans remise, les données ne sont pas remises et donc elles ne seront pas disponibles pour la prochaine sélection. Nous pouvons utiliser la fonction sample pour sélectionner aléatoirement un sous-ensemble de données comme suit : # Lecture des données 2 MyData - read. csv ( icecream. csv , header = T, sep = , ) # Sélection aléatoire sans remise 4 Selection _ sans _ remise - MyData [ sample (1: nrow ( MyData ), 10, replace = FALSE ),] 6 Selection _ sans _ remise 8 X cons income price temp Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 13/ 23 Dans cet exemple, nous avons sélectionné un sous-ensemble de taille 10 à partir de l'objet MyData. Le paramètre replace=false indique que la sélection est sans remise Gestion des données manquantes Les valeurs manquantes représentent l'un des problèmes les plus fréquents dans la manipulation des données. Beaucoup de jeux de données disponibles sur le Web ont des valeurs manquantes qui requièrent d'être traitées ou ltrées. D'une manière générale, les valeurs manquantes sont présentes dans les données sous forme de valeurs nulles ( null), des champs vides (NA), ou des symboles d'inni (Inf). R ore beaucoup de exibilité en ce qui a trait aux valeurs manquantes. Le cas le plus simple est d'omettre ces valeurs manquantes. Les fonctions na.omit et na.exclude peuvent être utilisées dans ce cas comme illustré dans l'exemple ci-dessous. Nous pouvons également vérier l'existence des valeurs manquantes dans un objet avec la fonction is.na. Exemple 1 Dans cet exemple, nous allons d'abord créer un objet de type dataframe qui contient trois lignes et deux colonnes. Supposons aussi que l'entrée de la troisième ligne et la deuxième colonne contient une valeur manquante. # Créer un objet dataframe 2 df - as. data. frame ( matrix (c (1:5, NA ), ncol = 2) ) df 4 V1 V NA Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 14/ 23 8 # Vérifier l ' existence des valeurs manquantes 10 is. na ( df ) V1 V2 12 [1,] FALSE FALSE [2,] FALSE FALSE 14 [3,] FALSE TRUE # cette entrée contient une valeur manquante 16 na. omit ( df ) V1 V na. exclude ( df ) 22 V1 V Les deux fonctions na.omit et na.exclude retournent l'objet dataframe sans les lignes contenant des valeurs manquantes. Ce que nous avons présenté, ce sont des méthodes qui permettent d'omettre les valeurs manquantes, mais dans beaucoup de cas, nous pouvons remplacer les valeurs manquantes par d'autres valeurs numériques par exemples des zéros, des moyennes par rapport à chaque colonne, etc. Par exemple, pour remplacer les valeurs manquantes par des zéros dans le dataframe de l'exemple précédent, nous pouvons écrire : 1 # Remplacer des valeurs manquantes par des zéros df [ is. na ( df )] - 0 3 df V1 V # NA remplacée par 0 Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 15/ 23 2.2.5 Fusion des données La fusion des données est un concept très fréquent dans la science des données. Nous pouvons fusionner plusieurs sources de données horizontalement ou verticalement selon le besoin. Par exemple, si nous avons deux dataframes, la fusion de ces dataframes horizontalement et verticalement peut se faire de la façon suivante : 1 # Fusionner deux dataframes df1 - as. data. frame ( matrix (c (1:6), ncol = 2) ) 3 df1 V1 V df2 - as. data. frame ( matrix (c (7:15), ncol = 3) ) df2 11 V1 V2 V # Fusion horizontale si les deux dataframes ont le même nombre de lignes df - cbind ( df1, df2 ) 17 df V1 V2 V1 V2 V # Fusion verticale si les deux dataframes ont le même nombre de colonnes df1 - as. data. frame ( matrix (c (1:6), ncol = 2) ) 25 df1 V1 V2 Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 16/ 23 df2 - as. data. frame ( matrix (c (7:15), ncol = 2) ) df2 33 V1 V df - rbind ( df1, df2 ) 41 df V1 V Quelques statistiques de base R ore plusieurs fonctions de base pour obtenir des statistiques descriptives comme la moyenne, la médiane, l'écart type, la variance, etc. Dans ce qui suit, nous allons présenter quelques fonctions qui permettent d'obtenir des statistiques de bases sur des données. Pour des raisons de simplicité, nous allons étudier ces fonctions pour un vecteur, et les fonctions sont aussi valables pour des matrices, dataframes, etc. Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 17/ 23 # Création d ' un vecteur 2 vecteur - c (3.6, 5.9, 8.66, 15, 11.5, 12.9, 14, 6.2, 10, 7.8) vecteur 4 [1] # Moyenne mean ( vecteur ) 8 [1] # Médiane median ( vecteur ) 12 [1] # Écart type sd ( vecteur ) 16 [1] # Variance var ( vecteur ) 20 [1] # Racine carrée sqrt ( vecteur ) 24 [1] [9] # Quartiles 28 quantile ( vecteur ) 0% 25% 50% 75% 100% # Minimum min ( vecteur ) 34 [1] 3.6 Belkacem Chikhaoui, TÉLUQ, Tous droits réservés. Module 2 - Page 18/ 23 36 # Maximu
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks