Méthodes quantitativesProgrammation scientifiqueStatistiques en psychologie

Comment calculer l’écart interquartile en Python

Guide académique complet pour calculer l’écart interquartile en Python avec NumPy, SciPy et Pandas. Méthodes, formules et détection des valeurs aberrantes.

PUBLIÉ

Dans le domaine de l’analyse exploratoire des données, de l’économétrie et des sciences du comportement, la caractérisation de la dispersion d’une distribution constitue une étape fondamentale, souvent éclipsée par la simple recherche d’une tendance centrale. Si la moyenne arithmétique et l’écart-type demeurent les métriques traditionnellement enseignées et déployées dans les contextes paramétriques idéaux, leur vulnérabilité intrinsèque face aux perturbations structurales des données représente un écueil méthodologique majeur. Une unique observation aberrante, qu’elle résulte d’un artéfact expérimental, d’une erreur de saisie ou d’une manifestation biologique extrême, suffit à biaiser l’écart-type de manière disproportionnée, faussant irrémédiablement l’interprétation des phénomènes sous-jacents.

L’écart interquartile (communément désigné sous l’acronyme anglais IQR pour Interquartile Range) s’impose comme l’un des estimateurs non paramétriques de dispersion les plus robustes et élégants de la statistique moderne. En quantifiant l’étendue occupée par les cinquante pour cent centraux d’un échantillon ordonné, l’IQR s’affranchit des distorsions induites par les queues de distribution lourdes et l’asymétrie prononcée. Cette statistique d’ordre offre ainsi une lecture stable et fidèle de la variabilité interne des cohortes, condition indispensable à l’analyse rigoureuse des scores psychométriques, des séries temporelles biomédicales ou des signaux financiers à forte volatilité.

Le langage de programmation Python, soutenu par son écosystème scientifique de référence comprenant NumPy, SciPy et Pandas, offre un cadre computationnel d’une précision et d’une richesse remarquables pour extraire, manipuler et interpréter cette métrique. Ce guide exhaustif explore les fondements théoriques, les subtilités d’interpolation algorithmique, les stratégies d’optimisation computationnelle et les applications empiriques nécessaires à une maîtrise absolue du calcul de l’écart interquartile au sein d’environnements professionnels et de recherche académique.

1. Fondements théoriques et mathématiques de l’écart interquartile

1.1 Définition formelle et partitionnement des quartiles

D’un point de vue axiomatique, la caractérisation de la variabilité d’une variable aléatoire continue ou discrète requiert une partition méthodique de son domaine de définition. Soit un échantillon de taille n issu d’une population statistique, noté sous la forme d’une suite ordonnée d’observations quantitatives X = (x(1), x(2), …, x(n)), telle que x(1) ≤ x(2) ≤ … ≤ x(n). Le partitionnement quartile consiste à segmenter cette distribution ordonnée en quatre sous-ensembles cardinaux rigoureusement équiprobables, délimités par trois points de coupure structurels nommés quartiles, notés respectivement Q1, Q2 et Q3.

Le premier quartile, Q1, correspond au 25e centile empirique. Il constitue la valeur en deçà de laquelle se situe exactement un quart (25 %) de la masse de probabilité de l’échantillon, tandis que les trois quarts restants (75 %) lui sont supérieurs ou égaux. Formellement, il satisfait la condition selon laquelle la fonction de répartition empirique F(x) ≥ 0,25. Le deuxième quartile, Q2, n’est autre que la médiane statistique classique, scindant l’échantillon en deux segments égaux de 50 %. Enfin, le troisième quartile, Q3, marque le 75e centile, séparant les trois premiers quarts des données du quart supérieur le plus élevé, satisfaisant F(x) ≥ 0,75.

L’écart interquartile se définit alors de manière strictement analytique comme la différence absolue séparant le troisième quartile du premier quartile. L’équation fondamentale s’énonce ainsi :

IQR = Q3 – Q1

Cette différence scalaire isole parfaitement les 50 % centraux de la distribution statistique. Contrairement à l’étendue totale (calculée par la différence entre la valeur maximale et la valeur minimale), qui est excessivement sensible aux extrêmes, l’écart interquartile capture la densité centrale du nuage de points sans subir les influences périphériques des queues de distribution.

1.2 Propriétés métriques et robustesse face aux valeurs extrêmes

Dans l’évaluation formelle des estimateurs statistiques, le concept de robustesse occupe une place prépondérante. Le point de rupture asymptotique d’un estimateur définit la proportion maximale d’observations arbitrairement aberrantes qu’un échantillon peut intégrer avant que la métrique ne prenne une valeur infinie ou indéterminée. Alors que l’écart-type et la variance présentent un point de rupture égal à zéro — signifiant qu’une seule valeur tendant vers l’infini suffit à corrompre totalement l’estimation de la dispersion —, l’écart interquartile possède un point de rupture substantiel atteignant 25 %. Il est nécessaire de modifier au moins un quart des observations pour forcer l’IQR à diverger au-delà de toute limite raisonnable.

Cette invariance partielle aux queues de distribution confère à l’IQR une résilience exceptionnelle face aux contaminations accidentelles des données. Dans les distributions asymétriques — telles que les lois log-normales, exponentielles ou de Pareto qui modélisent fréquemment des durées, des revenus ou des temps de latence neuronale —, la moyenne arithmétique et l’écart-type se trouvent mécaniquement tirés vers les valeurs élevées. Dans ces configurations non gaussiennes, l’écart-type cesse d’être une mesure représentative de la variabilité typique. L’IQR, en s’ancrant exclusivement sur les statistiques d’ordre, maintient une fidélité d’interprétation irréprochable.

Sur le plan de l’efficacité asymptotique sous l’hypothèse d’une distribution parfaitement normale, l’estimateur de l’IQR s’avère moins efficace que l’écart-type usuel, affichant une variance d’échantillonnage théorique plus élevée. Néanmoins, dès que l’on s’écarte du postulat de normalité par l’apparition de queues épaisses ou de contaminations ponctuelles, l’efficacité relative de l’IQR surpasse rapidement celle des mesures paramétriques, justifiant pleinement son déploiement au sein de protocoles de traitement de signaux complexes.

1.3 Pertinence de l’écart interquartile dans l’analyse de données psychométriques

La psychométrie et les neurosciences computationnelles constituent des champs d’investigation où la rigueur métrologique exige l’abandon fréquent des hypothèses paramétriques strictes. Dans la construction et la validation d’instruments de mesure psychologiques, les chercheurs exploitent des échelles ordinales — telles que les échelles de Likert à 5 ou 7 points — ou des échelles quasi-d’intervalle. L’application brute de l’écart-type sur des données de nature ordinale viole les postulats fondamentaux de la théorie de la mesure, car les intervalles subjectifs entre les modalités d’évaluation ne sont pas rigoureusement constants. L’IQR, reposant exclusivement sur la structure de rang ordonnée, respecte la nature intrinsèque de ces données sans inventer une continuité arithmétique factice.

