================================================================= Seminaire: session-Automne06 Écrit par: Lyes Ouhib, mis à jour par Vinal Ramdenee. Présenté par: Vinal Ramdenee ================================================================= 1- UNIX ---- - COMMANDES DE BASE Voici quelques commandes de base à utiliser dans un terminal : pwd nom du repertoire courant (où sommes-nous?) ls liste les fichiers et sous-répertoires du repertoire courant ls -al liste les fichiers CACHÉS et sous-répertoires du repertoire courant avec des informations supplémentaires. mkdir creer un repertoire ex: mkdir stt6615 cd changer de repertoire ex: cd stt6615 cd .. (reculer d'un niveau) cd (pour revenir a votre repertoire principal) man avoir des informations sur une commande ex: man pwd imprime imprimer un fichier (voir 'man imprime pour les détails') ex : imprime -Plabostat -n1 -c1 nom_du_fichier rm effacer un fichier ex : rm nom_du_fichier rm -r effacer un répertoire cp copier un fichier ex : cp fichier_a_copier ma_copie cp -r copier un répertoire Pour vos travaux du cours stt6615, creez un repertoire stt6615 avec: mkdir stt6615. Et pour cette demo, télécharger le fichier du site web : http://www.dms.umontreal.ca/~stat/Logiciels/splus/ gv Visualiser et imprimer des fichiers Postscript (.ps) ex : gv nom_du_fichier.ps acroread Visualiser et imprimer des fichiers PDF (.pdf) ex : acroread nom_du_fichier.pdf -EDITEURS DE TEXTE gedit(simple et facile), emacs(programmation), vi ... -QUITTER ***IMPORTANT*** logout (pour quitter) ne pas oublier de le faire a la fin de chaque session de travail 2- SPLUS!!! -------- Pour demarrer: %Splus -e (il y a du texte avant le signe %. Le % est le "prompt"; cette notation vous indique que vous êtes dans un terminal. L'option "-e" permet de modifier les lignes entrées dans Splus.) A l'interieur de Splus, le "prompt" devient ">", il est inutile de taper > avant chaque commande... Par défaut, Splus donne accès aux objets créés dans les sessions antérieures à partir de n'importe quel répertoire. Si l'on veut avoir des objets locaux (donc des objets différents pour un répertoire en particulier), Splus doit alors créer un nouveau répertoire pour cela qui s'appellera .Data . Par exemple, à l'interieur du repertoire stt6615, nous ferons en sorte que le sous-repertoire .Data sera créé. Allez dans le repertoire stt6615 : % cd stt6615 Nous allons maintenant appeler Splus pour la premiere fois a l'aide de la commande % Splus CHAPTER Cette commande créé automatiquement le sous-répertoire .Data dans le repertoire dans lequel nous sommes presentement. Pour les prochaines utilisations, il faudra simplement faire les commandes suivantes: % cd stt6615 (pour aller dans le repertoire du cours) % Splus -e (pour lancer le logiciel Splus) -COMMANDES DE BASE > ls() Sous Splus, la commande 'ls' liste les objets créés; mais, à la différence de UNIX, toute fonction Splus nécessite des parenthèses. Pour avoir de l'aide sur une commande lorsque l'on en connait le nom: >help(son.nom) ex. help(mean) (demande de l'aide pour la fonction 'mean' de Splus) Sinon, il y a un outil pour nous aider dans lequel on peut faire de petites recherches: >help.start() Pour quitter: >q() #(n'oubliez pas les parentheses) -LES VECTEURS Les objets qu'on va créer et manipuler avec Splus sont principalement des vecteurs et des matrices. Logique! En effet, qu'est-ce que c'est un jeu de donnees? C'est un vecteur de donnees. Rappel: un vecteur est une suite d'elements indexes. Exemple: (11,31,23) a comme deuxieme element 31. Il en va de meme pour la matrice, qui utilise deux indices. Exemple, si on veut mettre la taille en cm des differents etudiant du cours STT6615 dans un vecteur que l'on nommera "demos.tailles", il suffit de taper la ligne suivante : > demos.tailles <- c(172, 174, 176, 154) Pour assigner un nom: "<-" ou le underscore "_". La lettre "c" minuscule est utilisee pour definir un vecteur (c comme dans combine). Pour avoir le contenu du vecteur en question, il suffit tout simplement de taper son nom : > demos.tailles [1] 172 174 176 154 Ne mettez pas de caracteres bizares (%$#&@) dans le nom, JAMAIS d'espace, mais vous pouvez utiliser des points "." autant de fois que vous le voulez. Plutot des noms simples mais clairs. Attention aux minuscules et majuscules. Maintenant, si on veut attribuer un nom aux differents elements de notre vecteur, il faut avoir recours a la fonction "names". Exemple: > names(demos.tailles)_c("Lyes","James","Nadine","Francine") > demos.tailles Lyes James Nadine Francine 172 174 176 154 Il est egalement possible d'extraire un element ou une partie du vecteur. Pour ce faire, on utilise les crochets (i.e., "[" et "]") en combinaison avec l'indice de l'element en question. Par exemple, pour extraire le premier element de notre vecteur "demos.tailles", il suffit de taper la ligne suivante : > demos.tailles[1] (appel par position) Lyes 172 et pour le meme resultat, on peut aussi ecrire > demos.tailles["Lyes"] (appel par nom) Lyes 172 Voici quelques autres possibilites : > demos.tailles[-4] Lyes James Nadine 172 174 176 permet d'enlever un element du vecteur > demos.tailles.nouv<-demos.tailles[1:2] Selectionne les deux premiers elements et affecte le tout dans un nouveau vecteur appele "demos.tailles.nouv" > demos.tailles.nouv Lyes James 172 174 Parmi les autres moyens de creer un vecteur, on retrouve: > x<-1:4 > x [1] 1 2 3 4 pour faire une serie de nombres > y<-seq(1,40,2) > y [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 pour faire une suite, de 1 a 40, par sauts de 2 -OPERATIONS SUR LES VECTEURS Par exemple, pour multiplier par 4 et additionner 5 au vecteur "demos.tailles", il suffit de taper : > demos.tailles*4+5 Lyes James Nadine Francine 693 701 709 621 la multiplication et l'addition dans cette operation se font composante par composante (ici les "nombres" 4 et 5 sont d'abord transformes en vecteurs de la meme longueur que demos.tailles; ainsi la commande qui est vraiment executee est demos.tailles * c(4,4,4,4) + c(5,5,5,5) ). Si on veut additionner ce vecteur au vecteur "x" defini ci-haut, il faut taper : > demos.tailles+x Lyes James Nadine Francine 173 176 179 158 > length(demos.tailles) [1] 4 La longueure du vecteur est donnee par la fonction length(objet). Ici, la longueure de l'objet demos.tailles est de 4 elements (tailles). Les operateurs arithmetiques sont: +,-,*,/ comme d'habitude ^ exposant %/% division entiere %% modulo %*% produit matriciel Pour les operateurs logiques: == egal a != different <,<=,>,>= comme d'habitude Voici quelques autres exemples : > demos.tailles>170 Lyes James Nadine Francine T T T F indique pour chaque element du vecteur si la reponse est vraie ou fausse (T pour True, F pour False) > demos.tailles[demos.tailles>170] Lyes James Nadine 172 174 176 donne les elements du vecteur repondant au critère. -LES MATRICES ET "DATA.FRAME": ->MATRICES : Pour creer une matrice, il suffit d'utiliser la fonction "matrix" ou "nrow" est le nombre de lignes et "ncol" est le nombre de colonnes. Cette fonction transforme un vecteur existant en une matrice aux dimensions specifiees. L'option "byrow" permet d'indiquer si on doit remplir la matrice ligne par ligne (byrow=T) ou colonne par colonne (byrow=F). > demos.tailles2<-matrix(demos.tailles,nrow=2,ncol=2,byrow=T) > demos.tailles2 [,1] [,2] [1,] 172 174 [2,] 176 154 Notez ici que le premier argument de la fonction matrix (demos.tailles) a été donné sans nom de l'argument (i.e. data=demo,tailles) alors que les trois autres (2, 2 et T) ont été donnes par nom (nrow, ncol et byrow). Les arguments d'une fonction peuvent être donnés soit par position ou par nom. Vous pouvez obtenir la liste et la position de chacun des arguments d'une fonction en consultant l'aide: help(nom.de.fonction). Pour attribuer des noms aux lignes et aux colonnes, il faut utiliser la fonction "dimnames" en combinaison avec la fonction "list". Rappelons que pour inscrire des caracteres alphanumeriques, il faut utiliser les guillemets. > dimnames(demos.tailles2)<-list(c("Garcons","Filles"),1:2) > demos.tailles2 1 2 Garcons 172 174 Filles 176 154 De la même maniere que pour les vecteurs, on peut extraire un ou plusieurs elements d'une matrice > demos.tailles2[1,1] [1] 172 Pour extraire une ligne, on ecrit : > demos.tailles2[1,] 1 2 172 174 Ou on peut aussi ecrire : > demos.tailles2["Garcons",] 1 2 172 174 Dans les deux cas, on obtient la meme chose. Dans le premier cas, on utilise le numero de la (ou les) ligne(s) qu'on veut, alors que dans le deuxieme cas on procede par nom. En ne specifiant pas de numero ou de nom de colonnes apres la "," et avant le "]", nous conservons toutes les colonnes. De la meme maniere, demos.tailles2[,2] aurait donne la 2e colonne. Pour creer une matrice ne contenant que des 0, on procede comme suit. Par defaut, S-plus sait que 4 est le nombre de lignes et 8 le nombre de colonnes (puisque l'appel est fait par position et que l'ordre des arguments est le vecteur des valeurs, le nombre de lignes, puis le nombre de colonnes). > x<-matrix(0,4,8) > x [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 0 0 0 0 0 0 0 0 [2,] 0 0 0 0 0 0 0 0 [3,] 0 0 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 0 0 > dim(x) [1] 4 8 En effet, il s'agit d'une matrice 4*8 -"DATA.FRAME": S-Plus offre un autre type d'objet le "data.frame". Celui-ci est en fait semblable au type matrice. Dans le cas d'une matrice, toutes les valeurs sont du meme type tandis que dans le cas du "data.frame", on peut mettre dans chaque colonne des types differents. Voici un exemple a partir d'un jeu de donnees existant deja dans S-plus, notons qu'il existe des jeux de donnees fournis avec S-plus. > singer height voice.part 1 64 Soprano 1 2 62 Soprano 1 3 66 Soprano 1 4 65 Soprano 1 5 60 Soprano 1 6 61 Soprano 1 7 65 Soprano 1 8 66 Soprano 1 9 65 Soprano 1 10 63 Soprano 1 .... Maintenant, voici un exemple de création d'un "data.frame" : > noms<-c("Pierre","FF","Tremblay","Martine") > jobs<-c("professeur","Administrateur","etudiant","etudiante") > tailles<-c(182, 172, 150, 165) > cours.stt6005<-data.frame(noms,jobs,tailles) > cours.stt6005 noms jobs tailles 1 Pierre professeur 182 2 FF Administrateur 183 3 Tremblay etudiant 150 4 Martine etudiante 165 -LIRE UN JEU DE DONNEES : Pour faire une analyse, il est essentiel de pouvoir entrer les donnees de facon a ce que S-plus puisse les comprendre. Pour ce faire, une possibilite est d'utiliser la commande "read.table", si les donnees sont deja dans un fichier sous forme ascii. Dans notre cas, il s'agit du fichier "salaire.donnees". > salaires.prof<-read.table("salaire.donnees") ***Le fichier de donnees doit se trouver dans le meme repertoire que celui a partir duquel on a appele Splus. Sinon, il faut specifier le bon chemin: > salaires.prof<-read.table("stt6615/salaire.donnees") Note: La commande "scan" peut aussi être utilisée; mais c'est une commande qui va lire vos données et les mettre dans un VECTEUR. Il faudra alors choisir entre "scan" et "read.table" selon vos besoins. Que se passe-t-il? Rien? ...alors ca a fonctionné. Message d'erreur? Il faut s'assurer que les donnees dans le fichier texte sont disposées en tableau, c'est-à-dire que chaque ligne comporte le même nombre de colonnes. De plus, il faut eliminer tout caractère qui n'est pas numerique. > dimnames(salaires.prof)<-list(dimnames(salaires.prof)[[1]],c("moyenne", "titulaire","associe","adjoint")) ... on donne un nom a nos lignes et colonnes. > salaires.prof moyenne titulaire associe adjoint duke 64.47 83.0 57.5 46.1 vanderbilt 59.20 78.9 49.7 42.5 washington_univ 58.77 75.4 51.4 43.8 tulane 55.94 70.2 50.8 41.5 cal_tech 75.54 93.3 70.0 56.4 Questions? -QUELQUES FONCTIONS STATISTIQUES DE BASE : Pour commencer ne gardons que la premiere colonne (i.e. la moyenne des salaires) et mettons le tout dans un vecteur que nous appellerons "salaires.moyen". > salaires.moyen<-salaires.prof[,1] Pour calculer la moyenne on utilise la fonction "mean": > mean(salaires.moyen) [1] 59.60071 Pour calculer la variance on utilise la fonction "var": > var(salaires.moyen) [1] 46.96031 Pour calculer la mediane on utilise la fonction "median": > median(salaires.moyen) [1] 58.21 Pour calculer les differents quantiles on utilise la fonction 'quantile', en mettant comme 2ieme argument les differents percentiles que l'on desire (sous la forme d'un vecteur) : > quantile(salaires.moyen,c(0.25,0.75)) 25% 75% 55.1475 62.0575 Pour calculer le maximum d'un vecteur on utilise la fonction "max" : > max(salaires.moyen) [1] 75.54 Pour calculer le minimum d'un vecteur on utilise la fonction "min" : > min(salaires.moyen) [1] 51.33 La fonction "summary" regroupe en une seule commande les fonctions ci-haut : > summary(salaires.moyen) Min. 1st Qu. Median Mean 3rd Qu. Max. 51.330 55.147 58.210 59.601 62.058 75.540 ***************************************************************************** Representation graphique ======================== REPRESENTATION NUMERIQUE D'UN JEU DE DONNEES (de base). ======================================================= Voici le jeu de donnees avec lequel nous travaillerons. Il s'agit d'observations recueillies sur differents modeles de voitures. Les donnees originales se trouvent dans l'objet "car.all" de Splus (>car.all) Nous utiliserons seulement une partie de ces donnees, soit 25 de ces marques de voitures et seulement deux des variables. (la 32ieme et la 33ieme) > auto.caract <- car.all[62:86,32:33] > auto.caract Price Country Mazda 626 12459 Japan/USA Mazda 929 23300 Japan Mazda MPV 14944 Japan Mazda MX-5 Miata 13800 Japan Mazda MX-6 12279 Japan/USA Mazda Protege 6599 Japan Mazda RX7 17880 Japan Mercedes-Benz 190 31600 Germany Mercedes-Benz 300E 39950 Germany Mercury Tracer 8672 Mexico Mitsubishi Galant 10989 Japan Mitsubishi Precis 5899 Korea Mitsubishi Sigma 17879 Japan Mitsubishi Wagon 14929 Japan Nissan 240SX 13249 Japan Nissan 300ZX 27900 Japan Nissan Axxess 13949 Japan Nissan Maxima 17899 Japan Nissan Pulsar NX 12249 Japan Nissan Sentra 7399 Japan/USA Nissan Stanza 11650 Japan Nissan Van 14799 Japan Peugeot 405 15930 France Peugeot 505 19945 France Plymouth Laser 10855 USA Nous utiliserons seulement la variable prix pour chacune de ces marques alors nous créons le nouveau vecteur suivant: > auto.prix <- auto.caract[,1] # ([,1]=premiere colonne) > auto.prix [1] 12459 23300 14944 13800 12279 6599 17880 31600 39950 8672 10989 5899 [13] 17879 14929 13249 27900 13949 17899 12249 7399 11650 14799 15930 19945 [25] 10855 PLOT ---- > motif() ou bien > trellis.device() (pour ouvrir une fenêtre graphique) > plot(auto.prix) > title("Prix de certains modeles de voitures") > dev.off() ou bien > graphics.off() Cela nous donne un graphique des donnees selon l'ordre rencontre dans le jeu de données. Si par exemple nous voulions voir les donnees ordonnées ,> plot(sort(auto.prix)) . Sort ordonne les composantes d'un vecteur. Parfois on desire renommer les axes. Pour ce faire, on utilise les options xlab et ylab. > plot(auto.prix, xlab="Observations", ylab= "Prix") > title("Prix de certains modeles de voitures") Pour l'aide faîtes: > help(plot) BOX-PLOT -------- > boxplot(auto.prix) > title("Box-plot de mes donnees") HISTOGRAMME ----------- > hist(auto.prix) > title("Histogramme a 7 classes") > hist(auto.prix,breaks=seq(5000,40000,7000)) > title("Histogramme a 5 classes") SAUVEGARDE D'UN GRAPHIQUE ----------------------- Après avoir visualisé le graphique, utiliser la commande suivante pour sauvegarder le graphique dans votre compte : >printgraph(file="nom.ps") Utiliser la commande RESUMÉ ====== Commandes vues: Numeriques: mean(x), var(x), sqrt(var(x)), quantile(x, c(les quantiles desires)) min(x), max(x), summary(x) Graphiques: -motif() ouvrir une fenetre graphique. -dev.off() fermer la fenetre graphique -plot(x) graphique des donnees selon leur # obs. -plot(x, xlab="abscisse", ajouter des noms aux axes ylab="ordonnee") -title("Votre titre de graph") pour mettre un titre. -boxplot(auto.prix) boxplot du jeu de données. -hist(auto.prix,breaks=seq(debut,fin,saut)) ou -hist(auto.prix) histogramme -par(mfrow=c(Z,Y)) avoir plus d'un graphique dans une fenetre; ici on a une matrice Z x Y. -dev.off() fermer la fenêtre de graphique. -stem(auto.prix) stem-and-leaf. -pie(donnees.auto,names=noms.auto) pour un diagramme circulaire. -barplot(donnees.auto,names=noms.auto) pour un diagramme en batons. -printgraph(file="nom.ps") pour sauvegarder un graphique dans un fichier postscript. Variable aléatoire Normale: -rnorm(n,mu,sigma) simule n observations provenant d'une N(mu,sigma^2) ================================================================================== Référence: http://www.dms.umontreal.ca/~stat ================================Bonne session=====================================