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

Algorithmes et structures de données Discussion :

Moyenne de n courbes dont les points n'ont pas les mêmes valeurs exactes en abcisse


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut Moyenne de n courbes dont les points n'ont pas les mêmes valeurs exactes en abcisse
    Bonjour,

    voici un exemple de données à traiter (cf pièce jointe si l'image ne s'affiche pas dans le texte)
    Nom : Abscisses Moy.png
Affichages : 538
Taille : 46,6 Ko

    Il s'agit de générer une courbe moyenne à partir de ces différents essais.
    Comme vous pouvez le voir, selon la série les premières valeurs ne commencent pas à la même abscisses, mais ce n'est pas à priori un gros problème puisque je peux faire une recherche de la valeur maximale dans la colonne abscisses de chaque série et éliminer toutes les données relatives à au dessus du minimum des abscisses maximum (en gros tout ce qui est au dessus de 40,94 je supprime).
    Par contre le réel problème c'est qu'on ne retrouve pas forcément une abscisse d'un point d'une série dans une autre. Par exemple dans la série e9 et e10 on a 40.94 mais dans la série e 11 la valeur la plus proche est de 40.87.
    J'avais pensé à faire un nettoyage en arrondissant au dixième supérieure, ce qui donnerait dans une même série des valeurs d'abscisses identiques dont je ne devrais en garder qu'une.
    Sinon supprimer les valeurs d'abscisses inférieure à un pas définit (exemple tous les 0.5 ou 1 ou 2), mais ça me pose d'autre problèmes.

    En fait je ne sais pas dans quelle direction partir et je me disais qu'il existait peut-être déjà un algorithme pour faire ce genre de moyenne.

    Si non comment procéderiez vous ?

    Merci d'avance pour votre aide,

    David

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    T'aurais pu faire un copier-coller plutôt que de faire une image. On ne peut pas traiter les données.

    Si non comment procéderiez vous ?
    Pour l'algorithme :
    • On trie les abscisses croissantes
    • On les parcourt dans l'ordre pour définir la valeur de la série que l'on prend.
    • On calcule la moyenne, si la moyenne a du sens (au moins une valeur pour chaque)
    • On passe à la ligne suivante.


    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat fichier.txt
    41.31 0.366 9
    41.28 0.371 9
    41.24 0.369 9
    41.2 0.369 9
    40.94 0.386 9
    40.87 0.412 9
    40.94 0.216 10
    40.77 0.215 10
    41.35 0.744 11
    40.87 0.873 11
    39.58 1.262 11
    On trie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sort +0n fichier.txt                                                                                                                                                                                                                                       
    39.58 1.262 11
    40.77 0.215 10
    40.87 0.412 9
    40.87 0.873 11
    40.94 0.216 10
    40.94 0.386 9
    41.2 0.369 9
    41.24 0.369 9
    41.28 0.371 9
    41.31 0.366 9
    41.35 0.744 11
    On calcule la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ sort +0n fichier.txt | awk '{a[$3]=$2;if (a[9]*a[10]*a[11]!=0) r[$1]=(a[9]+a[10]+a[11])/3;} END{for (i in r) print i,r[i];}' | sort +0n
    40.87 0.5
    40.94 0.491667
    41.2 0.486
    41.24 0.486
    41.28 0.486667
    41.31 0.485
    41.35 0.442
    Et voilà le travail !
    Tu peux préférer une interpolation pour la valeur d'un point (que tu n'as pas) entre 2 points (que tu as).

    Bonne chance
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Oui désolé pour les données, je pensais qu'une image serait plus claire à interpréter. Je n'ai pas pensé que quelqu'un ferait le travail à ma place donc je n'ai pas fait de copier coller
    En tout cas merci pour l'idée : je n'avais pas du tout penser à agréger les différentes séries. Je vais réfléchir à ce que tu me proposes.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Dans la série e9, tu as comme abscisses 40.94, 40.9 , 40.87
    Mais dans la série e10, tu n'as pas les valeurs 40.9 ou 40.87
    Ma proposition, ce serait de faire une interpolation.
    Dans la série e10, tu as les points 40.88 et 40.92 qui encadrent 40.9 , et 40.9 est au milieu entre 40.88 et 40.92.
    Donc tu peux estimer par interpolation.
    Et idem pour chaque point manquant.
    Pour 40.87, tu vas trouver (0.243*2+0.221)/3 = 0.23567
    Et ensuite , tu as bien tes 3 points pour l'abscisse 40.87 , et tu peux faire la moyenne des 3 valeurs.


    Si tu mets toutes tes valeurs dans un tableau, et que tu calcules une espèce de tendance, tu auras beaucoup de points issus de la série e9 (tu as en gros un écart de 0.04 entre 2 points successifs) alors que tu auras peu de points issus de la série e11 ( en moyenne 0.16 entre 2 points consécutifs) ; la série e11 sera donc sous-représentée dans le résultat final.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Ma proposition, ce serait de faire une interpolation.
    Oui en fait c'est ce que je fais à la main déjà.

    Citation Envoyé par tbc92 Voir le message
    Si tu mets toutes tes valeurs dans un tableau, et que tu calcules une espèce de tendance, tu auras beaucoup de points issus de la série e9 (tu as en gros un écart de 0.04 entre 2 points successifs) alors que tu auras peu de points issus de la série e11 ( en moyenne 0.16 entre 2 points consécutifs) ; la série e11 sera donc sous-représentée dans le résultat final.
    Oui c'est bien le problème. C'est la raison pour laquelle j'avais pensé au début nettoyer les valeurs dans la(les) séries surreprésentées en leur conférant un "pas" qui ne soit pas inférieur à celui moyen entre chaque valeur de la série sous-représentée.


    En attendant j'essaie de comprendre ce que fait le script de Flodelarab.
    Je travaille avec VBA....

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Citation Envoyé par dafchap Voir le message
    En attendant j'essaie de comprendre ce que fait le script de Flodelarab.
    Chaque série a son représentant, c'est-à-dire, une ordonnée qui va être utilisée dans la moyenne. Tant qu'une des séries n'a pas donné de représentant, il ne faut pas calculer la moyenne, sinon la valeur va sauter, au seul prétexte qu'on a oublié une série. La valeur par défaut étant 0, le produit de tous les représentants permet de contrôler qu'aucun n'est nul. Pour chaque ligne, on fixe, ou change, un représentant, et si une moyenne est calculable, on la calcule, et on la garde en mémoire pour l'abscisse de la ligne. Ceci a la vertu d'écraser la précédente valeur si plusieurs représentants changent pour la même abscisse. Dans mon exemple, 40.87 fait changer le représentant de 9 et le représentant de 11. À la fin, pour chaque abscisse, on affiche l'abscisse et la moyenne pour cette abscisse. Comme les résultats peuvent être justes mais en vrac, on re-trie.

    Cet algorithme est vite écrit grâce aux tableaux associatifs. Sous VBA, c'est l'objet Collection :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oC As New Collection
    oC.Add "bonjour", "mot1"
    oC.Add "Au revoir", "mot2"
    MsgBox oC("mot1")

    oC.Add element,clé

    Ajoute un élément à la collection. La clé correspond à ce qu'il y a dans les crochets d'un tableau associatif.

    oC.remove clé

    Supprime l'élement dont la clé est passée en paramètre

    oC(clé)

    retourne l'élément dont la clé est passée en paramètre
    Source : https://www.developpez.net/forums/d2...x-associatifs/
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Merci pour ces explications détaillées. Je pense qu'avec ça je devrais pouvoir me débrouiller.

  8. #8
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Les valeurs sont très différentes d'une série à l'autre. Il me parait étonnant de vouloir en faire une moyenne. Pourquoi le fais tu ?
    Sinon, j'aurais utilisé un "binning" : faire la moyenne des valeurs dans des intervalles déterminés, par ex : 4.8-4.9, .
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  9. #9
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Moyenne de n courbes dont les points n'ont pas les mêmes valeurs exactes en abcisse
    Bonjour,

    La remarque qui vient d'être faite est pertinente,
    Citation Envoyé par Nebulix Voir le message
    ... sinon, j'aurais utilisé un "binning" : faire la moyenne des valeurs dans des intervalles déterminés, par ex : 4.8-4.9, .
    d'autant qu'un calcul de moyennes n'a de sens que sur un lot de valeurs relativement proches.

    D'autre part, la question de la relation théorique entre (x) et (y) n'a pas été soulevée (à moins que cela m'ait échappé):
    Citation Envoyé par dafchap Voir le message
    ... voici un exemple de données à traiter ... / ... Il s'agit de générer une courbe moyenne à partir de ces différents essais ...
    Le graphe médian du nuage de points ne serait donc pas rectiligne ?
    Et s'il doit intervenir une relation non linéaire, laquelle faut-il prendre ?
    y = A + Bx + Cx2 , Ln(y) = A - B/x ?
    On a l'embarras du choix ...


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    On pourrait reformuler le besoin. Comment trouver le coefficient multiplicateur entre 2 fonctions f et g ... sachant qu'on connait f et g sur un échantillon de points, et que ce ne sont pas les mêmes points qui sont connus pour f et pour g.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #11
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Moyenne de n courbes dont les points n'ont pas les mêmes valeurs exactes en abcisse
    Un procédé très simple permet de s'assurer de la légitimité du calcul de moyenne: le tracé du nuage des points de coordonnées (x, y).

    Il doit présenter une zone dense connexe, ou tout au moins présentant un seul segment d'intersection avec toute droite verticale (x = Cte).
    Dans le cas contraire, il faut envisager une partition du nuage.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/12/2008, 17h12
  2. 2 variables qui pointent vers les mêmes valeurs: comment l'éviter?
    Par skystef dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 03/04/2008, 11h51
  3. Réponses: 4
    Dernier message: 17/01/2008, 07h36
  4. Réponses: 3
    Dernier message: 29/09/2006, 09h48
  5. Map dont les 2 valeurs sont récupérables ?
    Par Baptiste Wicht dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 29/04/2006, 13h33

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