Un autre cas d’usage critique réside dans l’analyse des temps de réaction comportementaux mesurés lors de protocoles de chronométrie cognitive. Ces séries chronométriques sont systématiquement affectées par des fluctuations attentionnelles transitoires, des clignements oculaires, des micro-sommeils ou des anticipations motrices illégitimes. Il en résulte une distribution hautement asymétrique droite, caractérisée par une longue traîne de réponses lentes. Dans ce cadre, quantifier la dispersion intra-sujet ou inter-groupes à l’aide de l’écart-type induit des distorsions sévères. L’utilisation conjointe de la médiane et de l’IQR permet de cerner fidèlement la variabilité cognitive réelle de l’individu.

Enfin, dans le cadre du diagnostic clinique et de la neuropsychologie différentielle, l’homogénéité des cohortes de contrôle doit être établie sur des bases stables. Les scores obtenus à des inventaires évaluant la dépression, l’anxiété ou le fonctionnement exécutif manifestent des effets de plancher ou de plafond majeurs au sein des populations saines. L’écart interquartile permet d’isoler l’amplitude de dispersion normative sans subir l’écrasement statistique provoqué par ces agrégations massives d’observations sur les bornes de l’instrument clinique.

2. Configuration de l’environnement Python et préparation des bibliothèques

2.1 Mise en place de la pile scientifique Python

L’exploitation optimale des capacités analytiques du langage Python repose sur l’assemblage cohérent de bibliothèques tierces compilées, optimisées pour le calcul vectoriel de haute performance. Pour conduire des analyses quantitatives sans instabilité computationnelle, il est impératif d’utiliser les fondations matérielles et logicielles offertes par la suite scientifique constituée de NumPy, SciPy et Pandas. Ces modules constituent le socle algorithmique indispensable pour manipuler des structures matricielles denses et exécuter des opérations statistiques complexes avec des temps de réponse minimaux.

La gestion de ces dépendances requiert l’isolement scrupuleux des composants au sein d’un environnement virtuel dédié, évitant toute collision avec les paquetages du système d’exploitation hôte. À l’aide de l’utilitaire en ligne de commande, le déploiement d’un tel environnement s’opère par l’exécution successive d’instructions standardisées :

python -m venv env_statistiques
source env_statistiques/bin/activate (sur systèmes de type Unix) ou env_statistiquesScriptsactivate (sous Windows)
pip install numpy scipy pandas matplotlib seaborn

Il demeure capital de contrôler la compatibilité croisée entre ces distributions, en particulier lors du passage aux versions modernes de Python (3.10 et supérieures). La version 1.22 ou supérieure de NumPy et la version 1.9 de SciPy sont requises pour garantir l’accès aux interfaces unifiées d’interpolation quantile et à la gestion modernisée des exceptions de calcul.

2.2 Structuration et typage des données empiriques

La précision numérique conditionne directement la validité des résultats issus de calculs statistiques reposant sur les rangs et les interpolations. Dans l’écosystème Python, les structures génériques de type liste native présentent une flexibilité dynamique appréciable mais s’avèrent inefficaces pour des opérations massives en raison du surcoût d’encapsulation des objets (boxing) et du manque de contiguïté en mémoire vive. La conversion systématique des vecteurs d’observations vers des structures numpy.ndarray s’impose dès l’ingestion des séries de mesures.

Le contrôle rigoureux du type de données (dtype) est indispensable. Dans la plupart des architectures contemporaines à 64 bits, l’allocation en double précision en virgule flottante (float64) doit être explicitement garantie :

import numpy as np
scores_experimentaux = np.array([12.4, 15.1, 19.8, 14.2, 16.5], dtype=np.float64)

Cette rigueur empêche les phénomènes d’arrondi prématuré lors des calculs d’intervalles fractionnaires nécessaires à l’évaluation des quartiles. Lorsque les observations initiales sont encodées sous forme d’entiers (par exemple des scores discrets à un test d’aptitude), la conversion vers float64 doit précéder toute opération d’interpolation, sous peine de voir certains algorithmes dégrader la précision en tronquant les décimales intermédiaires.

2.3 Assurance de la reproductibilité des calculs

La crise de la reproductibilité qui traverse les sciences expérimentales commande une transparence absolue dans les scripts d’analyse de données. Dans le contexte de simulations stochastiques — par exemple l’estimation de l’IQR par des procédures de rééchantillonnage de type bootstrap ou la génération de données synthétiques de test —, l’initialisation déterministe des générateurs de nombres pseudo-aléatoires s’avère incontournable.

NumPy a révisé en profondeur son sous-système de génération aléatoire en remplaçant l’historique np.random.seed() par l’instanciation explicite d’un générateur fondé sur l’algorithme Permuted Congruential Generator (PCG64) :

rng = np.random.default_rng(seed=42)
donnees_simulees = rng.normal(loc=100.0, scale=15.0, size=1000)

Au-delà du contrôle stochastique, la consignation formelle des versions exactes des moteurs de calcul dans le métadonnées du projet de recherche garantit que des évolutions algorithmiques futures n’altéreront pas la réplication exacte des indices quantitatifs. La structuration modulaire des scripts statistiques, séparant le chargement des données brutes, leur validation structurelle et le module d’inférence de dispersion, participe de cette exigence méthodologique.

3. Calcul de l’écart interquartile sur un tableau unidimensionnel avec NumPy

3.1 Extraction des quartiles via numpy.percentile

La bibliothèque de base de calcul scientifique NumPy implémente la fonction numpy.percentile(), qui constitue historiquement l’approche la plus commune pour obtenir des valeurs centiles sur des tableaux d’observations. La signature canonique de cette fonction accepte comme premier paramètre le tableau de valeurs, et en second paramètre le rang centile exprimé sur une échelle allant de 0 à 100.

Plutôt que d’exécuter deux appels séquentiels isolés pour calculer indépendamment le premier et le troisième quartile — ce qui forcerait l’interpréteur à exécuter deux routines d’ordonnancement distinctes —, l’approche optimale consiste à transmettre un conteneur itérable comprenant simultanément le 25e et le 75e centile. NumPy procède ainsi à une optimisation de la recherche de rang en une seule passe opérationnelle :

import numpy as np
echantillon = np.array([45, 52, 54, 58, 61, 63, 67, 72, 75, 79, 83, 88, 92], dtype=np.float64)
q1, q3 = np.percentile(echantillon, [25, 75])
iqr_calcule = q3 – q1

Cette décomposition intermédiaire permet de conserver l’accès direct aux valeurs scalaires de Q1 et Q3, facilitant l’inspection ultérieure de la position relative de la distribution au sein de l’espace des variables observables.

3.2 Utilisation alternative de numpy.quantile

Introduite pour aligner la nomenclature de NumPy sur les standards formels du calcul des probabilités, la fonction numpy.quantile() propose une interface conceptuellement plus rigoureuse. Au lieu d’accepter des pourcentages compris entre 0 et 100, numpy.quantile() opère sur des proportions normalisées situées strictement sur l’intervalle continu [0.0, 1.0].

D’un point de vue de l’ingénierie logicielle, les deux fonctions partagent la même implémentation sous-jacente en langage C, mais l’utilisation de fractions quantiles normalisées évite les confusions dimensionnelles fréquentes lors de l’intégration dans des pipelines probabilistes théoriques :

q1, q3 = np.quantile(echantillon, [0.25, 0.75])
iqr_quantile = q3 – q1

Sur le plan de l’efficacité computationnelle brute, aucune divergence mesurable n’apparaît entre percentile et quantile sur des tableaux unidimensionnels standards. Néanmoins, l’emploi de numpy.quantile() est désormais préconisé dans les architectures scientifiques récentes pour standardiser l’ensemble des expressions mathématiques autour des fonctions de répartition cumulée normalisées.

3.3 Analyse pas à pas d’un exemple d’implémentation

Considérons une situation concrète issue de l’évaluation clinique des capacités attentionnelles chez des adultes. Un échantillon de 15 scores bruts à une épreuve de barrage de cibles a été colligé :

donnees_scores = np.array([23, 25, 28, 29, 31, 32, 34, 35, 36, 38, 41, 44, 47, 51, 62], dtype=np.float64)

Procédons au calcul rigoureux de l’IQR au moyen de l’instruction np.percentile :

q25, q75 = np.percentile(donnees_scores, [25, 75])
valeur_iqr = q75 – q25

L’exécution de cette séquence sous l’implémentation par défaut de NumPy isole les valeurs suivantes : Q1 s’établit à 30.0, tandis que Q3 atteint 42.5. La soustraction algébrique directe donne :
IQR = 42.5 – 30.0 = 12.5

L’interprétation clinique de ce résultat indique que l’intervalle d’amplitude séparant les performances des individus les plus fragiles (les 25 % inférieurs) de ceux affichant les réussites les plus remarquables (les 25 % supérieurs) est exactement de 12.5 unités de score. Le cœur homogène des 50 % de la population évaluée est donc compris dans cette fenêtre de 12.5 points, une information insensible au score isolé de 62, qui aurait considérablement gonflé la variance classique.

4. Méthodes d’interpolation des quantiles dans NumPy

4.1 Paramétrage de l’argument method dans NumPy

Lorsque la taille n d’un échantillon ne permet pas une division entière rigoureuse par 4 pour localiser les rangs des quartiles, une méthode de calcul d’interpolation mathématique doit impérativement intervenir. Historiquement contrôlé par le paramètre interpolation, NumPy a unifié et enrichi son interface à partir de sa version 1.22 via l’argument method, intégrant un éventail complet d’estimateurs.

Les méthodes les plus couramment manipulées sur le plan empirique incluent :

  • linear : Méthode par défaut. Elle calcule une interpolation linéaire continue entre les deux observations d’indices consécutifs les plus proches du rang théorique calculé.
  • lower : Force l’attribution de la valeur empirique entière la plus basse encadrant le rang cible, évitant la création artificielle de valeurs intermédiaires inexistantes dans l’échantillon.
  • higher : Sélectionne symétriquement la valeur empirique supérieure la plus proche.
  • midpoint : Détermine la moyenne arithmétique rigoureuse des deux points de données bornant l’intervalle de rang.
  • nearest : Attribue la valeur ponctuelle de l’échantillon la plus proche de la coordonnée continue calculée, en arrondissant selon les règles d’arrondi bancaire vers le nombre pair le plus proche en cas d’équidistance parfaite.

L’implémentation explicite de ces variantes s’effectue simplement lors de l’appel :

iqr_midpoint = np.percentile(donnees_scores, 75, method=’midpoint’) – np.percentile(donnees_scores, 25, method=’midpoint’)

4.2 Concordance avec les normes statistiques internationales

Dans un article fondateur publié en 1996, les statisticiens Rob J. Hyndman et Yanan Fan ont formalisé une typologie intégrant neuf méthodes distinctes d’estimation des quantiles d’échantillon, utilisées de manière dispersée à travers les différents logiciels statistiques commerciaux et académiques. L’absence d’harmonisation historique constituait une source majeure de confusion, les calculs réalisés sous le langage statistique R, sous SAS ou sous Python produisant des résultats numériques divergents sur un même jeu de données.

NumPy supporte l’ensemble de ces neuf types d’estimateurs à travers les options method=’weibull’ (type 6), method=’linear’ (type 7, traditionnel dans NumPy et dans la fonction quantile standard de R), method=’median_unbiased’ (type 8) ou method=’normal_unbiased’ (type 9). Par exemple, pour obtenir sous Python une correspondance mathématique exacte avec les résultats fournis par le système R (dont le comportement par défaut correspond au Type 7 de Hyndman et Fan) :

q1_r, q3_r = np.percentile(donnees_scores, [25, 75], method=’linear’)

En revanche, pour émuler des calculs provenant de bibliothèques d’ingénierie utilisant la distribution de Weibull sans biais pour des fonctions de répartition uniformes (Type 6), l’assignation method=’weibull’ garantit une portabilité logicielle sans compromis.

4.3 Sensibilité mathématique sur des échantillons restreints

Sur des ensembles massifs de données (par exemple n > 10 000), les variations produites par ces différents modes d’interpolation deviennent numériquement négligeables, convergeant vers des fractions décimales indifférenciables. À l’inverse, au sein d’échantillons cliniques restreints — situation quotidienne dans les études neuropsychologiques ou d’imagerie fonctionnelle où n < 30 en raison du coût des acquisitions —, l’impact du choix de la méthode devient déterminant.

Considérons un échantillon ténu de six sujets : [10, 12, 14, 18, 22, 30]. Calculons l’écart interquartile selon diverses approches :

  • En mode linear : Q1 = 12.5, Q3 = 21.0, soit un IQR de 8.5
  • En mode lower : Q1 = 12.0, Q3 = 18.0, soit un IQR de 6.0
  • En mode higher : Q1 = 14.0, Q3 = 22.0, soit un IQR de 8.0

