IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Exportation vers une base SQL, gestion des données manquantes


Sujet :

R

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 33
    Points
    33
    Par défaut Exportation vers une base SQL, gestion des données manquantes
    Bonjour,

    Je débute sous R, je souhaite exporter un dataframe dans une base SQL, mais ce dataframe comporte un certain nombre de valeurs manquantes, référencées comme NA sous R.
    J'utilise une base PostgreSQL et donc l'interface Rpgsql. J'utilise la méthode dbWriteTable(), le problème se situe alors sur le traitement des champs NA, j'aurai aimé que ces champs soient indiqués comme NULL dans la base, mais il en est autrement, la méthode doit essayer d'écrire "NA" dans la base et affiche donc des données incohérentes.

    J'ai regardé dans le manuel de la fonction, je n'ai rien trouvé à ce sujet, ni sur le manuel de Rpgsql et de DBI, je suis un peu étonné, la question du traitement de données manquantes devant revenir souvent je suppose.

    Avez-vous une idée de comment faire passer tous ces champs NA à NULL pendant l'export vers la BDD ?

    Merci.

  2. #2
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Bonjour,

    Personnellement j'utilise plutôt les pilotes odbc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    > library(RODBC)
    ...
     
    > con <- odbcConnect("PGtestU")
     
    > d <- data.frame(a=1:10, b=c(1, NA, 3:1, NA, 2:5))
    > d
        a  b
    1   1  1
    2   2 NA
    3   3  3
    4   4  2
    5   5  1
    6   6 NA
    7   7  2
    8   8  3
    9   9  4
    10 10  5
     
    > sqlSave(con, d, tablename="table_test", rownames=FALSE)
    Par défaut, l'option nastring=NULL mais peut être changée si besoin.

    Il faut pour ça commencer par installer et configurer un pilote odbc pour ta base de données ("PGtestU" chez moi).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci de ta réponse.

    Passer par de l'ODBC me conviendrait aussi bien.

    J'ai donc voulu installé les drivers ODBC pour PostGreSQL (psqlODBC) en passant par l'Application Stack Builder distribué avec pgAdmin. L'installation se passe sans problème mais ensuite les drivers n'apparaissent pas dans le gestionnaire ODBC de Windows... Je ne peux donc configurer de DSN

    Je suis allé sur le site direct de téléchargement (http://www.postgresql.org/ftp/odbc/) mais évidemment je retrouve le même installateur...
    J'ai regardé sur plusieurs forum, j'ai retrouvé cette question mais pas la réponse...

    As-tu déjà rencontré ce problème ?

    Merci

  4. #4
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Citation Envoyé par kilbragh Voir le message
    As-tu déjà rencontré ce problème ?
    J'ai dû... mais ça fait un bon bout de temps que je ne suis plus sous Windows.

    Je vais voir si je retrouve quelque chose.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    Merci c'est gentil !

    Oui faudrait que je passe pour de bon à Linux un jour, ça résoudrait quelques problèmes, mais bon en entreprise c'est assez standard Windows ^^ et le dual boot : pas pratique faut redémarrer, les machines virtuelles : trop lent si on veut faire des gros traitements BDD, va peut-être falloir envisager l'achat d'un deuxième PC

    En tout cas merci !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    En fait j'ai trouvé un semblant de réponse.

    Je suis sous Seven x64, mais PostgreSQL n'est disponible qu'en version 32bit, et naturellement il en est de même pour les drivers ODBC.

    J'ai tout de même trouvé une version x64 des drivers odbc, http://archives.postgresql.org/pgsql...8/msg00013.php, et là après l'installation les drivers apparaissent bien dans le gestionnaire ODBC de Windows, il est aussi possible de configurer un DSN et la connection se fait bien.

    Cependant dans R établir une connexion génère une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    > con <- odbcConnect("PostgreSQL35W")
    Messages d'avis :
    1: In odbcDriverConnect("DSN=PostgreSQL35W") :
      [RODBC] ERROR: state IM014, code 0, message [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application
    2: In odbcDriverConnect("DSN=PostgreSQL35W") : ODBC connection failed
    2 possibles raisons à cela :
    1) J'ai PostgreSQL 8.4, les drivers sont pour la version 8.3.4.0
    2) Une version x64 de PostgreSQL est nécessaire

    Je vais donc installer une version 8.3 demain (il n'y a que la 8.3.5 et 8.3.6 sur le ftp de PostgreSQL) et tester de nouveau

    A suivre ...

  7. #7
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Effectivement, ça à l'air d'un problème d'architecture. Pour ça je ne vais pas pouvoir t'aider, je ne l'ai configuré sous Windows qu'en 32 bits.

    Ceci dit, si ça peut te consoler, sous Linux 64 bits, c'est pas des plus simples non plus : j'ai dû localiser à la main les pilotes (en .so)... par contre ils sont disponibles sans problèmes en 64 bits.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    En effet, j'ai essayé avec la version 8.3.10 de PostgreSQL, même erreur, du coup le problème viens plutôt des différences d'architectures, comme le suggère l'erreur...

    Je vais regarder du côté des autres SGBD.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/05/2011, 16h23
  2. fusionner les données d'un export vers une base
    Par mamiberkof dans le forum Import/Export
    Réponses: 0
    Dernier message: 12/03/2010, 11h04
  3. Exporter vers une base de données AS400
    Par niko73 dans le forum Visio
    Réponses: 0
    Dernier message: 22/11/2007, 15h11
  4. Réponses: 10
    Dernier message: 05/03/2007, 13h40
  5. Migrer un fichier excel vers une base sql serveur
    Par vdavid1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/07/2005, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo