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 :

Boucle sous R


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Août 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Boucle sous R
    Bonjour,

    je souhaite faire tourner un code R plusieurs fois en utilisant plusieurs fichiers. Je m'explique :

    J'ai un code qui me génère un nuage de point et je souhaite créer un process pour le faire automatiquement sur plusieurs fichiers.

    J'ai fichier1, fichier2 dans un dossier, et je souhaite faire une boucle qui va chercher les fichiers 1 >>> exécuter le code et donne sortie1 >>> reprendre fichier 2 >>> exécuter le code et donne sortie2.

    je pense que je dois avoir un fichier avec

    indice nom_fichier
    1 fichier_1
    2 fichier_2

    le code viendrait lire le tableau ligne par ligne pour exécuter le code pour un indice n et un fichier_n. puis génèrera une sortie indicé sortie_n.
    n est le maximum de la colonne indice...je ne trouve pas de fonction pour determiner le maximum d'une colonne dans une table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
     
    for (i in 1:n){
     
     ## tâche à répéter n fois pour i variant de 1 à n
     
    }
    j'espère que je m'explique bien,

    Merci d'avance pour vos réponses,

  2. #2
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    Peux-tu partager le code qui fait le nuage de point pour un fichier ?

    Merci.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Août 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par marou1991 Voir le message
    Bonjour,

    Peux-tu partager le code qui fait le nuage de point pour un fichier ?

    Merci.
    Oui bien sûr, je suis sur R markdown

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    ---
    title: "sortie_n"
    output: html_document
    ---
     
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(warning = FALSE, message = FALSE)
    ```
     
     
     
    ```{r,echo=FALSE}
     
    #lire le fichier boucle
     
    donnees <- read_excel("boucle.xlsx")
     
    #initialisation de la boucle soit max indice ou bien compter le nombre de ligne du fichier boucle
     
    #debut de la boucle____________________________________________________________
     
    #Importer_fichier
     
    filePath <- "fichier_n.txt"
    text <- readLines(filePath)
     
    # Charger les données comme un corpus
     
    docs <- Corpus(VectorSource(text))
     
    #La transformation du texte
     
    todoubleSpace <- content_transformer(function (x , pattern ) gsub(pattern, "   ", x))
    docs <- tm_map(docs, todoubleSpace, " " )
     
    # Convertir le texte en minuscule
     
    docs <- tm_map(docs, content_transformer(tolower))
     
    #enlever les caractères spéciaux
     
    toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
    docs <- tm_map(docs, toSpace, "/")
    docs <- tm_map(docs, toSpace, "@")
    docs <- tm_map(docs, toSpace, "-" )
    docs <- tm_map(docs, toSpace, "," )
    docs <- tm_map(docs, toSpace, ";" )
    docs <- tm_map(docs, toSpace, ":" )
    docs <- tm_map(docs, toSpace, "'" )
     
    #enlever les accents
     
    accent <- content_transformer(function (x , pattern ) gsub(pattern, "e", x))
    docs <- tm_map(docs, accent, "é")
    docs <- tm_map(docs, accent, "è")
    docs <- tm_map(docs, accent, "ê")
    accent1 <- content_transformer(function (x , pattern ) gsub(pattern, "o", x))
    docs <- tm_map(docs, accent1, "ô")
    accent2 <- content_transformer(function (x , pattern ) gsub(pattern, "a", x))
    docs <- tm_map(docs, accent2, "â")
    accent2 <- content_transformer(function (x , pattern ) gsub(pattern, "a", x))
    docs <- tm_map(docs, accent2, "à")
    accent3 <- content_transformer(function (x , pattern ) gsub(pattern, "c", x))
    docs <- tm_map(docs, accent2, "ç")
    accent3 <- content_transformer(function (x , pattern ) gsub(pattern, "i", x))
    docs <- tm_map(docs, accent2, "î")
     
    # Supprimer les nombres
    docs <- tm_map(docs, removeNumbers)
    # Supprimer les ponctuations
    docs <- tm_map(docs, removePunctuation)
     
    ```
     
     
     
    ```{r,echo=FALSE,results='hide'}
     
    #Construire la matrice des mots
     
    dtm <- TermDocumentMatrix(docs)
    m <- as.matrix(dtm)
    v <- sort(rowSums(m),decreasing=TRUE)
    d <- data.frame(word = names(v),freq=v,row.names = NULL)
     
    # Supprimer votre propre liste de mots non désirés
     
    filePath <- "listedemots.txt"
    motsasupr <- readLines(filePath)
    motsasupr1 <- Corpus(VectorSource(motsasupr))
    dtm1 <- TermDocumentMatrix(motsasupr1)
    m1 <- as.matrix(dtm1)
    v1 <- sort(rowSums(m1),decreasing=TRUE)
    d1 <- data.frame(word = names(v1),freq=v1,row.names = NULL)
     
    #supprimer les mots 
    d1$temp <- 1
    nuage <- merge(d, d1, by=c("word"), all.x=TRUE)
    nuage <- nuage[is.na(nuage$temp), ]
     
    ```
     
     
     
    ```{r,echo=FALSE}
     
    #Générer le nuage de mots
     
    set.seed(1234)
    wordcloud(words = nuage$word, freq = d$freq, min.freq = 1,
            max.words=50, random.order=FALSE, rot.per=0.10, 
              colors=brewer.pal(10,"RdBu"))
     
    ```
    #fin de la boucle__________________________________________________________________________________________________

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Si ton problème est de générer le nom du fichier à ouvrir, la solution est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for( i in 1:n) {
       nom.fichier <- paste( "fichier", i, sep="_")
       ...
    }

  5. #5
    Membre à l'essai
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Août 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup ça m'a bien débloqué

    du coup mon programme est devenu le suivant :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    #lire le fichier boucle
    library("readxl")
    donnees <- read_excel("boucle.xlsx")
     
    #initialisation de la boucle 
     
    n<-nrow(donnees)
    #lire le nom du fichier
     
    for( i in 1:n) {
      library("stringr")
      library("tm")
      library("SnowballC")
      library("wordcloud")
       library("RColorBrewer")
       library("NLP")
       library("tm")
     
     
       nom <- paste( "fichier", i,sep="_")
       type_fichier <- paste( ".txt")
       fichier<-paste(nom,type_fichier,sep="")
       filePath <- fichier
       text <- readLines(filePath)
       docs <- Corpus(VectorSource(text))
     
       #La transformation du texte
     
    todoubleSpace <- content_transformer(function (x , pattern ) gsub(pattern, "   ", x))
    docs <- tm_map(docs, todoubleSpace, " " )
    # Convertir le texte en minuscule
    docs <- tm_map(docs, content_transformer(tolower))
     
    docs <- tm_map(docs, removeWords, c())
     
    toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
    docs <- tm_map(docs, toSpace, "/")
    docs <- tm_map(docs, toSpace, "@")
    docs <- tm_map(docs, toSpace, "-" )
    docs <- tm_map(docs, toSpace, "," )
    docs <- tm_map(docs, toSpace, ";" )
    docs <- tm_map(docs, toSpace, ":" )
    docs <- tm_map(docs, toSpace, "'" )
     
    accent <- content_transformer(function (x , pattern ) gsub(pattern, "e", x))
    docs <- tm_map(docs, accent, "é")
    docs <- tm_map(docs, accent, "è")
    docs <- tm_map(docs, accent, "ê")
    accent1 <- content_transformer(function (x , pattern ) gsub(pattern, "o", x))
    docs <- tm_map(docs, accent1, "ô")
    accent2 <- content_transformer(function (x , pattern ) gsub(pattern, "a", x))
    docs <- tm_map(docs, accent2, "â")
    accent2 <- content_transformer(function (x , pattern ) gsub(pattern, "a", x))
    docs <- tm_map(docs, accent2, "à")
    accent3 <- content_transformer(function (x , pattern ) gsub(pattern, "c", x))
    docs <- tm_map(docs, accent2, "ç")
    accent3 <- content_transformer(function (x , pattern ) gsub(pattern, "i", x))
    docs <- tm_map(docs, accent2, "î")
     
    # Convertir le texte en minuscule
    docs <- tm_map(docs, content_transformer(tolower))
    # Supprimer les nombres
    docs <- tm_map(docs, removeNumbers)
    # Supprimer les ponctuations
    docs <- tm_map(docs, removePunctuation)
       #dataframe
       dtm <- TermDocumentMatrix(docs)
       m <- as.matrix(dtm)
       v <- sort(rowSums(m),decreasing=TRUE)
       d <- data.frame(word = names(v),freq=v,row.names = NULL)
     
       filePath <- "listedemots.txt"
       motsasupr <- readLines(filePath)
       motsasupr1 <- Corpus(VectorSource(motsasupr))
       dtm1 <- TermDocumentMatrix(motsasupr1)
       m1 <- as.matrix(dtm1)
       v1 <- sort(rowSums(m1),decreasing=TRUE)
       d1 <- data.frame(word = names(v1),freq=v1,row.names = NULL)
     
       #supprimer les mots 
      d1$temp <- 1
      nuage <- merge(d, d1, by=c("word"), all.x=TRUE)
      nuage <- nuage[is.na(nuage$temp), ]
     
           nom1 <- paste( "sortie", i,sep="_")
                  type_fichier1 <- paste( ".csv")
                  sortie<-paste(nom1,type_fichier1,sep="")
     
                  write.table(nuage, file = sortie, append = FALSE, quote = TRUE, sep = " ",
                  eol = "\n", na = "NA", dec = ".", row.names = TRUE,
                  col.names = TRUE, qmethod = c("escape", "double"),
                  fileEncoding = "")
     
     
     
     
     #Générer le nuage de mots
    #library("wordcloud")
     #set.seed(1234)
     #wordcloud(words = nuage$word, freq = d$freq, min.freq = 1,
     #max.words=50, random.order=FALSE, rot.per=0.10, 
      #colors=brewer.pal(10,"RdBu"))
     
    }
    Ce que je cherche aussi à faire c'est de l'enregistrer dans un répertoire à chaque itération. Pour cela à la place d'utiliser wordcloud je voudrais faire une sortie Excel avec un nom de fichier incrémenté par le numéro d'itération. J'utilise write.table que j'ai ajouté dans le code plus haut. mais ça me donne une erreur que je n'arrive pas à régler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error: package or namespace load failed for ‘xlsx’:
     .onLoad a échoué dans loadNamespace() pour 'rJava', détails :
      appel : fun(libname, pkgname)
      erreur : JAVA_HOME cannot be determined from the Registry
    In addition: There were 22 warnings (use warnings() to see them)
    Est-ce que vous voyez d'où ça peut venir SVP?

    Merci par avance,

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Je n'utilise jamais de fichiers au format Excel, je les enregistre toujours sous le format csv, sachant qu'Excel sait, si nécessaire, ouvrir ce type de fichier.

    Quant à l'erreur, elle est due à la machine Java. Souvent, cela provient qu'on utilise une machine Java 32 bits avec une version de R sous 64 bits ou l'inverse. Donc, commence par vérifier cela.

    Pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type_fichier <- paste( ".txt")
    fichier<-paste(nom,type_fichier,sep="")
    Tu peux simplifier par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier <- paste0( nom, ".txt")
    Tu peux même construire ton nom de fichier en une seule fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filePath <- paste0( "fichier_", i, ".txt")

  7. #7
    Membre à l'essai
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Août 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Un très grand MERCI

    je vais mettre la discussion en résolue

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

Discussions similaires

  1. Traiter 100 fichiers avec une boucle sous VBA excel
    Par sebastien06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/04/2008, 09h39
  2. Réponses: 1
    Dernier message: 18/02/2008, 13h51
  3. Quel langage pour faire des boucles sous FTP ?
    Par Mourne dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 04/07/2007, 16h33
  4. comment faire tourner une video en boucle sous Firefox?
    Par samsso2006 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 11/04/2007, 12h14
  5. lecture en boucle sous firefox
    Par ptichat dans le forum Flash
    Réponses: 4
    Dernier message: 19/06/2006, 10h34

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