L’écart absolu entre la métrique la plus basse (6.0) et la plus haute (8.5) représente ici une fluctuation relative supérieure à 40 % de la valeur du paramètre. Si cet IQR est exploité ultérieurement pour filtrer des observations anormales ou statuer sur l’homogénéité d’une pathologie rare, le protocole encourt un biais d’interprétation systémique. Il est donc fondamental de consigner dans tout rapport d’étude la méthode d’interpolation sélectionnée et de s’y tenir de manière stricte sur l’ensemble de la cohorte.

5. Calcul direct de l’écart interquartile avec la bibliothèque SciPy

5.1 Mise en œuvre de scipy.stats.iqr

Bien que la décomposition algébrique Q3 – Q1 via NumPy soit intuitive, la bibliothèque spécialisée SciPy propose au sein de son sous-module scipy.stats une fonction dédiée et hautement optimisée, spécifiquement conçue pour le calcul direct : scipy.stats.iqr().

Cette approche fonctionnelle unifiée présente une élégance conceptuelle supérieure, condensant en une seule instruction lisible le traitement de tableaux multidimensionnels et la sélection des paramètres d’interpolation :

from scipy import stats
donnees = [15.2, 18.4, 21.0, 22.5, 24.1, 28.7, 33.2]
dispersion_iqr = stats.iqr(donnees)

Un avantage majeur réside dans la présence de l’argument rng (à ne pas confondre avec un générateur pseudo-aléatoire ; ici rng est l’abréviation de range), qui permet de redéfinir à la volée les percentiles cibles. Par défaut fixé à rng=(25, 75) pour le calcul standard de l’écart interquartile, il autorise l’évaluation immédiate d’étendues inter-déciles ou de plages personnalisées sans modifier l’architecture du code :

etendue_interdecile = stats.iqr(donnees, rng=(10, 90))

5.2 Options avancées de normalisation et d’ajustement

L’une des fonctionnalités les plus puissantes de scipy.stats.iqr() réside dans son paramètre scale. Dans la théorie statistique générale, l’écart interquartile d’une loi normale théorique centrée réduite équivaut approximativement à 1.34898 fois son écart-type σ. Par conséquent, pour obtenir un estimateur robuste de l’écart-type basé sur l’IQR au sein de distributions présumées gaussiennes, il est d’usage de normaliser la valeur obtenue en la divisant par 1.34898 (ou en la multipliant par son inverse 0.7413).

SciPy intègre directement cette transformation via l’argument scalaire :

pseudo_sigma = stats.iqr(donnees, scale=’normal’)

Cette directive opère automatiquement l’ajustement multiplicatif, transformant l’IQR en un équivalent asymptotique direct de l’écart-type usuel, immunisé contre les observations aberrantes.

De surcroît, la fonction gère nativement les tableaux à dimensions multiples via l’argument vectoriel axis. L’adjonction conjointe du paramètre booléen keepdims=True garantit le maintien strict du rang tensoriel de la matrice d’origine, évitant les effondrements de dimension inopinés lors de l’intégration dans des architectures de calcul tensoriel complexe :

matrice_2d = np.array([[10, 15, 20], [12, 18, 25], [11, 14, 22]])
iqr_colonnes = stats.iqr(matrice_2d, axis=0, keepdims=True)

5.3 Évaluation comparative des performances SciPy et NumPy

Lors du développement de chaînes de traitement intensif — comme le traitement automatisé de flux vidéo de signaux oculométriques ou l’ingestion de millions de transactions bancaires —, le choix entre la formule NumPy manuelle et la fonction dédiée de SciPy conditionne la charge processeur.

Le module de profilage timeit permet d’objectiver ces comportements temporels :

Pour un vecteur aléatoire de taille n = 1 000 000, l’instruction NumPy q3 – q1 obtenue par un appel unique à np.quantile démontre une efficience légèrement supérieure en termes de microsecondes par rapport à scipy.stats.iqr. Cette modeste différence provient du fait que SciPy enveloppe le code de base dans une série de couches défensives : vérification de la présence de valeurs non numériques (NaN), application conditionnelle des méthodes de mise à l’échelle et validation rigoureuse des limites d’axes.

En résumé :

  • Pour des pipelines d’apprentissage automatique de production où chaque microseconde de calcul influe sur la latence du système, l’utilisation vectorisée pure de numpy.percentile() ou numpy.quantile() est recommandée.
  • Pour des analyses de laboratoire, d’exploration statistique, de psychométrie ou de bio-informatique, l’expressivité, la sécurité native et la gestion avancée des métriques d’ajustement offertes par scipy.stats.iqr() en font le standard incontesté.

6. Calcul de l’écart interquartile sur des DataFrames Pandas

6.1 Calcul de l’IQR sur une série Pandas individuelle

Dans la pratique moderne de la science des données en Python, les structures tabulaires de la bibliothèque Pandas constituent le pivot incontournable de l’ingestion et de la manipulation des données expérimentales. Une colonne d’un tableau Pandas s’instancie sous la forme d’un objet pandas.Series, doté de sa propre méthode quantile() hautement performante.

Le calcul de l’écart interquartile sur une variable quantitative isolée s’exécute avec une grande simplicité syntaxique :

import pandas as pd
serie_scores = pd.Series([104, 112, 115, 118, 122, 125, 128, 131, 142])
iqr_serie = serie_scores.quantile(0.75) – serie_scores.quantile(0.25)

Il est fréquent que les analystes recourent à la méthode describe() pour inspecter rapidement une colonne. Si cette fonction affiche effectivement les valeurs correspondantes aux pourcentages 25 %, 50 % et 75 %, elle ne calcule pas explicitement l’IQR lui-même, nécessitant une soustraction manuelle ultérieure. L’évaluation directe via quantile() s’avère donc incomparablement plus rapide et adaptée à l’automatisation au sein d’une chaîne logicielle.

6.2 Vectorisation du calcul sur plusieurs colonnes

Lorsque le chercheur est confronté à un tableau multidimensionnel comportant des dizaines ou des centaines de variables métriques — par exemple l’ensemble des sous-échelles d’une batterie cognitive neuropsychologique —, l’itération manuelle au travers d’une boucle impérative for représente une erreur de conception majeure qui dégrade sévèrement les performances d’exécution.

Pandas permet de vectoriser l’évaluation des quantiles à l’échelle de l’ensemble d’un DataFrame par une seule opération matricielle. En appliquant la méthode quantile() en lui transmettant la liste des deux bornes désirées, le calcul est parallélisé :

