24/04/2012
23 avril 2012
Utiliser une base de données relationnelle sous R
Initiation au langage SQL
Raymond Baudoin
Conservatoire botanique national du Bassin parisien
Département EGB
Ecole doctorale 227
Sciences de la Nature et de l’Homme
Module
R : APPLICATIONS
24/04/2012
Utiliser SQL pour manipuler des données sous
Quand on veut filtrer les données à traiter car :
Elles sont trop nombreuses
Qu’une partie seulement nous intéresse
Elles sont éclatées dans plusieurs entités (fichiers)
C’est-à-dire chaque fois qu’un read.table() n’est pas totalement satisfaisant *
Pour un utilisateur de R
Pour un utilisateur SQL :
Quand on souhaite y appliquer des fonctions de R
(*) permet cependant la restriction du nombre de lignes lues
Librairies utilisées :
pour la connexion aux bases de données : RODBC, RSQLite, RMySQL, RPostgreSQL, ROracle, DBI
pour accéder aux données des :
fichiers txt, .csv : sqldf
fichiers Excel : RODBC, xlsReadWrite, xlsx
bases de données : RODBC, RSQLite, RMySQL, RPostgreSQL, ROracle, DBI
pour manipuler des data frames : sqldf
24/04/2012
Fonctions de base pour lire un fichier texte
Si le fichier est sous la forme d'un tableau statistique :
read.table (file = fich , # Nom complet du fichier ou "clipboard" pour le presse papier (copier/coller)
sep = ";" , # Séparateur des valeurs, \t pour tabulation, \n : pas de séparateur
dec = "," , # Symbole décimal
header = FALSE ,
stringsAsFactors = TRUE , # Conversion des chaines en facteur
row.names = 1, # colonne utilisée comme identifiant des lignes
skip = 1, nrow = 3 ) # Restriction de lecture, ici saut de la première ligne et 3 lignes lues
Si le fichier est sous une autre forme :
scan (file = fich , sep=";", what = "character", skip = 1, nlines = 3)
> scan (file = "Habitants.csv", sep=";", what = "character",skip=1, nlines=2)
Read 18 item
[1] "1" "Lecesve" "André" "9" "rue Gay Lussac" "92320" "CHATILLON"
[8] "146542856" "19/10/1920" "2" "Larrouy" "Catherine" "10" "rue Gay Lussac"
[15] "92320" "CHATILLON" "140920841" "01/01/1999"
readLines (con = fich, n = 3)
> readLines (con = "Habitants.csv", n=2)
[1] "pk;Nom;Prénom;numéro;voie;Code;Ville;Téléphone;Depuis"
[2] "1;Lecesve;André;9;rue Gay Lussac;92320;CHATILLON;146542856;19/10/1920
> read.table (file = "Habitants.csv", sep=";", header=FALSE, nrow=2)
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 pk Nom Prénom numéro voie Code Ville Téléphone Depuis
2 1 Lecesve André 9 rue Gay Lussac 92320 CHATILLON 146542856 19/10/1920
> read.csv2 (file = "Habitants.csv", row.names=1, nrow=2)
Nom Prénom numéro voie Code Ville Téléphone Depuis
1 Lecesve And 9 rue Gay Lussac 92320 CHATILLON 146542856 19/10/1920
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 01/01/1999
> read.delim2 ("clipboard", row.names=1, nrow=2)
Nom Prénom numéro voie Code Ville Téléphone Depuis
1 Lecesve And 9 rue Gay Lussac 92320 CHATILLON 146542856 19/10/1920
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 01/01/1999
Copier/Coller
d'une feuille Excel
24/04/2012
read.xlsx (
file, # nom du fichier
sheetIndex=, # numéro de la feuille
sheetName=NULL, # ou son nom
as.data.frame=TRUE,
header=TRUE,
colClasses=NA, # numeric, integer, logical, character, Date
rowIndex=NULL,
colIndex=NULL,
keepFormulas=FALSE,
encoding="unknown",
...)
Fonctions pour lire une feuille MS-Excel
au format .xls (Excel 97/2000/XP/2003) ou .xlsx (Excel 2007)
R 2.12.2
read.xlsx2 (
file, # nom du fichier
sheetIndex=, # numéro de la feuille
sheetName=NULL, # ou son nom
as.data.frame=TRUE,
header=TRUE,
colClasses="character", # ou "numeric"
startRow=1,
startColumn=1,
noRows=NULL, # nombre de lignes à lire
noColumns=NULL)
library (xlsx)
read.xlsx ("OCCSOL_1000.xlsx", sheetIndex=1, rowIndex=c(1:4,rep(0,135-4)) )
NA. BB BH BI BM BT O TR VB VG VH VM
1 0 0.0787 25.2158 30.0836 15.3149 1.1547 0.0465 6.5254 5.4042 3.2627 5.0906 7.8229
2 1 0.2431 22.2879 27.8258 22.7205 1.1578 0.0000 5.9316 5.1204 2.8737 3.8698 7.9693
3 2 0.1411 16.7779 23.4831 8.4136 0.7781 18.2162 7.0589 6.9271 2.5255 6.9970 8.6815
read.xlsx2 ("OCCSOL_1000.xlsx", sheetIndex=1, colClasses="numeric", startRow=1, noRows=3)
c.0..1. BB BH BI BM BT O TR VB VG VH VM
1 0 0.0787 25.2158 30.0836 15.3149 1.1547 0.0465 6.5254 5.4042 3.2627 5.0906 7.8229
2 1 0.2431 22.2879 27.8258 22.7205 1.1578 0.0000 5.9316 5.1204 2.8737 3.8698 7.9693
read.xlsx ("Habitants.xls", sheetIndex=1, rowIndex=c(1:3,rep(0,14-3)), encoding="UTF-8", stringsAsFactors=FALSE)
Nom Prénom numéro Adresse Code Ville Téléphone Depuis
1 Lecesve And 9 rue Gay Lussac 92320 CHATILLON 146542856 1920-10-19
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 1999-01-01
24/04/2012
read.xls( file,
colNames = TRUE,
sheet = 1,
colClasses = NA, # numeric, integer, logical, character, isodate, isotime, isodatetime…
stringsAsFactors = TRUE… )
Pour enregistrer un data.frame au format MS-Excel :
write.xls(datal, file="localisation.xls", rowNames = TRUE)
Fonctions pour lire une feuille MS-Excel au format .xls
library (xlsReadWrite)
fich <- file.choose() # chemin complet
# [1] "C:\\Mes documents sauvegardés\\Enseignement\\Ecole doctorale mnhn\\Module R compl\\Habitants.xls"
Encoding (fich) # "UTF-8"
fich <- iconv (fich , from = Encoding (fich), to = "latin1") # changement de code page
read.xls (file = fich, sheet = 1, stringsAsFactors = FALSE)
Nom Prénom numéro Adresse Code Ville Téléphone Depuis
1 Lecesve André 9 rue Gay Lussac 92320 CHATILLON 146542856 7598
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 36161
3 Larrouy Eric 10 rue Gay Lussac 92320 CHATILLON 140920841 36161
read.xls (file=fich, sheet=1, stringsAsFactors=FALSE, dateTime="isodatetime")
Nom Prénom numéro Adresse Code Ville Téléphone Depuis
1 Lecesve André 9 rue Gay Lussac 92320 CHATILLON 146542856 1920-10-19
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 1999-01-01
3 Larrouy Eric 10 rue Gay Lussac 92320 CHATILLON 140920841 1999-01-01
1 / 78 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !