Interfaces utilisateur et rapports statistiques avec R et Sas
Introduction
Chapitre 1. Environnement de travail
Chapitre 2. Le langage R
Chapitre 3. Rapports statistiques
Chapitre 4. Interfaces utilisateur
Chapitre 5. Bases de données et langage Sql
5.1. Introduction
5.2. SQL et R
5.3. ODBC et R
5.4. Exercices
Annexe A : une applette Java
Annexe B : le logiciel Sas
Page d'accueil Table des matières Niveau supérieur Page précédente Bas de la page Page suivante Démarrage du logiciel Webographie du module Glossaire du module

5.2. SQL et R

Sql est le principal langage utilisé pour interroger ou modifier une base de données. Une connaissance minimale de ce langage est nécessaire pour extraire depuis R, par exemple via la librairie RODBC, des informations stockées dans une base de données.

Le langage Sql peut également être utilisé, via la librairie sqldf, pour manipuler des dataframes R.

# le jeu de données
etud = data.frame(nom=c("Jim","Eve","Max"),sexe=c("h","f","h"),
					age=c(21,19,NA))
library(sqldf)
# quelques requêtes
hommes = sqldf("select nom,age from etud where sexe='h'")
	# ou hommes = etud[etud$sexe=="h",c("nom","age")]
print(hommes)
sqldf("select * from etud where age is not null")
	# ou etud[!is.na(etud$age),]
sqldf("select * from etud where age is not null order by age")
	# on trie par age

Quelques statistiques élémentaires peuvent être calculées : moyenne (avg), somme (sum), minimum (min), comptage (count)...

# moyennes : age moyen, age moyen des hommes
sqldf("select avg(age) from etud")
sqldf("select avg(age) from etud where sexe='h'")
# comptage : nombre d'hommes, de personnes entre 18 et 20 ans
sqldf("select count(*) from etud where sexe='h'")
sqldf("select count(*) from etud where age>=18 and age<=20")
# statistiques par groupe (ici par sexe)
sqldf("select avg(age),sexe from etud group by sexe")
sqldf("select count(*),sexe from etud group by sexe")
sqldf("select count(*) as effectif,sexe from etud group by sexe")
	# on renomme la colonne 1 en effectif

Un intérêt majeur de Sql est de pouvoir effectuer des requêtes portant sur plusieurs tables. Pour illustrer ceci, nous introduisons un autre dataframe (notes).

notes = data.frame(nom=c("Jim","Max"),math=c(12,15))
# jointure INTERNE sur le nom
jointure = sqldf("select etud.nom,sexe,age,math 
	from etud INNER JOIN notes ON etud.nom=notes.nom")
print(jointure)
# jointure EXTERNE sur le nom
jointure = sqldf("select etud.nom,sexe,age,math 
	from etud LEFT OUTER JOIN notes ON etud.nom=notes.nom")
print(jointure)

Lorsqu'on affiche le résultat de la jointure interne des deux tables, l'étudiante Eve n'apparaît pas car elle n'a pas été notée. Si on souhaite que cela soit le cas, il faut faire une jointure externe.

Page d'accueil Table des matières Niveau supérieur Page précédente Haut de la page Page suivante Démarrage du logiciel Webographie du module Glossaire du module