donnees_cliniques = pd.DataFrame({
    ‘Temps_Reaction’: [245, 312, 289, 450, 320, 295, 278, 360],
    ‘Erreurs_Comportementales’: [2, 0, 1, 8, 3, 2, 1, 4],
    ‘Age_Sujet’: [21, 24, 22, 28, 23, 25, 22, 27]
})
bornes = donnees_cliniques.quantile([0.25, 0.75])
iqr_colonnes = bornes.loc[0.75] – bornes.loc[0.25]

Si la structure de données contient des variables qualitatives, textuelles ou des identifiants catégoriels, l’application directe soulèvera une exception ou générera des colonnes tronquées. Il est de bonne pratique de pré-filtrer sélectivement les colonnes éligibles grâce à l’expression :
donnees_numeriques = donnees_cliniques.select_dtypes(include=[‘number’])

6.3 Agrégation par groupes expérimentaux avec groupby

L’inférence en psychologie expérimentale et en recherche biomédicale procède quasi-systématiquement par la comparaison de sous-groupes soumis à des conditions différentielles (par exemple : groupe témoin vs groupe traité ; sous-types d’amnésie ; cohortes d’âges distinctes). La méthode groupby() de Pandas s’avère dans ce cadre l’outil par excellence.

Pour extraire l’écart interquartile pour chaque condition expérimentale sans altérer la topologie des données, on définit une fonction d’agrégation dédiée, que l’on intègre directement au sein de la méthode agg() :

donnees_groupes = pd.DataFrame({
    ‘Condition’: [‘Controle’, ‘Controle’, ‘Controle’, ‘Traitement’, ‘Traitement’, ‘Traitement’],
    ‘Score_Attention’: [78, 82, 85, 62, 94, 91]
})
def calcul_iqr(colonne):
    return colonne.quantile(0.75) – colonne.quantile(0.25)
tableau_recapitulatif = donnees_groupes.groupby(‘Condition’)[‘Score_Attention’].agg(calcul_iqr)

Cette syntaxe produit un résultat d’agrégation tabulaire clair et compact, prêt à être inséré dans un compte-rendu scientifique de dispersion différentielle.

7. Gestion rigoureuse des valeurs manquantes dans le calcul

7.1 Impact des valeurs NaN sur les calculs standards

Dans la réalité expérimentale, la survenue de données manquantes (notées NaN pour Not a Number dans les structures Python) constitue un phénomène inévitable : défaillance d’un capteur de pression, abandon d’un participant en cours d’épreuve ou omission d’une réponse à un item d’évaluation. La prise en compte de ces lacunes informationnelles requiert une vigilance absolue.

Par défaut, dans l’architecture arithmétique de la norme IEEE 754 implémentée au cœur de NumPy, toute opération algébrique impliquant une valeur non définie propage immédiatement cette absence. Si un tableau de mesures intègre un seul NaN, l’appel standard à np.percentile() ou np.quantile() renvoie silencieusement la valeur np.nan sans lever d’erreur bloquante. Ce mécanisme de propagation peut contaminer de manière invisible des scripts entiers de calcul, produisant des métriques finales inutilisables.

Il est donc nécessaire de procéder systématiquement au diagnostic préliminaire de la qualité des structures de données avant toute tentative de calcul de rang :

presence_nan = np.isnan(echantillon_brut).any()

7.2 Recours aux fonctions spécialisées nanpercentile et nanquantile

Pour neutraliser ce risque de propagation sans contraindre l’analyste à des filtrages manuels longs et sources potentielles d’erreurs d’indexation, NumPy met à disposition deux fonctions optimisées : numpy.nanpercentile() et numpy.nanquantile().

Ces routines spécialisées procèdent à l’élimination algorithmique interne de l’ensemble des occurrences NaN avant de réordonner l’échantillon et de procéder à l’interpolation quantile. Les fractions d’effectifs sont alors calculées sur la base exclusive des données empiriques valides :

mesures_lacunaires = np.array([12.0, 14.5, np.nan, 18.2, 22.1, np.nan, 29.4])
q1_robuste, q3_robuste = np.nanpercentile(mesures_lacunaires, [25, 75])
iqr_valide = q3_robuste – q1_robuste

Attention toutefois : dans le cas pathologique où l’échantillon transmis ne contiendrait que des valeurs manquantes, ou si l’ensemble des observations résiduelles s’avère insuffisant pour satisfaire l’interpolation, la fonction lèvera un avertissement explicite (RuntimeWarning) et retournera np.nan, invitant à un audit structurel des instruments d’acquisition.

7.3 Le paramètre nan_policy dans SciPy

La fonction scipy.stats.iqr() se dote d’une flexibilité supérieure grâce à son paramètre institutionnel nan_policy, qui harmonise le comportement de l’interpréteur face aux valeurs non définies selon trois stratégies configurables :

  • nan_policy=’propagate’ : Comportement par défaut, analogue à celui de NumPy de base, renvoyant nan si une valeur manquante est détectée sur l’axe d’évaluation.
  • nan_policy=’omit’ : Filtre et ignore automatiquement les entrées non numériques lors du traitement mathématique de chaque tranche, reproduisant de façon transparente le comportement de numpy.nanpercentile().
  • nan_policy=’raise’ : Lève immédiatement une exception d’exécution (ValueError) dès qu’un NaN est présent dans le conteneur cible.

Cette troisième option est particulièrement précieuse dans le cadre d’applications critiques ou de protocoles cliniques réglementés où aucune perte d’intégrité des données ne saurait être admise sans intervention humaine directe :

# Détection stricte en environnement critique
stats.iqr(donnees_sujets, nan_policy=’raise’)

8. Détection et traitement des valeurs aberrantes via la méthode de Tukey

8.1 Formalisation mathématique des barrières de Tukey

L’un des rôles majeurs dévolus à l’écart interquartile dans l’histoire des statistiques réside dans la formulation des barrières d’identification des valeurs aberrantes développée par le statisticien américain John Tukey en 1977. Tukey a posé les bases de l’analyse exploratoire des données en définissant des limites objectives de détection indépendantes de tout postulat de normalité distributionnelle.

Les barrières de Tukey reposent sur l’addition et la soustraction de multiples constants de l’écart interquartile aux quartiles correspondants. Les équations se déclinent ainsi :

  • Barrière inférieure modérée = Q1 – (1.5 × IQR)
  • Barrière supérieure modérée = Q3 + (1.5 × IQR)
  • Barrière inférieure extrême = Q1 – (3.0 × IQR)
  • Barrière supérieure extrême = Q3 + (3.0 × IQR)

Toute observation se positionnant au-delà des clôtures modérées (1.5 × IQR) est répertoriée comme une valeur atypique suspecte (valeur aberrante modérée). Celles franchissant les clôtures extrêmes (3.0 × IQR) sont catégorisées comme des valeurs hautement anormales (valeurs aberrantes extrêmes), suggérant quasi systématiquement une anomalie instrumentale ou une violation radicale du protocole expérimental.

