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 :

Cartographie (GGMAP) et ajout de données.


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Points : 4
    Points
    4
    Par défaut Cartographie (GGMAP) et ajout de données.
    Bonsoir,


    J'ai à ma disposition une assez conséquente base de données, liée, en bref, aux données océanographiques et dont voici un aperçu ci dessous.
    Nom : Screenshot_1.png
Affichages : 277
Taille : 51,5 Ko


    J'a besoin de représenter sur une carte satellite et grâce au package GGMAP, certaines de mes données. À savoir, le déplacement de 3 balises dans l'océan, prises si possible de façon aléatoire.
    Pour le moment, j'ai procédé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    library(ggmap)
    Mymap = get_map(location = 'San Francisco', zoom = 4, maptype = 'satellite')
    balises=subset(datau, datau$PLATFORM %in% c('4900588','2901115', '4900326'))
    G=data.frame(balises$LONGITUDE..degree_east., balises$LATITUDE..degree_north.)
    ggmap(Mymap) + geom_point(data=G,
                              aes(balises$LONGITUDE..degree_east.,balises$LATITUDE..degree_north.),
                              col=rgb(1-((min(balises$LATITUDE..degree_north.)-balises$LATITUDE..degree_north.))/(min(balises$LATITUDE..degree_north.)-max(balises$LATITUDE..degree_north.)), 0, ((min(balises$LATITUDE..degree_north.)-balises$LATITUDE..degree_north.))/(min(balises$LATITUDE..degree_north.)-max(balises$LATITUDE..degree_north.))))

    Voici le résultat obtenu :
    Nom : Rplot.png
Affichages : 293
Taille : 277,3 Ko



    Le code est bon et fonctionne, mais j'aurais aimé y apporter certaines modifications. Premièrement, les balises ont été choisies manuellement, ce qui n'était pas dans mes prévisions. J'ai essayé de remplacer le choix de mes balises par une simple formule "sample" mais ça n'est pas concluant. J'ai donc remplacé cette partie de code par celle du dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    balises=subset(datau, datau$PLATFORM %in% c('4900588','2901115', '4900326'))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    balises= datau[sample(1:nrow(datau), 3),]
    Mais le problème étant que 3 lignes uniquement sont tirées au sort. C'est-à-dire que je n'ai qu'une seule valeur pour chaque balise, là où il devrait y en avoir des centaines. Et la carte obtenue est la suivante :
    Nom : Rplot01.png
Affichages : 261
Taille : 276,9 Ko

    Ainsi, comment faire pour avoir toutes les lignes des balises tirées au sort ?
    ___________________________________________________________________________

    Et enfin, par rapport aux couleurs, je me suis démerdé pour écrire une formule me permettant d'avoir un changement de couleur, proportionnellement aux valeurs de la latitude. J'aurais aimé avoir ce même résultat, mais par balise, et selon leur déplacement.
    Simplement, je débute encore sur R et malgré pas mal d'essais, je n'y arrive vraiment pas. J'ai essayé de m'aider de la colonne "Date", mais le format n'est pas compatible et difficilement convertible.



    Merci à ceux qui prendront le temps de m'aider et n'hésitez pas à me reprendre ou à me demander des informations complémentaires, je peut être assez maladroit parfois dans ma façon de faire

  2. #2
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je n'ai pas accès à l'application R aujourd'hui, je n’en peux donc pas contrôler le code que je voudrais te donner.

    Mais pour t'aider, je peux tout de même te dire.

    Avec les fonctions levels et factor tu peux extraire une liste des différentes balises de ta Data-Frame.

    En faisant l'un ou l'autre des lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    levels(factor(datau$PLATFORM))
    factor(levels(datau$PLATFORM))
    Une fois que tu as la liste de préférence de tes balises, tu peux prendre une fonction runif avec comme premier paramètre le nombre de la balise que tu souhaites. La seconde 1 et le troisième la taillent de ta liste de balise que tu viens de constituer. Ainsi tu auras choisi une liste de balise que tu pourras réinjecter dans le code que tu as donné et qui fonctionne.

    Cordialement.

    PS: Dans le cas que je te donne peut être que la fonction sample marche aussi et que tu peux remplacer runif par elle.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Bonjour,


    J'avais déjà pu obtenir une liste des différentes balises avec une fonction unique et les résultats sont sensiblement différents. Le type de l'objet obtenu est un facteur, ce qui n'était pas le cas pour le mien et les données sont de type "character". À noter que ta seconde formule ne fonctionne pas.

    Là où j'ai maintenant du mal, c'est par rapport à la notion de "taille de ma liste de balises". Suffit-il d'un simple length ?
    Dans ce cas, et en respectant tes indications, j'obtiens le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    b1 <- levels(factor(datau$PLATFORM))
    balises <- runif(3,1,length(b1))
    Ce qui n'est évidemment pas ce que je recherche. Length(b1) étant ici égal à 147, je n'obtiens que 3 chiffres tirés aléatoirement entre 1 et 147. Peut être m'y suis-je mal pris ? :/

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Points : 888
    Points
    888
    Par défaut
    unique() et levels(factor()) c'est pratiquement la même chose. unique a un nom assez parlant, par exemple unique(c(1,1,2,3,4,4)) retournera c(1,2,3,4). levels quant à elle ne marche que sur les factors et renvoie les niveaux possibles (y compris ceux qu'il y a pas dans le vecteur). Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sexe=factor(c("H","H","F","F","H"))
    unique(sexe[1:2])#H dans un factor
    levels(sexe[1:2])#H et F dans un character
    levels(factor(sexe[1:2]))#H dans un character (factor "recréé" un nouveau set de niveaux)


    Pour tirer au hasard des éléments d'un vecteur sample qu'il faut utiliser, par défaut c'est un tirage sans remise donc c'est ce que tu veux (3 balises différentes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    balises = sample(unique(datau$PLATFORM),3)
    Ensuite il suffit de ne garder que les lignes correspondants aux balises sélectionnées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datau2 = subset(datau , PLATFORM %in% balises)
    ce qui est équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datau2 = datau[datau$PLATFORM %in% balises,]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Le code est parfait et fonctionne à présent correctement. Merci infiniment !

    Maintenant, le second problème, peut être un semblant plus complexe. J'aimerais que la représentation du déplacement de mes balises soit différente pour chacune d'elle pour ce qui est des couleurs. Qu'elles soient toutes d'une échelle de couleurs différentes ou pas, mais de façon à ce que l'on puisse faire la distinction entre les 3 facilement.
    J'ai déjà modifié un peu mon code de manière à ce que l'échelle de couleur soit en fonction de 3 autres facteurs plutôt que la latitude. À savoir :

    Pression : "PRES..decibar."
    Salinité : "PSAL..psu."
    Température : "TEMP..degree_Celsius."

Discussions similaires

  1. [AC-2010] modélisation cartographie entrepot et ajout données
    Par tibjedi dans le forum Access
    Réponses: 3
    Dernier message: 20/08/2012, 09h17
  2. ajout de données à partir d'un fichier texte
    Par drakenzara dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 14/04/2006, 12h39
  3. Réponses: 22
    Dernier message: 07/12/2005, 13h51
  4. ajouter des données dans une requête htttp en js
    Par jeromejanson dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2005, 15h34
  5. souci sur ajout de données de zone de liste
    Par Tierisa dans le forum IHM
    Réponses: 6
    Dernier message: 27/09/2005, 08h30

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