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 :

Moyenne glissante [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Moyenne glissante
    Bonjour,

    Je suis une bille en Python mais j'essaye de m'améliorer. Pour mon boulot je dois faire une moyenne glissante sur 30 jours de valeurs numériques (float) que je viens récupérer en envoyant une requête en TCP. J'ai donc créé ce code Python qui fonctionne pour récupérer mes données et les trier :

    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
     
    import socket
     
    TCP_IP = '127.0.0.1'
    TCP_PORT = 991
    BUFFER_SIZE = 1024
     
    while 1:
        MESSAGE = ("*00019001010000000044000000**"+ '\r\n')
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((TCP_IP, TCP_PORT))
        SEND=MESSAGE.encode()
        s.send(SEND)
        data = s.recv(BUFFER_SIZE)
        RECEIVED=data.decode()
        tpsint=(RECEIVED[27:35])
        int = (RECEIVED[36:47])
        int1=float(int)
        print ("temps intégration = ",tpsint,"s")
        print("valeur intégration =",int1)
        import time
        time.sleep(2)
        s.close()
    Maintenant je voudrais que ma variable int1 soit intégrée dans une moyenne glissante disons sur 10 valeurs.

    Alors je pensais stocker les valeurs qui arrivaient au fil de l'eau dans une FIFO de 10 valeurs (premier entrant/ premier sorti) et en faire la moyenne glissante donc.

    Mais là où y a problème c'est que je ne sais pas du tout comment faire.

    Quelqu'un pourrait il m'aider gracieusement ?

    Je vous remercie vivement par avance.

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Bah, c'est pas difficile de supprimer autant d'éléments qu'il n'y a d'ajouts de façon à n'en garder toujours que 10.

    Sinon, regarde du côté du module collections et de la fonction deque qui t'épargneras de gérer cela toi-même
    Le temps ronge l'amour comme l'acide.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour ta réponse. Alors effectivement j'avais vu qu'on pourrai faire ça avec la fonction deque. J'ai essayé quelques codes mais jamais réussi à sortir quelquechose...

    Pourriez vous m'aiguiller ?

    Merci d'avance.

  4. #4
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Le deque est une liste un peu étendue, donc le principe est le même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> from collections import deque
    >>> fifo = deque(range(1, 6), maxlen=5)
    >>> fifo
    deque([1, 2, 3, 4, 5], maxlen=5)
    >>> fifo.append(8)
    >>> fifo
    deque([2, 3, 4, 5, 8], maxlen=5)
    >>> fifo.extend([12, 4])
    >>> fifo
    deque([4, 5, 8, 12, 4], maxlen=5)
    >>> import statistics
    >>> statistics.mean(fifo)
    6.6
    Le temps ronge l'amour comme l'acide.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    OK merci. Et si la variable est toujours la même ("int1") dans mon cas ?

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Dans l'exemple qui t'as été donné, la variable est toujours la même : "fifo" ...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ok mais c'est pas exactement ce que je souhaite. Mon code boucle tout le temps et donc il envoi la requête,récupère les données et stocke ce que je souhaite dans int1. Alors si dans ma boucle je mets un deque et je lui demande de stocker int1 et ben il va stocker que une seule valeur et c'est la valeur int1 de la boucle et le FIFo ne va pas se remplir...

    Donc je ne sais pas comment m'en sortir... chui bloqué en fait...

  8. #8
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Comment t'y prendrais-tu pour enregistrer tes valeurs dans une simple liste ? Tu déclarerais ta liste dans ta boucle ?
    Le temps ronge l'amour comme l'acide.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Non mais un deque ça me va,mais je ne vois pas comment l'intégrer dans ma boucle pour que mon fifo se complète quand une nouvelle valeur int1 arrive...

  10. #10
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Dans l'exemple que bistouille t'a donné il a aussi ajouté des valeurs au deque. Suffit de remplacer le chiffre 8 par ton fameux "int1" et c'est pareil !

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    OK j'ai pigé ! J'ai créé et dimensionné mon FIFO (deque) avant ma boucle et je le rempli et fait ma moyanne dans ma boucle et ça marche bien du coup :

    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
    #!/usr/bin/env python
     
    import socket
    from collections import deque
    import numpy as np
    import statistics
    import time
     
    TCP_IP = '127.0.0.1'
    TCP_PORT = 991
    BUFFER_SIZE = 1024
     
    fifo = deque(np.arange(0), maxlen=5) #création/dimensionnement FIFO
     
    while 1:
        MESSAGE = ("*00019001010000000044000000**"+ '\r\n') #Envoi de la requête vers LB 9000
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((TCP_IP, TCP_PORT))
        SEND=MESSAGE.encode()
        s.send(SEND)
        data = s.recv(BUFFER_SIZE)
        RECEIVED=data.decode()
        tpsint=(RECEIVED[27:35])
        int = (RECEIVED[36:47])
        int1=float(int)
        fifo.append(int1)
        print (fifo)
        print ("temps intégration = ",tpsint,"s")
        print("valeur intégration =",int1)
        moyglis = statistics.mean(fifo)
        print (moyglis)
        time.sleep(5)
        s.close()
    Merci en tout cas de votre aide.

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

Discussions similaires

  1. algorithme moyenne glissante (mobile)
    Par lucky dans le forum C++
    Réponses: 3
    Dernier message: 06/06/2010, 17h16
  2. BO XIR2 Moyenne glissante
    Par mleonetti dans le forum Webi
    Réponses: 6
    Dernier message: 05/10/2009, 14h21
  3. [AC-2007] créer une moyenne glissante
    Par triaguae dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2009, 12h54
  4. Requete Moyenne Glissante
    Par richardprod dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/06/2008, 22h04
  5. Moyenne Glissante et moyenne 2ⁿ
    Par webinfo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 04/04/2008, 13h45

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