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 pour description environnement


Sujet :

R

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Cartographie pour description environnement
    Bonjour,

    Le but du script est de faire des catégories de lieux avec un maximum de vraisemblance suivant des critères climatiques et agronomiques.

    Une ACP sous FactoMinerR permet de faire ces classes (par exemple lieu 1 et lieu 2 seront dans la même classe 1, lieu 3,lieu 4 et lieu 5 ensemble dans la classe 2), j'ai en tout 4 classes de lieux. Pour chaque classe, j'en déduis les facteurs limitants (pour la classe 1 ce sera la température, et puis pour la classe 2ce sera la pluie et l'argile dans le sol). La dernière étape est de faire une carte avec des points placés sur les bonnes coordonnées GPS (le lieu 1 et lieu 2 dans la classe 1 auront le même rond de couleur bleue indiquant que mon facteur limitant est la température, le lieu 3,4,5 dans la classe 2 auront un rond vert et un rond jaune accolés afin d'en déduire les facteurs limitants pluie et argile). Pour la carto, j'ai utilisé ggplot2 et ggmap. Mon script fonctionne très bien mais j'aimerais le simplifier.

    Voici une partie du script :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    library(ggplot2)
    library(ggmap)
    ouest=get_map("Switzerland",zoom=5)
     
    ##Température
    Temp=x[1,] => colonne de mon tableau
    min_Temp=min(Temp)
    coord_Temp=which(Temp==min_Temp,arr.ind=TRUE)
    numero_classe=coord_Temp[[1]]
    numero_classe
    Temperature=subset(carto,classe==numero_classe)
    Temperature
     
     
    ##Pluie
    Pluie=x[2,]
    min_Pluie=min(Pluie)
    coord_Pluie=which(Pluie==min_Pluie,arr.ind=TRUE)
    numero_classe=coord_Pluie[[1]]
    numero_classe
    Pluie=subset(carto,classe==numero_classe)
    Pluie
    #Décalage ronds
    if (rownames(Temperature)==rownames(Pluie)) {
    long=Pluie[,8]+0.3
    } else {
    long=Pluie[,8] }
    Pluie[,8]=long
     
    ##Argile
    Argile=x[3,]
    min_Argile=min(Argile)
    coord_Argile=which(Argile==min_Argile,arr.ind=TRUE)
    numero_classe=coord_Argile[[1]]
    numero_classe
    Argile=subset(carto,classe==numero_classe)
    Argile
    #Décalage ronds
    if (rownames(Temperature)==rownames(Argile)) {
    long=Argile[,8]+0.3
    } else {
    long=Argile[,8] }
    Argile[,8]=long
     
    if (rownames(Pluie)==rownames(Argile)) {
    long=Argile[,8]+0.3
    } else {
    long=Argile[,8] }
    Argile[,8]=long
    J'aimerais ne pas prendre une variable une à une, mais avoir une ligne de commande qui me permettrait d'étudier toutes les variables en même temps (sachant que le nombre de variables peut être modifié à tout moment). J'ai essayé de paramétrer dès le départ un vecteur avec toutes mes variables mais sans grande réussite. La condition if me permet de décaler les ronds sur la carte pour ne pas qu'ils se superposent.

    Toute idée est bonne à prendre, j'espère avoir été claire dans mes explications, merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut
    Je ne sais pas si j'ai compris...

    Je suppose que ton tableau c'est un data frame.

    Moi je ferais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom_variable <- rownames(x)   # tu as la liste de toutes tes variables
    Puis comme ça tu peux faire une boucle for avec des x[i,] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i in 1:length(nom_variable))
    {
         ton code
    }
    Tu mets : Variable=x[i,] au lieu de Temp=x[1,] .

    J'espère avoir répondu à ta question.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci. C'est une proposition que j'avais déjà tentée mais je ne sais pas comment faire pour intégrer la condition if dans la boucle.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut
    Moi j'utiliserais des listes, pour avoir une liste de tableaux (comme ceci, on n'appellerait plus les tableaux par leurs noms de variables mais par des nombres gérés par i de la boucle).

    Faut revoir la syntaxe mais ça devrait ressembler à ça :

    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
    Code temp
    variable=list(x[1,])
     
    for(....
     
    variable[i]=list(x[i,])
    min_variable[i]=min(variable[i])
    coord_variable[i]=which(variable==min_variable[i],arr.ind=TRUE)
    numero_classe=coord_variable[i][[1]]
    numero_classe
    variable=subset(carto,classe==numero_classe)
    variable[i]
    #Décalage ronds
    if (rownames(Temperature)==rownames(variable[i])) {
    long=variable[i][,8]+0.3
    } else {
    long=variable[i][,8] }
    variable[i][,8]=long
    Quitte à faire commencer la boucle avec i=2 et en mettant les tempé en dehors de la boucle pour l'enregistrer en i=1.

    Au lieu de mettre Pluie[,8], je mettraiss Pluie$nomdelahuitièmecolonne.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta proposition et désolée de répondre aussi tard. J'ai essayé, c'est presque ça mais ton script ne s'applique que pour la pluie où le rond sera décalé par rapport à la température. Par contre, il ne s'applique pas pour l'argile où le rond doit être décalé de la température ET de la pluie. À chaque fois qu'il y a une nouvelle variable dans la boucle, elle doit être décalée de toutes les variables précédentes. Est-ce que je suis claire ou c'est confus ? Merci de ton aide en tout cas.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 59
    Points : 60
    Points
    60
    Par défaut
    Oui c'est assez clair, mais quand on n'a pas les données sous les yeux, c'est difficile de se les représenter.

    Les données sont-elles confidentielles ou/et est-ce qu'elles prennent beaucoup de mémoire ?

    Si c'est possible, poste une session R avec quelques données, si j'ai le temps je regarde....

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    les données d'entrée ou de sortie?

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    J'ai essayé l'idée que tu m'as proposée (merci), après quelques modifications, je suis arrivée à cette étape qui me pose un problème.
    Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    variable=NULL
    min_variable=NULL
    coord_variable=NULL
    numero_classe=NULL
    for (i in 1:nrow(x)){
    variable[i]=list(x[i,])
    min_variable[i]=sapply(variable[i],min)
    coord_variable[i]=which(variable[i][[1]]==min_variable[i],arr.ind=TRUE)
    numero_classe[i]=coord_variable[i][[1]]
    variable[i]=subset(carto,classe==numero_classe[i])
    }
    J'ai le message d'avis suivant qui ne me propose pas toutes les colonnes du subset dans le fichier carto :
    Messages d'avis :
    1: In variable[i] = subset(carto, classe == numero_classe[i]) :
    le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement
    Sais-tu comment contourner ce problème ? Merci

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Pour les curieux, voici la solution que j'ai trouvée suite à mon problème :
    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
    21
    22
    23
    24
    variable=NULL
    min_variable=NULL
    coord_variable=NULL
    numero_classe=NULL
    for (i in 1:nrow(x)){
    variable[i]=list(x[i,])
    min_variable[i]=sapply(variable[i],min)
    coord_variable[i]=which(variable[i][[1]]==min_variable[i],arr.ind=TRUE)
    numero_classe[i]=coord_variable[i][[1]]
    variable[i]=list(subset(carto,classe==numero_classe[i]))
    }
     
    for(i in 2:nrow(x)){
    for(j in 1:(i-1)){
    if (rownames(variable[[i]])==rownames(variable[[j]])){
    long=variable[[i]]$long+0.3
    }
    else
    {
    long=variable[[i]]$long
    }
    variable[[i]]$long=long
    }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Définir un raccourci pour un environnement
    Par v0nv0n dans le forum Débuter
    Réponses: 5
    Dernier message: 14/01/2009, 16h09
  2. [C#] Programme pour l'environnement
    Par padodanle51 dans le forum C#
    Réponses: 5
    Dernier message: 23/10/2007, 20h26
  3. Réponses: 2
    Dernier message: 11/10/2007, 14h18
  4. VBA-E aide pour description
    Par letoulouzin31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 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