Vous êtes sur la page 1sur 13

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/319209037

R et les bases de données relationnelles. Un couple gagnant pour l'analyse


statistique des grands volumes de données. R and relational Databases. A
winning couple for the statistic...

Article · August 2017

CITATIONS READS

0 3,782

1 author:

Diane Aubain
AS Consulting
11 PUBLICATIONS   1 CITATION   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Conception de site en santé View project

Analyse de données d'une base de données avec R View project

All content following this page was uploaded by Diane Aubain on 22 August 2017.

The user has requested enhancement of the downloaded file.


R et les bases de données relationnelles.
Un couple gagnant pour l’analyse statistique des grands
volumes de données.

R and relational Databases.


A winning couple for the statistical analysis of large volumes
of data.

DIANE Bédé Aubain ¹

¹Chercheur indépendant

Résumé

Traditionnellement réalisé avec des formulaires papiers, le recueil de données dans le


monde de la recherche se fait de plus en plus via internet et les bases de données.
Cependant, les utilisateurs continuent pour exploiter lesdites données de les extraire pour
les mettre au format TXT ou CSV. Notre article vise à montrer comment éviter cette étape
en accédant directement aux bases de données avec R pour gagner en qualité et en temps
dans le traitement des données et des grandes Bases de données.

Mots clés

Système de Gestion des Bases de Données ; R ; SQL ;

Abstract

Tradictionaly the collection of datas in the research world was realised by paper forms.
Nowadays, it’s more and more via internet and database it’s doing. But users continue to
transform data in txt or CSV file after extarcted them from these databases. Our article
shows how to avoid this step and acess directly in databases via R for analysing datas.

Keywords

Database Management System ; R ; SQL ;

1
1 Introduction
La recherche et/ou la conduite d’études dans la plupart des domaines scientifiques ont
toujours nécessité une collecte de données. Traditionnellement, cette collecte était réalisée
via des formulaires papiers. Avec l’apparition des bases de données et la démocratisation
de l’internet, plusieurs logiciels web ou mobiles de collecte de données ont été développés.
C’est l’exemple des logiciels « limesurvey » [1] et « Sphynx » [2] qui permettent de
réaliser des questionnaires et de les publier via le web en vue de recueillir des données. Les
données ainsi recueillies via ces applications web et mobiles sont stockées dans des bases
de données de tous genres (MySQL, oracle, SQL serveur, SQL lite, PostgreSQL, Access
…). Pour analyser ces données, dans la majorité des cas, les utilisateurs les transfèrent vers
des fichiers CSV ou txt (Figure 1, figure 2) avant de les charger dans les logiciels
d’analyse statistique entre autres R, python via NumPy, SAS, EPI Info, Weka, Tangara …
Le problème avec les fichiers est leur probable limite en quantité de données par rapport
aux bases de données.

Figure 1 : Etapes traditionnelles pour l’analyse de données provenant d’une base de


données [3]

Figure 2 : Exemple de fichier txt

Comme nous l’avons dit plus haut, dans la majorité des cas, les chercheurs ou autres
analystes transfèrent les données dans un fichier avant de les charger dans le logiciel de
statistique. Cette étape peut être sujette d’erreur et ainsi altérer l’intégrité des données. En

2
plus, chaque fois que les données sont modifiées ou que l’extraction n’est pas satisfaisante,
il faut reprendre l'opération.
Le présent article qui est le résultat d’un retour d’expérience a pour objet de montrer
comment s’affranchir de l’étape d’exportation des données vers les fichiers spécifiques
(plat, Excel ou autre) avant leurs utilisations dans R (Figure 3).

Figure 3 : Etapes proposées pour l’utilisation des données provenant d’une base de
données [3]

2 Matériel et méthodes

2.1 Matériels
Ce travail qui se veut « pratique » a nécessité l’utilisation des SGBDR MySQL et Access
et du logiciel R.

2.1.1 MySQL et Access

En plus d’être deux (2) Systèmes de Gestion des Bases de Données (SGBD) des plus
grands éditeurs dans ce domaine à savoir Oracle et Microsoft, ce sont aussi deux SGBD
très utilisés car figurant dans le top 10 des SGBDR les plus utilisés (Figure 4). Le SGBD
MySQL est libre et est le plus utilisé pour internet. Il est par défaut le SGBD choisi pour la
création des sites et applications Web. Access par contre est propriétaire et est l’un des
SGBD les plus utilisés au monde en mode monoposte. L’utilisation de ces deux SGBD
dans cet article permet de comprendre comment pratiquer R aussi bien avec un SGBD
propriétaire qu’un SGBD Open source.
Il est vrai que d’autres SGBD sont très utilisés et même plus utilisés que ceux que nous
avons choisis. Ces choix découlent aussi de notre expériences du couple R-Base de
données relationnelles.

3
Figure 4 : Evolution de la popularité des bases de données du point de vu utilisation
(source https://db-engines.com/en/ranking_trend)

2.1.2 Pourquoi R
R est un puissant logiciel et langage de programmation pour réaliser les analyses
statistiques [4]. Cet open-source permet aux utilisateurs d’écrire leurs propres scripts. Il
comporte plus de 11212 packages [5] et permet de quasiment tout faire en matière
statistique. C’est un logiciel très flexible qui accepte une importante source hétérogène de
données (figure 5). En plus, ces dernières années, R se présente comme l’outil statistique
qui a le plus connu de progression en thème d’utilisateur (Figure 6).

Figure 5 : Liste non exhaustive des sources de données reconnues par R [6]

4
Figure 6 : Nombre d’articles – en fonction des années référençant les six logiciels
standards de statistique - trouvé par Google Scholar [7]

2.1.3 Les packages R pour base de données relationnelles


L’accès aux bases de données à partir de R sous Windows se fait principalement de deux
manières. La première est l’utilisation du pilote Open DataBase Connectivity (ODBC).
La deuxième se fait via des packages spécifiques [8]. Ces packages sont de plusieurs types
(Tableau 1).
Ils sont utilisés pour accéder :
 aux bases de données,
 aux feuilles de classeurs MS-Excel,
 aux fichiers ou des data frames.
Ces packages sont aisément téléchargeables via le site du CRAN (http://cran-r.project.org).

Tableau 1 : Quelques packages R d’accès aux bases de données disponibles pour


Windows
Package Sources de données
RMySQL_0.10.11.zip MySQL
RPostgreSQL_0.1-6.zip PostgreSQL
RSQLite_0.8-2.zip SQLite
RODBC_1.3-15.zip Access, Excel, Oracle, SQL Lite, SQL Serveur...

RJDBC_0.2-5.zip Accès aux bases de données utilisant le pilote JDBC

sqldf Excel, plat, Data frame

5
2.2 Méthodes
2.2.1 Le package RODBC
Sous Windows, c’est un package quasi passe partout. Il est utilisé lorsque la base de
données dispose de pilote ODBC. C’est le cas pour la plupart des SGBDR. Les pilotes
ODBC peuvent être téléchargés depuis internet (tableau 2) et être installés. L’étape
suivante est de créer le Data Source Name (DSN) sous Windows [9]. Une fois le DSN
créé, les différentes fonctions (tableau 3) d’accès à une base de données via l’ODBC
peuvent être utilisées.
Tableau 2 : Récapitulatif de quelques pilotes ODBC et leurs liens de téléchargements
[10]

Fournisseur Base de données Liens des téléchargements


supportées
MySQL - MySQL https://dev.mysql.com/downloads/connector/odbc/

Oracle - Oracle http://www.oracle.com/technetwork/database/feat


ures/instant-client/index-097480.html

PostgreSQL - PostgreSQL https://www.postgresql.org/ftp/odbc/versions/

Microsoft - SQL Serveur https://www.microsoft.com/fr-


fr/download/details.aspx?id=36434

Devart - SQLite https://www.devart.com/odbc/sqlite/


DataDirect - Amazon RedShift https://www.progress.com/odbc
- Clipper
- DBase
- Foxpro
- IBM DB2
- IBM Informix
- SQL Server
- MySQL
- Oracle Database
- Pervasive SQL
(Btrieve)
- Pivotal
Greenplum
- Postgre SQL
- Progress
OpenEdge
- SAP HANA
- SAP Sybase
- SAP Sybase IQ
- Teradata

6
Tableau 3 : Quelques fonctions ODBC pour accès à la base de données [6]

Fonction Description
odbcConnect(dsn,uid= " " ,pwd= " ") Ouverture d’une connexion à la base de données
sqlFetch(channel,sqltable) Mettre les données d’une table dans un data
frame
sqlQuery(channel, requête) Exécution d’une requête dans la base de données
et récupération du résultat
sqlSave(channel,mydf, écriture ou mise à jour (append=TRUE) d’un
tablename=sqltable ,append=FALSE) data frame dans une table de la base de données
sqlDrop(channel,sqltable) Suppression d’une table de la base de données
close (channel) Fermeture de la connexion

2.2.2 Procédure générale d’utilisation des packages d’accès aux bases de données
De façon générale, certaines étapes doivent être réalisées pour réussir à utiliser les données
d’une base de données depuis R. Ce sont :
1- Télécharger le package de la base de données que l’on souhaite utiliser. Le
téléchargement peut se faire avec la commande
install.packages("Nom_du_package_à_utiliser")
2- Charger le package pour accéder à sa librairie
3- Ouvrir la connexion à la base de données
4- Exécuter la requête SQL souhaitée en mettant si nécessaire le résultat dans un jeu
de données
5- Fermer la connexion à la base de données
6- Utiliser le jeu de données pour faire les différentes analyses.

2.2.3 Réalisation de la base de données exemple


Pour la réalisation du présent l’article, nous avons téléchargé les fichiers
(http://sql.sh/ressources/france_rue_saint_nazaire/, http://sql.sh/ressources/sql-
departement-france/, http://sql.sh/ressources/sql-villes-france/). Nous avons ensuite créé
deux bases de données respectivement dans MySQL et Access 2010. Ensuite nous avons
importé les données des fichiers téléchargés (fichiers au format csv) dans nos différentes
bases de données.
La requête que nous allons utiliser pour accéder aux données est la suivante :

MaRequete<- "SELECT departement.departement_nom, count(villes_france_fre


e.ville_nom) as nombreVille FROM villes_france_free , departement Where
villes_france_free.ville_departement=departement.departement_code GROUP
BY departement.departement_nom order BY count(villes_france_free.ville_n
om) DESC;"

Cette requête permet de connaitre le nombre de villes par département rangé par ordre de
grandeur descendant.

7
3 Résultats

3.1 Accès à la base de données via ODBC : Exemple de Access

> #Installation des packages DBI et RODBC si cela n’a jamais été réalisé
> install.packages("DBI")
> install.packages("RODBC")
> #Chargement du package DBI. Package nécessaire pour utiliser RODBC
> library(DBI)
> #Chargement du package RODBC
> library(RODBC)
Warning message:
le package ‘RODBC’ a été compilé avec la version R 3.2.5
> #Création d’une connexion à la base de données infoville
> Accessdb<- odbcConnect("infoville")
> #Exécution de MaRequete et récupération du résultat dans MaDonne
> MaDonne<-sqlQuery(Accessdb, MaRequete)
> #Fermeture de la connexion
> close(Accessdb)
> #Affichage des données retournées après exécution de MaRequete
> MaDonne

Figure 7 : Exemple de données retournées

3.2 Utilisation de RJDBC et RMySQL pour l’accès aux bases de données


Comme nous l’avons montré avec RODBC, nous allons utiliser RMySQL et RJDBC pour
manipuler les bases de données MySQL. Pour accéder aux bases de données avec ces
package, il convient de respecter la même procédure que celle présentée avec RODBC.

3.2.1 Accès à la base de données via un pilote spécifique RJDBC : exemple avec
MySql

L’utilisation de RJDBC nécessite l’installation de java JDBC. Il faudra aussi installer le


pilote JDBC approprié pour la base de données que l’on souhaite utilisée. Une fois ces
installations réalisées, il est maintenant possible de procéder comme suit pour retourner les
données depuis la base de données supportant JDBC via R.

> #Installation des packages rJava et RJDBC


> #si cela n’a jamais été réalisé
> install.packages("rJava")
> install.packages("RJDBC")
> #Chargement du package rJava

8
> library(rJava)
> #Chargement du package RJDBC
> library(RJDBC)
> #Définition du type de pilote
> MyDriverName<-"com.mysql.jdbc.Driver"
> #Spécification du chemin où se trouve le pilote
> MyDriverPlace<-"C:/Program Files/NetBeans 8.0.2/ide/modules/ext/mysql-
connector-java-5.1.23-bin.jar"
> #Spécification de la chaine de connexion
> MyBaseUrl<-"jdbc:mysql://localhost:3306/infoville?zeroDateTimeBehavior
=convertToNull"
> #Chargement du pilote
> MyDriver<-JDBC(MyDriverName, MyDriverPlace, identifier.quote="`")
> #Ouverture de la connexion
> MyConnexion<-dbConnect(MyDriver,MyBaseUrl,"root")
> #Exécution de la requête et récupération du résultat
> MyData<-dbGetQuery(MyConnexion, MaRequete)
> #Fermeture de la connexion
> dbDisconnect(MyConnexion)
[1] TRUE
> #Affichage du jeu de données retourné par la requête
> MyData

Figure 8 : Exemple de données retournées

3.2.2 Accès à la base de données via un pilote spécifique RMySQL

> #Installation des packages DBI et RMySQL


> #si cela n’a jamais été réalisé
> install.packages("DBI")
> install.packages("RMySQL")
> #Chargement du package DBI
> library(DBI)
> #Chargement du package RMySQL
> library(RMySQL)
> #Ouverture de la connexion
> con <- dbConnect(MySQL(), user="root", password="", dbname="infoville"
, host="localhost")
> #Exécution de la requête et récupération du résultat
> rs <- dbSendQuery(con, MaRequete)
> #Affectation du résultat à un data frame
> data <- fetch(rs, n=-1)
> #Vérification que l’affectation est bien terminée
> dbHasCompleted(rs)
[1] TRUE

9
> #Libération de la mémoire occupée par résultat de la requête
> dbClearResult(rs)
[1] TRUE
> #Fermeture de connexion
> dbDisconnect(con)
> #Affichage du jeu de données récupéré
> data

Figure 9 : Exemple de données retournées

4 Discussion
Dans le présent travail, nous nous sommes limités à certaines bases de données dont nous
avons plus ou moins l’habitude d’utiliser. Il faut savoir que des packages pour les autres
bases de données dont nous n’avons pas fait mention ici existent. Cependant, deux des trois
packages utilisés dans cet article - à savoir RODBC et RJDBC - permettent d’interagir
avec la plupart des bases de données du marché via R. Pour ce faire, il est nécessaire de
connaitre un tant soit peu le langage SQL afin de manipuler avec aisance lesdits packages.
Ces packages permettent d’utiliser tous les types de requêtes SQL et même d’exécuter des
procédures stockées. Pourvu que le SGBD les supporte [11].
Certains éclaircircement sont toutefois à faire quant aux problèmes que l’on peut
rencontrer lors de l’utilisation du couple R-Base de données.
L’un des problèmes avec l’accès direct aux bases de données pour l’analyse statistique
avec R est le traitement fait de l’indicateur de non existence de valeur « NULL ». En effet,
comme le montre Joseph Adler [10], NULL n’est pas NA. Ainsi, la valeur NULL n’est
pas traité comme est traité la valeur NA [12] bien que ces deux valeurs signifient une « non
existence de valeur » respectivement pour les bases de données et R. la proposition que
l’on peut faire pour fixer ce problème est soit de retourner NA au lieu de NULL depuis la
conception de la requête (en utilisant par exemple la fonction IFNULL( expr1 , "NA")
avec MySQL) ou de remplacer NULL par NA dans le jeu de données constituées après
l’exécution de la requête.
Avec RMySQL, l’appel du driver sur notre machine a généré un problème réseau. Pour
résoudre ledit problème, nous avons modifié le fichier « Hosts » situé -dans notre cas- à
l’adresse C:\Windows\System32\drivers\etc\. La modification a consisté à dé-commenter

10
la ligne contenant l’information « 127.0.0.1 localhost » pour que la résolution du nom
« localhost » soit effective.
Une autre difficulté rencontrée était l’utilisation de RODBC sous Windows 64 bits. En
effet, notre expérience avec Access nous a montré que RODBC ne fonctionne pas avec R
64 bits. L’astuce a été pour nous d’installer R pour 64 bits et 32 bits sur la même machine.
Ainsi pour utiliser RODBC sur 64 bits, nous avons changé le type de plateforme en 32 bits
comme on peut le voir dans l’image (figure 10). Ainsi nous avons pu réaliser nos actions
avec RODBC.

Figure 10 : illustration du changement de version de R

5 Conclusion
Le langage SQL et R forment un bon couple pour éviter de charger en mémoire l’ensemble
des données même celle qui ne sont pas nécessaires. Ainsi, ce couple permet de manipuler
les grands volumes de données sans craindre le problème de mémoire que l’on pourrait
rencontrer avec R.

Remerciements
Au terme de la rédaction de cet article, je voudrais remercier toutes les personnes qui ont
corrigé ce papier, particulièrement le Dr ALLOUHEKE Miezan Michael.

11
Références
[1] Klieve H, Beamish W, Bryer F, Rebollo R, Perrett H, Muyzenberg VDJ. Accessing
practitioner expertise through on-line survey tool Limesurvey. Proceedings of the
6thBiennial International Conference on Technology Education Research,
Knowledge in technology education. 2010 ; 2 : 9-17. (Accessible à
https://goo.gl/82jWd4 ) « Date d’accès : 10/08/2017 ».
[2] Reynaud-Maurupt C1, Bello PY, Akoka S, Toufik A. Characteristics and behaviors
of ketamine users in France in 2003. J Psychoactive Drugs. 2007; 39(1):1-11.
(Accessible à https://goo.gl/9fHJDy) « Date d’accès : 10/08/2017 ».
[3] Baudoin R. Accéder à une base de données avec R. Journée Palettes R INED-SFdS-
MNHN, 28 Avril 2011. (Accessible à https://goo.gl/5hCRxG). « Date d’accès :
08/08/2017 ».
[4] Barnier J. Introduction à - R Project, 2013, pp 6-7 (Accessible à
https://goo.gl/5vbEfT). « Date d’accès : 10/08/2017 ».
[5] Contributed Packages, https://cran.r-project.org/. « Date d’accès : 10/08/2017 ».
[6] Kabacoff RI. In R in Action. Data analysis and graphics with R. Liz Welch ed.
Shelter Island : Manning Publications Co. 2011 ; pp 33-4, 40.
[7] Muenchen RA. The Popularity of Data Science Software.
http://r4stats.com/articles/popularity/.« Date d’accès : 11/08/2017 ».
[8] Jaynal Abedin. Kishor Kumar Das. In Data Manipulation with R. Packt Publishing
Ltd, BIRMINGHAM - MUMBAI, Report 81-2. 2015.
[9] Weber. How to get 32-bit ODBC drivers for MS Access 2007/2010 on a Windows 7
64-bit System. https://goo.gl/2UK5rn. « Date d’accès : 10/08/2017 ».
[10] Joseph Adler. In R IN A NUTSHELL. Sebastopol : O’Reilly Media, Inc. 2010; pp.54,
162–78.
[11] Paul Teetor. R Cookbook. March 2011,89-91 ; O’Reilly Media, Inc
[12] Cotton R. In Learning R. 2013; O’Reilly Media, Inc

Adresse de correspondance
DIANE BEDE AUBAIN,
ING., MD, MPH, MAGE.
obydissonn@gmail.com

12

View publication stats

Vous aimerez peut-être aussi