8.2 Algorithme Python d’identification et de masquage booléen

L’encodage de la logique de Tukey en Python s’exécute de manière élégante et ultra-rapide par le biais du masquage booléen vectorisé au sein de NumPy ou Pandas. Voici une fonction complète matérialisant ce processus de filtrage statistique :

def detecter_valeurs_aberrantes(donnees):
    q1, q3 = np.percentile(donnees, [25, 75])
    iqr = q3 – q1
    seuil_bas = q1 – 1.5 * iqr
    seuil_haut = q3 + 1.5 * iqr
    masque_aberrants = (donnees < seuil_bas) | (donnees > seuil_haut)
    return masque_aberrants, donnees[masque_aberrants], donnees[~masque_aberrants]

L’utilisation de l’opérateur tilde (~) permet d’inverser le masque booléen, extrayant en une fraction de seconde l’ensemble du sous-échantillon épuré, directement prêt pour l’analyse inférentielle ultérieure.

8.3 Considérations épistémologiques du nettoyage de données

Si la méthode de Tukey fournit une règle algorithmique séduisante et aisément automatisable, son application aveugle pose d’importants défis épistémologiques. Dans de nombreuses disciplines scientifiques, l’élimination systématique de tout point situé hors des barrières de Tukey s’apparente à une censure injustifiée de la variance naturelle de l’échantillon.

Dans les distributions naturellement asymétriques — telles que la survie cellulaire, les temps de latence motrice ou la distribution des richesses monétaires —, la règle de Tukey de 1.5 × IQR a tendance à désigner comme anormales des données authentiques participant de la forme réelle de la population cible. Les chercheurs doivent donc opérer une distinction stricte entre :

  • Les valeurs aberrantes provenant d’erreurs techniques documentées (fausses touches, artefacts de mouvement lors d’un enregistrement EEG), dont l’exclusion est méthodologiquement indiscutable.
  • La variabilité individuelle biologique réelle, qui doit impérativement être conservée et analysée à l’aide de modèles statistiques tolérant les queues de distribution épaisses (comme la régression robuste ou les modèles linéaires généralisés).

Toute procédure de nettoyage fondée sur l’écart interquartile doit être documentée avec une transparence intégrale dans les publications scientifiques, en mentionnant explicitement le nombre d’observations retranchées et leur justification clinique ou méthodologique.

9. Visualisation graphique de l’écart interquartile

9.1 Génération de boîtes à moustaches avec Matplotlib

La représentation visuelle canonique de l’écart interquartile s’incarne dans le diagramme en boîte — ou boîte à moustaches (boxplot) —, conceptualisé historiquement par Tukey. La bibliothèque Matplotlib offre le module de bas niveau matplotlib.pyplot.boxplot() permettant de tracer graphiquement ces composantes avec un contrôle micrométrique.

Au sein d’un diagramme en boîte, les bords inférieurs et supérieurs du rectangle central représentent rigoureusement le premier quartile (Q1) et le troisième quartile (Q3). La hauteur même du rectangle constitue ainsi la matérialisation graphique directe de l’écart interquartile. La médiane est figurée par un segment horizontal interne bissecteur.

Le paramètre whis (abréviation de whiskers, moustaches) régule la longueur maximale autorisée pour les segments s’étendant à l’extérieur de la boîte centrale. Par défaut, Matplotlib assigne whis=1.5, respectant scrupuleusement la formule des clôtures modérées de Tukey :

import matplotlib.pyplot as plt
plt.figure(figsize=(6, 8))
plt.boxplot(donnees_scores, whis=1.5, patch_artist=True)
plt.ylabel(« Score d’Attention Métrique »)
plt.title(« Visualisation Empirique de l’IQR (Q3 – Q1) »)
plt.show()

9.2 Visualisations avancées avec Seaborn

La bibliothèque de visualisation statistique Seaborn surpasse Matplotlib en fournissant des abstractions de haut niveau parfaitement articulées avec les structures de données Pandas. Pour appréhender simultanément la dispersion interquartile et la répartition empirique fine de chaque participant, la superposition conjointe d’un boxplot et d’un tracé de dispersion univarié (stripplot) s’avère particulièrement démonstrative :

import seaborn as sns
plt.figure(figsize=(8, 6))
sns.boxplot(x=’Condition’, y=’Score_Attention’, data=donnees_groupes, color=’lightblue’, width=0.4)
sns.stripplot(x=’Condition’, y=’Score_Attention’, data=donnees_groupes, color=’darkblue’, size=6, jitter=True)
plt.show()

Une alternative contemporaine réside dans le déploiement du diagramme en violon (violinplot). Seaborn y trace une estimation de la densité de probabilité par noyau (KDE), tout en intégrant dans sa cavité centrale une boîte à moustaches miniature où l’épaisseur de la barre noire centrale correspond exactement à l’amplitude de l’IQR, autorisant une appréciation simultanée de la multimodalité et de la dispersion centrale.

9.3 Standards esthétiques pour les publications académiques

Dans la perspective d’une publication dans des revues internationales de premier rang (telles que celles éditées par l’American Psychological Association, Elsevier ou Springer), l’esthétique des graphiques statistiques doit satisfaire des normes strictes de lisibilité, de sobriété et de fidélité métrique. Les graphiques en couleurs criardes doivent être bannis au profit de palettes en niveaux de gris ou d’échelles chromatiques perceptuellement uniformes et accessibles aux lecteurs daltoniens (comme les palettes viridis ou cividis).

L’exportation finale du tracé doit impérativement privilégier des formats vectoriels haute définition afin d’éviter toute pixellisation lors de la mise en page finale des manuscrits scientifiques :

plt.savefig(‘dispersion_iqr_haute_resolution.pdf’, format=’pdf’, dpi=300, bbox_inches=’tight’)
plt.savefig(‘dispersion_iqr_haute_resolution.svg’, format=’svg’, bbox_inches=’tight’)

L’insertion d’annotations textuelles chiffrées indiquant la valeur scalaire de l’IQR directement à côté de l’accolade délimitant la boîte apporte une rigueur pédagogique appréciée des comités de lecture.

10. Comparaison critique de l’IQR avec d’autres indices de dispersion

10.1 Écart interquartile versus Écart-type et Variance

Le tableau comparatif suivant illustre les distinctions opérationnelles majeures entre les indices paramétriques traditionnels et l’écart interquartile :

