28/04/2011
Accéder à une base de données avec
Raymond Baudoin
Muséum national d'Histoire naturelle
Département EGB
Inventaire et suivi de la biodiversité
Conservatoire botanique national du bassin parisien
Groupe Enquêtes,
Modèles et Applications
LES RENCONTRES DE STATISTIQUE APPLIQUÉE
Palette d'applications sous R
Jeudi 28 avril 2011
Institut Henri Poincaré • 11 rue Pierre et Marie Curie • 75231 Paris cedex 05
28/04/2011
read.table()
read.csv2()
write.table()
Le chargement des données est la phase incontournable pour l'utilisation des puissants outils
de traitements qu'offrent la majorité des librairies R. Mais bien souvent ces données sont
créées et gérées par une autre application, tableur MS Excel, logiciel de base de
données…
Le passage par un fichier intermédiaire issu d'une extraction qui est ensuite lu dans R est la
procédure classique :
Avoir des données dans
Serveur
de données
SGBD - Excel
fichier
.txt
.csv
Sélection
Export
copier - coller
L'opération est à refaire si les données sont modifiées ou si l'extraction n'est
pas satisfaisante
L'intégrité des données n’est plus respectée par l'existence du fichier
intermédiaire
import
28/04/2011
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 André 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 André 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
28/04/2011
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
Aussi : library (xlsReadWrite) pour lire et écrire au format .xls
library (gdata) : read.xls ()
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 André 9 rue Gay Lussac 92320 CHATILLON 146542856 1920-10-19
2 Larrouy Catherine 10 rue Gay Lussac 92320 CHATILLON 140920841 1999-01-01
28/04/2011
Le passage par un fichier intermédiaire peut être, dans bien des cas, évité par une connexion
directe à l'application gérant les données.
Pourquoi connecter une base de données avec
Les librairies utilisées:
pour la connexion à des bases de données : RODBC, SQLiteDF, RMySQL, RPostgreSQL, ROracle, DBI
pour accéder aux feuilles de classeurs MS-Excel : RODBC, xlsx
pour utiliser la commande SELECT sur des fichiers ou des data frames : sqldf
Sélection des données dans R
Intégrité des données respectée
odbcDriverConnect()
sqlFetch()
sqlQuery()
Interface de connexion
Serveur
de données
SGBD - Excel
Avec un serveur de données comme Oracle, Postgres, MySQL, MS-Access, respectant la norme SQL
(Structured Query Language - langage normalisé de contrôle et interrogation des bases de données
relationnelles), l'utilisation de la commande SELECT offre la possibilité de ne prendre en compte que
certaines variables (champs) et de sélectionner sur les contenus (valeurs) pour obtenir le tableau souhaité
(data.frame) et unique même dans le cas d'un schéma relationnel complexe (n tables).
SGBD : Système de gestion de base de données
?
1 / 28 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!