Première réunion 8/2/2012 : bases de données SQLite et cartographie

Bonjour à vous,

Au programme de cette première réunion, deux présentations très enthousiasmantes:

  1. "R et bases de données SQLite" par Benoit Rouppert, Insee. Ou comment faire des stats sous R sur des données dont le volume dépasse la RAM ?
  2. Cliquer sur le lien pour voir le code et les commentaires.

    ##...........................................................................
    ## 1. Créer une base de données SQLite et la remplir à partir d'un dataframe
    ##...........................................................................
    
    library(RSQLite)
    drv <- dbDriver("SQLite")
    
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")   # cette instruction crée une base vide si le nom donné
                                                                # ne désigne aucun fichier existant
    
    table1 <- data.frame(x=1:10,y=-1:-10)
    dbWriteTable(connect, "TABLE1", table1)                     # le data.frame table1 est enregistré sous la forme
                                                                # d'une table de nom "TABLE1"
    
    dbDisconnect(connect)                                       # il est important de libérer la base de données à la
                                                                # fin du traitement sinon l'OS garde le verrou sur le fichier
    
    # POUR INFO : on peut trouver un éditeur opensource de bases de données SQLITE
    #             à l'adresse suivante     http://sqlitebrowser.sourceforge.net/
    
    
    ##........................................................................
    ## 2. Lire une table dans une base SQLite et la charger dans un dataframe
    ##........................................................................
    
    library(RSQLite)
    drv <- dbDriver("SQLite")
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")   
    
    table1<-dbReadTable(connect, "TABLE1")
    
    dbDisconnect(connect)
    
    ##........................................................................
    ## 3.1. Créer une table dans une base SQLite à partir d'un fichier CSV de petite taille
    ##........................................................................
    
    # ATTENTION : SQLITE_MAX_VARIABLE_NUMBER in the sqlite source (in RSQLite) is currently set to 999
    
    library(RSQLite)
    drv <- dbDriver("SQLite")
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")   
    
    datatrim<-read.csv("exemples_bdd_datatrim.csv",sep=";")
    dbWriteTable(connect, "DATATRIM", datatrim[,1:998],overwrite=TRUE)    #on limite à 998 variables pour respecter la limite ci-dessus
                                                                          #attention, on écrase la table s'il elle existe déjà
    dbDisconnect(connect)
    
    
    
    ##........................................................................
    ## 3.2. Créer une table dans une base SQLite à partir d'un fichier CSV de grande taille, 1ère méthode
    ##........................................................................
    
    # Le principe est de charger le fichier source petit bout par petit bout et
    # d'insérer les dataframes ainsi obtenus dans la base de données. Principal
    # défaut : on ne contrôle pas bien le type des données des variables.
    
    library(RSQLite)
    drv <- dbDriver("SQLite")
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")                #Base de données dans laquelle on chargera les données
    
    fichier <- file("exemples_bdd_datatrim.csv",open="rt")                   #fichier des données sources
    nomsColonnes <- strsplit(readLines(con = fichier, n = 1),";",fixed=TRUE) #on récupère les noms de colonnes
    
    nlignes <- 100                                                           #taille des ensembles de lignes insérées en une fois
    
    table <- read.table(fichier,sep=";",nrows=nlignes,skip=0,header=FALSE,col.names=nomsColonnes[[1]])
    dbWriteTable(connect, "DATATRIM", table[,1:998],overwrite=TRUE)
    while(dim(table)[1]>0) {
        table <- read.table(fichier,sep=";",nrows=nlignes,skip=0,header=FALSE,col.names=nomsColonnes[[1]])
        if(dim(table)[1]>0) dbWriteTable(connect, "DATATRIM", table[,1:998],append=TRUE)
    }
    
    close(fichier)
    
    dbDisconnect(connect)
    
    
    ##........................................................................
    ## 3.3. Créer une table dans une base SQLite à partir d'un fichier CSV de grande taille, 2e méthode
    ##........................................................................
    
    # Le principe est de créer la table dans la base de données grâce à une requête SQL afin
    # de mieux contrôler le format des variables de la table, puis de procéder comme en 3.2
    
    
    ##........................................................................
    ## 4. Exécuter une requête SQL pour extraire un jeu restreint de données
    ##........................................................................
    
    library(RSQLite)
    drv <- dbDriver("SQLite")
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")
    
    data <- dbGetQuery(connect, "select dates, cpib_pr, facfr_m2 from DATATRIM")
    
    dbDisconnect(connect)
    
    
    ##........................................................................
    ## 5. Estimer un modèle directement sur la base de données
    ##........................................................................
    
    library(RSQLite)
    library(biglm)                                                                        # Attention : un seul "g" ici
    drv <- dbDriver("SQLite")
    connect <- dbConnect(drv, dbname = "exemples_bdd.sqlite")
    
    reg<-bigglm(cpib_pr~1+facind_m3+facser_m3+facbat_m3,connect,tablename="DATATRIM")     # Attention : deux "gg" ici
    summary(reg)
    
    dbDisconnect(connect)
    
    # REMARQUE : il semble qu'on ne peut pas utiliser les fonctions comme lag, diff, ...
    
  3. "Première approche de cartographie sous R" par Eric Durieux, Insee. Ou comment faire de très jolies et pertinentes cartes avec R, les données Insee et Google ?

 

About these ads

Une réflexion sur “Première réunion 8/2/2012 : bases de données SQLite et cartographie

  1. Ping : Next R meeting in Paris INSEE: ggplot2 and parallel computing « Statisfaction

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s