{"id":2224,"date":"2026-10-14T18:00:49","date_gmt":"2026-10-14T18:00:49","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-calculer-ecart-interquartile-python\/"},"modified":"2026-10-14T18:00:49","modified_gmt":"2026-10-14T18:00:49","slug":"comment-calculer-ecart-interquartile-python","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-calculer-ecart-interquartile-python","title":{"rendered":"Comment calculer l&rsquo;\u00e9cart interquartile en Python"},"content":{"rendered":"<p>Dans le domaine de l&rsquo;analyse exploratoire des donn\u00e9es, de l&rsquo;\u00e9conom\u00e9trie et des sciences du comportement, la caract\u00e9risation de la dispersion d&rsquo;une distribution constitue une \u00e9tape fondamentale, souvent \u00e9clips\u00e9e par la simple recherche d&rsquo;une tendance centrale. Si la moyenne arithm\u00e9tique et l&rsquo;\u00e9cart-type demeurent les m\u00e9triques traditionnellement enseign\u00e9es et d\u00e9ploy\u00e9es dans les contextes param\u00e9triques id\u00e9aux, leur vuln\u00e9rabilit\u00e9 intrins\u00e8que face aux perturbations structurales des donn\u00e9es repr\u00e9sente un \u00e9cueil m\u00e9thodologique majeur. Une unique observation aberrante, qu&rsquo;elle r\u00e9sulte d&rsquo;un art\u00e9fact exp\u00e9rimental, d&rsquo;une erreur de saisie ou d&rsquo;une manifestation biologique extr\u00eame, suffit \u00e0 biaiser l&rsquo;\u00e9cart-type de mani\u00e8re disproportionn\u00e9e, faussant irr\u00e9m\u00e9diablement l&rsquo;interpr\u00e9tation des ph\u00e9nom\u00e8nes sous-jacents.<\/p>\n<p>L&rsquo;\u00e9cart interquartile (commun\u00e9ment d\u00e9sign\u00e9 sous l&rsquo;acronyme anglais <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Interquartile_range\">IQR pour Interquartile Range<\/a>) s&rsquo;impose comme l&rsquo;un des estimateurs non param\u00e9triques de dispersion les plus robustes et \u00e9l\u00e9gants de la statistique moderne. En quantifiant l&rsquo;\u00e9tendue occup\u00e9e par les cinquante pour cent centraux d&rsquo;un \u00e9chantillon ordonn\u00e9, l&rsquo;IQR s&rsquo;affranchit des distorsions induites par les queues de distribution lourdes et l&rsquo;asym\u00e9trie prononc\u00e9e. Cette statistique d&rsquo;ordre offre ainsi une lecture stable et fid\u00e8le de la variabilit\u00e9 interne des cohortes, condition indispensable \u00e0 l&rsquo;analyse rigoureuse des scores psychom\u00e9triques, des s\u00e9ries temporelles biom\u00e9dicales ou des signaux financiers \u00e0 forte volatilit\u00e9.<\/p>\n<p>Le langage de programmation Python, soutenu par son \u00e9cosyst\u00e8me scientifique de r\u00e9f\u00e9rence comprenant <a rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/\">NumPy<\/a>, <a rel=\"noopener noreferrer\" href=\"https:\/\/scipy.org\/\">SciPy<\/a> et <a rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/\">Pandas<\/a>, offre un cadre computationnel d&rsquo;une pr\u00e9cision et d&rsquo;une richesse remarquables pour extraire, manipuler et interpr\u00e9ter cette m\u00e9trique. Ce guide exhaustif explore les fondements th\u00e9oriques, les subtilit\u00e9s d&rsquo;interpolation algorithmique, les strat\u00e9gies d&rsquo;optimisation computationnelle et les applications empiriques n\u00e9cessaires \u00e0 une ma\u00eetrise absolue du calcul de l&rsquo;\u00e9cart interquartile au sein d&rsquo;environnements professionnels et de recherche acad\u00e9mique.<\/p>\n<h2>1. Fondements th\u00e9oriques et math\u00e9matiques de l&rsquo;\u00e9cart interquartile<\/h2>\n<h3>1.1 D\u00e9finition formelle et partitionnement des quartiles<\/h3>\n<p>D&rsquo;un point de vue axiomatique, la caract\u00e9risation de la variabilit\u00e9 d&rsquo;une variable al\u00e9atoire continue ou discr\u00e8te requiert une partition m\u00e9thodique de son domaine de d\u00e9finition. Soit un \u00e9chantillon de taille <em>n<\/em> issu d&rsquo;une population statistique, not\u00e9 sous la forme d&rsquo;une suite ordonn\u00e9e d&rsquo;observations quantitatives <em>X = (x(1), x(2), &#8230;, x(n))<\/em>, telle que <em>x(1) &le; x(2) &le; &#8230; &le; x(n)<\/em>. Le partitionnement quartile consiste \u00e0 segmenter cette distribution ordonn\u00e9e en quatre sous-ensembles cardinaux rigoureusement \u00e9quiprobables, d\u00e9limit\u00e9s par trois points de coupure structurels nomm\u00e9s quartiles, not\u00e9s respectivement Q1, Q2 et Q3.<\/p>\n<p>Le premier quartile, Q1, correspond au 25e centile empirique. Il constitue la valeur en de\u00e7\u00e0 de laquelle se situe exactement un quart (25 %) de la masse de probabilit\u00e9 de l&rsquo;\u00e9chantillon, tandis que les trois quarts restants (75 %) lui sont sup\u00e9rieurs ou \u00e9gaux. Formellement, il satisfait la condition selon laquelle la fonction de r\u00e9partition empirique <em>F(x) &ge; 0,25<\/em>. Le deuxi\u00e8me quartile, Q2, n&rsquo;est autre que la m\u00e9diane statistique classique, scindant l&rsquo;\u00e9chantillon en deux segments \u00e9gaux de 50 %. Enfin, le troisi\u00e8me quartile, Q3, marque le 75e centile, s\u00e9parant les trois premiers quarts des donn\u00e9es du quart sup\u00e9rieur le plus \u00e9lev\u00e9, satisfaisant <em>F(x) &ge; 0,75<\/em>.<\/p>\n<p>L&rsquo;\u00e9cart interquartile se d\u00e9finit alors de mani\u00e8re strictement analytique comme la diff\u00e9rence absolue s\u00e9parant le troisi\u00e8me quartile du premier quartile. L&rsquo;\u00e9quation fondamentale s&rsquo;\u00e9nonce ainsi :<\/p>\n<p><strong>IQR = Q3 &#8211; Q1<\/strong><\/p>\n<p>Cette diff\u00e9rence scalaire isole parfaitement les 50 % centraux de la distribution statistique. Contrairement \u00e0 l&rsquo;\u00e9tendue totale (calcul\u00e9e par la diff\u00e9rence entre la valeur maximale et la valeur minimale), qui est excessivement sensible aux extr\u00eames, l&rsquo;\u00e9cart interquartile capture la densit\u00e9 centrale du nuage de points sans subir les influences p\u00e9riph\u00e9riques des queues de distribution.<\/p>\n<h3>1.2 Propri\u00e9t\u00e9s m\u00e9triques et robustesse face aux valeurs extr\u00eames<\/h3>\n<p>Dans l&rsquo;\u00e9valuation formelle des estimateurs statistiques, le concept de robustesse occupe une place pr\u00e9pond\u00e9rante. Le point de rupture asymptotique d&rsquo;un estimateur d\u00e9finit la proportion maximale d&rsquo;observations arbitrairement aberrantes qu&rsquo;un \u00e9chantillon peut int\u00e9grer avant que la m\u00e9trique ne prenne une valeur infinie ou ind\u00e9termin\u00e9e. Alors que l&rsquo;\u00e9cart-type et la variance pr\u00e9sentent un point de rupture \u00e9gal \u00e0 z\u00e9ro &mdash; signifiant qu&rsquo;une seule valeur tendant vers l&rsquo;infini suffit \u00e0 corrompre totalement l&rsquo;estimation de la dispersion &mdash;, l&rsquo;\u00e9cart interquartile poss\u00e8de un point de rupture substantiel atteignant 25 %. Il est n\u00e9cessaire de modifier au moins un quart des observations pour forcer l&rsquo;IQR \u00e0 diverger au-del\u00e0 de toute limite raisonnable.<\/p>\n<p>Cette invariance partielle aux queues de distribution conf\u00e8re \u00e0 l&rsquo;IQR une r\u00e9silience exceptionnelle face aux contaminations accidentelles des donn\u00e9es. Dans les distributions asym\u00e9triques &mdash; telles que les lois log-normales, exponentielles ou de Pareto qui mod\u00e9lisent fr\u00e9quemment des dur\u00e9es, des revenus ou des temps de latence neuronale &mdash;, la moyenne arithm\u00e9tique et l&rsquo;\u00e9cart-type se trouvent m\u00e9caniquement tir\u00e9s vers les valeurs \u00e9lev\u00e9es. Dans ces configurations non gaussiennes, l&rsquo;\u00e9cart-type cesse d&rsquo;\u00eatre une mesure repr\u00e9sentative de la variabilit\u00e9 typique. L&rsquo;IQR, en s&rsquo;ancrant exclusivement sur les statistiques d&rsquo;ordre, maintient une fid\u00e9lit\u00e9 d&rsquo;interpr\u00e9tation irr\u00e9prochable.<\/p>\n<p>Sur le plan de l&rsquo;efficacit\u00e9 asymptotique sous l&rsquo;hypoth\u00e8se d&rsquo;une distribution parfaitement normale, l&rsquo;estimateur de l&rsquo;IQR s&rsquo;av\u00e8re moins efficace que l&rsquo;\u00e9cart-type usuel, affichant une variance d&rsquo;\u00e9chantillonnage th\u00e9orique plus \u00e9lev\u00e9e. N\u00e9anmoins, d\u00e8s que l&rsquo;on s&rsquo;\u00e9carte du postulat de normalit\u00e9 par l&rsquo;apparition de queues \u00e9paisses ou de contaminations ponctuelles, l&rsquo;efficacit\u00e9 relative de l&rsquo;IQR surpasse rapidement celle des mesures param\u00e9triques, justifiant pleinement son d\u00e9ploiement au sein de protocoles de traitement de signaux complexes.<\/p>\n<h3>1.3 Pertinence de l&rsquo;\u00e9cart interquartile dans l&rsquo;analyse de donn\u00e9es psychom\u00e9triques<\/h3>\n<p>La psychom\u00e9trie et les neurosciences computationnelles constituent des champs d&rsquo;investigation o\u00f9 la rigueur m\u00e9trologique exige l&rsquo;abandon fr\u00e9quent des hypoth\u00e8ses param\u00e9triques strictes. Dans la construction et la validation d&rsquo;instruments de mesure psychologiques, les chercheurs exploitent des \u00e9chelles ordinales &mdash; telles que les \u00e9chelles de Likert \u00e0 5 ou 7 points &mdash; ou des \u00e9chelles quasi-d&rsquo;intervalle. L&rsquo;application brute de l&rsquo;\u00e9cart-type sur des donn\u00e9es de nature ordinale viole les postulats fondamentaux de la th\u00e9orie de la mesure, car les intervalles subjectifs entre les modalit\u00e9s d&rsquo;\u00e9valuation ne sont pas rigoureusement constants. L&rsquo;IQR, reposant exclusivement sur la structure de rang ordonn\u00e9e, respecte la nature intrins\u00e8que de ces donn\u00e9es sans inventer une continuit\u00e9 arithm\u00e9tique factice.<\/p>\n<p>Un autre cas d&rsquo;usage critique r\u00e9side dans l&rsquo;analyse des temps de r\u00e9action comportementaux mesur\u00e9s lors de protocoles de chronom\u00e9trie cognitive. Ces s\u00e9ries chronom\u00e9triques sont syst\u00e9matiquement affect\u00e9es par des fluctuations attentionnelles transitoires, des clignements oculaires, des micro-sommeils ou des anticipations motrices ill\u00e9gitimes. Il en r\u00e9sulte une distribution hautement asym\u00e9trique droite, caract\u00e9ris\u00e9e par une longue tra\u00eene de r\u00e9ponses lentes. Dans ce cadre, quantifier la dispersion intra-sujet ou inter-groupes \u00e0 l&rsquo;aide de l&rsquo;\u00e9cart-type induit des distorsions s\u00e9v\u00e8res. L&rsquo;utilisation conjointe de la m\u00e9diane et de l&rsquo;IQR permet de cerner fid\u00e8lement la variabilit\u00e9 cognitive r\u00e9elle de l&rsquo;individu.<\/p>\n<p>Enfin, dans le cadre du diagnostic clinique et de la neuropsychologie diff\u00e9rentielle, l&rsquo;homog\u00e9n\u00e9it\u00e9 des cohortes de contr\u00f4le doit \u00eatre \u00e9tablie sur des bases stables. Les scores obtenus \u00e0 des inventaires \u00e9valuant la d\u00e9pression, l&rsquo;anxi\u00e9t\u00e9 ou le fonctionnement ex\u00e9cutif manifestent des effets de plancher ou de plafond majeurs au sein des populations saines. L&rsquo;\u00e9cart interquartile permet d&rsquo;isoler l&rsquo;amplitude de dispersion normative sans subir l&rsquo;\u00e9crasement statistique provoqu\u00e9 par ces agr\u00e9gations massives d&rsquo;observations sur les bornes de l&rsquo;instrument clinique.<\/p>\n<h2>2. Configuration de l&rsquo;environnement Python et pr\u00e9paration des biblioth\u00e8ques<\/h2>\n<h3>2.1 Mise en place de la pile scientifique Python<\/h3>\n<p>L&rsquo;exploitation optimale des capacit\u00e9s analytiques du langage Python repose sur l&rsquo;assemblage coh\u00e9rent de biblioth\u00e8ques tierces compil\u00e9es, optimis\u00e9es pour le calcul vectoriel de haute performance. Pour conduire des analyses quantitatives sans instabilit\u00e9 computationnelle, il est imp\u00e9ratif d&rsquo;utiliser les fondations mat\u00e9rielles et logicielles offertes par la suite scientifique constitu\u00e9e de NumPy, SciPy et Pandas. Ces modules constituent le socle algorithmique indispensable pour manipuler des structures matricielles denses et ex\u00e9cuter des op\u00e9rations statistiques complexes avec des temps de r\u00e9ponse minimaux.<\/p>\n<p>La gestion de ces d\u00e9pendances requiert l&rsquo;isolement scrupuleux des composants au sein d&rsquo;un environnement virtuel d\u00e9di\u00e9, \u00e9vitant toute collision avec les paquetages du syst\u00e8me d&rsquo;exploitation h\u00f4te. \u00c0 l&rsquo;aide de l&rsquo;utilitaire en ligne de commande, le d\u00e9ploiement d&rsquo;un tel environnement s&rsquo;op\u00e8re par l&rsquo;ex\u00e9cution successive d&rsquo;instructions standardis\u00e9es :<\/p>\n<p><strong>python -m venv env_statistiques<\/strong><br \/>\n<strong>source env_statistiques\/bin\/activate<\/strong> (sur syst\u00e8mes de type Unix) ou <strong>env_statistiquesScriptsactivate<\/strong> (sous Windows)<br \/>\n<strong>pip install numpy scipy pandas matplotlib seaborn<\/strong><\/p>\n<p>Il demeure capital de contr\u00f4ler la compatibilit\u00e9 crois\u00e9e entre ces distributions, en particulier lors du passage aux versions modernes de Python (3.10 et sup\u00e9rieures). La version 1.22 ou sup\u00e9rieure de NumPy et la version 1.9 de SciPy sont requises pour garantir l&rsquo;acc\u00e8s aux interfaces unifi\u00e9es d&rsquo;interpolation quantile et \u00e0 la gestion modernis\u00e9e des exceptions de calcul.<\/p>\n<h3>2.2 Structuration et typage des donn\u00e9es empiriques<\/h3>\n<p>La pr\u00e9cision num\u00e9rique conditionne directement la validit\u00e9 des r\u00e9sultats issus de calculs statistiques reposant sur les rangs et les interpolations. Dans l&rsquo;\u00e9cosyst\u00e8me Python, les structures g\u00e9n\u00e9riques de type liste native pr\u00e9sentent une flexibilit\u00e9 dynamique appr\u00e9ciable mais s&rsquo;av\u00e8rent inefficaces pour des op\u00e9rations massives en raison du surco\u00fbt d&rsquo;encapsulation des objets (boxing) et du manque de contigu\u00eft\u00e9 en m\u00e9moire vive. La conversion syst\u00e9matique des vecteurs d&rsquo;observations vers des structures <em>numpy.ndarray<\/em> s&rsquo;impose d\u00e8s l&rsquo;ingestion des s\u00e9ries de mesures.<\/p>\n<p>Le contr\u00f4le rigoureux du type de donn\u00e9es (dtype) est indispensable. Dans la plupart des architectures contemporaines \u00e0 64 bits, l&rsquo;allocation en double pr\u00e9cision en virgule flottante (<em>float64<\/em>) doit \u00eatre explicitement garantie :<\/p>\n<p><strong>import numpy as np<\/strong><br \/>\n<strong>scores_experimentaux = np.array([12.4, 15.1, 19.8, 14.2, 16.5], dtype=np.float64)<\/strong><\/p>\n<p>Cette rigueur emp\u00eache les ph\u00e9nom\u00e8nes d&rsquo;arrondi pr\u00e9matur\u00e9 lors des calculs d&rsquo;intervalles fractionnaires n\u00e9cessaires \u00e0 l&rsquo;\u00e9valuation des quartiles. Lorsque les observations initiales sont encod\u00e9es sous forme d&rsquo;entiers (par exemple des scores discrets \u00e0 un test d&rsquo;aptitude), la conversion vers <em>float64<\/em> doit pr\u00e9c\u00e9der toute op\u00e9ration d&rsquo;interpolation, sous peine de voir certains algorithmes d\u00e9grader la pr\u00e9cision en tronquant les d\u00e9cimales interm\u00e9diaires.<\/p>\n<h3>2.3 Assurance de la reproductibilit\u00e9 des calculs<\/h3>\n<p>La crise de la reproductibilit\u00e9 qui traverse les sciences exp\u00e9rimentales commande une transparence absolue dans les scripts d&rsquo;analyse de donn\u00e9es. Dans le contexte de simulations stochastiques &mdash; par exemple l&rsquo;estimation de l&rsquo;IQR par des proc\u00e9dures de r\u00e9\u00e9chantillonnage de type bootstrap ou la g\u00e9n\u00e9ration de donn\u00e9es synth\u00e9tiques de test &mdash;, l&rsquo;initialisation d\u00e9terministe des g\u00e9n\u00e9rateurs de nombres pseudo-al\u00e9atoires s&rsquo;av\u00e8re incontournable.<\/p>\n<p>NumPy a r\u00e9vis\u00e9 en profondeur son sous-syst\u00e8me de g\u00e9n\u00e9ration al\u00e9atoire en rempla\u00e7ant l&rsquo;historique <em>np.random.seed()<\/em> par l&rsquo;instanciation explicite d&rsquo;un g\u00e9n\u00e9rateur fond\u00e9 sur l&rsquo;algorithme Permuted Congruential Generator (PCG64) :<\/p>\n<p><strong>rng = np.random.default_rng(seed=42)<\/strong><br \/>\n<strong>donnees_simulees = rng.normal(loc=100.0, scale=15.0, size=1000)<\/strong><\/p>\n<p>Au-del\u00e0 du contr\u00f4le stochastique, la consignation formelle des versions exactes des moteurs de calcul dans le m\u00e9tadonn\u00e9es du projet de recherche garantit que des \u00e9volutions algorithmiques futures n&rsquo;alt\u00e9reront pas la r\u00e9plication exacte des indices quantitatifs. La structuration modulaire des scripts statistiques, s\u00e9parant le chargement des donn\u00e9es brutes, leur validation structurelle et le module d&rsquo;inf\u00e9rence de dispersion, participe de cette exigence m\u00e9thodologique.<\/p>\n<h2>3. Calcul de l&rsquo;\u00e9cart interquartile sur un tableau unidimensionnel avec NumPy<\/h2>\n<h3>3.1 Extraction des quartiles via numpy.percentile<\/h3>\n<p>La biblioth\u00e8que de base de calcul scientifique <a rel=\"noopener noreferrer\" href=\"https:\/\/numpy.org\/\">NumPy<\/a> impl\u00e9mente la fonction <em>numpy.percentile()<\/em>, qui constitue historiquement l&rsquo;approche la plus commune pour obtenir des valeurs centiles sur des tableaux d&rsquo;observations. La signature canonique de cette fonction accepte comme premier param\u00e8tre le tableau de valeurs, et en second param\u00e8tre le rang centile exprim\u00e9 sur une \u00e9chelle allant de 0 \u00e0 100.<\/p>\n<p>Plut\u00f4t que d&rsquo;ex\u00e9cuter deux appels s\u00e9quentiels isol\u00e9s pour calculer ind\u00e9pendamment le premier et le troisi\u00e8me quartile &mdash; ce qui forcerait l&rsquo;interpr\u00e9teur \u00e0 ex\u00e9cuter deux routines d&rsquo;ordonnancement distinctes &mdash;, l&rsquo;approche optimale consiste \u00e0 transmettre un conteneur it\u00e9rable comprenant simultan\u00e9ment le 25e et le 75e centile. NumPy proc\u00e8de ainsi \u00e0 une optimisation de la recherche de rang en une seule passe op\u00e9rationnelle :<\/p>\n<p><strong>import numpy as np<\/strong><br \/>\n<strong>echantillon = np.array([45, 52, 54, 58, 61, 63, 67, 72, 75, 79, 83, 88, 92], dtype=np.float64)<\/strong><br \/>\n<strong>q1, q3 = np.percentile(echantillon, [25, 75])<\/strong><br \/>\n<strong>iqr_calcule = q3 &#8211; q1<\/strong><\/p>\n<p>Cette d\u00e9composition interm\u00e9diaire permet de conserver l&rsquo;acc\u00e8s direct aux valeurs scalaires de Q1 et Q3, facilitant l&rsquo;inspection ult\u00e9rieure de la position relative de la distribution au sein de l&rsquo;espace des variables observables.<\/p>\n<h3>3.2 Utilisation alternative de numpy.quantile<\/h3>\n<p>Introduite pour aligner la nomenclature de NumPy sur les standards formels du calcul des probabilit\u00e9s, la fonction <em>numpy.quantile()<\/em> propose une interface conceptuellement plus rigoureuse. Au lieu d&rsquo;accepter des pourcentages compris entre 0 et 100, <em>numpy.quantile()<\/em> op\u00e8re sur des proportions normalis\u00e9es situ\u00e9es strictement sur l&rsquo;intervalle continu [0.0, 1.0].<\/p>\n<p>D&rsquo;un point de vue de l&rsquo;ing\u00e9nierie logicielle, les deux fonctions partagent la m\u00eame impl\u00e9mentation sous-jacente en langage C, mais l&rsquo;utilisation de fractions quantiles normalis\u00e9es \u00e9vite les confusions dimensionnelles fr\u00e9quentes lors de l&rsquo;int\u00e9gration dans des pipelines probabilistes th\u00e9oriques :<\/p>\n<p><strong>q1, q3 = np.quantile(echantillon, [0.25, 0.75])<\/strong><br \/>\n<strong>iqr_quantile = q3 &#8211; q1<\/strong><\/p>\n<p>Sur le plan de l&rsquo;efficacit\u00e9 computationnelle brute, aucune divergence mesurable n&rsquo;appara\u00eet entre <em>percentile<\/em> et <em>quantile<\/em> sur des tableaux unidimensionnels standards. N\u00e9anmoins, l&#8217;emploi de <em>numpy.quantile()<\/em> est d\u00e9sormais pr\u00e9conis\u00e9 dans les architectures scientifiques r\u00e9centes pour standardiser l&rsquo;ensemble des expressions math\u00e9matiques autour des fonctions de r\u00e9partition cumul\u00e9e normalis\u00e9es.<\/p>\n<h3>3.3 Analyse pas \u00e0 pas d&rsquo;un exemple d&rsquo;impl\u00e9mentation<\/h3>\n<p>Consid\u00e9rons une situation concr\u00e8te issue de l&rsquo;\u00e9valuation clinique des capacit\u00e9s attentionnelles chez des adultes. Un \u00e9chantillon de 15 scores bruts \u00e0 une \u00e9preuve de barrage de cibles a \u00e9t\u00e9 collig\u00e9 :<\/p>\n<p><strong>donnees_scores = np.array([23, 25, 28, 29, 31, 32, 34, 35, 36, 38, 41, 44, 47, 51, 62], dtype=np.float64)<\/strong><\/p>\n<p>Proc\u00e9dons au calcul rigoureux de l&rsquo;IQR au moyen de l&rsquo;instruction <em>np.percentile<\/em> :<\/p>\n<p><strong>q25, q75 = np.percentile(donnees_scores, [25, 75])<\/strong><br \/>\n<strong>valeur_iqr = q75 &#8211; q25<\/strong><\/p>\n<p>L&rsquo;ex\u00e9cution de cette s\u00e9quence sous l&rsquo;impl\u00e9mentation par d\u00e9faut de NumPy isole les valeurs suivantes : Q1 s&rsquo;\u00e9tablit \u00e0 30.0, tandis que Q3 atteint 42.5. La soustraction alg\u00e9brique directe donne :<br \/>\n<strong>IQR = 42.5 &#8211; 30.0 = 12.5<\/strong><\/p>\n<p>L&rsquo;interpr\u00e9tation clinique de ce r\u00e9sultat indique que l&rsquo;intervalle d&rsquo;amplitude s\u00e9parant les performances des individus les plus fragiles (les 25 % inf\u00e9rieurs) de ceux affichant les r\u00e9ussites les plus remarquables (les 25 % sup\u00e9rieurs) est exactement de 12.5 unit\u00e9s de score. Le c\u0153ur homog\u00e8ne des 50 % de la population \u00e9valu\u00e9e est donc compris dans cette fen\u00eatre de 12.5 points, une information insensible au score isol\u00e9 de 62, qui aurait consid\u00e9rablement gonfl\u00e9 la variance classique.<\/p>\n<h2>4. M\u00e9thodes d&rsquo;interpolation des quantiles dans NumPy<\/h2>\n<h3>4.1 Param\u00e9trage de l&rsquo;argument method dans NumPy<\/h3>\n<p>Lorsque la taille <em>n<\/em> d&rsquo;un \u00e9chantillon ne permet pas une division enti\u00e8re rigoureuse par 4 pour localiser les rangs des quartiles, une m\u00e9thode de calcul d&rsquo;interpolation math\u00e9matique doit imp\u00e9rativement intervenir. Historiquement contr\u00f4l\u00e9 par le param\u00e8tre <em>interpolation<\/em>, NumPy a unifi\u00e9 et enrichi son interface \u00e0 partir de sa version 1.22 via l&rsquo;argument <em>method<\/em>, int\u00e9grant un \u00e9ventail complet d&rsquo;estimateurs.<\/p>\n<p>Les m\u00e9thodes les plus couramment manipul\u00e9es sur le plan empirique incluent :<\/p>\n<ul>\n<li><strong>linear<\/strong> : M\u00e9thode par d\u00e9faut. Elle calcule une interpolation lin\u00e9aire continue entre les deux observations d&rsquo;indices cons\u00e9cutifs les plus proches du rang th\u00e9orique calcul\u00e9.<\/li>\n<li><strong>lower<\/strong> : Force l&rsquo;attribution de la valeur empirique enti\u00e8re la plus basse encadrant le rang cible, \u00e9vitant la cr\u00e9ation artificielle de valeurs interm\u00e9diaires inexistantes dans l&rsquo;\u00e9chantillon.<\/li>\n<li><strong>higher<\/strong> : S\u00e9lectionne sym\u00e9triquement la valeur empirique sup\u00e9rieure la plus proche.<\/li>\n<li><strong>midpoint<\/strong> : D\u00e9termine la moyenne arithm\u00e9tique rigoureuse des deux points de donn\u00e9es bornant l&rsquo;intervalle de rang.<\/li>\n<li><strong>nearest<\/strong> : Attribue la valeur ponctuelle de l&rsquo;\u00e9chantillon la plus proche de la coordonn\u00e9e continue calcul\u00e9e, en arrondissant selon les r\u00e8gles d&rsquo;arrondi bancaire vers le nombre pair le plus proche en cas d&rsquo;\u00e9quidistance parfaite.<\/li>\n<\/ul>\n<p>L&rsquo;impl\u00e9mentation explicite de ces variantes s&rsquo;effectue simplement lors de l&rsquo;appel :<\/p>\n<p><strong>iqr_midpoint = np.percentile(donnees_scores, 75, method=&rsquo;midpoint&rsquo;) &#8211; np.percentile(donnees_scores, 25, method=&rsquo;midpoint&rsquo;)<\/strong><\/p>\n<h3>4.2 Concordance avec les normes statistiques internationales<\/h3>\n<p>Dans un article fondateur publi\u00e9 en 1996, les statisticiens <a rel=\"noopener noreferrer\" href=\"https:\/\/www.tandfonline.com\/doi\/abs\/10.1080\/00031305.1996.10473541\">Rob J. Hyndman et Yanan Fan<\/a> ont formalis\u00e9 une typologie int\u00e9grant neuf m\u00e9thodes distinctes d&rsquo;estimation des quantiles d&rsquo;\u00e9chantillon, utilis\u00e9es de mani\u00e8re dispers\u00e9e \u00e0 travers les diff\u00e9rents logiciels statistiques commerciaux et acad\u00e9miques. L&rsquo;absence d&rsquo;harmonisation historique constituait une source majeure de confusion, les calculs r\u00e9alis\u00e9s sous le langage statistique R, sous SAS ou sous Python produisant des r\u00e9sultats num\u00e9riques divergents sur un m\u00eame jeu de donn\u00e9es.<\/p>\n<p>NumPy supporte l&rsquo;ensemble de ces neuf types d&rsquo;estimateurs \u00e0 travers les options <em>method=&rsquo;weibull&rsquo;<\/em> (type 6), <em>method=&rsquo;linear&rsquo;<\/em> (type 7, traditionnel dans NumPy et dans la fonction quantile standard de R), <em>method=&rsquo;median_unbiased&rsquo;<\/em> (type 8) ou <em>method=&rsquo;normal_unbiased&rsquo;<\/em> (type 9). Par exemple, pour obtenir sous Python une correspondance math\u00e9matique exacte avec les r\u00e9sultats fournis par le syst\u00e8me R (dont le comportement par d\u00e9faut correspond au Type 7 de Hyndman et Fan) :<\/p>\n<p><strong>q1_r, q3_r = np.percentile(donnees_scores, [25, 75], method=&rsquo;linear&rsquo;)<\/strong><\/p>\n<p>En revanche, pour \u00e9muler des calculs provenant de biblioth\u00e8ques d&rsquo;ing\u00e9nierie utilisant la distribution de Weibull sans biais pour des fonctions de r\u00e9partition uniformes (Type 6), l&rsquo;assignation <em>method=&rsquo;weibull&rsquo;<\/em> garantit une portabilit\u00e9 logicielle sans compromis.<\/p>\n<h3>4.3 Sensibilit\u00e9 math\u00e9matique sur des \u00e9chantillons restreints<\/h3>\n<p>Sur des ensembles massifs de donn\u00e9es (par exemple <em>n > 10 000<\/em>), les variations produites par ces diff\u00e9rents modes d&rsquo;interpolation deviennent num\u00e9riquement n\u00e9gligeables, convergeant vers des fractions d\u00e9cimales indiff\u00e9renciables. \u00c0 l&rsquo;inverse, au sein d&rsquo;\u00e9chantillons cliniques restreints &mdash; situation quotidienne dans les \u00e9tudes neuropsychologiques ou d&rsquo;imagerie fonctionnelle o\u00f9 <em>n &lt; 30<\/em> en raison du co\u00fbt des acquisitions &mdash;, l&rsquo;impact du choix de la m\u00e9thode devient d\u00e9terminant.<\/p>\n<p>Consid\u00e9rons un \u00e9chantillon t\u00e9nu de six sujets : [10, 12, 14, 18, 22, 30]. Calculons l&rsquo;\u00e9cart interquartile selon diverses approches :<\/p>\n<ul>\n<li>En mode <em>linear<\/em> : Q1 = 12.5, Q3 = 21.0, soit un <strong>IQR de 8.5<\/strong><\/li>\n<li>En mode <em>lower<\/em> : Q1 = 12.0, Q3 = 18.0, soit un <strong>IQR de 6.0<\/strong><\/li>\n<li>En mode <em>higher<\/em> : Q1 = 14.0, Q3 = 22.0, soit un <strong>IQR de 8.0<\/strong><\/li>\n<\/ul>\n<p>L&rsquo;\u00e9cart absolu entre la m\u00e9trique la plus basse (6.0) et la plus haute (8.5) repr\u00e9sente ici une fluctuation relative sup\u00e9rieure \u00e0 40 % de la valeur du param\u00e8tre. Si cet IQR est exploit\u00e9 ult\u00e9rieurement pour filtrer des observations anormales ou statuer sur l&rsquo;homog\u00e9n\u00e9it\u00e9 d&rsquo;une pathologie rare, le protocole encourt un biais d&rsquo;interpr\u00e9tation syst\u00e9mique. Il est donc fondamental de consigner dans tout rapport d&rsquo;\u00e9tude la m\u00e9thode d&rsquo;interpolation s\u00e9lectionn\u00e9e et de s&rsquo;y tenir de mani\u00e8re stricte sur l&rsquo;ensemble de la cohorte.<\/p>\n<h2>5. Calcul direct de l&rsquo;\u00e9cart interquartile avec la biblioth\u00e8que SciPy<\/h2>\n<h3>5.1 Mise en \u0153uvre de scipy.stats.iqr<\/h3>\n<p>Bien que la d\u00e9composition alg\u00e9brique <em>Q3 &#8211; Q1<\/em> via NumPy soit intuitive, la biblioth\u00e8que sp\u00e9cialis\u00e9e <a rel=\"noopener noreferrer\" href=\"https:\/\/docs.scipy.org\/doc\/scipy\/reference\/stats.html\">SciPy<\/a> propose au sein de son sous-module <em>scipy.stats<\/em> une fonction d\u00e9di\u00e9e et hautement optimis\u00e9e, sp\u00e9cifiquement con\u00e7ue pour le calcul direct : <em>scipy.stats.iqr()<\/em>.<\/p>\n<p>Cette approche fonctionnelle unifi\u00e9e pr\u00e9sente une \u00e9l\u00e9gance conceptuelle sup\u00e9rieure, condensant en une seule instruction lisible le traitement de tableaux multidimensionnels et la s\u00e9lection des param\u00e8tres d&rsquo;interpolation :<\/p>\n<p><strong>from scipy import stats<\/strong><br \/>\n<strong>donnees = [15.2, 18.4, 21.0, 22.5, 24.1, 28.7, 33.2]<\/strong><br \/>\n<strong>dispersion_iqr = stats.iqr(donnees)<\/strong><\/p>\n<p>Un avantage majeur r\u00e9side dans la pr\u00e9sence de l&rsquo;argument <em>rng<\/em> (\u00e0 ne pas confondre avec un g\u00e9n\u00e9rateur pseudo-al\u00e9atoire ; ici <em>rng<\/em> est l&rsquo;abr\u00e9viation de <em>range<\/em>), qui permet de red\u00e9finir \u00e0 la vol\u00e9e les percentiles cibles. Par d\u00e9faut fix\u00e9 \u00e0 <em>rng=(25, 75)<\/em> pour le calcul standard de l&rsquo;\u00e9cart interquartile, il autorise l&rsquo;\u00e9valuation imm\u00e9diate d&rsquo;\u00e9tendues inter-d\u00e9ciles ou de plages personnalis\u00e9es sans modifier l&rsquo;architecture du code :<\/p>\n<p><strong>etendue_interdecile = stats.iqr(donnees, rng=(10, 90))<\/strong><\/p>\n<h3>5.2 Options avanc\u00e9es de normalisation et d&rsquo;ajustement<\/h3>\n<p>L&rsquo;une des fonctionnalit\u00e9s les plus puissantes de <em>scipy.stats.iqr()<\/em> r\u00e9side dans son param\u00e8tre <em>scale<\/em>. Dans la th\u00e9orie statistique g\u00e9n\u00e9rale, l&rsquo;\u00e9cart interquartile d&rsquo;une loi normale th\u00e9orique centr\u00e9e r\u00e9duite \u00e9quivaut approximativement \u00e0 1.34898 fois son \u00e9cart-type &sigma;. Par cons\u00e9quent, pour obtenir un estimateur robuste de l&rsquo;\u00e9cart-type bas\u00e9 sur l&rsquo;IQR au sein de distributions pr\u00e9sum\u00e9es gaussiennes, il est d&rsquo;usage de normaliser la valeur obtenue en la divisant par 1.34898 (ou en la multipliant par son inverse 0.7413).<\/p>\n<p>SciPy int\u00e8gre directement cette transformation via l&rsquo;argument scalaire :<\/p>\n<p><strong>pseudo_sigma = stats.iqr(donnees, scale=&rsquo;normal&rsquo;)<\/strong><\/p>\n<p>Cette directive op\u00e8re automatiquement l&rsquo;ajustement multiplicatif, transformant l&rsquo;IQR en un \u00e9quivalent asymptotique direct de l&rsquo;\u00e9cart-type usuel, immunis\u00e9 contre les observations aberrantes.<\/p>\n<p>De surcro\u00eet, la fonction g\u00e8re nativement les tableaux \u00e0 dimensions multiples via l&rsquo;argument vectoriel <em>axis<\/em>. L&rsquo;adjonction conjointe du param\u00e8tre bool\u00e9en <em>keepdims=True<\/em> garantit le maintien strict du rang tensoriel de la matrice d&rsquo;origine, \u00e9vitant les effondrements de dimension inopin\u00e9s lors de l&rsquo;int\u00e9gration dans des architectures de calcul tensoriel complexe :<\/p>\n<p><strong>matrice_2d = np.array([[10, 15, 20], [12, 18, 25], [11, 14, 22]])<\/strong><br \/>\n<strong>iqr_colonnes = stats.iqr(matrice_2d, axis=0, keepdims=True)<\/strong><\/p>\n<h3>5.3 \u00c9valuation comparative des performances SciPy et NumPy<\/h3>\n<p>Lors du d\u00e9veloppement de cha\u00eenes de traitement intensif &mdash; comme le traitement automatis\u00e9 de flux vid\u00e9o de signaux oculom\u00e9triques ou l&rsquo;ingestion de millions de transactions bancaires &mdash;, le choix entre la formule NumPy manuelle et la fonction d\u00e9di\u00e9e de SciPy conditionne la charge processeur.<\/p>\n<p>Le module de profilage <em>timeit<\/em> permet d&rsquo;objectiver ces comportements temporels :<\/p>\n<p>Pour un vecteur al\u00e9atoire de taille <em>n = 1 000 000<\/em>, l&rsquo;instruction NumPy <em>q3 &#8211; q1<\/em> obtenue par un appel unique \u00e0 <em>np.quantile<\/em> d\u00e9montre une efficience l\u00e9g\u00e8rement sup\u00e9rieure en termes de microsecondes par rapport \u00e0 <em>scipy.stats.iqr<\/em>. Cette modeste diff\u00e9rence provient du fait que SciPy enveloppe le code de base dans une s\u00e9rie de couches d\u00e9fensives : v\u00e9rification de la pr\u00e9sence de valeurs non num\u00e9riques (NaN), application conditionnelle des m\u00e9thodes de mise \u00e0 l&rsquo;\u00e9chelle et validation rigoureuse des limites d&rsquo;axes.<\/p>\n<p>En r\u00e9sum\u00e9 :<\/p>\n<ul>\n<li>Pour des pipelines d&rsquo;apprentissage automatique de production o\u00f9 chaque microseconde de calcul influe sur la latence du syst\u00e8me, l&rsquo;utilisation vectoris\u00e9e pure de <em>numpy.percentile()<\/em> ou <em>numpy.quantile()<\/em> est recommand\u00e9e.<\/li>\n<li>Pour des analyses de laboratoire, d&rsquo;exploration statistique, de psychom\u00e9trie ou de bio-informatique, l&rsquo;expressivit\u00e9, la s\u00e9curit\u00e9 native et la gestion avanc\u00e9e des m\u00e9triques d&rsquo;ajustement offertes par <em>scipy.stats.iqr()<\/em> en font le standard incontest\u00e9.<\/li>\n<\/ul>\n<h2>6. Calcul de l&rsquo;\u00e9cart interquartile sur des DataFrames Pandas<\/h2>\n<h3>6.1 Calcul de l&rsquo;IQR sur une s\u00e9rie Pandas individuelle<\/h3>\n<p>Dans la pratique moderne de la science des donn\u00e9es en Python, les structures tabulaires de la biblioth\u00e8que <a rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\/\">Pandas<\/a> constituent le pivot incontournable de l&rsquo;ingestion et de la manipulation des donn\u00e9es exp\u00e9rimentales. Une colonne d&rsquo;un tableau Pandas s&rsquo;instancie sous la forme d&rsquo;un objet <em>pandas.Series<\/em>, dot\u00e9 de sa propre m\u00e9thode <em>quantile()<\/em> hautement performante.<\/p>\n<p>Le calcul de l&rsquo;\u00e9cart interquartile sur une variable quantitative isol\u00e9e s&rsquo;ex\u00e9cute avec une grande simplicit\u00e9 syntaxique :<\/p>\n<p><strong>import pandas as pd<\/strong><br \/>\n<strong>serie_scores = pd.Series([104, 112, 115, 118, 122, 125, 128, 131, 142])<\/strong><br \/>\n<strong>iqr_serie = serie_scores.quantile(0.75) &#8211; serie_scores.quantile(0.25)<\/strong><\/p>\n<p>Il est fr\u00e9quent que les analystes recourent \u00e0 la m\u00e9thode <em>describe()<\/em> 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&rsquo;IQR lui-m\u00eame, n\u00e9cessitant une soustraction manuelle ult\u00e9rieure. L&rsquo;\u00e9valuation directe via <em>quantile()<\/em> s&rsquo;av\u00e8re donc incomparablement plus rapide et adapt\u00e9e \u00e0 l&rsquo;automatisation au sein d&rsquo;une cha\u00eene logicielle.<\/p>\n<h3>6.2 Vectorisation du calcul sur plusieurs colonnes<\/h3>\n<p>Lorsque le chercheur est confront\u00e9 \u00e0 un tableau multidimensionnel comportant des dizaines ou des centaines de variables m\u00e9triques &mdash; par exemple l&rsquo;ensemble des sous-\u00e9chelles d&rsquo;une batterie cognitive neuropsychologique &mdash;, l&rsquo;it\u00e9ration manuelle au travers d&rsquo;une boucle imp\u00e9rative <em>for<\/em> repr\u00e9sente une erreur de conception majeure qui d\u00e9grade s\u00e9v\u00e8rement les performances d&rsquo;ex\u00e9cution.<\/p>\n<p>Pandas permet de vectoriser l&rsquo;\u00e9valuation des quantiles \u00e0 l&rsquo;\u00e9chelle de l&rsquo;ensemble d&rsquo;un <em>DataFrame<\/em> par une seule op\u00e9ration matricielle. En appliquant la m\u00e9thode <em>quantile()<\/em> en lui transmettant la liste des deux bornes d\u00e9sir\u00e9es, le calcul est parall\u00e9lis\u00e9 :<\/p>\n<p><strong>donnees_cliniques = pd.DataFrame({<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&lsquo;Temps_Reaction&rsquo;: [245, 312, 289, 450, 320, 295, 278, 360],<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&lsquo;Erreurs_Comportementales&rsquo;: [2, 0, 1, 8, 3, 2, 1, 4],<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&lsquo;Age_Sujet&rsquo;: [21, 24, 22, 28, 23, 25, 22, 27]<\/strong><br \/>\n<strong>})<\/strong><br \/>\n<strong>bornes = donnees_cliniques.quantile([0.25, 0.75])<\/strong><br \/>\n<strong>iqr_colonnes = bornes.loc[0.75] &#8211; bornes.loc[0.25]<\/strong><\/p>\n<p>Si la structure de donn\u00e9es contient des variables qualitatives, textuelles ou des identifiants cat\u00e9goriels, l&rsquo;application directe soul\u00e8vera une exception ou g\u00e9n\u00e9rera des colonnes tronqu\u00e9es. Il est de bonne pratique de pr\u00e9-filtrer s\u00e9lectivement les colonnes \u00e9ligibles gr\u00e2ce \u00e0 l&rsquo;expression :<br \/>\n<strong>donnees_numeriques = donnees_cliniques.select_dtypes(include=[&lsquo;number&rsquo;])<\/strong><\/p>\n<h3>6.3 Agr\u00e9gation par groupes exp\u00e9rimentaux avec groupby<\/h3>\n<p>L&rsquo;inf\u00e9rence en psychologie exp\u00e9rimentale et en recherche biom\u00e9dicale proc\u00e8de quasi-syst\u00e9matiquement par la comparaison de sous-groupes soumis \u00e0 des conditions diff\u00e9rentielles (par exemple : groupe t\u00e9moin vs groupe trait\u00e9 ; sous-types d&rsquo;amn\u00e9sie ; cohortes d&rsquo;\u00e2ges distinctes). La m\u00e9thode <em>groupby()<\/em> de Pandas s&rsquo;av\u00e8re dans ce cadre l&rsquo;outil par excellence.<\/p>\n<p>Pour extraire l&rsquo;\u00e9cart interquartile pour chaque condition exp\u00e9rimentale sans alt\u00e9rer la topologie des donn\u00e9es, on d\u00e9finit une fonction d&rsquo;agr\u00e9gation d\u00e9di\u00e9e, que l&rsquo;on int\u00e8gre directement au sein de la m\u00e9thode <em>agg()<\/em> :<\/p>\n<p><strong>donnees_groupes = pd.DataFrame({<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&lsquo;Condition&rsquo;: [&lsquo;Controle&rsquo;, &lsquo;Controle&rsquo;, &lsquo;Controle&rsquo;, &lsquo;Traitement&rsquo;, &lsquo;Traitement&rsquo;, &lsquo;Traitement&rsquo;],<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&lsquo;Score_Attention&rsquo;: [78, 82, 85, 62, 94, 91]<\/strong><br \/>\n<strong>})<\/strong><br \/>\n<strong>def calcul_iqr(colonne):<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;return colonne.quantile(0.75) &#8211; colonne.quantile(0.25)<\/strong><br \/>\n<strong>tableau_recapitulatif = donnees_groupes.groupby(&lsquo;Condition&rsquo;)[&lsquo;Score_Attention&rsquo;].agg(calcul_iqr)<\/strong><\/p>\n<p>Cette syntaxe produit un r\u00e9sultat d&rsquo;agr\u00e9gation tabulaire clair et compact, pr\u00eat \u00e0 \u00eatre ins\u00e9r\u00e9 dans un compte-rendu scientifique de dispersion diff\u00e9rentielle.<\/p>\n<h2>7. Gestion rigoureuse des valeurs manquantes dans le calcul<\/h2>\n<h3>7.1 Impact des valeurs NaN sur les calculs standards<\/h3>\n<p>Dans la r\u00e9alit\u00e9 exp\u00e9rimentale, la survenue de donn\u00e9es manquantes (not\u00e9es <em>NaN<\/em> pour <em>Not a Number<\/em> dans les structures Python) constitue un ph\u00e9nom\u00e8ne in\u00e9vitable : d\u00e9faillance d&rsquo;un capteur de pression, abandon d&rsquo;un participant en cours d&rsquo;\u00e9preuve ou omission d&rsquo;une r\u00e9ponse \u00e0 un item d&rsquo;\u00e9valuation. La prise en compte de ces lacunes informationnelles requiert une vigilance absolue.<\/p>\n<p>Par d\u00e9faut, dans l&rsquo;architecture arithm\u00e9tique de la norme IEEE 754 impl\u00e9ment\u00e9e au c\u0153ur de NumPy, toute op\u00e9ration alg\u00e9brique impliquant une valeur non d\u00e9finie propage imm\u00e9diatement cette absence. Si un tableau de mesures int\u00e8gre un seul <em>NaN<\/em>, l&rsquo;appel standard \u00e0 <em>np.percentile()<\/em> ou <em>np.quantile()<\/em> renvoie silencieusement la valeur <em>np.nan<\/em> sans lever d&rsquo;erreur bloquante. Ce m\u00e9canisme de propagation peut contaminer de mani\u00e8re invisible des scripts entiers de calcul, produisant des m\u00e9triques finales inutilisables.<\/p>\n<p>Il est donc n\u00e9cessaire de proc\u00e9der syst\u00e9matiquement au diagnostic pr\u00e9liminaire de la qualit\u00e9 des structures de donn\u00e9es avant toute tentative de calcul de rang :<\/p>\n<p><strong>presence_nan = np.isnan(echantillon_brut).any()<\/strong><\/p>\n<h3>7.2 Recours aux fonctions sp\u00e9cialis\u00e9es nanpercentile et nanquantile<\/h3>\n<p>Pour neutraliser ce risque de propagation sans contraindre l&rsquo;analyste \u00e0 des filtrages manuels longs et sources potentielles d&rsquo;erreurs d&rsquo;indexation, NumPy met \u00e0 disposition deux fonctions optimis\u00e9es : <em>numpy.nanpercentile()<\/em> et <em>numpy.nanquantile()<\/em>.<\/p>\n<p>Ces routines sp\u00e9cialis\u00e9es proc\u00e8dent \u00e0 l&rsquo;\u00e9limination algorithmique interne de l&rsquo;ensemble des occurrences <em>NaN<\/em> avant de r\u00e9ordonner l&rsquo;\u00e9chantillon et de proc\u00e9der \u00e0 l&rsquo;interpolation quantile. Les fractions d&rsquo;effectifs sont alors calcul\u00e9es sur la base exclusive des donn\u00e9es empiriques valides :<\/p>\n<p><strong>mesures_lacunaires = np.array([12.0, 14.5, np.nan, 18.2, 22.1, np.nan, 29.4])<\/strong><br \/>\n<strong>q1_robuste, q3_robuste = np.nanpercentile(mesures_lacunaires, [25, 75])<\/strong><br \/>\n<strong>iqr_valide = q3_robuste &#8211; q1_robuste<\/strong><\/p>\n<p>Attention toutefois : dans le cas pathologique o\u00f9 l&rsquo;\u00e9chantillon transmis ne contiendrait que des valeurs manquantes, ou si l&rsquo;ensemble des observations r\u00e9siduelles s&rsquo;av\u00e8re insuffisant pour satisfaire l&rsquo;interpolation, la fonction l\u00e8vera un avertissement explicite (<em>RuntimeWarning<\/em>) et retournera <em>np.nan<\/em>, invitant \u00e0 un audit structurel des instruments d&rsquo;acquisition.<\/p>\n<h3>7.3 Le param\u00e8tre nan_policy dans SciPy<\/h3>\n<p>La fonction <em>scipy.stats.iqr()<\/em> se dote d&rsquo;une flexibilit\u00e9 sup\u00e9rieure gr\u00e2ce \u00e0 son param\u00e8tre institutionnel <em>nan_policy<\/em>, qui harmonise le comportement de l&rsquo;interpr\u00e9teur face aux valeurs non d\u00e9finies selon trois strat\u00e9gies configurables :<\/p>\n<ul>\n<li><strong>nan_policy=&rsquo;propagate&rsquo;<\/strong> : Comportement par d\u00e9faut, analogue \u00e0 celui de NumPy de base, renvoyant <em>nan<\/em> si une valeur manquante est d\u00e9tect\u00e9e sur l&rsquo;axe d&rsquo;\u00e9valuation.<\/li>\n<li><strong>nan_policy=&rsquo;omit&rsquo;<\/strong> : Filtre et ignore automatiquement les entr\u00e9es non num\u00e9riques lors du traitement math\u00e9matique de chaque tranche, reproduisant de fa\u00e7on transparente le comportement de <em>numpy.nanpercentile()<\/em>.<\/li>\n<li><strong>nan_policy=&rsquo;raise&rsquo;<\/strong> : L\u00e8ve imm\u00e9diatement une exception d&rsquo;ex\u00e9cution (<em>ValueError<\/em>) d\u00e8s qu&rsquo;un <em>NaN<\/em> est pr\u00e9sent dans le conteneur cible.<\/li>\n<\/ul>\n<p>Cette troisi\u00e8me option est particuli\u00e8rement pr\u00e9cieuse dans le cadre d&rsquo;applications critiques ou de protocoles cliniques r\u00e9glement\u00e9s o\u00f9 aucune perte d&rsquo;int\u00e9grit\u00e9 des donn\u00e9es ne saurait \u00eatre admise sans intervention humaine directe :<\/p>\n<p><strong># D\u00e9tection stricte en environnement critique<\/strong><br \/>\n<strong>stats.iqr(donnees_sujets, nan_policy=&rsquo;raise&rsquo;)<\/strong><\/p>\n<h2>8. D\u00e9tection et traitement des valeurs aberrantes via la m\u00e9thode de Tukey<\/h2>\n<h3>8.1 Formalisation math\u00e9matique des barri\u00e8res de Tukey<\/h3>\n<p>L&rsquo;un des r\u00f4les majeurs d\u00e9volus \u00e0 l&rsquo;\u00e9cart interquartile dans l&rsquo;histoire des statistiques r\u00e9side dans la formulation des barri\u00e8res d&rsquo;identification des valeurs aberrantes d\u00e9velopp\u00e9e par le statisticien am\u00e9ricain <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/John_Tukey\">John Tukey<\/a> en 1977. Tukey a pos\u00e9 les bases de l&rsquo;analyse exploratoire des donn\u00e9es en d\u00e9finissant des limites objectives de d\u00e9tection ind\u00e9pendantes de tout postulat de normalit\u00e9 distributionnelle.<\/p>\n<p>Les barri\u00e8res de Tukey reposent sur l&rsquo;addition et la soustraction de multiples constants de l&rsquo;\u00e9cart interquartile aux quartiles correspondants. Les \u00e9quations se d\u00e9clinent ainsi :<\/p>\n<ul>\n<li><strong>Barri\u00e8re inf\u00e9rieure mod\u00e9r\u00e9e<\/strong> = Q1 &#8211; (1.5 &times; IQR)<\/li>\n<li><strong>Barri\u00e8re sup\u00e9rieure mod\u00e9r\u00e9e<\/strong> = Q3 + (1.5 &times; IQR)<\/li>\n<li><strong>Barri\u00e8re inf\u00e9rieure extr\u00eame<\/strong> = Q1 &#8211; (3.0 &times; IQR)<\/li>\n<li><strong>Barri\u00e8re sup\u00e9rieure extr\u00eame<\/strong> = Q3 + (3.0 &times; IQR)<\/li>\n<\/ul>\n<p>Toute observation se positionnant au-del\u00e0 des cl\u00f4tures mod\u00e9r\u00e9es (1.5 &times; IQR) est r\u00e9pertori\u00e9e comme une valeur atypique suspecte (valeur aberrante mod\u00e9r\u00e9e). Celles franchissant les cl\u00f4tures extr\u00eames (3.0 &times; IQR) sont cat\u00e9goris\u00e9es comme des valeurs hautement anormales (valeurs aberrantes extr\u00eames), sugg\u00e9rant quasi syst\u00e9matiquement une anomalie instrumentale ou une violation radicale du protocole exp\u00e9rimental.<\/p>\n<h3>8.2 Algorithme Python d&rsquo;identification et de masquage bool\u00e9en<\/h3>\n<p>L&rsquo;encodage de la logique de Tukey en Python s&rsquo;ex\u00e9cute de mani\u00e8re \u00e9l\u00e9gante et ultra-rapide par le biais du masquage bool\u00e9en vectoris\u00e9 au sein de NumPy ou Pandas. Voici une fonction compl\u00e8te mat\u00e9rialisant ce processus de filtrage statistique :<\/p>\n<p><strong>def detecter_valeurs_aberrantes(donnees):<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;q1, q3 = np.percentile(donnees, [25, 75])<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;iqr = q3 &#8211; q1<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;seuil_bas = q1 &#8211; 1.5 * iqr<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;seuil_haut = q3 + 1.5 * iqr<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;masque_aberrants = (donnees &lt; seuil_bas) | (donnees &gt; seuil_haut)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;return masque_aberrants, donnees[masque_aberrants], donnees[~masque_aberrants]<\/strong><\/p>\n<p>L&rsquo;utilisation de l&rsquo;op\u00e9rateur tilde (<em>~<\/em>) permet d&rsquo;inverser le masque bool\u00e9en, extrayant en une fraction de seconde l&rsquo;ensemble du sous-\u00e9chantillon \u00e9pur\u00e9, directement pr\u00eat pour l&rsquo;analyse inf\u00e9rentielle ult\u00e9rieure.<\/p>\n<h3>8.3 Consid\u00e9rations \u00e9pist\u00e9mologiques du nettoyage de donn\u00e9es<\/h3>\n<p>Si la m\u00e9thode de Tukey fournit une r\u00e8gle algorithmique s\u00e9duisante et ais\u00e9ment automatisable, son application aveugle pose d&rsquo;importants d\u00e9fis \u00e9pist\u00e9mologiques. Dans de nombreuses disciplines scientifiques, l&rsquo;\u00e9limination syst\u00e9matique de tout point situ\u00e9 hors des barri\u00e8res de Tukey s&rsquo;apparente \u00e0 une censure injustifi\u00e9e de la variance naturelle de l&rsquo;\u00e9chantillon.<\/p>\n<p>Dans les distributions naturellement asym\u00e9triques &mdash; telles que la survie cellulaire, les temps de latence motrice ou la distribution des richesses mon\u00e9taires &mdash;, la r\u00e8gle de Tukey de 1.5 &times; IQR a tendance \u00e0 d\u00e9signer comme anormales des donn\u00e9es authentiques participant de la forme r\u00e9elle de la population cible. Les chercheurs doivent donc op\u00e9rer une distinction stricte entre :<\/p>\n<ul>\n<li>Les valeurs aberrantes provenant d&rsquo;erreurs techniques document\u00e9es (fausses touches, artefacts de mouvement lors d&rsquo;un enregistrement EEG), dont l&rsquo;exclusion est m\u00e9thodologiquement indiscutable.<\/li>\n<li>La variabilit\u00e9 individuelle biologique r\u00e9elle, qui doit imp\u00e9rativement \u00eatre conserv\u00e9e et analys\u00e9e \u00e0 l&rsquo;aide de mod\u00e8les statistiques tol\u00e9rant les queues de distribution \u00e9paisses (comme la r\u00e9gression robuste ou les mod\u00e8les lin\u00e9aires g\u00e9n\u00e9ralis\u00e9s).<\/li>\n<\/ul>\n<p>Toute proc\u00e9dure de nettoyage fond\u00e9e sur l&rsquo;\u00e9cart interquartile doit \u00eatre document\u00e9e avec une transparence int\u00e9grale dans les publications scientifiques, en mentionnant explicitement le nombre d&rsquo;observations retranch\u00e9es et leur justification clinique ou m\u00e9thodologique.<\/p>\n<h2>9. Visualisation graphique de l&rsquo;\u00e9cart interquartile<\/h2>\n<h3>9.1 G\u00e9n\u00e9ration de bo\u00eetes \u00e0 moustaches avec Matplotlib<\/h3>\n<p>La repr\u00e9sentation visuelle canonique de l&rsquo;\u00e9cart interquartile s&rsquo;incarne dans le diagramme en bo\u00eete &mdash; ou bo\u00eete \u00e0 moustaches (<em>boxplot<\/em>) &mdash;, conceptualis\u00e9 historiquement par Tukey. La biblioth\u00e8que <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a> offre le module de bas niveau <em>matplotlib.pyplot.boxplot()<\/em> permettant de tracer graphiquement ces composantes avec un contr\u00f4le microm\u00e9trique.<\/p>\n<p>Au sein d&rsquo;un diagramme en bo\u00eete, les bords inf\u00e9rieurs et sup\u00e9rieurs du rectangle central repr\u00e9sentent rigoureusement le premier quartile (Q1) et le troisi\u00e8me quartile (Q3). La hauteur m\u00eame du rectangle constitue ainsi la mat\u00e9rialisation graphique directe de l&rsquo;\u00e9cart interquartile. La m\u00e9diane est figur\u00e9e par un segment horizontal interne bissecteur.<\/p>\n<p>Le param\u00e8tre <em>whis<\/em> (abr\u00e9viation de <em>whiskers<\/em>, moustaches) r\u00e9gule la longueur maximale autoris\u00e9e pour les segments s&rsquo;\u00e9tendant \u00e0 l&rsquo;ext\u00e9rieur de la bo\u00eete centrale. Par d\u00e9faut, Matplotlib assigne <em>whis=1.5<\/em>, respectant scrupuleusement la formule des cl\u00f4tures mod\u00e9r\u00e9es de Tukey :<\/p>\n<p><strong>import matplotlib.pyplot as plt<\/strong><br \/>\n<strong>plt.figure(figsize=(6, 8))<\/strong><br \/>\n<strong>plt.boxplot(donnees_scores, whis=1.5, patch_artist=True)<\/strong><br \/>\n<strong>plt.ylabel(\u00ab\u00a0Score d&rsquo;Attention M\u00e9trique\u00a0\u00bb)<\/strong><br \/>\n<strong>plt.title(\u00ab\u00a0Visualisation Empirique de l&rsquo;IQR (Q3 &#8211; Q1)\u00a0\u00bb)<\/strong><br \/>\n<strong>plt.show()<\/strong><\/p>\n<h3>9.2 Visualisations avanc\u00e9es avec Seaborn<\/h3>\n<p>La biblioth\u00e8que de visualisation statistique <a rel=\"noopener noreferrer\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a> surpasse Matplotlib en fournissant des abstractions de haut niveau parfaitement articul\u00e9es avec les structures de donn\u00e9es Pandas. Pour appr\u00e9hender simultan\u00e9ment la dispersion interquartile et la r\u00e9partition empirique fine de chaque participant, la superposition conjointe d&rsquo;un <em>boxplot<\/em> et d&rsquo;un trac\u00e9 de dispersion univari\u00e9 (<em>stripplot<\/em>) s&rsquo;av\u00e8re particuli\u00e8rement d\u00e9monstrative :<\/p>\n<p><strong>import seaborn as sns<\/strong><br \/>\n<strong>plt.figure(figsize=(8, 6))<\/strong><br \/>\n<strong>sns.boxplot(x=&rsquo;Condition&rsquo;, y=&rsquo;Score_Attention&rsquo;, data=donnees_groupes, color=&rsquo;lightblue&rsquo;, width=0.4)<\/strong><br \/>\n<strong>sns.stripplot(x=&rsquo;Condition&rsquo;, y=&rsquo;Score_Attention&rsquo;, data=donnees_groupes, color=&rsquo;darkblue&rsquo;, size=6, jitter=True)<\/strong><br \/>\n<strong>plt.show()<\/strong><\/p>\n<p>Une alternative contemporaine r\u00e9side dans le d\u00e9ploiement du diagramme en violon (<em>violinplot<\/em>). Seaborn y trace une estimation de la densit\u00e9 de probabilit\u00e9 par noyau (KDE), tout en int\u00e9grant dans sa cavit\u00e9 centrale une bo\u00eete \u00e0 moustaches miniature o\u00f9 l&rsquo;\u00e9paisseur de la barre noire centrale correspond exactement \u00e0 l&rsquo;amplitude de l&rsquo;IQR, autorisant une appr\u00e9ciation simultan\u00e9e de la multimodalit\u00e9 et de la dispersion centrale.<\/p>\n<h3>9.3 Standards esth\u00e9tiques pour les publications acad\u00e9miques<\/h3>\n<p>Dans la perspective d&rsquo;une publication dans des revues internationales de premier rang (telles que celles \u00e9dit\u00e9es par l&rsquo;American Psychological Association, Elsevier ou Springer), l&rsquo;esth\u00e9tique des graphiques statistiques doit satisfaire des normes strictes de lisibilit\u00e9, de sobri\u00e9t\u00e9 et de fid\u00e9lit\u00e9 m\u00e9trique. Les graphiques en couleurs criardes doivent \u00eatre bannis au profit de palettes en niveaux de gris ou d&rsquo;\u00e9chelles chromatiques perceptuellement uniformes et accessibles aux lecteurs daltoniens (comme les palettes <em>viridis<\/em> ou <em>cividis<\/em>).<\/p>\n<p>L&rsquo;exportation finale du trac\u00e9 doit imp\u00e9rativement privil\u00e9gier des formats vectoriels haute d\u00e9finition afin d&rsquo;\u00e9viter toute pixellisation lors de la mise en page finale des manuscrits scientifiques :<\/p>\n<p><strong>plt.savefig(&lsquo;dispersion_iqr_haute_resolution.pdf&rsquo;, format=&rsquo;pdf&rsquo;, dpi=300, bbox_inches=&rsquo;tight&rsquo;)<\/strong><br \/>\n<strong>plt.savefig(&lsquo;dispersion_iqr_haute_resolution.svg&rsquo;, format=&rsquo;svg&rsquo;, bbox_inches=&rsquo;tight&rsquo;)<\/strong><\/p>\n<p>L&rsquo;insertion d&rsquo;annotations textuelles chiffr\u00e9es indiquant la valeur scalaire de l&rsquo;IQR directement \u00e0 c\u00f4t\u00e9 de l&rsquo;accolade d\u00e9limitant la bo\u00eete apporte une rigueur p\u00e9dagogique appr\u00e9ci\u00e9e des comit\u00e9s de lecture.<\/p>\n<h2>10. Comparaison critique de l&rsquo;IQR avec d&rsquo;autres indices de dispersion<\/h2>\n<h3>10.1 \u00c9cart interquartile versus \u00c9cart-type et Variance<\/h3>\n<p>Le tableau comparatif suivant illustre les distinctions op\u00e9rationnelles majeures entre les indices param\u00e9triques traditionnels et l&rsquo;\u00e9cart interquartile :<\/p>\n<table border=\"1\" cellpadding=\"8\" style=\"border-collapse: collapse; width: 100%; margin-top: 15px; margin-bottom: 20px;\">\n<tr style=\"background-color: #f2f2f2;\">\n<th>M\u00e9trique<\/th>\n<th>Sensibilit\u00e9 aux valeurs extr\u00eames<\/th>\n<th>Hypoth\u00e8se de distribution<\/th>\n<th>Point de rupture<\/th>\n<th>Usage recommand\u00e9<\/th>\n<\/tr>\n<tr>\n<td><strong>Variance (&sigma;&sup2;)<\/strong><\/td>\n<td>Extr\u00eame (amplification quadratique)<\/td>\n<td>Normale \/ Gaussienne<\/td>\n<td>0 % (Non robuste)<\/td>\n<td>Mod\u00e9lisation th\u00e9orique, ANOVA param\u00e9trique<\/td>\n<\/tr>\n<tr>\n<td><strong>\u00c9cart-type (&sigma;)<\/strong><\/td>\n<td>Tr\u00e8s \u00e9lev\u00e9e (lin\u00e9aire aux \u00e9carts)<\/td>\n<td>Sym\u00e9trique, queues l\u00e9g\u00e8res<\/td>\n<td>0 % (Non robuste)<\/td>\n<td>Statistiques descriptives standard de donn\u00e9es normales<\/td>\n<\/tr>\n<tr>\n<td><strong>\u00c9cart Interquartile (IQR)<\/strong><\/td>\n<td>Nulle aux extr\u00eames (born\u00e9 aux 50 % centraux)<\/td>\n<td>Aucune (Non param\u00e9trique)<\/td>\n<td>25 % (Hautement robuste)<\/td>\n<td>Distributions asym\u00e9triques, scores ordinaux, donn\u00e9es bruit\u00e9es<\/td>\n<\/tr>\n<tr>\n<td><strong>\u00c9cart Absolu M\u00e9dian (MAD)<\/strong><\/td>\n<td>Minimale absolue<\/td>\n<td>Aucune (Non param\u00e9trique)<\/td>\n<td>50 % (R\u00e9sistance maximale)<\/td>\n<td>D\u00e9tection stricte d&rsquo;anomalies, filtrage machine learning<\/td>\n<\/tr>\n<\/table>\n<p>L&rsquo;\u00e9cart-type proc\u00e8de en calculant les \u00e9carts \u00e0 la moyenne \u00e9lev\u00e9s au carr\u00e9, ce qui amplifie de fa\u00e7on exponentielle l&rsquo;influence des valeurs s&rsquo;\u00e9cartant du centre de la distribution. Sous l&rsquo;hypoth\u00e8se stricte d&rsquo;une distribution normale, la relation math\u00e9matique exacte liant l&rsquo;\u00e9cart-type &sigma; et l&rsquo;IQR s&rsquo;\u00e9nonce selon l&rsquo;\u00e9quation :<\/p>\n<p><strong>IQR &approx; 1.34898 &times; &sigma;<\/strong> &nbsp; (ou r\u00e9ciproquement : &sigma; &approx; 0.7413 &times; IQR)<\/p>\n<p>Si, au sein d&rsquo;un \u00e9chantillon empirique volumineux, le quotient de l&rsquo;IQR par l&rsquo;\u00e9cart-type s&rsquo;\u00e9carte substantiellement de 1.35, le chercheur dispose d&rsquo;une indication diagnostique formelle signifiant que les donn\u00e9es ne suivent pas une loi normale, justifiant l&rsquo;abandon des tests param\u00e9triques usuels.<\/p>\n<h3>10.2 \u00c9cart interquartile versus \u00c9cart absolu m\u00e9dian (MAD)<\/h3>\n<p>Si l&rsquo;IQR repr\u00e9sente l&rsquo;indice de dispersion robuste le plus universellement compris par la communaut\u00e9 scientifique, il existe une autre m\u00e9trique encore plus robuste sur le plan th\u00e9orique : l&rsquo;\u00e9cart absolu m\u00e9dian (MAD pour <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Median_absolute_deviation\">Median Absolute Deviation<\/a>). Le MAD correspond \u00e0 la m\u00e9diane des \u00e9carts absolus par rapport \u00e0 la m\u00e9diane de l&rsquo;\u00e9chantillon.<\/p>\n<p>Alors que l&rsquo;IQR affiche un point de rupture de 25 %, le MAD atteint le point de rupture th\u00e9orique maximal possible pour un estimateur de dispersion, soit 50 %. Cela signifie que pr\u00e8s de la moiti\u00e9 de l&rsquo;\u00e9chantillon peut \u00eatre corrompue sans que le MAD ne tende vers l&rsquo;infini. SciPy propose son calcul via <em>scipy.stats.median_abs_deviation<\/em> :<\/p>\n<p><strong>mad_valeur = stats.median_abs_deviation(donnees)<\/strong><\/p>\n<p>N\u00e9anmoins, en psychologie exp\u00e9rimentale et dans les sciences m\u00e9dicales, l&rsquo;IQR demeure g\u00e9n\u00e9ralement pr\u00e9f\u00e9r\u00e9 au MAD pour les comptes-rendus finaux. La raison en est sa lisibilit\u00e9 intuitive : l&rsquo;IQR d\u00e9limite physiquement un intervalle de scores r\u00e9els dans lesquels \u00e9volue la moiti\u00e9 des participants, tandis que le MAD repr\u00e9sente une distance d&rsquo;\u00e9cartement m\u00e9diane abstraite, plus complexe \u00e0 appr\u00e9hender conceptuellement par les cliniciens.<\/p>\n<h3>10.3 Tableau r\u00e9capitulatif des propri\u00e9t\u00e9s m\u00e9triques<\/h3>\n<p>La caract\u00e9risation d&rsquo;une distribution empirique ne peut se r\u00e9duire \u00e0 la seule dispersion ; elle doit s&rsquo;articuler avec les moments d&rsquo;ordre sup\u00e9rieur que sont l&rsquo;asym\u00e9trie (<em>skewness<\/em>) et l&rsquo;aplatissement (<em>kurtosis<\/em>). Face \u00e0 ces profils non gaussiens, l&rsquo;\u00e9cart interquartile manifeste des propri\u00e9t\u00e9s d&rsquo;une grande stabilit\u00e9 :<\/p>\n<ul>\n<li><strong>Sensibilit\u00e9 \u00e0 l&rsquo;asym\u00e9trie<\/strong> : Lorsque l&rsquo;asym\u00e9trie d&rsquo;une s\u00e9rie augmente, la moyenne et l&rsquo;\u00e9cart-type d\u00e9rivent vers la queue lourde. L&rsquo;IQR reste stable dans son amplitude, mais sa position par rapport \u00e0 la m\u00e9diane permet d&rsquo;objectiver l&rsquo;asym\u00e9trie : dans une distribution \u00e9tir\u00e9e vers la droite, la distance <em>(Q3 &#8211; M\u00e9diane)<\/em> surpasse largement <em>(M\u00e9diane &#8211; Q1)<\/em>.<\/li>\n<li><strong>R\u00e9sistance \u00e0 l&rsquo;aplatissement leptokurtique<\/strong> : Dans les distributions caract\u00e9ris\u00e9es par un pic central tr\u00e8s resserr\u00e9 et des queues ultra-longues (fort kurtosis), l&rsquo;\u00e9cart-type est gonfl\u00e9 de mani\u00e8re trompeuse par les queues lointaines. L&rsquo;IQR saisit pr\u00e9cis\u00e9ment l&rsquo;extr\u00eame homog\u00e9n\u00e9it\u00e9 du sommet central, \u00e9vitant de conclure \u00e0 tort \u00e0 une large h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9 des sujets.<\/li>\n<\/ul>\n<p>Ces propri\u00e9t\u00e9s conf\u00e8rent \u00e0 l&rsquo;\u00e9cart interquartile une neutralit\u00e9 axiologique indispensable dans l&rsquo;analyse de scores cliniques h\u00e9t\u00e9rog\u00e8nes.<\/p>\n<h2>11. Application empirique : Analyse de temps de r\u00e9action en psychologie cognitive<\/h2>\n<h3>11.1 Structure du protocole exp\u00e9rimental et des donn\u00e9es<\/h3>\n<p>Afin de concr\u00e9tiser l&rsquo;ensemble de ces pr\u00e9ceptes au sein d&rsquo;un cas d&rsquo;usage professionnel, consid\u00e9rons une exp\u00e9rimentation men\u00e9e en laboratoire de neuropsychologie cognitive. L&rsquo;investigation \u00e9value l&rsquo;impact de la privation de sommeil sur l&rsquo;attention soutenue \u00e0 l&rsquo;aide d&rsquo;une t\u00e2che de vigilance psychomotrice (PVT). Chaque participant doit presser une touche d\u00e8s l&rsquo;apparition d&rsquo;un stimulus visuel al\u00e9atoire. Les temps de r\u00e9action sont enregistr\u00e9s avec une pr\u00e9cision millim\u00e9trique.<\/p>\n<p>Les donn\u00e9es chronom\u00e9triques de cette nature pr\u00e9sentent structurellement une distribution <a rel=\"noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Ex-Gaussian_distribution\">ex-gaussienne<\/a> : une composante normale repr\u00e9sentant le temps incompressible de transmission sensori-motrice, adoss\u00e9e \u00e0 une composante exponentielle mat\u00e9rialisant les fluctuations de l&rsquo;attention corticale. L&rsquo;importation du jeu de donn\u00e9es brut s&rsquo;effectue via Pandas :<\/p>\n<p><strong>donnees_pvt = pd.read_csv(&lsquo;resultats_vigilance_cognitive.csv&rsquo;)<\/strong><\/p>\n<p>Le fichier agr\u00e8ge les colonnes : <em>Identifiant_Sujet<\/em>, <em>Groupe_Sommeil<\/em> (Repose vs Prive), <em>Temps_Reaction_ms<\/em>, et <em>Validite_Essai<\/em>.<\/p>\n<h3>11.2 Pipeline complet de traitement et de calcul en Python<\/h3>\n<p>L&rsquo;impl\u00e9mentation de la cha\u00eene algorithmique doit valider les types, neutraliser les valeurs manquantes sans alt\u00e9rer la coh\u00e9rence, calculer la m\u00e9trique d&rsquo;IQR par groupe et exclure les valeurs aberrantes m\u00e9thodologiques (temps de r\u00e9ponse inf\u00e9rieurs \u00e0 150 ms, physiologiquement impossibles sans anticipation, ou sup\u00e9rieurs \u00e0 3000 ms, traduisant un d\u00e9crochage attentionnel majeur) :<\/p>\n<p><strong>import numpy as np<\/strong><br \/>\n<strong>import pandas as pd<\/strong><br \/>\n<strong>from scipy import stats<\/strong><\/p>\n<p><strong># Chargement et \u00e9puration pr\u00e9liminaire<\/strong><br \/>\n<strong>df = donnees_pvt.copy()<\/strong><br \/>\n<strong>df = df.dropna(subset=[&lsquo;Temps_Reaction_ms&rsquo;])<\/strong><br \/>\n<strong>df = df[(df[&lsquo;Temps_Reaction_ms&rsquo;] &gt;= 150) &amp; (df[&lsquo;Temps_Reaction_ms&rsquo;] &lt;= 3000)]<\/strong><\/p>\n<p><strong># Fonction de calcul vectoris\u00e9e de l&rsquo;IQR via SciPy<\/strong><br \/>\n<strong>def extraire_metriques_dispersion(serie):<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;valeur_mediane = np.median(serie)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;valeur_iqr = stats.iqr(serie, interpolation=&rsquo;linear&rsquo;)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;q1 = np.percentile(serie, 25)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;q3 = np.percentile(serie, 75)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;return pd.Series({&lsquo;Mediane&rsquo;: valeur_mediane, &lsquo;Q1&rsquo;: q1, &lsquo;Q3&rsquo;: q3, &lsquo;IQR&rsquo;: valeur_iqr})<\/strong><\/p>\n<p><strong># Agr\u00e9gation diff\u00e9rentielle par condition exp\u00e9rimentale<\/strong><br \/>\n<strong>bilan_statistique = df.groupby(&lsquo;Groupe_Sommeil&rsquo;)[&lsquo;Temps_Reaction_ms&rsquo;].apply(extraire_metriques_dispersion).unstack()<\/strong><br \/>\n<strong>print(bilan_statistique)<\/strong><\/p>\n<p>Ce script assure une cha\u00eene de bout en bout parfaitement reproductible, sans d\u00e9pendance \u00e0 des boucles it\u00e9ratives manuelles.<\/p>\n<h3>11.3 Rapportage acad\u00e9mique et interpr\u00e9tation des r\u00e9sultats<\/h3>\n<p>Les normes de r\u00e9daction scientifique fix\u00e9es par l&rsquo;American Psychological Association (manuel APA, 7e \u00e9dition) encadrent rigoureusement la restitution \u00e9crite des statistiques d&rsquo;ordre. Dans le corps du texte d&rsquo;une publication, les estimations non param\u00e9triques s&rsquo;\u00e9noncent en associant syst\u00e9matiquement la m\u00e9diane \u00e0 son intervalle interquartile ou \u00e0 ses bornes exactes :<\/p>\n<p><em>\u00ab L&rsquo;analyse des temps de r\u00e9action r\u00e9v\u00e8le une augmentation marqu\u00e9e de la variabilit\u00e9 attentionnelle sous privation de sommeil. Les sujets repos\u00e9s manifestent une m\u00e9diane de r\u00e9ponse stable (Mdn = 242.0 ms, IQR = 48.5 ms, Q1 = 220.0 ms, Q3 = 268.5 ms), tandis que les participants priv\u00e9s de sommeil affichent une d\u00e9t\u00e9rioration de la rapidit\u00e9 coupl\u00e9e \u00e0 une dispersion accrue des performances (Mdn = 338.5 ms, IQR = 112.0 ms, Q1 = 286.0 ms, Q3 = 398.0 ms). \u00bb<\/em><\/p>\n<p>L&rsquo;interpr\u00e9tation cognitive d\u00e9montre sans \u00e9quivoque que la privation de sommeil n&rsquo;induit pas simplement un ralentissement global et uniforme du syst\u00e8me nerveux central, mais provoque une d\u00e9synchronisation motrice caract\u00e9ris\u00e9e par un quasi-triplement de l&rsquo;IQR (passant de 48.5 ms \u00e0 112.0 ms). Cette variabilit\u00e9 comportementale accrue constitue le biomarqueur premier de l&rsquo;instabilit\u00e9 de l&rsquo;attention corticale.<\/p>\n<h2>12. Pi\u00e8ges fr\u00e9quents, optimisation du code et bonnes pratiques<\/h2>\n<h3>12.1 Erreurs m\u00e9thodologiques et de programmation r\u00e9currentes<\/h3>\n<p>L&rsquo;exp\u00e9rience montre que m\u00eame des d\u00e9veloppeurs chevronn\u00e9s ou des chercheurs confirm\u00e9s commettent r\u00e9guli\u00e8rement des b\u00e9vues d&rsquo;impl\u00e9mentation lors du calcul de l&rsquo;\u00e9cart interquartile en Python. Voici les trois pi\u00e8ges les plus r\u00e9pandus :<\/p>\n<ol>\n<li><strong>Confusion d&rsquo;\u00e9chelle entre NumPy et Pandas<\/strong> : Transmettre la liste <em>[25, 75]<\/em> \u00e0 la m\u00e9thode <em>pandas.Series.quantile()<\/em> provoquera une exception d&rsquo;ex\u00e9cution ou un calcul incoh\u00e9rent, car Pandas attend strictement des fractions comprises entre 0.0 et 1.0 (soit <em>[0.25, 0.75]<\/em>). Inversement, si l&rsquo;on transmet <em>[0.25, 0.75]<\/em> \u00e0 l&rsquo;ancienne version de <em>numpy.percentile()<\/em>, la fonction calculera les quartiles au centi\u00e8me de centile inf\u00e9rieur, faussant radicalement le r\u00e9sultat sans alerter l&rsquo;utilisateur.<\/li>\n<li><strong>\u00c9blouissement face aux matrices multidimensionnelles<\/strong> : Lors du traitement d&rsquo;une matrice NumPy bidimensionnelle sans sp\u00e9cifier l&rsquo;argument <em>axis<\/em>, NumPy aplatit l&rsquo;int\u00e9gralit\u00e9 du tableau en un vecteur unidimensionnel g\u00e9ant avant de calculer un IQR unique global. Si l&rsquo;objectif \u00e9tait d&rsquo;obtenir l&rsquo;IQR de chaque variable ind\u00e9pendante (colonnes), l&rsquo;oubli de <em>axis=0<\/em> fausse enti\u00e8rement la matrice r\u00e9sultante.<\/li>\n<li><strong>Propagation silencieuse de valeurs textuelles<\/strong> : La pr\u00e9sence d&rsquo;un espace vide ou d&rsquo;une cha\u00eene de caract\u00e8res &lsquo;NA&rsquo; dans un tableau lu sans typage explicite convertit silencieusement le tableau NumPy en type <em>object<\/em>, bloquant net les op\u00e9rations math\u00e9matiques de tri ou d\u00e9clenchant des erreurs cryptiques lors de l&rsquo;interpolation.<\/li>\n<\/ol>\n<h3>12.2 Optimisation vectorielle sur des ensembles de donn\u00e9es volumineux<\/h3>\n<p>Face \u00e0 des volum\u00e9tries massives exc\u00e9dant les dizaines de millions d&rsquo;enregistrements (Big Data biom\u00e9dical, relev\u00e9s d&rsquo;acc\u00e9l\u00e9rom\u00e9trie continue), l&rsquo;efficacit\u00e9 du calcul de l&rsquo;IQR d\u00e9pend de la gestion de la m\u00e9moire cache du processeur et des m\u00e9canismes de partitionnement d&rsquo;ordonnancement.<\/p>\n<p>L&rsquo;algorithme de calcul quantile sous-jacent dans NumPy repose sur <em>introselect<\/em>, une variante optimis\u00e9e de l&rsquo;algorithme <em>Quickselect<\/em> qui atteint une complexit\u00e9 temporelle lin\u00e9aire en moyenne, not\u00e9e <em>O(n)<\/em>. Pour pr\u00e9server cette performance th\u00e9orique :<\/p>\n<ul>\n<li>Bannissez formellement toute boucle native Python <em>for ligne in dataframe.iterrows()<\/em> : ces it\u00e9rations d\u00e9gradent les performances de plusieurs ordres de grandeur par rapport aux appels vectoris\u00e9s de bas niveau compil\u00e9s en C.<\/li>\n<li>\u00c9vitez le tri complet pr\u00e9alable du tableau via <em>sort()<\/em> avant d&rsquo;extraire les quartiles : <em>numpy.percentile()<\/em> partitionne les donn\u00e9es sans r\u00e9aliser le tri int\u00e9gral <em>O(n log n)<\/em>, \u00e9conomisant des cycles d&rsquo;horloge pr\u00e9cieux.<\/li>\n<li>Utilisez l&rsquo;utilitaire de profilage <em>cProfile<\/em> pour identifier d&rsquo;\u00e9ventuels goulets d&rsquo;\u00e9tranglement structurels dans l&rsquo;ingestion de vos pipelines de donn\u00e9es volumineuses :<br \/>\n    <strong>python -m cProfile -s time mon_script_analytique.py<\/strong><\/li>\n<\/ul>\n<h3>12.3 Standardisation d&rsquo;une fonction r\u00e9utilisable et document\u00e9e<\/h3>\n<p>Pour p\u00e9renniser le capital logiciel d&rsquo;un laboratoire ou d&rsquo;une \u00e9quipe d&rsquo;ing\u00e9nierie statistique, la consolidation des calculs au sein d&rsquo;une fonction Python universelle, robuste, typ\u00e9e statiquement et int\u00e9gralement document\u00e9e selon le standard des docstrings NumPy constitue la r\u00e8gle de l&rsquo;art :<\/p>\n<p><strong>from typing import Union, Sequence<\/strong><br \/>\n<strong>import numpy as np<\/strong><br \/>\n<strong>import pandas as pd<\/strong><\/p>\n<p><strong>def calculer_iqr_robuste(<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;donnees: Union[np.ndarray, pd.Series, Sequence[float]],<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;ignorer_nan: bool = True,<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;methode_interpolation: str = &lsquo;linear&rsquo;<\/strong><br \/>\n<strong>) -&gt; float:<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;Calcule l&rsquo;\u00e9cart interquartile (IQR) de mani\u00e8re robuste sur tout conteneur num\u00e9rique.<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;Param\u00e8tres<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;&#8212;-<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;donnees : Union[np.ndarray, pd.Series, Sequence[float]]<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vecteur unidimensionnel de mesures quantitatives.<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;ignorer_nan : bool, d\u00e9faut=True<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indique si les valeurs manquantes doivent \u00eatre omises dans le calcul.<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;methode_interpolation : str, d\u00e9faut=&rsquo;linear&rsquo;<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Algorithme d&rsquo;interpolation quantile (options : &lsquo;linear&rsquo;, &lsquo;lower&rsquo;, &lsquo;higher&rsquo;, &lsquo;midpoint&rsquo;, &lsquo;nearest&rsquo;).<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;Retourne<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;-<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;float<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Valeur scalaire repr\u00e9sentant l&rsquo;\u00e9tendue interquartile (Q3 &#8211; Q1).<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;\u00ab\u00a0\u00a0\u00bb\u00a0\u00bb<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;tableau = np.asarray(donnees, dtype=np.float64)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;if tableau.ndim != 1:<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise ValueError(\u00ab\u00a0La fonction attend un tableau unidimensionnel.\u00a0\u00bb)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;if ignorer_nan:<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q1, q3 = np.nanpercentile(tableau, [25, 75], method=methode_interpolation)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;else:<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q1, q3 = np.percentile(tableau, [25, 75], method=methode_interpolation)<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;<\/strong><br \/>\n<strong>&nbsp;&nbsp;&nbsp;&nbsp;return float(q3 &#8211; q1)<\/strong><\/p>\n<p>L&rsquo;int\u00e9grit\u00e9 de cette brique logicielle gagne \u00e0 \u00eatre valid\u00e9e \u00e0 l&rsquo;aide de tests unitaires formels sous l&rsquo;\u00e9gide du cadriciel <em>pytest<\/em>, v\u00e9rifiant son comportement nominal face \u00e0 des s\u00e9ries paires, impaires, int\u00e9grant des fractions d\u00e9cimales ou contenant des blocs de <em>NaN<\/em>, scellant ainsi l&rsquo;excellence de la cha\u00eene de calcul statistique.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., &#8230; &amp; Oliphant, T. E. (2020). Array programming with NumPy. <em>Nature<\/em>, 585(7825), 357-362. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41586-020-2649-2\">https:\/\/doi.org\/10.1038\/s41586-020-2649-2<\/a><\/li>\n<li>Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. <em>Computing in Science &amp; Engineering<\/em>, 9(3), 90-95. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1109\/MCSE.2007.55\">https:\/\/doi.org\/10.1109\/MCSE.2007.55<\/a><\/li>\n<li>Hyndman, R. J., &amp; Fan, Y. (1996). Sample quantiles in statistical packages. <em>The American Statistician<\/em>, 50(4), 361-365. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1080\/00031305.1996.10473541\">https:\/\/doi.org\/10.1080\/00031305.1996.10473541<\/a><\/li>\n<li>McKinney, W. (2010). Data structures for statistical computing in Python. In <em>Proceedings of the 9th Python in Science Conference<\/em> (Vol. 445, pp. 51-56). <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.25080\/Majora-92bf1927-005\">https:\/\/doi.org\/10.25080\/Majora-92bf1927-005<\/a><\/li>\n<li>Tukey, J. W. (1977). <em>Exploratory Data Analysis<\/em>. Addison-Wesley.<\/li>\n<li>Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., &#8230; &amp; SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. <em>Nature Methods<\/em>, 17(3), 261-272. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1038\/s41592-019-0686-2\">https:\/\/doi.org\/10.1038\/s41592-019-0686-2<\/a><\/li>\n<li>Waskom, M. L. (2021). Seaborn: statistical data visualization. <em>Journal of Open Source Software<\/em>, 6(60), 3021. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.21105\/joss.03021\">https:\/\/doi.org\/10.21105\/joss.03021<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour calculer l&rsquo;\u00e9cart interquartile en Python avec NumPy, SciPy et Pandas. M\u00e9thodes, formules et d\u00e9tection des valeurs aberrantes.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[2269,4351,1835],"tags":[1982,2960,2466,2468,4352],"class_list":["post-2224","psych_stat","type-psych_stat","status-publish","hentry","category-methodes-quantitatives","category-programmation-scientifique","category-statistiques-en-psychologie","tag-ecart-interquartile","tag-numpy","tag-pandas","tag-python","tag-scipy"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat"}],"about":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/types\/psych_stat"}],"author":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2224"}],"version-history":[{"count":1,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2224\/revisions"}],"predecessor-version":[{"id":16342,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/2224\/revisions\/16342"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}