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 :

Optimiser le temps de travail d'un script


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2013
    Messages : 40
    Points : 38
    Points
    38
    Par défaut Optimiser le temps de travail d'un script
    Bonjour
    j'ai développé un script sous R qui prend beaucoup de temps (~20min.) et je souhaitais savoir s'il y avait une manière d'accélérer le temps de travail, soit en modifiant la manière avec laquelle je m'y suis prit ou bien par des procédés particuliers.

    Ce que fait le script:
    1/Sur une plage de date donnée (11/01/2010-31/12/2019) le script parcours, via une boucle while, tous les jours compris dans cet intervalle.
    2/ Si une condition est remplie (elle est rencontrée approximativement 200 fois), il appelle une fonction (la fonction est au début du même script, car j'ai cru me rendre compte que stockée dans un fichier externe les appels au fichier prenne du temps).
    3/ La fonction ouvre un fichier dans lequel des données (environ 100 000 lignes et une 10aine de colonnes) sont stockées.
    4/ Je crée donc une matrice, dans laquelle je range les données.
    5/ La fonction parcours le fichier afin d'y trouver les données qui répondent à la condition.
    6/ Pour optimiser et comme le fichier est rangé par date, je récupère le numéro de la ligne de la date correspondant au résultat, afin, lors du prochain appel, de ne pas avoir a relire le fichier depuis le début, mais seulement à partir de la ligne récupérée.

    Pour information, à chaque mois, le fichier appelé par la fonction, change.

    D'avance merci pour votre aide.
    Et un bon WE.

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Pas très clair:

    Tu crées ta matrice à chaque fois ?
    Si oui, celle-ci est dépendante de la ligne à traiter ou c'est toujours la même dans laquelle tu puises tes informations selon la ligne que tu traites ?

    Sinon, la taille du fichier n'a pas l'air énorme, si celui-ci ne grossit pas dans le temps, autant le charger une bonne fois en mémoire.
    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2013
    Messages : 40
    Points : 38
    Points
    38
    Par défaut
    Bonjour et merci,
    Tu crées ta matrice à chaque fois ?
    Si oui, celle-ci est dépendante de la ligne à traiter ou c'est toujours la même dans laquelle tu puises tes informations selon la ligne que tu traites ?

    Pour essayer d'être plus clair et dans le même temps répondre à ta question:
    1/ Je parcours jour/jour, dans un while, un range de date (voir plus haut).
    2/ Si la condition if dans la boucle est remplie disons le 15/07/2015, j'ouvre un fichier qui se nomme alors 2015-07.
    3/ je stocke les données contenu dans ce fichier dans plusieurs matrice (une par colonne).
    4/ Je parcours le fichier afin de trouver dans les matrices les données correspondant à la condition.
    Un nouveau fichier est ouvert, seulement si une nouvelle condition est remplie et qu'elle est rencontrée sur un mois différent, sinon le fichier 2015-07 contenant les données et ayant déjà été ouvert, il n'est pas utile d'en ouvrir un nouveau.

    Sinon, la taille du fichier n'a pas l'air énorme, si celui-ci ne grossit pas dans le temps, autant le charger une bonne fois en mémoire.

    Non il ne grossit pas dans le temps.
    C'est ce que je fais, il prend tout de même 3 à 4 seconde à s'ouvrir, multiplié par 200 (nombre de fois où la condition est rencontrée) cela représente tout de même 10 minutes ((4*200)/60), juste à ouvrir les fichiers.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Ok, pourquoi ne pas extraire en premier lieu toutes les lignes qui remplissent la condition, cela permettrait de savoir quels fichiers ouvrir et ne les parcourir qu'une seule fois (sauf si tu as un ordre à respecter) ?

    Car de ce que j'en comprend, sur 200 ouvertures de fichiers, tu n'ouvres au plus que 12 mois * 10 ans donc 120 fichiers différents (dans le pire de cas).
    Cordialement.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2013
    Messages : 40
    Points : 38
    Points
    38
    Par défaut
    Tout d'abord merci beaucoup d'avoir, ne serait ce qu'un instant, consacrer de la réflexion à mon problème,
    et je vois aussi que j'ai mal formulé ma demande, dans le sens, où bien que tes réponses soient tout à fait appropriées, je n'ai pas ouvert le champ des possibles en expliquant que j'étais ouvert à d'autres possibilités de stockage/lecture de données, comme une BDD par exemple.

    Et justement, selon toi, est ce qu'une requête sql est plus rapide en terme de réponse qu'une ouverture parcours de fichier?

    Sinon dans le même temps j'ai trouvé une solution:
    1/ J'ouvre mon fichier.
    2/ Comme mon fichier comporte une colonne dont les données contenues sont unique (comme un index), je récupère dans une matrice le contenu de cette colonne.
    3/ Je nomme chacune des lignes de la matrice créée depuis l'ouverture du fichier.
    4/ Ainsi lorsque j'ai besoin de l'info contenue dans le fichier, je la récupère grâce à l'indice. Ainsi plus besoin de parcourir la matrice contenant les données.

    1/opt=read.csv(monFichier)
    2/index=as.character(opt$index)
    3/rownames(opt)<-index
    4/opt[index[numeroDeLindex],numeroOuNomDeLaColonneSouhaite]

    Encore merci.

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

Discussions similaires

  1. écrire un script pour calculer le temps de travail d'un employé
    Par BROKO.PHP dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/10/2019, 10h54
  2. Concours de blagues sur l'optimisation du temps de travail.
    Par stopviolence dans le forum La taverne du Club : Humour et divers
    Réponses: 9
    Dernier message: 20/03/2017, 00h41
  3. Réponses: 9
    Dernier message: 20/06/2005, 12h17
  4. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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