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

Python Discussion :

Reproduire la même opération sur un ensemble de fichier de données


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut Reproduire la même opération sur un ensemble de fichier de données
    Bonjour,

    Un programme python a été réalisé pour réduire la taille d'un fichier d'origine (données oscilloscope) pour seulement avoir les points prédéterminer (selon une condition donnée). Ces points sélectionné sont ensuite enregistrés dans un nouveau fichier csv.
    Le programme réalisé permet de faire cette modification sur seulement un fichier à la fois.
    Je dispose d'une cinquantaine de fichier que je souhaiterai modifier, comment pourrais-je procéder pour réaliser cela automatiquement sur l'ensemble des fichier?


    Voici le programme réalisé:
    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
     
     
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    from scipy.signal import argrelextrema
     
     
     
    data = pd.read_csv("C:\\Users\\Utilisateur général\\Desktop\\PI\\A1.csv")
     
    col_names = ['time','amp']
    data.columns = col_names
     
    t = data.time
    y = data.amp
     
    L1=[]
    L2=[]
    Ly=[]
    Lt=[]
     
    x=np.zeros(len(y))
     
    for i in range(len(y)):
        x[i]=y[i]
     
    c_max_index = argrelextrema(x, np.greater, order=10)
     
    for i in range(np.size(c_max_index[0])):
        if y[c_max_index[0][i]]>0.001:
            L1.append(y[c_max_index[0][i]])
            L2.append(t[c_max_index[0][i]])
     
    for i in range(len(L1)):
        if i<40:            
            Ly.append(L1[i])
            Lt.append(L2[i])
        else:
            if L1[i]>0.002: 
                Ly.append(L1[i])
                Lt.append(L2[i])
     
     
    plt.scatter(Lt,Ly,c='r')
    plt.plot(t,y)
    plt.grid()
    plt.ylim(0,0.02)
    plt.show()
     
    Lt=['time']+Lt
    Ly=['amp']+Ly
     
     
    indata = pd.read_csv("C:\\Users\\Utilisateur général\\Desktop\\A1n.csv")
    zipped = pd.DataFrame(zip(Lt,Ly))
     
    outdata = pd.concat([indata, zipped], axis=1)
     
    outdata.to_csv("C:\\Users\\Utilisateur général\\Desktop\\PI\\A1n.csv", header=False, index=False, encoding='utf-8')
    outdata2 = pd.read_csv("C:\\Users\\Utilisateur général\Desktop\\PI\\A1n.csv", usecols=[1,2])
    outdata2.to_csv("C:\\Users\\Utilisateur général\\Desktop\\PI\\A1n.csv", index=False)
    Merci d'avance pour votre aide.

    Cordialement.

    C.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Il faut commencer par mettre les différentes instructions qui modifient un fichier sous la forme d'une fonction prenant (au moins) le nom du fichier à transformer en paramètre.

    Puis il faut récupérer l'ensemble des noms de fichiers à traiter.
    S'ils sont dans le même répertoire çà peut se faire avec glob.glob (par exemple).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Cerise22 Voir le message
    Le programme réalisé permet de faire cette modification sur seulement un fichier à la fois.
    Je dispose d'une cinquantaine de fichier que je souhaiterai modifier, comment pourrais-je procéder pour réaliser cela automatiquement sur l'ensemble des fichier?
    Les langages de script (shell sous Linux, Powershell sous W10) peuvent très bien ordonnancer une liste de fichiers et les passer par une boucle à un programme prévu pour n'en traiter qu'un seul.

    Sinon malheureusement il faut refondre le programme qui, soit dit en passant, a été écrit bien maladroitement. En effet, si au lieu de benner tout le traitement en principal ledit traitement avait été encapsulé dans une fonction, c'était alors pas difficile ensuite de programmer le main pour qu'il traite n fichiers.
    Exemple: je programme le traitement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def traitement(fichier):
    	action1 sur fichier
    	action2 sur fichier
    	action3 sur fichier
    # traitement()

    Maintenant le programme pour traiter un fichier...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if __name__ == "__main__":
    	import sys
    	traitement(sys.argv[1])
    # if

    ... que je veux adapter pour traiter n fichiers...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if __name__ == "__main__":
    	import sys
    	for f in sys.argv[1:]: traitement(f)
    # if
    ... et voilà, juste une boucle à rajouter.

    Maintenant, ton code prévu pour traiter un fichier...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    action1 sur fichier
    action2 sur fichier
    action3 sur fichier

    ... que tu veux l'adapter à n fichiers et tu te retrouves coinçée.

    Si dans les tutos il est conseillé de tout encapsuler dans des fonctions, ce n'est pas que pour faire joli...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Même opérations sur plusieurs tables
    Par pasqal dans le forum SQLite
    Réponses: 0
    Dernier message: 30/05/2014, 16h19
  2. Réponses: 22
    Dernier message: 04/05/2011, 15h17
  3. opérations sur type ensemble
    Par OutOfRange dans le forum Langage
    Réponses: 8
    Dernier message: 02/07/2009, 22h30
  4. Réponses: 1
    Dernier message: 03/12/2007, 19h22
  5. [2.0] Comment réaliser des opérations sur les ensembles ?
    Par Cereal123 dans le forum Framework .NET
    Réponses: 2
    Dernier message: 23/10/2006, 13h01

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