olivier godechot

Importation et manipulation des données



R peut lire des données SAS au format xport, de même que des données tabulées au format txt, des données au format DBF (format DBASE utilisé pour la diffusion des données sur le site de l'insee), au format excel ou spss.

Pour importer les données dans de nombreux formats, il faut utiliser la librairie foreign.

Il faut d'abord l'installer (au moins une fois).

#INSTALLATION DU PACKAGE FOREIGN
install.packages("foreign")
#(le dièse est la marque des commentaires sous R)


Une fois que cette librairie est installée (on n'a plus jamais besoin de l'installer, sauf pour la mettre à jour en cas de nouveautés), il faut appeler la librairie. L'appel de la librairie est nécessaire chaque fois que l'on ré-ouvre R.


#APPEL DE LA LIBRAIRIE FOREIGN
library("foreign")


On est alors prêt pour utiliser la commande read.xport qui lit une table SAS au format xport. Prenons comme exemple le fichier pour reproduire l'article de François Héran sur les chiens et les chats.

#IMPORTATION DE DONNEES SAS EXPORT FILE
#sous linux ubuntu
heran<-read.xport("/media/win_d/olivier/R/heran.xpt")
#sous windows
heran=read.xport("d:/olivier/R/heran.xpt")


La commande ci-dessus signifie je crée un nouvel objet dénommé « heran » dans lequel est importe la table heran.xpt. Remarquons tout de suite que R ne connaît pas l'antislatch le « \ » utilisé habituellement pour les chemins de windows. L'assignation de valeur est marquée par le signe = ou par le signe <- .


Regardons maintenant le contenu de cette table, bref le bon vieux proc contents de sas.

#VISUALISATION DU CONTENU DE LA TABLE
str(heran)


La console de R affiche alors le résultat suivant :

#RESULTATS
'data.frame': 5882 obs. of 24 variables:
$ ST : Factor w/ 7 levels "0","1","2","3",..: 7 7 7 7 7 7 7 7 7 7 ...
$ NPHR : Factor w/ 16 levels "","00","01","02",..: 3 4 3 5 4 4 7 4 5 4 ...
...
$ PONDER: num 3890 4105 4187 3524 4187 ...
$ NBPD : Factor w/ 12 levels "01","02","03",..: 2 2 1 2 1 3 3 2 1 4 ...
#etc...


num désigne les variables numériques, Factor les variables caractères. La commande str donne le nombre de modalités des variables caractères, liste les premières modalités et poursuit en donnant les valeurs des premières observations de la table. Le $ en début de ligne n'est pas là pour rien. En effet, les variables de l'objet heran s'intitulent heran$mavar. Ainsi heran$PONDER (ne pas confondre minuscule et majuscule) désigne la variable de pondération de ma mini-base heran.

L'on peut donc manipuler ces variables ainsi désignées dans le cadre de procédures statistiques (les étapes proc de sas) ou de manipulations des données (les étapes data de sas).

Par exemple, la commande summary nous donne quelque chose qui ressemble d'assez loin à une proc summary sous SAS.
#SUMMARY
summary(heran$PONDER)
summary(heran$ST)


En voici le résultat: moyenne, médiane, quartiles, extremum pour les variables numériques, distribution de fréquence pour les variables caractères.

#RESULTS

Min. 1st Qu. Median Mean 3rd Qu. Max.
2074 3052 3328 3331 3624 4311

0 1 2 3 4 5 6
701 938 920 802 1597 620 304


Mais l'on peut aussi s'en servir pour créer de nouvelles variables.
Par exemple, je veux créer une nouvelle variable sexebis qui contient la variable homme et femme en toutes lettres, je peux procéder de la façon suivante.

#NOUVELLE VARIABLE SEXEBIS
heran$sexebis<-ifelse(heran$CSEX =="1","homme","femme")


On l'aura compris, il n'y a pas d'étape data en R ! Il n'y a pas besoin (comme dans sas) de dire quelle table on crée (data a;), laquelle on verse dedans (set z;) manipule et la fin des instructions (run;) suivant la liste des modifications de la table. C'est relativement économique. Cela ressemble de ce point de vue à STATA. La différence avec Stata, c'est qu'on lui indique la table en préfixe du nom de variable. C'est un peu plus long à écrire, mais on peut travailler sur plusieurs objets en même temps.

Revenons à notre ifelse. Il est bien pour travailler sur du dichotomique, mais pas super pratique. Si on des clauses plus complexes il faut les emboîter les uns dans les autres, ce qui est un peu casse pied. Il existe une écriture de type If instruction, Else if instruction, else if instruction, else instruction, mais elle ne fonctionne pas pour les vecteurs. Si quelqu'un a trouvé une écriture souple pour les clauses complexes dans les tables, je suis preneur.

S'il s'agit juste de donner des labels à une variable qualitative, l'on peut utiliser cette syntaxe là.

#NOUVELLE VARIABLE SEXETERS
heran$sexeters<-factor(heran$CSEX,labels=c("homme","femme"))


On peut faire pareil pour des variables comportant plus de modalités. C'est un peu l'équivalent d'un Proc format !

#NOUVELLE VARIABLE thbis AVEC MODALITES EN CLAIR
heran$thbis<-factor(heran$TH,labels=c("a.Habitat rural","b.Habitat Indiv Agglo","c.Immeubles sur rue","d.Cités, gds ensembles","e.Habitat mixte","f.Habitat ND"))


Un point particulièrement important dès qu'on manipule des données insee et même plus largement est de savoir transformer une variable numérique en variable caractère et vice-versa. Voici comment :

#TRANSFORMATION DE VARIABLE
#QUALI EN VARIABLE NUMERIQUE
heran$chatn<-as.numeric(as.character(heran$CHAT))

#TRANSFORMATION INVERSE
heran$chat_car<-as.character(as.numeric(heran$chatn))


LES COMMENTAIRES | COMMENTS

1 messages Ajouter un commentaire
Add a comment
Contacter le Webmestre
Contact the Webmaster

Joël  @  (2008-11-27 09:59:33)

N'ayant jamais travaillé avec SAS, je trouve intéressant de voir les habitudes de pensée prises avec certains logiciels... Pour ce qui concerne l'assignation ou le changement de noms de facteurs (au passage, un objet "factor" n'est pas seulement un objet texte - c'est vraiment un objet catégoriel, ce qui est bien pratique), il est sans doute encore plus pratique d'utiliser l'instruction levels : > levels(heran$CSEX) # attention à conserver l'ordre des facteurs ! D'ailleurs, ô magie, levels() marche même si initalement l'objet n'est pas de type facteur... Pour les clauses complexes, tu pourrais donner un exemple ? Je ne vois pas exactement où tu veux en venir. Mais pour ce qu'on m'en a dit, R (étant un langage orienté objet) est un langage dans lequel on utilise très peu les boucles etc. Un peu déroutant quand on a appris le Pascal, par exemple...


[Fin des messages]


Garder le fil (rss) des commentaires
Français | English

Actualités   

OgO: plus ici|more here

[Publications] Godechot (Olivier), Networks for economic sociology (and not the other way around), economic sociology_the european electronic newsletter: plus ici|more here

Tweets (rarely/rarement): @OlivierGodechot

[Webmestre]

[Fil rss]

[V. 0.93]

HOP

Système d'aide à la publication sur Internet


000

clics / mois.