Cours avec exercices et problemes pour tout savoir sur le logiciel de statistique R
Cours avec exercices et problèmes pour tout savoir sur le logiciel de statistique R
Importer des donnees
2.1.1 Importer des donnees depuis un fichier texte ASCII
Soit vous disposez deja d'un fichier texte au format ASCII qui contient vos donnees, soit vous pouvez les entrer vous-rneme dans un fichier a l'aide d'un editeur de texte comme Wordpad sous Microsoft Windows ou bien Emacs sous Linux.
Entrer a la main des donnees dans un fichier a l'aide d'un editeur de texte est valable pour un nombre peu important de valeurs. Si vous avez un grand nombre de donnees, il vaut mieux utiliser un tableur (voir la section suivante).
Il existe trois fonctions R principales autiliser pour importer des donnees de puis un fichier texte, presentees dans le tableau suivant.
2.1.1.1 Lecture de donnees avec read. table ()
L'instruction R suivante va lire les donnees presentee dans un fichier (a selectionner dans une fenetre de dialogue) et les rapatrier dans R sous la forme d'un data.frame que nous avons choisi de nommer donnees. donnees
Lors de l'utilisation de la fonction read. table (), il est necessaire de specifier la valeur du parametre file qui doit contenir, dans une chaine de caracteres, le nom du fichier a lire ainsi que son chemin d'acces complet. Vous avez pu constater que nous avons utilise la fonction file. choose () qui ouvre une fenetre de dialogue permettant de selectionner un fichier et de renvoyer la chaine de caracteres requise. Il s'agit en fait d'un moyen commode pour recuperer le chemin vers le fichier, mais il est egalement possible de le specifier de facon explicite : donnees
Attention
Notez la specification des chemins de fichiers au moyen de slashes (I). Cette facon de proceder est issue de l'environnement UNIX. L'utilisation d'anti-slashes (\) comme sous Microsoft ne fonctionne pas sous R, sauf a doubler tous les anti-slashes (\\).
Une derniere option consistera autiliser la fonction setwdO pour changer le repertoire courant (equivalant autiliser le menu «FichierjChanger le repertoire courant») puis adonner au parametre file uniquement le nom du fichier sans le chemin d'acces.
setwd ("C: /MonDossier")
mon.fichier <- "mesdonnees.txt"
donnees
Vos donnees sont maintenant accessibles dans la console de R puisqu'elles sont stockees dans l'objet que vous avez choisi de nommer donnees. Vous pouvez les «visualiser» en tapant donnees ou encore en tapant head Cdonnees) ou tail(donnees) pour n'afficher que le debut ou la fin du jeu de donnees.
Astuce
- La fonction attachO (voir chapitre 7) permet d'avoir acces aux variables (colonnes) du data.fmme directement en tapant leur nom tel qu'il est ecrit sur la premiere ligne du fichier au format ASCII (si c'est le cas bien entendu). attach (donnees)
- Si votre fichier contient des lignes cornpletement vides ou bien des lignes non terrninees, utilisez les deux parametres (et leur valeur d'appel) fill=TRUE et blank. lines. skip=FALSE.
Prise en main
Commencez par creer un dossier nornme DossierData. Maintenant, telechargez le fichier biostatisticien. eu/springeR/ Intima_Media. txt et sauvez-le dans le dossier DossierData. Utilisez la fonction readLines 0 pour visualiser le debut du fichier de donnees, vous faire une idee de la facon dont il est structure, et ainsi determiner quels parametres de la fonction read. table () il vous faudra utiliser. setwd("chemin/vers/DossierData/") # Remplacez chemin/vers # par votre chemin. readLines("Intima_Media.txt",n=5)
Vous voyez apparaitre la sortie suivante :
[IJ "SEXE AGE taille poids tabac pagan SPORT mesure alcool"
[2J "1 33 170 70 1 1 0 0,52 1"
[3J "2 33 177 67 2 20 0 0,42 1"
[4J "2 53 164 63 1 30 0 0,65 0"
[5J "2 42 169 76 1 26 1 0,48 1"
Vous remarquez que la premiere ligne contient le nom des variables, que les champs sont separes par des simples espaces et que le separateur decimal est une virgule. Par consequent, vous devez utiliser les parametres header=TRUE, sep=" II et dec=" ,".
mesdonnees
header=T,dec=",")
mesdonnees # Afin d'afficher Ie contenu
# de mesdonnees
head (mesdonnees) # Affiche uniquement les premieres
# lignes du data.frame
Vous noterez la presence de valeurs manquantes syrnbolisees par NA.
On peut maintenant verifier le type de l'objet mesdonnees
class (mesdonnees)
Utilisons la fonction attachO afin de pouvoir acceder aux variables du tableau.
attach (mesdonnees)
Il vous est desorrnais possible de faire des calculs sur les variables dont les noms sont donnes par names (me sdonnee s ). Par exemple mean (AGE) # Moyenne des ages. var(taille) # Variance des tailles. Vous noterez l'importance de respecter la casse (minuscules/majuscules).
La fonction read. table () contient un tres grand nombre de parametres. Mais puisque de nombreux jeux de donnees ont un format standard, quelques fonctions sont disponibles pour les lire. Ces fonctions consistent en fait aappeler read. table C) avec les valeurs de certains parametres fixes par defaut. Ainsi, si vous avez un fichier d'extension . csv (pour comma separated values) cree par exemple depuis le tableur d'OpenOffice, vous pouvez aussi utiliser la fonction suivante :
read.csv(file.choose()) # Pour lire des donnees separees par # des virgules # (avec Ie . pour separateur decimal) .
read.csv2(file.choose()) # Pour lire des donnees separees par # des points-virgules # (avec la , pour separateur decimal) .
Pour lire des donnees separees par des tabulations, on utilisera plutot :
read.delim(file.choose()) # (avec Ie pour separateur decimal)
read.delim2(file.choose())# (avec Ie , pour separateur decimal)
2.1.1.2 Lecture de donnees avec read. ftable ()
Il arrive parfois que l'on ne dispose pas de toutes les donnees individuelles, mais uniquement d'un resume presents sous la forme d'un tableau de contingence. Dans ce cas, il faut utiliser la fonction d'importation read. ftable O.
…
2.1.2 Importer des donnees depuis Excel au le tableur d'Open Office
2.1.2.1 Utiliser Ie copier-coller
On selectionne al'aide de la souris (dans le tableur) la plage de donnees que l'on souhaite incorporer dans R. Une fois que les donnees ont ete selectionnees, on les copie (a partir du menu Edit ou en utilisant la combinaison de touches CTRL+C sous Windows ou COMMAND+C sous Mac) dans le presse-papiers. Il suffit ensuite de taper l'instruction suivante dans la console de R pour que les donnees y soient transferees depuis le presse-papiers. X
Astuce
L'instruction fix ex) ouvre un mini tableur dans R permettant de visualiser et de modifier les donnees presentee dans x. Elle est plus utile que l'instruction edit 0 qui n'est pas prevue pour operer des modifications. Dans le merne ordre d'idees, la fonction ViewO permet uniquement d'afficher (dans un mini tableur) mais sans pouvoir les modifier les donnees presentee dans x.
Attention
Prenez garde au fait qu'Excel pourrait contenir des formules ou autres caracteres caches derriere la plage de valeurs que vous souhaitez copier. Une fagon de s'affranchir cl'eventuels problernes relies a ce fait consiste a d'abord copier, puis aeffectuer un collage special de la plage de ces valeurs sur une feuille vierge du tableur. Vous pourrez ensuite utiliser la fonction read. table 0 comme cela est indique ci-dessus.
2.1.2.2 Passer par un fichier ASCII interrnediaire
Il vous faut enregistrer votre fichier dans un format ASCII puis vous referer ala section precedents.
- Dans Excel, allez dans Fichier / Enregistrer sous ... et choisissez Type de fichier : Texte (separateur : tabulation) (*.txt) (*. txt) puis sauvez .
- Dans OpenOffice, allez dans Fichier / Enregistrer sous ... et choisissez Type de Fichier : Texte CSV (. csv ; .txt) puis sauvez. Dans la fenetre suivante, choisissez successivement : - separateur de champs : Tab - separateur de texte : " puis cliquez sur OK.
2.1.2.3 Utiliser des packages specialises
Il existe quelques packages permettant de lire directement des fichiers *. xls de puis R. On peut notamment citer la fonction read. xls 0 du package gdata qui fonctionne tres bien des lors qu'une version fonctionnelle de PERL (10- giciel gratuit, disponible par exemple via l'installation du fichier …) est presente sur votre ordinateur.
2.1.3 Importer des donnees depuis SPSS, Minitab, SAS ou Matlab
Le tableau suivant donne les packages et les fonctions R a utiliser pour importer des donnees depuis quelques logiciels commerciaux usuels. TAB. 2.3: Packages et fonctions R d'importation de donnees depuis quelques logiciels usuels.
La fonction lookup. xport () renvoie de l'information (sous la forme d'une liste) sur la librairie SAS d'un fichier SAS XPORT d'extension *.xpt.
Attention
Notez tout d'abord que sous l'environnement Windows le package foreign est deja pre installe (mais pas charge) dans R et qu'il n'est pas possible d'en installer une autre version depuis le CRAN (qui ne dispose que des versions Linux et Mac). Notez maintenant les points suivants. La fonction read. spss() peut necessiter l'utilisation du parametre reencode=" utf8" sous Linux. La fonction read. mtp () fonctionne sur des fichiers contenant uniquement des donnees numeriques. La fonction read. xport () ne permet actuellement pas de lire des fichiers directement de puis I'Internet.
2.1.4 Les gros fichiers de donnees
Le logiciel Rest correctement outille pour la lecture de gros jeux de donnees. Pour cela, il faut indiquer de facon explicite le type de chacune des colonnes. Sinon, R devra lire tout le fichier pour verifier que les colonnes nurneriques sont bien numeriques (le debut du fichier pourrait par exemple contenir des nombres, puis plus loin des chaines de caracteres). L'exemple suivant, issu de donnees genomiques reputees pour etre volumineuses, permet d'illustrer ce point. Il vous faut d'abord telecharger le fichier biostatisticien. eu/springeR/dbsnp123. dat sur votre disque dur, puis essayer les instructions suivantes : tmps
tmps
Il convient donc de noter qu'une utilisation judicieuse de R aide agerer de tres gros jeux de donnees de facon relativement rapide. La limite est essentiellement la quantite de RAM disponible. Par ailleurs, la fonction scanO donne des temps d'execution du merne ordre de grandeur. Les gros jeux de donnees sont aussi parfois stockes dans un format binaire. Dans ce cas, la fonction readBinO permet de les lire. Nous en verrons un exemple dans la partie travaux pratiques du chapitre 5.
Export
Si la fonction scan 0 est correctement utilises, la lecture d'un fichier texte est tres rapide (autant qu'avec le logiciel 8A8 par exemple). Si votre fichier est vraiment gros, vous devriez considerer la possibilite de stocker vos donnees dans une base de donnees (par exemple My8QL) et d'y acceder par segments. Notez egalement l'existence des packages R.huge et filehash, ce dernier etant plus general que R. huge, permettant de gerer des gros fichiers de donnees. Dans le package filehash, la limitation pour la taille des donnees pouvant etre traitees est la taille physique du disque dur.
Section 2.2 Exporter des donnees
2.2.1 Exporter des donnees vers un fichier texte ASCII
Il faut utiliser la fonction write. table () .
Si vous avez dans R un data.fmme nornme donnees qui contient les donnees que vous voulez sauvegarder dans un fichier texte, utilisez l'instruction :
write. table (donnees, file = "mon-fichier.txt", sep = "\t")
Remarque
Notez qu'il existe aussi une fonction write 0 qui s'utilise sur des objets du type vecteur ou matrice et qui possede un parametre interessant (ncolumns) permettant de specifier le nombre de colonnes dans le fichier resultant. Prenez garde toutefois au fait que votre fichier contiendra une version transposes de la matrice ou du vecteur aecrire.
2.2.2 Exporter des donnees vers Excel ou OpenOffice Calc
Tapez par exemple dans la console de R :
X
write.table(X,file(" clipboard"),sep="\t",dec=",",row.names=FALSE)
Les donnees ont ainsi ete copiees dans le presse-papiers (clipboard). Il vous suffira alors de les coller dans votre tableur, par exemple au moyen de la combinaison de touches CTRL+V.
SECTION 2'
Creation de donnees
2.3.1 Entrer des donnees jouets
Nous allons voir dans cette section comment vous pouvez creer rapidement quelques donnees. Cela peut se reveler utile pour experimenter les diverses fonctions de R sur de petites series de donnees. Nous decrivons maintenant les principales fonctions que sont c (), seq(), : () et repO .
…
Exercices
2.1- Quelles sont les trois fonctions R principales autiliser pour importer des donnees de puis un fichier texte au format ASCII?
2.2- L'une des fonctions usuelles de lecture de donnees possede les parametres suivants : header, sep, dec, row. names, skip, nrows. Expliquez a quoi ils servent. Donner un exemple de la valeur que peut prendre chacun de ces parametres.
2.3- Aquoi sert la fonction readLines 0 ?
2.4- Aquoi sert la fonction fix 0 ?
2.5- Decrivez les particularites des fonctions read. csv0, read. csv2 0, read. de lim 0 et read. delim2 0 .
2.6- Aquoi sert la fonction read. ftable 0 ?
2.7- En quoi les fonctions scanO et read. table 0 se differencient-elles ?
2.8- Expliquez en detail comment vous feriez pour importer des donnees se trouvant dans une feuille de classeur d'Excel.
2.9- Quel package contient plusieurs fonctions permettant d'importer des donnees de puis des logiciels commerciaux de statistique?
2.10- Lors de la lecture de gros fichiers de donnees, quel parametre de la fonction read. table 0 permet d'augmenter considerablernent la vitesse de lecture?
2.11- Quelle est la fonction R a utiliser pour ecrire dans un fichier le jeu de donnees contenu dans un data.fmme? Quelle autre fonction connaissezvous?
2.12- Citez les quatre fonctions de base permettant de fabriquer des vecteurs.
2.13- Indiquez comment utiliser la fonction seq() pour obtenir le vecteur suivant:
[1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
2.14- Donnez l'instruction R la plus concise permettant d'obtenir le vecteur suivant :
1 122 3 3
2.15- Donnez l'instruction R la plus concise permettant d'obtenir le vecteur suivant :
1 231 2 3
2.16- Donnez deux fonctions R permettant d'entrer des donnees ala main dans le mini tableur de R.
,---l::ITiiliJ
Fiche de TP
Lecture de diffcrents jeux de donnees
A- Rentrer des donnees issues d'un format papier
- Boutons de fiE~vre : Cinq traitements contre les boutons de fievre, dont un placebo, ont ete adrninistres par tirage au sort a trente patients (six patients par groupe de traitement). Le delai (enjours) entre l'apparition des boutons et la cicatrisation complete a ete recueilli chez chaque patient.
La question que l'on se pose est de savoir s'il existe une difference entre les traitements. Il s'agit done ici de comparer les moyennes des delais de cicatrisation observes dans cinq echantillons independants (groupes de traitement).
L'analyse statistique adequate s'appelle l'ANOVA; elle sera presentee au chapitre 13. Nous allons voir ici comment entrer ces donnees dans R uniquement pour calculer la moyenne de l'echantillon de chaque traitement.
2.1- Entrez directement les donnees dans R al'aide de la fonction de O.
2.2- Utilisez la fonction attachO puis la fonction meanO pour calculer la moyenne de chacun des traitements.
2.3- Calculez simultanement les moyennes des traitements au moyen de la fonction colMeans O.
2.4- Enregistrez votre data.fmme dans un fichier nornme boutons.txt en utilisant la fonction write. table O.
2.5- Verifiez que tout s'est bien passe en ouvrant le fichier au moyen d'un editeur de texte.
2.6- Utilisez la fonction rmO pour effacer tous les objets R que vous venez de creer dans votre environnement de travail.
2.7- Importez le fichier boutons.txt en utilisant read. table 0 et affichez-le .
…
SECTION 6.
Dans cette section, on ne se contente pas de considerer un objet comme une quantite que l'on peut sauvegarder et reutiliser plus tard. On entre de plus en plus dans l'esprit du langage R en precisant le mecanisme interne oriente objet qui regit la grande partie de son utilisation. Et pourtant, ce qui est assez incroyable, c'est la transparence pour l'utilisateur qui n'a pas ase soucier de connaitre le fonctionnement interne de R. C'est a notre avis un point fort de R. Toutefois, a la lecture de cette section, un utilisateur pourra mieux comprendre retroactivernent comment le R fait pour proposer ces resultats. L'une des consequences attendue sera une utilisation moins «hasardeuse» et ainsi mieux controlee du R.
6.3.1 Comment fonctionne le mecanisme oriente objet du R
6.3.1.1 Classe d'un objet et declaration d'un objet
En R, ce qui importe est de specifier la classe d'un objet a l'aide de la fonction "class<-" O. Rappelons que la fonction class() permet quant aelle de consulter la classe de l'objet.
…
6.3.4 Heritage de classe
Dans le cadre de notre problematique, l'utilisateur avarice in forme notre utilisateur neophyte que le R dispose deja d'un ensemble de fonctions pour le traitement des rnodeles lineaires. En effet, la fonction Lm () est dediee (comme on le verra au chapitre 12) a ce type de traitement. Illui dit cependant qu'a sa connaissance, les traitements particuliers qu'il propose sur le modele de regression lineaire simple n'existent pas. Ils s'associent alors pour developper cette extension avec pour principal objectif de ne pas «reinventer la roue» et d'exploiter le mieux possible les capacites existantes du systeme R. Dans le concept de programmation orientee objet, la notion d'heritage de classe semble appropriee pour ce type d'extension.
Le terme d'heritage exprime qu'un objet d'une certaine classe de base pourra aussi se comporter comme tous les autres objets de classes supplementaires. Le systeme R dispose de ce mecanisme, et ce par un biais tres simple consistant a associer a un objet une suite de classes. Ainsi, lorsqu'une methode est appliquee pour un certain objet ayant une hierarchic de classes, la premiere classe est d'abord sollicitee. Si la methode pour cette classe existe, alors elle est executee. Dans le cas contraire, le R teste si, dans la hierarchic des classes, il existe une methode executable. Si tel est le cas, celle-ci est executee. Dans le cas contraire, la methode par defaut est executee des lors que celle-ci est definie. Finalement, si ce n'est toujours pas le cas, une erreur d'execution est alors generee. Comme un exemple vaut souvent mieux qu'un long discours, illustrons cette notion sur la problernatique de nos deux associes. Commencons par declarer la fonction constructeur de la nouvelle classe lm1 heritant directement de la classe existante Lm. Leur intention est toutefois d'orienter le developpernent dans la langue d'origine du R, a savoir l'anglais, dans un but de partager eventuellernent leur travail avec la cornmunaute des utilisateurs R.