Métrique Sensibilité aux valeurs extrêmes Hypothèse de distribution Point de rupture Usage recommandé
Variance (σ²) Extrême (amplification quadratique) Normale / Gaussienne 0 % (Non robuste) Modélisation théorique, ANOVA paramétrique
Écart-type (σ) Très élevée (linéaire aux écarts) Symétrique, queues légères 0 % (Non robuste) Statistiques descriptives standard de données normales
Écart Interquartile (IQR) Nulle aux extrêmes (borné aux 50 % centraux) Aucune (Non paramétrique) 25 % (Hautement robuste) Distributions asymétriques, scores ordinaux, données bruitées
Écart Absolu Médian (MAD) Minimale absolue Aucune (Non paramétrique) 50 % (Résistance maximale) Détection stricte d’anomalies, filtrage machine learning

L’écart-type procède en calculant les écarts à la moyenne élevés au carré, ce qui amplifie de façon exponentielle l’influence des valeurs s’écartant du centre de la distribution. Sous l’hypothèse stricte d’une distribution normale, la relation mathématique exacte liant l’écart-type σ et l’IQR s’énonce selon l’équation :

IQR ≈ 1.34898 × σ   (ou réciproquement : σ ≈ 0.7413 × IQR)

Si, au sein d’un échantillon empirique volumineux, le quotient de l’IQR par l’écart-type s’écarte substantiellement de 1.35, le chercheur dispose d’une indication diagnostique formelle signifiant que les données ne suivent pas une loi normale, justifiant l’abandon des tests paramétriques usuels.

10.2 Écart interquartile versus Écart absolu médian (MAD)

Si l’IQR représente l’indice de dispersion robuste le plus universellement compris par la communauté scientifique, il existe une autre métrique encore plus robuste sur le plan théorique : l’écart absolu médian (MAD pour Median Absolute Deviation). Le MAD correspond à la médiane des écarts absolus par rapport à la médiane de l’échantillon.

Alors que l’IQR affiche un point de rupture de 25 %, le MAD atteint le point de rupture théorique maximal possible pour un estimateur de dispersion, soit 50 %. Cela signifie que près de la moitié de l’échantillon peut être corrompue sans que le MAD ne tende vers l’infini. SciPy propose son calcul via scipy.stats.median_abs_deviation :

mad_valeur = stats.median_abs_deviation(donnees)

Néanmoins, en psychologie expérimentale et dans les sciences médicales, l’IQR demeure généralement préféré au MAD pour les comptes-rendus finaux. La raison en est sa lisibilité intuitive : l’IQR délimite physiquement un intervalle de scores réels dans lesquels évolue la moitié des participants, tandis que le MAD représente une distance d’écartement médiane abstraite, plus complexe à appréhender conceptuellement par les cliniciens.

10.3 Tableau récapitulatif des propriétés métriques

La caractérisation d’une distribution empirique ne peut se réduire à la seule dispersion ; elle doit s’articuler avec les moments d’ordre supérieur que sont l’asymétrie (skewness) et l’aplatissement (kurtosis). Face à ces profils non gaussiens, l’écart interquartile manifeste des propriétés d’une grande stabilité :

  • Sensibilité à l’asymétrie : Lorsque l’asymétrie d’une série augmente, la moyenne et l’écart-type dérivent vers la queue lourde. L’IQR reste stable dans son amplitude, mais sa position par rapport à la médiane permet d’objectiver l’asymétrie : dans une distribution étirée vers la droite, la distance (Q3 – Médiane) surpasse largement (Médiane – Q1).
  • Résistance à l’aplatissement leptokurtique : Dans les distributions caractérisées par un pic central très resserré et des queues ultra-longues (fort kurtosis), l’écart-type est gonflé de manière trompeuse par les queues lointaines. L’IQR saisit précisément l’extrême homogénéité du sommet central, évitant de conclure à tort à une large hétérogénéité des sujets.

Ces propriétés confèrent à l’écart interquartile une neutralité axiologique indispensable dans l’analyse de scores cliniques hétérogènes.

11. Application empirique : Analyse de temps de réaction en psychologie cognitive

11.1 Structure du protocole expérimental et des données

Afin de concrétiser l’ensemble de ces préceptes au sein d’un cas d’usage professionnel, considérons une expérimentation menée en laboratoire de neuropsychologie cognitive. L’investigation évalue l’impact de la privation de sommeil sur l’attention soutenue à l’aide d’une tâche de vigilance psychomotrice (PVT). Chaque participant doit presser une touche dès l’apparition d’un stimulus visuel aléatoire. Les temps de réaction sont enregistrés avec une précision millimétrique.

Les données chronométriques de cette nature présentent structurellement une distribution ex-gaussienne : une composante normale représentant le temps incompressible de transmission sensori-motrice, adossée à une composante exponentielle matérialisant les fluctuations de l’attention corticale. L’importation du jeu de données brut s’effectue via Pandas :

donnees_pvt = pd.read_csv(‘resultats_vigilance_cognitive.csv’)

Le fichier agrège les colonnes : Identifiant_Sujet, Groupe_Sommeil (Repose vs Prive), Temps_Reaction_ms, et Validite_Essai.

11.2 Pipeline complet de traitement et de calcul en Python

L’implémentation de la chaîne algorithmique doit valider les types, neutraliser les valeurs manquantes sans altérer la cohérence, calculer la métrique d’IQR par groupe et exclure les valeurs aberrantes méthodologiques (temps de réponse inférieurs à 150 ms, physiologiquement impossibles sans anticipation, ou supérieurs à 3000 ms, traduisant un décrochage attentionnel majeur) :

import numpy as np
import pandas as pd
from scipy import stats

# Chargement et épuration préliminaire
df = donnees_pvt.copy()
df = df.dropna(subset=[‘Temps_Reaction_ms’])
df = df[(df[‘Temps_Reaction_ms’] >= 150) & (df[‘Temps_Reaction_ms’] <= 3000)]

# Fonction de calcul vectorisée de l’IQR via SciPy
def extraire_metriques_dispersion(serie):
    valeur_mediane = np.median(serie)
    valeur_iqr = stats.iqr(serie, interpolation=’linear’)
    q1 = np.percentile(serie, 25)
    q3 = np.percentile(serie, 75)
    return pd.Series({‘Mediane’: valeur_mediane, ‘Q1’: q1, ‘Q3’: q3, ‘IQR’: valeur_iqr})

# Agrégation différentielle par condition expérimentale
bilan_statistique = df.groupby(‘Groupe_Sommeil’)[‘Temps_Reaction_ms’].apply(extraire_metriques_dispersion).unstack()
print(bilan_statistique)

Ce script assure une chaîne de bout en bout parfaitement reproductible, sans dépendance à des boucles itératives manuelles.

11.3 Rapportage académique et interprétation des résultats

