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 :

grouper des tulpes en fonction d'élément communs, avec opérations arithmétiques [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Post-doc
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Santé

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 9
    Points
    9
    Par défaut grouper des tulpes en fonction d'élément communs, avec opérations arithmétiques
    Bonjour à tous,
    Je suis débutant pour Python, et après avoir appris les bases j'ai décidé de me lancer dans un petit projet pour véritablement apprendre ce langage. J'ai décidé de faire un programme qui me permettrait de rentrer des performances en fitness (oui c'est un peu ridicule, mais faut bien apprendre :-D), pour ensuite obtenir des graphiques sur l'évolution des performances etc... En demandant à l'utilisateur une série de renseignement, j'en arrive à une liste de tulpes semblable à la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    seance = ([30/07/2018,dips,8,0],[30/07/2018,dips,11,0],[30/07/2018,triceps,10,10],[30/07/2018,triceps,5,10],[02/08/2018,dips,4,0],[02/07/2018,dips,6,0],[02/08/2018,triceps,8,7],[02/08/2018,triceps,10,9])
    Ainsi, on a pour chaque tulpe les variables suivantes : [date,exercice,répétitions,poids]. Je voudrais pouvoir créer une deuxième liste ou seront regroupés l'ensemble les tulpes qui ont la même date et le même exercice, en faisant la moyenne des répétitions et des charges des tulpes groupés. Et pourquoi pas en bonus le nombre de série, qui correspond au nombre de fois que l'exercice a été effectué pendant la séance. En gros, j'obtiendrai la liste suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    seance_grouped = ([30/07/2018,dips,9.5,0,2],[30/07/2018,triceps,7.5,10,2],[02/08/2018,dips,5,0,2],[02/08/2018,triceps,9,8,2])
    Je sais qu'on pouvait faire ça simplement sur R, et c'est pourquoi j'ai voulu réitérer sur Python. Mais peut-être qu'il aurait été plus simple au moment ou je rentre les informations, que je créé à la fois une liste générale avec tout les tulpes, et une deuxième avec les éléments semblable moyennés.

    Si jamais vous avez la solution, pouvez vous me l'expliquer? J'ai encore du mal à comprendre les lignes de codes comportant plusieurs opérations et méthodes sur une seule ligne par exemple.

    Merci pour votre aide en tout cas,
    Fabien

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Bonjour Fabien,

    Citation Envoyé par fabtheforce Voir le message
    Je sais qu'on pouvait faire ça simplement sur R, et c'est pourquoi j'ai voulu réitérer sur Python.
    Commen vous venez de R (ou du moins vous connaissez R), je vous propose de travailler ici avec des DataFrames. Python possède une super bibliothèque pour cela nommée Pandas. Voici un exemple rapide:
    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
    import pandas as pd
     
    seances = (
        ['30/07/2018', 'dips', 8, 0], ['30/07/2018', 'dips', 11, 0], ['30/07/2018', 'triceps', 10, 10],
        ['30/07/2018', 'triceps' ,5, 10], ['02/08/2018', 'dips', 4, 0], ['02/07/2018', 'dips', 6, 0],
        ['02/08/2018', 'triceps', 8, 7], ['02/08/2018', 'triceps', 10, 9],
        )
     
    # Transforme le tuple en list de dicts
    seances = [{'date': e[0], 'exercice': e[1], 'rep': e[2], 'weight': e[3]} for e in seances]
     
    # Transforme la liste de séances en un joli tableau
    df = pd.DataFrame(seances)
    # Gère les dates
    df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
     
    # Groupement des séances par exercice en faisant la moyenne des répétitions
    # et poids
    df_grouped = df.groupby(by='exercice').mean()
     
    print(df_grouped)
    J'ai retravaillé votre tuple de seance pour avoir des chaines de caractères. Je commence ici par créer un tableau (DataFrame) de vos séances avec des colonnes comme 'date', 'exercice', 'rep' et 'weight'. Pour cela je transforme d'abord la liste de tuples en liste de dictionnaires. Plus facile pour générer le tableau. Je vous invite à printer df pour voir comment ça rend.

    Une fois un DataFrame créé, on peut faire tout un tas de calculs cools et rapides avec. Des statistiques, tracer les rep au cours du temps... Compter les séances, ou comme dans l'exemple grouper par exercice et calculer la moyenne. Ce code retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               rep  weight
    exercice
    dips      7.25     0.0
    triceps   8.25     9.0
    >>>
    Il y a bien sur moyen de retransformer ce tableau groupé dans le même format que les données initiales. Mais si ce n'est pas une contrainte pour vous, je trouve bien bien plus facile de gérer ces données sous cette forme. Ou au moins comme un dictionnaire.

    J

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Post-doc
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Post-doc
    Secteur : Santé

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Ah c'est super !!!! J'avais vu cette méthode groupby lors de mes recherches, mais je n'avais pas vraiment compris son fonctionnement. Avec vos explications, c'est beaucoup mieux ! Bon bah je n'ai plus qu'à faire joujou avec cette bibliothèque Pandas et en sortir le meilleur. Merci encore pour votre aide !
    Fabien

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2012, 16h37
  2. [Débutant] Recherche éléments communs avec Dictionary
    Par Hades42 dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/12/2011, 23h53
  3. [DTD] Grouper des éléments
    Par BugFactory dans le forum Valider
    Réponses: 3
    Dernier message: 15/06/2011, 10h43
  4. Grouper des éléments dans une même catégorie
    Par pioupi564 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/07/2008, 21h35
  5. Select sur des éléments communs ?
    Par AsmCode dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/10/2007, 10h20

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