[Excel] Médiane à deux dimensions

parly -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

La fonction mediane permet de calculer la valeur centrale d'une série (50% au dessus de la médiane, 50% au dessous).
Si j'ai un tableau avec les âges de personnes, c'est facile
Age
10
10
25
25
25
25
30

La fonction =mediane (A2:A9) donne 25, ce qui est parfait.

Mais est-ce que quelqu'un peut m'indiquer comment on peut calculer la médiane dans un tableau à deux dimensions ?
Age nb d'individus
10  2
25  4
30  1


Bien entendu, ce n'est pas pour faire des médianes sur 7 individus que je vous pose la question, mais sur des tableaux avec des milliers d'individus.

Merci de votre réponse

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    une proposition avec une fonction personnalisée en vba :
    Function medianeMat(plage As Range) As Double
        Dim tablo, nbIndividu, nb, cpt, cpt2 As Boolean
        Dim I%, J%, K%, tmp
        tablo = plage
        ' trier tablo, à désactiver si tablo déjà trié
        For I = LBound(tablo) To UBound(tablo)
            J = I
            For K = J + 1 To UBound(tablo)
                If tablo(K, 1) <= tablo(J, 1) Then J = K
            Next K
            If I <> J Then
                tmp = tablo(J, 1): tablo(J, 1) = tablo(I, 1): tablo(I, 1) = tmp
                tmp = tablo(J, 2): tablo(J, 2) = tablo(I, 2): tablo(I, 2) = tmp
            End If
        Next I
        ' médiane
        For I% = 1 To UBound(tablo)
            nbIndividu = nbIndividu + tablo(I%, 2)
        Next I%
            While nb < nbIndividu / 2
                cpt = cpt + 1
                nb = nb + tablo(cpt, 2)
            Wend
            cpt2 = nb = nbIndividu / 2
        If nbIndividu Mod 2 Then
            ' impair
            medianeMat = tablo(cpt, 1)
        Else
            'pair
            medianeMat = IIf(cpt2, (tablo(cpt, 1) + tablo(cpt + 1, 1)) / 2, tablo(cpt, 1))
        End If
    End Function


    J'ai testé, ça parait correct mais contrôle bien sur plusieurs exemples car j'ai les yeux qui se croisent un peu...
    En particulier tester les cas pairs et impairs, avec la médiane au milieu d'un paquet ou à cheval sur 2 paquets.
    Les données peuvent être non triées, si elles le sont tu peux supprimer le tri pour gagner qcq microsecondes.
    https://www.cjoint.com/?ALhknQd3I9T

    eric
    1
  2. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Dans ton exemple, quelle serait la médiane ?
    21,7 ou 2,33 ?
    0
    1. parly
       
      Bonjour Raymond,

      Je ne parle pas de moyenne, mais de médiane qui est une fonction mathématique un peu différente.

      Mais merci pour la réponse
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour tout le monde,
      Si j'ai bien compris, et afin d'éclairer tout le monde sur le sujet en cours :
      2 cas :
      - La médiane d'une série composée d'un nombre impair de valeurs est la valeur située au milieu de cette série.
      exemples :
      6, 7, 8, 19, 3, 15, 2. Médiane = 19
      1, 2, 3, 4, 5. Médiane = 3
      - La médiane d'une série composée d'un nombre pair de valeurs est la moyenne des deux valeurs centrales.
      exemples :
      1, 2, 4, 18, 20, 56, 13, 27. Médiane = 19
      1, 2, 3, 4. Médiane = 2,5

      Donc les deux exemples donnés par parly plus haut sont identiques ...

      C'est bien cela?
      0
    3. parly
       
      La médiane se calcule sur une suite de valeurs ordonnées. C'est effectivement la valeur qui est au milieu de la suite ordonnée ou la demi-somme des valeurs centrales.
      C'est une opération mathématique qui est intéressante car elle filtre les valeurs extrêmes contrairement à la moyenne. Par exemple, si vous avez 10 personnes qui ne touchent rien, 1000 personnes qui gagnent le SMIC et 50 qui gagnent 1 million par mois, vous aurez une valeur moyenne à 100.000 euros par mois (je dis n'importe quoi), mais une valeur médiane au SMIC. Les deux indicateurs mis à côté donne des informations complémentaires : le salaire moyen est de 100.000 euros, mais 50% des gens touchent le SMIC ou moins.

      Excel sait très bien calculer cette valeur médiane quand on a une suite de valeurs du type 10 10 25 25 25 25 30.
      Mais ce que j'ai réellement, ce sont des valeurs de recensements du type 19285 individus de 19 ans, 32584 individus de 20 ans, 8564 individus de 21 ans, ...
      Si je pouvais écrire dans Excel la valeur 19 dans 19285 cases consécutives, puis la valeur 20 dans 32584 cases consécutives, ... je pourrais utiliser la fonction =mediane d'Excel.
      Malheureusement, vous comprendez bien que ce n'est pas possible.

      Donc ma question est : comment calculer cette valeur médiane lorsque je ne peux pas écrire explicitement toutes les valeurs de la suite. Lorsque je ne peux pas écrire 10 10 25 25 25 25 30, mais lorsque j'écris "j"ai 2 valeurs 10, j'ai 4 valeurs 25, j'ai une valeur 30".

      C'est le sens de mon tableau dans ma question initiale.
      0
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Bonjour
    peut être avec cette matricielle à entrer en maintenant les touches ctrl et alt en enfoncées:
    =MEDIANE(champ 1*champ 2)
    elle doit se retrouver entre accolades dans la barre de formule, après la manip
    ctrl+alt+enter
    crdlmnt
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Vaucluse,
      Non à priori cela ne fonctionne pas. Ta formule renvoie 30 dans l'exemple de parly au lieu de 25...
      0
    2. parly
       
      Bonjour,

      Merci pour votre réponse, je ne vois pas ce que vous voulez dire avec cette accolade. Avez-vous un dictaticiel avec un exemple ?
      0
    3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
       
      erreur de ma part, il s'agit de ctrl+shift=enter et non pas alt!!
      il n'y a rien à faire pour l"'accolade, simplement écrire la, formule normalement et maintenir les touches ctrl et shift enfoncées en effectuant l'entrée.
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    une tentative (très laborieuse) sans macro

    https://www.cjoint.com/?ALhqmhYFO6x

    RQ1. les valeurs doivent être triées par ordre croissant
    RQ2. il faut ajouter la colonne des effectifs cumulés croissants
    RQ3. du coup, la formule est elle bien utile ?
    RQ4. il doit y avoir plus simple
    RQ5. à tester bien sûr !

    bonne suite
    0