Les normes de rédaction scientifique fixées par l’American Psychological Association (manuel APA, 7e édition) encadrent rigoureusement la restitution écrite des statistiques d’ordre. Dans le corps du texte d’une publication, les estimations non paramétriques s’énoncent en associant systématiquement la médiane à son intervalle interquartile ou à ses bornes exactes :

« L’analyse des temps de réaction révèle une augmentation marquée de la variabilité attentionnelle sous privation de sommeil. Les sujets reposés manifestent une médiane de réponse stable (Mdn = 242.0 ms, IQR = 48.5 ms, Q1 = 220.0 ms, Q3 = 268.5 ms), tandis que les participants privés de sommeil affichent une détérioration de la rapidité couplée à une dispersion accrue des performances (Mdn = 338.5 ms, IQR = 112.0 ms, Q1 = 286.0 ms, Q3 = 398.0 ms). »

L’interprétation cognitive démontre sans équivoque que la privation de sommeil n’induit pas simplement un ralentissement global et uniforme du système nerveux central, mais provoque une désynchronisation motrice caractérisée par un quasi-triplement de l’IQR (passant de 48.5 ms à 112.0 ms). Cette variabilité comportementale accrue constitue le biomarqueur premier de l’instabilité de l’attention corticale.

12. Pièges fréquents, optimisation du code et bonnes pratiques

12.1 Erreurs méthodologiques et de programmation récurrentes

L’expérience montre que même des développeurs chevronnés ou des chercheurs confirmés commettent régulièrement des bévues d’implémentation lors du calcul de l’écart interquartile en Python. Voici les trois pièges les plus répandus :

  1. Confusion d’échelle entre NumPy et Pandas : Transmettre la liste [25, 75] à la méthode pandas.Series.quantile() provoquera une exception d’exécution ou un calcul incohérent, car Pandas attend strictement des fractions comprises entre 0.0 et 1.0 (soit [0.25, 0.75]). Inversement, si l’on transmet [0.25, 0.75] à l’ancienne version de numpy.percentile(), la fonction calculera les quartiles au centième de centile inférieur, faussant radicalement le résultat sans alerter l’utilisateur.
  2. Éblouissement face aux matrices multidimensionnelles : Lors du traitement d’une matrice NumPy bidimensionnelle sans spécifier l’argument axis, NumPy aplatit l’intégralité du tableau en un vecteur unidimensionnel géant avant de calculer un IQR unique global. Si l’objectif était d’obtenir l’IQR de chaque variable indépendante (colonnes), l’oubli de axis=0 fausse entièrement la matrice résultante.
  3. Propagation silencieuse de valeurs textuelles : La présence d’un espace vide ou d’une chaîne de caractères ‘NA’ dans un tableau lu sans typage explicite convertit silencieusement le tableau NumPy en type object, bloquant net les opérations mathématiques de tri ou déclenchant des erreurs cryptiques lors de l’interpolation.

12.2 Optimisation vectorielle sur des ensembles de données volumineux

Face à des volumétries massives excédant les dizaines de millions d’enregistrements (Big Data biomédical, relevés d’accélérométrie continue), l’efficacité du calcul de l’IQR dépend de la gestion de la mémoire cache du processeur et des mécanismes de partitionnement d’ordonnancement.

L’algorithme de calcul quantile sous-jacent dans NumPy repose sur introselect, une variante optimisée de l’algorithme Quickselect qui atteint une complexité temporelle linéaire en moyenne, notée O(n). Pour préserver cette performance théorique :

  • Bannissez formellement toute boucle native Python for ligne in dataframe.iterrows() : ces itérations dégradent les performances de plusieurs ordres de grandeur par rapport aux appels vectorisés de bas niveau compilés en C.
  • Évitez le tri complet préalable du tableau via sort() avant d’extraire les quartiles : numpy.percentile() partitionne les données sans réaliser le tri intégral O(n log n), économisant des cycles d’horloge précieux.
  • Utilisez l’utilitaire de profilage cProfile pour identifier d’éventuels goulets d’étranglement structurels dans l’ingestion de vos pipelines de données volumineuses :
    python -m cProfile -s time mon_script_analytique.py

12.3 Standardisation d’une fonction réutilisable et documentée

Pour pérenniser le capital logiciel d’un laboratoire ou d’une équipe d’ingénierie statistique, la consolidation des calculs au sein d’une fonction Python universelle, robuste, typée statiquement et intégralement documentée selon le standard des docstrings NumPy constitue la règle de l’art :

from typing import Union, Sequence
import numpy as np
import pandas as pd

def calculer_iqr_robuste(
    donnees: Union[np.ndarray, pd.Series, Sequence[float]],
    ignorer_nan: bool = True,
    methode_interpolation: str = ‘linear’
) -> float:
    «  » »
    Calcule l’écart interquartile (IQR) de manière robuste sur tout conteneur numérique.
    
    Paramètres
    ———-
    donnees : Union[np.ndarray, pd.Series, Sequence[float]]
        Vecteur unidimensionnel de mesures quantitatives.
    ignorer_nan : bool, défaut=True
        Indique si les valeurs manquantes doivent être omises dans le calcul.
    methode_interpolation : str, défaut=’linear’
        Algorithme d’interpolation quantile (options : ‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’).
    
    Retourne
    ——-
    float
        Valeur scalaire représentant l’étendue interquartile (Q3 – Q1).
    «  » »
    tableau = np.asarray(donnees, dtype=np.float64)
    if tableau.ndim != 1:
        raise ValueError(« La fonction attend un tableau unidimensionnel. »)
    
    if ignorer_nan:
        q1, q3 = np.nanpercentile(tableau, [25, 75], method=methode_interpolation)
    else:
        q1, q3 = np.percentile(tableau, [25, 75], method=methode_interpolation)
    
    return float(q3 – q1)

L’intégrité de cette brique logicielle gagne à être validée à l’aide de tests unitaires formels sous l’égide du cadriciel pytest, vérifiant son comportement nominal face à des séries paires, impaires, intégrant des fractions décimales ou contenant des blocs de NaN, scellant ainsi l’excellence de la chaîne de calcul statistique.

Références

Citer cet article

memjavad (2026, septembre 6). Comment calculer l’écart interquartile en Python. Base de données de psychologie en français. https://fr.arabpsychology.com/statistics/comment-calculer-ecart-interquartile-python/
memjavad. “Comment calculer l’écart interquartile en Python.” Base de données de psychologie en français, 6 septembre 2026, https://fr.arabpsychology.com/statistics/comment-calculer-ecart-interquartile-python/.
memjavad. “Comment calculer l’écart interquartile en Python.” Base de données de psychologie en français. septembre 6, 2026. https://fr.arabpsychology.com/statistics/comment-calculer-ecart-interquartile-python/.