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 au sujet de « 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