{"id":8655,"date":"2026-09-23T03:50:13","date_gmt":"2026-09-23T03:50:13","guid":{"rendered":"http:\/\/french.arabpsychology.com\/statistics\/comment-creer-un-tableau-de-contingence-en-python\/"},"modified":"2026-09-23T03:50:13","modified_gmt":"2026-09-23T03:50:13","slug":"comment-creer-un-tableau-de-contingence-en-python","status":"publish","type":"psych_stat","link":"https:\/\/french.arabpsychology.com\/?psych_stat=comment-creer-un-tableau-de-contingence-en-python","title":{"rendered":"Comment cr\u00e9er un tableau de contingence en Python"},"content":{"rendered":"<p>L&rsquo;analyse bivari\u00e9e des variables cat\u00e9gorielles constitue l&rsquo;un des piliers m\u00e9thodologiques fondamentaux de la statistique descriptive et inf\u00e9rentielle moderne. Qu&rsquo;il s&rsquo;agisse d&rsquo;\u00e9valuer l&rsquo;interd\u00e9pendance de r\u00e9ponses comportementales au sein d&rsquo;une cohorte clinique, d&rsquo;analyser les pr\u00e9f\u00e9rences \u00e9lectorales en fonction de segments sociod\u00e9mographiques ou de valider des mod\u00e8les psychom\u00e9triques par tabulation crois\u00e9e, le tableau de contingence demeure l&rsquo;instrument analytique de r\u00e9f\u00e9rence. Cette structure matricielle permet de condenser une masse consid\u00e9rable de donn\u00e9es observationnelles brutes en une repr\u00e9sentation intelligible, mettant en exergue les fr\u00e9quences conjointes d&rsquo;\u00e9v\u00e9nements discrets et ouvrant la voie \u00e0 la v\u00e9rification formelle d&rsquo;hypoth\u00e8ses statistiques.<\/p>\n<p>Au sein de l&rsquo;\u00e9cosyst\u00e8me de programmation scientifique contemporain, le langage <a rel=\"noopener noreferrer\" href=\"https:\/\/www.python.org\">Python<\/a> s&rsquo;est impos\u00e9 comme le standard de facto pour le traitement, l&rsquo;exploration et la mod\u00e9lisation des donn\u00e9es. Gr\u00e2ce \u00e0 des biblioth\u00e8ques hautement optimis\u00e9es telles que <a rel=\"noopener noreferrer\" href=\"https:\/\/pandas.pydata.org\">Pandas<\/a>, NumPy et <a rel=\"noopener noreferrer\" href=\"https:\/\/scipy.org\">SciPy<\/a>, le chercheur ou l&rsquo;ing\u00e9nieur de donn\u00e9es dispose d&rsquo;outils d&rsquo;une puissance algorithmique remarquable pour formaliser des tables d&rsquo;effectifs, calculer des distributions conditionnelles et tester des structures de d\u00e9pendance probabiliste. La transition d&rsquo;un simple tableau de comptage vers un pipeline d&rsquo;inf\u00e9rence statistique complet s&rsquo;effectue ainsi avec une rigueur math\u00e9matique et une reproductibilit\u00e9 computationnelle in\u00e9gal\u00e9es.<\/p>\n<p>Le pr\u00e9sent trait\u00e9 propose une exploration exhaustive de la construction, de la personnalisation et de l&rsquo;exploitation statistique des tableaux de contingence en Python. De l&rsquo;\u00e9lucidation de ses soubassements \u00e9pist\u00e9mologiques et th\u00e9oriques jusqu&rsquo;au d\u00e9ploiement de visualisations avanc\u00e9es et de tests d&rsquo;hypoth\u00e8ses non param\u00e9triques, chaque \u00e9tape m\u00e9thodologique est d\u00e9cortiqu\u00e9e afin d&rsquo;offrir une ma\u00eetrise technique et conceptuelle absolue. L&rsquo;objectif est de d\u00e9passer la simple manipulation syntaxique pour appr\u00e9hender la logique sous-jacente des distributions conjointes et conditionnelles dans l&rsquo;analyse de donn\u00e9es massives et h\u00e9t\u00e9rog\u00e8nes.<\/p>\n<h2>1. Introduction aux tableaux de contingence et \u00e0 leur pertinence en Python<\/h2>\n<h3>1.1 D\u00e9finition \u00e9pist\u00e9mologique et utilit\u00e9 scientifique<\/h3>\n<p>D&rsquo;un point de vue \u00e9pist\u00e9mologique, le tableau de contingence, formalis\u00e9 initialement dans les travaux pionniers de Karl Pearson au tournant du vingti\u00e8me si\u00e8cle, repr\u00e9sente une modalit\u00e9 d&rsquo;organisation spatiale et quantitative de la contingence ph\u00e9nom\u00e9nologique. Il s&rsquo;agit d&rsquo;une matrice math\u00e9matique discr\u00e8te permettant de d\u00e9nombrer les co-occurrences d&rsquo;\u00e9tats au sein d&rsquo;un espace probabilis\u00e9 fini. Lorsque deux variables qualitatives sont mesur\u00e9es sur une population statistique donn\u00e9e, la tabulation crois\u00e9e structure l&rsquo;espace des r\u00e9alisations possibles en un produit cart\u00e9sien de leurs modalit\u00e9s respectives. Chaque intersection, ou cellule matricielle, quantifie la fr\u00e9quence conjointe d&rsquo;un couple d&rsquo;\u00e9v\u00e9nements empiriques, transformant un flux d\u00e9sordonn\u00e9 de donn\u00e9es textuelles ou symboliques en un objet alg\u00e9brique manipulable.<\/p>\n<p>L&rsquo;utilit\u00e9 scientifique de cette formalisation r\u00e9side dans sa capacit\u00e9 \u00e0 op\u00e9rer une r\u00e9duction d&rsquo;entropie informationnelle. Alors que l&rsquo;analyse univari\u00e9e isole chaque variable dans sa distribution marginale propre, occultant toute structure d&rsquo;interaction, la tabulation crois\u00e9e permet d&rsquo;acc\u00e9der directement \u00e0 la covariance empirique des attributs qualitatifs. Dans les sciences comportementales, en psychom\u00e9trie et dans les neurosciences cognitives, cette approche s&rsquo;av\u00e8re indispensable pour \u00e9tudier les profils diff\u00e9rentiels de r\u00e9ponse, l&rsquo;adh\u00e9sion \u00e0 des traitements th\u00e9rapeutiques selon des classifications diagnostiques, ou la validit\u00e9 concourante d&rsquo;\u00e9chelles de mesure discr\u00e9tis\u00e9es. Le tableau de contingence constitue ainsi l&rsquo;\u00e9tape pr\u00e9paratoire indispensable \u00e0 toute mod\u00e9lisation log-lin\u00e9aire ou test d&rsquo;ind\u00e9pendance structurelle.<\/p>\n<p>Enfin, la distinction conceptuelle entre une simple distribution univari\u00e9e de fr\u00e9quences et une distribution bivari\u00e9e ou multivari\u00e9e marque le passage de la description statique \u00e0 l&rsquo;inf\u00e9rence relationnelle. Dans le cadre univari\u00e9, le chercheur se borne \u00e0 estimer des param\u00e8tres de pr\u00e9valence ou de dispersion au sein d&rsquo;une dimension isol\u00e9e. L&rsquo;analyse bivari\u00e9e au moyen d&rsquo;un tableau crois\u00e9 interroge explicitement la structure de conditionnement : la r\u00e9alisation d&rsquo;une modalit\u00e9 de la premi\u00e8re variable alt\u00e8re-t-elle la probabilit\u00e9 d&rsquo;occurrence des modalit\u00e9s de la seconde ? Cette interrogation relative \u00e0 la modification des probabilit\u00e9s conditionnelles forme le socle m\u00eame de la d\u00e9marche exp\u00e9rimentale et de la d\u00e9couverte de relations causales ou associatives en science des donn\u00e9es.<\/p>\n<h3>1.2 L&rsquo;\u00e9cosyst\u00e8me Python pour le calcul de tableaux crois\u00e9s<\/h3>\n<p>L&rsquo;av\u00e8nement de Python comme environnement pr\u00e9dominant de calcul scientifique repose sur une architecture logicielle modulaire articul\u00e9e autour du calcul vectoris\u00e9 et de l&rsquo;interop\u00e9rabilit\u00e9 des structures de donn\u00e9es. Au c\u0153ur de cet \u00e9cosyst\u00e8me, la biblioth\u00e8que Pandas joue un r\u00f4le cardinal dans l&rsquo;ing\u00e9nierie des donn\u00e9es descriptives. Con\u00e7ue initialement pour r\u00e9pondre aux exigences quantitatives de l&rsquo;\u00e9conom\u00e9trie financi\u00e8re, Pandas fournit des structures bidimensionnelles \u00e9tiquet\u00e9es, les DataFrames, capables de manipuler des types h\u00e9t\u00e9rog\u00e8nes avec une efficacit\u00e9 m\u00e9moire optimale. Pour la tabulation crois\u00e9e, Pandas int\u00e8gre la fonction haut niveau <code>pandas.crosstab()<\/code>, un moteur algorithmique d\u00e9di\u00e9 \u00e0 la transformation de vecteurs s\u00e9quentiels en repr\u00e9sentations matricielles synth\u00e9tiques.<\/p>\n<p>La puissance de Python s&rsquo;affirme de mani\u00e8re encore plus \u00e9clatante lorsqu&rsquo;on observe la synergie entre la manipulation de structures de donn\u00e9es op\u00e9r\u00e9e par Pandas et le calcul d&rsquo;inf\u00e9rence statistique formelle d\u00e9l\u00e9gu\u00e9 \u00e0 la biblioth\u00e8que SciPy. Tandis que Pandas extrait, filtre, reformate et calcule les effectifs marginaux ou conditionnels, le module <code>scipy.stats<\/code> prend le relais pour appliquer les tests d&rsquo;ind\u00e9pendance, les calculs de p-valeurs exactes ou asymptotiques et les mesures d&rsquo;intensit\u00e9 d&rsquo;association. Cette compl\u00e9mentarit\u00e9 fonctionnelle \u00e9limine les ruptures de pipeline analytique couramment observ\u00e9es lors de l&rsquo;usage combin\u00e9 de tableurs et de logiciels statistiques sp\u00e9cialis\u00e9s, garantissant une int\u00e9grit\u00e9 computationnelle continue de la phase d&rsquo;ingestion brute \u00e0 la production des r\u00e9sultats finaux.<\/p>\n<p>Par rapport aux logiciels statistiques propri\u00e9taires et ferm\u00e9s tels que SPSS ou SAS, la mod\u00e9lisation des tableaux crois\u00e9s en Python garantit une reproductibilit\u00e9 m\u00e9thodologique int\u00e9grale. L&rsquo;ensemble des transformations, des arbitrages sur les valeurs manquantes et des choix de normalisation probabiliste se trouve consign\u00e9 sous forme de code source versionnable et auditable. De surcro\u00eet, la prise en charge native des types de donn\u00e9es cat\u00e9gorielles optimis\u00e9s, via la classe <code>pd.Categorical<\/code>, offre des gains de performance computationnelle majeurs lors du traitement de volum\u00e9tries massives, tout en garantissant le respect scrupuleux de l&rsquo;ordre intrins\u00e8que des modalit\u00e9s ordinales lors des croisements matriciels.<\/p>\n<h2>2. Fondements th\u00e9oriques : distribution conjointe et variables cat\u00e9gorielles<\/h2>\n<h3>2.1 Niveaux de mesure et typologie des variables<\/h3>\n<p>L&rsquo;\u00e9laboration rigoureuse d&rsquo;un tableau de contingence exige une compr\u00e9hension formelle des niveaux de mesure th\u00e9oriques d\u00e9finis originellement par Stanley Smith Stevens. Les variables statistiques se d\u00e9clinent selon quatre \u00e9chelles fondamentales : nominale, ordinale, d&rsquo;intervalle et de rapport. La tabulation crois\u00e9e s&rsquo;applique prioritairement aux variables situ\u00e9es sur les deux premi\u00e8res \u00e9chelles, qualifi\u00e9es de qualitatives ou cat\u00e9gorielles. Les \u00e9chelles nominales caract\u00e9risent des classes d&rsquo;\u00e9quivalence mutuellement exclusives et exhaustivement exhaustives, d\u00e9pourvues de toute relation d&rsquo;ordre sous-jacente, telles que le statut clinique, le sexe biologique ou l&rsquo;appartenance \u00e0 un groupe t\u00e9moin versus exp\u00e9rimental.<\/p>\n<p>Les \u00e9chelles ordinales, quant \u00e0 elles, introduisent une relation d&rsquo;ordre d&rsquo;ordre strict ou partiel entre les modalit\u00e9s, sans pour autant postuler une m\u00e9trique uniforme entre les \u00e9chelons successifs. C&rsquo;est le cas paradigmatique des \u00e9chelles de Likert couramment d\u00e9ploy\u00e9es en psychologie cognitive ou dans les enqu\u00eates d&rsquo;opinion (par exemple : \u00ab pas du tout d&rsquo;accord \u00bb, \u00ab neutre \u00bb, \u00ab totalement d&rsquo;accord \u00bb). Par ailleurs, des variables initialement continues, issues d&rsquo;\u00e9chelles d&rsquo;intervalle ou de rapport, peuvent subir un processus de discr\u00e9tisation ou binarisation. Cette transformation segmente un continuum m\u00e9trique en classes qualitatives \u00e9tanches (par exemple, cat\u00e9goriser un temps de r\u00e9action continu en latences \u00ab rapides \u00bb, \u00ab m\u00e9dianes \u00bb et \u00ab lentes \u00bb), permettant d&rsquo;incorporer ces mesures dans une matrice de contingence au prix d&rsquo;une perte d\u00e9lib\u00e9r\u00e9e de pr\u00e9cision m\u00e9trique.<\/p>\n<p>D&rsquo;un point de vue math\u00e9matique, une table de contingence bivari\u00e9e op\u00e9rant sur deux variables cat\u00e9gorielles <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"Y\">$Y$<\/span>, comportant respectivement <span class=\"arabpsy-math-inline\" data-latex=\"I\">$I$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"J\">$J$<\/span> modalit\u00e9s, structure les donn\u00e9es sous la forme d&rsquo;un op\u00e9rateur lin\u00e9aire matriciel de dimension <span class=\"arabpsy-math-inline\" data-latex=\"I \\times J\">$I \\times J$<\/span>. Chaque \u00e9l\u00e9ment de cet ensemble d\u00e9nombrable est soumis aux axiomes de la th\u00e9orie de la mesure sur les ensembles finis. L&rsquo;hypoth\u00e8se de distribution sous-jacente la plus fr\u00e9quemment mobilis\u00e9e repose sur la loi multinomiale lorsque l&rsquo;effectif total est fix\u00e9 par le protocole exp\u00e9rimental, ou sur des lois de Poisson ind\u00e9pendantes lorsque le processus de comptage r\u00e9sulte d&rsquo;un \u00e9chantillonnage continu dans le temps ou l&rsquo;espace sans contrainte marginale initiale.<\/p>\n<h3>2.2 Fr\u00e9quences observ\u00e9es, marginales et th\u00e9oriques<\/h3>\n<p>Soit un ensemble de <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> unit\u00e9s statistiques observ\u00e9es conjointement selon deux dimensions qualitatives <span class=\"arabpsy-math-inline\" data-latex=\"X = {A_1, A_2, dots, A_I}\">$X = {A_1, A_2, dots, A_I}$<\/span> et <span class=\"arabpsy-math-inline\" data-latex=\"Y = {B_1, B_2, dots, B_J}\">$Y = {B_1, B_2, dots, B_J}$<\/span>. La fr\u00e9quence observ\u00e9e, d\u00e9sign\u00e9e classiquement par la notation scalaire <span class=\"arabpsy-math-inline\" data-latex=\"n_{ij}\">$n_{ij}$<\/span> ou <span class=\"arabpsy-math-inline\" data-latex=\"O_{ij}\">$O_{ij}$<\/span>, correspond au cardinal du sous-ensemble d&rsquo;unit\u00e9s pr\u00e9sentant simultan\u00e9ment la modalit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"A_i\">$A_i$<\/span> pour la variable <span class=\"arabpsy-math-inline\" data-latex=\"X\">$X$<\/span> et la modalit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"B_j\">$B_j$<\/span> pour la variable <span class=\"arabpsy-math-inline\" data-latex=\"Y\">$Y$<\/span>. Cette quantit\u00e9 empirique v\u00e9rifie par d\u00e9finition la contrainte de non-n\u00e9gativit\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"n_{ij} in \\mathbb{N}\">$n_{ij} in \\mathbb{N}$<\/span> pour tout couple d&rsquo;indices <span class=\"arabpsy-math-inline\" data-latex=\"(i, j)\">$(i, j)$<\/span> appartenant \u00e0 l&rsquo;ensemble cart\u00e9sien <span class=\"arabpsy-math-inline\" data-latex=\"{1, dots, I} \\times {1, dots, J}\">${1, dots, I} \\times {1, dots, J}$<\/span>.<\/p>\n<p>Les distributions marginales repr\u00e9sentent les sommes projectives op\u00e9r\u00e9es le long des axes de la matrice. L&rsquo;effectif marginal associ\u00e9 \u00e0 la <span class=\"arabpsy-math-inline\" data-latex=\"i\">$i$<\/span>-\u00e8me ligne, not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"n_{i\\cdot}\">$n_{i\\cdot}$<\/span>, s&rsquo;obtient par la sommation vectorielle des cellules sur l&rsquo;ensemble des colonnes :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"n_{i\\cdot} = \\sum_{j=1}^{J} n_{ij}\">$$n_{i\\cdot} = \\sum_{j=1}^{J} n_{ij}$$<\/span><\/p>\n<p>De mani\u00e8re sym\u00e9trique, l&rsquo;effectif marginal de la <span class=\"arabpsy-math-inline\" data-latex=\"j\">$j$<\/span>-\u00e8me colonne, not\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"n_{\\cdot j}\">$n_{\\cdot j}$<\/span>, r\u00e9sulte de la sommation le long de l&rsquo;axe des lignes :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"n_{\\cdot j} = \\sum_{i=1}^{I} n_{ij}\">$$n_{\\cdot j} = \\sum_{i=1}^{I} n_{ij}$$<\/span><\/p>\n<p>La sommation int\u00e9grale de ces marges v\u00e9rifie la cl\u00f4ture arithm\u00e9tique de l&rsquo;\u00e9chantillon, \u00e0 savoir :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\sum_{i=1}^{I} n_{i\\cdot} = \\sum_{j=1}^{J} n_{\\cdot j} = \\sum_{i=1}^{I}\\sum_{j=1}^{J} n_{ij} = N\">$$\\sum_{i=1}^{I} n_{i\\cdot} = \\sum_{j=1}^{J} n_{\\cdot j} = \\sum_{i=1}^{I}\\sum_{j=1}^{J} n_{ij} = N$$<\/span><\/p>\n<p>L&rsquo;introduction du mod\u00e8le th\u00e9orique d&rsquo;ind\u00e9pendance stochastique postule que la probabilit\u00e9 conjointe th\u00e9orique d&rsquo;un \u00e9v\u00e9nement \u00e9l\u00e9mentaire <span class=\"arabpsy-math-inline\" data-latex=\"(A_i \\cap B_j)\">$(A_i \\cap B_j)$<\/span> \u00e9quivaut strictement au produit de leurs probabilit\u00e9s marginales respectives :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"P(X = A_i \\cap Y = B_j) = P(X = A_i) \\times P(Y = B_j)\">$$P(X = A_i \\cap Y = B_j) = P(X = A_i) \\times P(Y = B_j)$$<\/span><\/p>\n<p>Sous cette hypoth\u00e8se nulle, la fr\u00e9quence th\u00e9orique esp\u00e9r\u00e9e, couramment not\u00e9e <span class=\"arabpsy-math-inline\" data-latex=\"E_{ij}\">$E_{ij}$<\/span> ou <span class=\"arabpsy-math-inline\" data-latex=\"e_{ij}\">$e_{ij}$<\/span>, repr\u00e9sente le nombre d&rsquo;occurrences que l&rsquo;on observerait asymptotiquement si aucune interaction ne liait les deux variables :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"E_{ij} = N \\times \\left(\\frac{n_{i\\cdot}}{N}\\right) \\times \\left(\\frac{n_{\\cdot j}}{N}\\right) = \\frac{n_{i\\cdot} \\times n_{\\cdot j}}{N}\">$$E_{ij} = N \\times \\left(\\frac{n_{i\\cdot}}{N}\\right) \\times \\left(\\frac{n_{\\cdot j}}{N}\\right) = \\frac{n_{i\\cdot} \\times n_{\\cdot j}}{N}$$<\/span><\/p>\n<p>La quantification g\u00e9om\u00e9trique et statistique de l&rsquo;\u00e9cart \u00e0 l&rsquo;ind\u00e9pendance repose pr\u00e9cis\u00e9ment sur l&rsquo;analyse des r\u00e9sidus entre les fr\u00e9quences observ\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"O_{ij}\">$O_{ij}$<\/span> et les fr\u00e9quences th\u00e9oriques <span class=\"arabpsy-math-inline\" data-latex=\"E_{ij}\">$E_{ij}$<\/span>. Toute divergence substantielle entre ces deux grandeurs met en \u00e9vidence une association empirique, laquelle sera \u00e9valu\u00e9e par des m\u00e9triques d&rsquo;association et des tests de signification formels.<\/p>\n<h2>3. Configuration de l&rsquo;environnement Python et pr\u00e9paration des donn\u00e9es<\/h2>\n<h3>3.1 Installation et importation des biblioth\u00e8ques fondamentales<\/h3>\n<p>La mise en place d&rsquo;un environnement computationnel rigoureux constitue le pr\u00e9requis m\u00e9thodologique fondamental pour garantir la reproductibilit\u00e9 et l&rsquo;int\u00e9grit\u00e9 des calculs statistiques. L&rsquo;\u00e9cosyst\u00e8me d&rsquo;analyse de donn\u00e9es en Python s&rsquo;articule autour de modules hautement sp\u00e9cialis\u00e9s, dont l&rsquo;installation s&rsquo;op\u00e8re typiquement via les gestionnaires de paquets standardis\u00e9s tels que <a rel=\"noopener noreferrer\" href=\"https:\/\/pip.pypa.io\">Pip<\/a> ou le gestionnaire d&rsquo;environnements virtualis\u00e9s <a rel=\"noopener noreferrer\" href=\"https:\/\/docs.conda.io\">Conda<\/a>. Pour les besoins inh\u00e9rents au traitement des tableaux de contingence, quatre biblioth\u00e8ques constituent le socle d&rsquo;ing\u00e9nierie logicielle indispensable : Pandas pour l&rsquo;agr\u00e9gation relationnelle, NumPy pour le calcul matriciel sous-jacent, SciPy pour les distributions probabilistes, et Seaborn pour la s\u00e9miotique graphique.<\/p>\n<p>L&rsquo;importation de ces d\u00e9pendances ob\u00e9it \u00e0 des conventions s\u00e9mantiques universellement \u00e9tablies au sein de la communaut\u00e9 scientifique. Pandas est assign\u00e9 \u00e0 l&rsquo;alias standard <code>pd<\/code>, tandis que NumPy adopte le diminutif <code>np<\/code>. Les fonctions inf\u00e9rentielles sp\u00e9cialis\u00e9es sont directement extraites du sous-module <code>scipy.stats<\/code>. Il est imp\u00e9ratif, dans le cadre d&rsquo;\u00e9tudes quantitatives publiables, de consigner de fa\u00e7on immuable les versions logicielles de chaque composant \u00e0 travers un fichier de d\u00e9pendances formel, pr\u00e9venant ainsi toute d\u00e9rive algorithmique susceptible d&rsquo;alt\u00e9rer les calculs d&rsquo;optimisation ou les conventions de troncature flottante lors de l&rsquo;ex\u00e9cution des tests statistiques.<\/p>\n<p>Au-del\u00e0 de la syntaxe d&rsquo;importation, la gestion des configurations globales d&rsquo;affichage et de pr\u00e9cision num\u00e9rique dans Pandas permet d&rsquo;optimiser l&rsquo;interpr\u00e9tation visuelle des matrices denses. L&rsquo;instruction syst\u00e8me permet d&rsquo;ajuster le nombre maximal de lignes affich\u00e9es et d&rsquo;imposer un formatage strict des valeurs r\u00e9elles, \u00e9vitant l&rsquo;irruption impromptue de notations exponentielles qui viendraient masquer la finesse des proportions ou des p-valeurs calcul\u00e9es. Cette rigueur initiale garantit que chaque \u00e9tape d&rsquo;observation matricielle conserve une nettet\u00e9 analytique irr\u00e9prochable.<\/p>\n<h3>3.2 Structuration formelle d&rsquo;un DataFrame de test<\/h3>\n<p>Pour appr\u00e9hender les dynamiques computationnelles de la tabulation crois\u00e9e sans d\u00e9pendre d&rsquo;artefacts d&rsquo;ingestion externes, il convient de g\u00e9n\u00e9rer programmatiquement un jeu de donn\u00e9es contr\u00f4l\u00e9 mod\u00e9lisant un protocole d&rsquo;observation scientifique. Imaginons une \u00e9tude clinique observationnelle \u00e9valuant la r\u00e9ponse cognitive d&rsquo;un groupe d&rsquo;individus face \u00e0 trois protocoles d&rsquo;entra\u00eenement distincts : un protocole pharmacologique exp\u00e9rimental, une intervention bas\u00e9e sur la rem\u00e9diation cognitive informatis\u00e9e, et un groupe placebo sous condition contr\u00f4le standardis\u00e9e. Les sujets sont simultan\u00e9ment cat\u00e9goris\u00e9s selon le niveau de r\u00e9cup\u00e9ration fonctionnelle obtenu au terme du suivi exp\u00e9rimental.<\/p>\n<p>L&rsquo;instanciation de ce jeu de donn\u00e9es requiert l&rsquo;utilisation conjointe des g\u00e9n\u00e9rateurs pseudo-al\u00e9atoires de NumPy afin de cr\u00e9er des vecteurs d&rsquo;observations cat\u00e9gorielles repr\u00e9sentatifs d&rsquo;une taille d&rsquo;\u00e9chantillon statistiquement robuste, par exemple <span class=\"arabpsy-math-inline\" data-latex=\"N = 300\">$N = 300$<\/span> observations. Afin d&rsquo;assurer la reproductibilit\u00e9 exacte des s\u00e9quences stochastiques d&rsquo;un environnement d&rsquo;ex\u00e9cution \u00e0 l&rsquo;autre, la graine al\u00e9atoire du g\u00e9n\u00e9rateur sous-jacent doit imp\u00e9rativement \u00eatre instanci\u00e9e de fa\u00e7on statique via l&rsquo;initialisation explicite d&rsquo;un g\u00e9n\u00e9rateur de nombres al\u00e9atoires ind\u00e9pendant.<\/p>\n<p>Une fois les vecteurs unidimensionnels instanci\u00e9s au sein d&rsquo;une structure de type dictionnaire, celle-ci est convertie en un objet <code>pd.DataFrame<\/code> formel. La phase d&rsquo;ing\u00e9nierie structurelle cruciale consiste alors \u00e0 forcer la conversion des s\u00e9ries textuelles en types <code>pd.Categorical<\/code>. Cette d\u00e9marche optimise consid\u00e9rablement l&#8217;empreinte m\u00e9moire en substituant \u00e0 des cha\u00eenes de caract\u00e8res arbitraires des entiers non sign\u00e9s index\u00e9s sur un dictionnaire interne de modalit\u00e9s. Plus fondamentalement, elle permet de d\u00e9clarer de fa\u00e7on explicite l&rsquo;ordre des facteurs dans les variables ordinales, garantissant ainsi que lors des \u00e9tapes ult\u00e9rieures de croisement, l&rsquo;agencement spatial des lignes et des colonnes respectera scrupuleusement la hi\u00e9rarchie logique impos\u00e9e par le mod\u00e8le th\u00e9orique.<\/p>\n<h2>4. La fonction pandas.crosstab() : syntaxe et param\u00e8tres fondamentaux<\/h2>\n<h3>4.1 Anatomie de la fonction pandas.crosstab()<\/h3>\n<p>La fonction <code>pandas.crosstab()<\/code> se distingue par une conception fonctionnelle pure au sein de la biblioth\u00e8que Pandas. Contrairement aux m\u00e9thodes intrins\u00e8ques instanci\u00e9es directement sur un DataFrame sp\u00e9cifique, <code>crosstab()<\/code> est une fonction de premier plan du module global, prenant en arguments explicites les vecteurs de donn\u00e9es \u00e0 croiser. Les deux param\u00e8tres obligatoires et structurants sont <code>index<\/code>, qui d\u00e9termine la ou les variables destin\u00e9es \u00e0 composer l&rsquo;axe vertical (les lignes), et <code>columns<\/code>, qui pilote l&rsquo;organisation de l&rsquo;axe horizontal (les colonnes). Ces arguments acceptent une multiplicit\u00e9 d&rsquo;objets s\u00e9quentiels, qu&rsquo;il s&rsquo;agisse de s\u00e9ries Pandas isol\u00e9es, de tableaux NumPy ou de listes de valeurs natives.<\/p>\n<p>D&rsquo;un point de vue algorithmique, il importe d&rsquo;\u00e9lucider la distinction conceptuelle et op\u00e9rationnelle entre <code>pandas.crosstab()<\/code> et la m\u00e9thode <code>DataFrame.pivot_table()<\/code>. Bien que <code>crosstab()<\/code> repose en interne sur une d\u00e9l\u00e9gation partielle \u00e0 <code>pivot_table()<\/code>, sa vocation premi\u00e8re r\u00e9side dans le comptage direct de fr\u00e9quences \u00e0 partir de s\u00e9quences ou de s\u00e9ries cat\u00e9gorielles ind\u00e9pendantes, sans imposer l&rsquo;existence pr\u00e9alable d&rsquo;une structure tabulaire unifi\u00e9e. \u00c0 l&rsquo;inverse, <code>DataFrame.pivot_table()<\/code> s&rsquo;applique nativement \u00e0 un DataFrame pr\u00e9existant pour r\u00e9organiser g\u00e9om\u00e9triquement des donn\u00e9es d\u00e9j\u00e0 agr\u00e9g\u00e9es ou pour synth\u00e9tiser des variables continues selon une grille bidimensionnelle.<\/p>\n<p>L&rsquo;architecture interne de <code>crosstab()<\/code> assure une gestion sophistiqu\u00e9e de l&rsquo;alignement des index. Si les s\u00e9ries transmises partagent un index commun au sein d&rsquo;un m\u00eame DataFrame d&rsquo;origine, la fonction pr\u00e9serve scrupuleusement la correspondance unitaire entre chaque observation. Dans l&rsquo;\u00e9ventualit\u00e9 o\u00f9 des s\u00e9ries pourvues d&rsquo;index divergents seraient fournies, Pandas r\u00e9alise une jointure relationnelle externe implicite sur les index avant de proc\u00e9der \u00e0 la sommation factorielle. Cette rigueur math\u00e9matique \u00e9vite tout biais de d\u00e9calage positionnel susceptible de vicier la v\u00e9rit\u00e9 de terrain des associations observ\u00e9es.<\/p>\n<h3>4.2 M\u00e9canismes de calcul d&rsquo;une tabulation bivari\u00e9e simple<\/h3>\n<p>L&rsquo;ex\u00e9cution de base de <code>pandas.crosstab(index, columns)<\/code> d\u00e9clenche une s\u00e9quence de transformations matricielles d\u00e9terministes. Dans un premier temps, l&rsquo;interpr\u00e9teur proc\u00e8de \u00e0 l&rsquo;extraction des modalit\u00e9s uniques distinctes pr\u00e9sentes dans chacun des deux vecteurs vectoris\u00e9s, \u00e9liminant par d\u00e9faut les doublons tout en conservant la structure cat\u00e9gorielle sous-jacente. Si le type cat\u00e9goriel explicite a \u00e9t\u00e9 pr\u00e9alablement assign\u00e9 aux s\u00e9ries d&rsquo;entr\u00e9e, l&rsquo;ordre d&rsquo;agencement des modalit\u00e9s respectera scrupuleusement la nomenclature ordinale d\u00e9clar\u00e9e ; dans le cas contraire, un tri lexicographique standard est appliqu\u00e9 par d\u00e9faut.<\/p>\n<p>Dans un second temps, le moteur interne mat\u00e9rialise une structure bidimensionnelle index\u00e9e o\u00f9 chaque intersection <span class=\"arabpsy-math-inline\" data-latex=\"(i, j)\">$(i, j)$<\/span> re\u00e7oit la somme arithm\u00e9tique des occurrences simultan\u00e9es de la modalit\u00e9 d&rsquo;indice <span class=\"arabpsy-math-inline\" data-latex=\"i\">$i$<\/span> et de la modalit\u00e9 de colonne <span class=\"arabpsy-math-inline\" data-latex=\"j\">$j$<\/span>. L&rsquo;objet retourn\u00e9 par cette op\u00e9ration est syst\u00e9matiquement une nouvelle instance de type <code>pd.DataFrame<\/code>, conf\u00e9rant \u00e0 la matrice de contingence brute l&rsquo;int\u00e9gralit\u00e9 des capacit\u00e9s fonctionnelles des objets tabulaires de Pandas. L&rsquo;axe des ordonn\u00e9es h\u00e9rite du libell\u00e9 de la s\u00e9rie assign\u00e9e \u00e0 l&rsquo;argument <code>index<\/code>, tandis que l&rsquo;axe des abscisses porte le nom de la s\u00e9rie inject\u00e9e dans <code>columns<\/code>.<\/p>\n<p>Cette pr\u00e9servation int\u00e9grale des \u00e9tiquettes dimensionnelles constitue un atout analytique d\u00e9terminant. Les effectifs bruts qui peuplent la matrice peuvent \u00eatre imm\u00e9diatement inspect\u00e9s, d\u00e9coup\u00e9s ou soumis \u00e0 des filtres conditionnels. La lecture d&rsquo;une cellule quelconque donne directement l&rsquo;effectif observ\u00e9 <span class=\"arabpsy-math-inline\" data-latex=\"O_{ij}\">$O_{ij}$<\/span>, pr\u00eat \u00e0 subir des traitements de normalisation proportionnelle ou \u00e0 \u00eatre export\u00e9 vers des structures computationnelles tierces \u00e0 des fins d&rsquo;analyse inf\u00e9rentielle.<\/p>\n<h2>5. Cr\u00e9ation pas \u00e0 pas d&rsquo;un premier tableau de contingence avec Pandas<\/h2>\n<h3>5.1 Cr\u00e9ation du jeu de donn\u00e9es exp\u00e9rimental<\/h3>\n<p>Pour illustrer de mani\u00e8re concr\u00e8te et didactique l&rsquo;application pratique de ces concepts, formalisons un exemple canonique issu des sciences cliniques. Consid\u00e9rons une cohorte de 500 patients r\u00e9partis au sein d&rsquo;un protocole d&rsquo;\u00e9valuation psychiatrique. Le jeu de donn\u00e9es comprend un identifiant num\u00e9rique unique pour chaque sujet, une variable explicative nominale d\u00e9nomm\u00e9e <code>Traitement<\/code> (comportant trois branches : <em>Therapie_Cognitive<\/em>, <em>Pharmacotherapie<\/em>, <em>Groupe_Controle<\/em>), et une variable ordinale d&rsquo;\u00e9valuation de l&rsquo;\u00e9tat clinique au terme de six mois de prise en charge, baptis\u00e9e <code>Evolution_Clinique<\/code> (d\u00e9clin\u00e9e en : <em>Deterioration<\/em>, <em>Stationnaire<\/em>, <em>Amelioration_Moderee<\/em>, <em>Remission_Complete<\/em>).<\/p>\n<p>La g\u00e9n\u00e9ration programmatique de ce jeu de donn\u00e9es s&rsquo;ex\u00e9cute en instanciant les vecteurs cat\u00e9gorielles au moyen de distributions de probabilit\u00e9s asym\u00e9triques pour conf\u00e9rer un r\u00e9alisme empirique \u00e0 l&rsquo;exp\u00e9rience. Les probabilit\u00e9s conditionnelles de r\u00e9mission seront param\u00e9tr\u00e9es plus favorablement pour les branches th\u00e9rapeutiques actives que pour le groupe contr\u00f4le. Les donn\u00e9es sont ensuite assembl\u00e9es dans une structure <code>pd.DataFrame<\/code> sous le nom de variable <code>df_etude<\/code>. Une v\u00e9rification d&rsquo;int\u00e9grit\u00e9 structurelle est syst\u00e9matiquement op\u00e9r\u00e9e \u00e0 l&rsquo;aide des m\u00e9thodes descriptives \u00e9l\u00e9mentaires afin de confirmer l&rsquo;absence de valeurs textuelles erron\u00e9es ou de structures corrompues pr\u00e9alablement \u00e0 toute tabulation crois\u00e9e.<\/p>\n<p>Le contr\u00f4le de la dimensionnalit\u00e9 matricielle garantit que les 500 enregistrements occupent pr\u00e9cis\u00e9ment 500 lignes et que les attributs typologiques sont strictement conformes aux attentes. L&rsquo;inspection des premi\u00e8res rang\u00e9es du DataFrame via la m\u00e9thode conventionnelle d&rsquo;affichage permet de valider visuellement la structure relationnelle plate (format \u00ab\u00a0tidy\u00a0\u00bb ou tabulaire unitaire) avant son agr\u00e9gation matricielle dans l&rsquo;espace crois\u00e9.<\/p>\n<h3>5.2 Ex\u00e9cution de la commande crosstab et extraction des fr\u00e9quences<\/h3>\n<p>L&rsquo;op\u00e9ration de r\u00e9duction tabulaire s&rsquo;effectue en invoquant formellement la commande <code>pd.crosstab()<\/code> en d\u00e9signant explicitement la colonne <code>df_etude['Traitement']<\/code> en tant qu&rsquo;argument de l&rsquo;indice vertical, et la colonne <code>df_etude['Evolution_Clinique']<\/code> pour r\u00e9gir l&rsquo;agencement des colonnes. D\u00e8s l&rsquo;ex\u00e9cution, l&rsquo;interpr\u00e9teur condense les 500 observations individuelles en une matrice compacte de trois lignes par quatre colonnes, dont la volum\u00e9trie totale r\u00e9sume exhaustivement la structure de covariation empirique du syst\u00e8me exp\u00e9rimental.<\/p>\n<p>L&rsquo;analyse de la matrice de sortie r\u00e9v\u00e8le imm\u00e9diatement la r\u00e9partition des effectifs bruts. La validation arithm\u00e9tique primordiale consiste \u00e0 sommer l&rsquo;int\u00e9gralit\u00e9 des \u00e9l\u00e9ments matriciels via les m\u00e9thodes vectoris\u00e9es de sommation : la valeur scalaire retourn\u00e9e doit concorder au chiffre pr\u00e8s avec la taille d&rsquo;\u00e9chantillon initiale de <span class=\"arabpsy-math-inline\" data-latex=\"N = 500\">$N = 500$<\/span>. Cet alignement confirme l&rsquo;exhaustivit\u00e9 de la classification crois\u00e9e et l&rsquo;absence de perte d&rsquo;enregistrements en cours de traitement.<\/p>\n<p>L&rsquo;extraction de sous-matrices ou de cellules sp\u00e9cifiques au sein de la table de contingence s&rsquo;op\u00e8re par l&rsquo;interm\u00e9diaire des indexeurs explicites de Pandas, principalement <code>.loc[]<\/code>. Pour interroger sp\u00e9cifiquement le nombre de patients ayant b\u00e9n\u00e9fici\u00e9 de la th\u00e9rapie cognitive et ayant atteint une r\u00e9mission compl\u00e8te, la syntaxe d&rsquo;indexation par \u00e9tiquette cible l&rsquo;intersection exacte des deux coordonn\u00e9es cat\u00e9gorielles. Cette modalit\u00e9 d&rsquo;acc\u00e8s d\u00e9terministe permet d&rsquo;automatiser des tests d&rsquo;assertion programmatiques ou d&rsquo;alimenter dynamiquement des cha\u00eenes de calculs d\u00e9riv\u00e9s.<\/p>\n<h2>6. Personnalisation avanc\u00e9e : totaux marginaux et nommage des axes<\/h2>\n<h3>6.1 Int\u00e9gration des totaux marginaux via le param\u00e8tre margins<\/h3>\n<p>Dans la pratique scientifique, l&rsquo;interpr\u00e9tation d&rsquo;un tableau de contingence brut s&rsquo;av\u00e8re particuli\u00e8rement malais\u00e9e sans la mise en perspective des effectifs cellulaires au regard des totaux globaux de chaque modalit\u00e9. Pour pallier cette lacune sans requ\u00e9rir des concat\u00e9nations manuelles de s\u00e9ries d&rsquo;agr\u00e9gation, la fonction <code>pandas.crosstab()<\/code> propose le param\u00e8tre bool\u00e9en <code>margins<\/code>. Lorsqu&rsquo;il est valoris\u00e9 \u00e0 <code>True<\/code>, ce param\u00e8tre enclenche un calcul additif automatique qui appose une ligne marginale suppl\u00e9mentaire en bas de table et une colonne marginale sur le flanc droit du DataFrame.<\/p>\n<p>Par d\u00e9faut, ces marges arithm\u00e9tiques sont libell\u00e9es sous la d\u00e9signation anglo-saxonne standard <code>'All'<\/code>. Toutefois, dans le cadre de la r\u00e9daction de manuscrits scientifiques ou de rapports statistiques en langue fran\u00e7aise, il est m\u00e9thodologiquement recommand\u00e9 d&rsquo;ajuster ce libell\u00e9 via le param\u00e8tre compl\u00e9mentaire <code>margins_name<\/code>, en lui assignant par exemple la cha\u00eene de caract\u00e8res <code>'Total'<\/code> ou <code>'Ensemble'<\/code>. L&rsquo;insertion de ces marges enrichit instantan\u00e9ment la table : la derni\u00e8re colonne expose les distributions marginales de la variable en ligne <span class=\"arabpsy-math-inline\" data-latex=\"n_{i\\cdot}\">$n_{i\\cdot}$<\/span>, la derni\u00e8re ligne documente les distributions marginales de la variable en colonne <span class=\"arabpsy-math-inline\" data-latex=\"n_{\\cdot j}\">$n_{\\cdot j}$<\/span>, et la cellule situ\u00e9e \u00e0 l&rsquo;extr\u00eame intersection inf\u00e9rieure droite consigne l&rsquo;effectif total d&rsquo;\u00e9chantillonnage <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span>.<\/p>\n<p>Il importe n\u00e9anmoins de souligner une implication structurelle majeure : l&rsquo;int\u00e9gration des marges modifie les dimensions scalaires du DataFrame r\u00e9sultant, qui passe de dimensions <span class=\"arabpsy-math-inline\" data-latex=\"I \\times J\">$I \\times J$<\/span> \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"(I + 1) \\times (J + 1)\">$(I + 1) \\times (J + 1)$<\/span>. En cons\u00e9quence, si la matrice r\u00e9sultante doit \u00eatre directement transmise \u00e0 des algorithmes de test statistique inf\u00e9rentiel matriciel qui attendent exclusivement les effectifs bivari\u00e9s purs, les marges doivent imp\u00e9rativement \u00eatre omises ou explicitement \u00e9lagu\u00e9es par d\u00e9coupage matriciel afin de ne pas fausser l&rsquo;estimation des degr\u00e9s de libert\u00e9 du syst\u00e8me.<\/p>\n<h3>6.2 Attribution d&rsquo;\u00e9tiquettes dimensionnelles et lisibilit\u00e9 scientifique<\/h3>\n<p>La communication scientifique requiert une clart\u00e9 s\u00e9mantique absolue dans la pr\u00e9sentation des r\u00e9sultats num\u00e9riques. Les noms de colonnes issus de bases de donn\u00e9es brutes souffrent fr\u00e9quemment d&rsquo;abr\u00e9viations cryptiques ou de conventions de nommage purement techniques (comme des pr\u00e9fixes de bases de donn\u00e9es ou des majuscules indiscrimin\u00e9es). Pour transformer un objet de calcul brut en une table publiable, <code>pandas.crosstab()<\/code> propose les arguments <code>rownames<\/code> et <code>colnames<\/code>, qui acceptent des listes de cha\u00eenes de caract\u00e8res destin\u00e9es \u00e0 \u00e9craser \u00e9l\u00e9gamment les m\u00e9tadonn\u00e9es axiales d&rsquo;origine.<\/p>\n<p>L&rsquo;utilisation de <code>rownames=['Protocole Th\u00e9rapeutique']<\/code> et <code>colnames=['Issue Th\u00e9rapeutique \u00e0 6 Mois']<\/code> supprime instantan\u00e9ment toute ambigu\u00eft\u00e9 cognitive lors de la lecture du tableau g\u00e9n\u00e9r\u00e9. Ces \u00e9tiquettes dimensionnelles viennent documenter formellement les axes de l&rsquo;index et des colonnes du DataFrame sans alt\u00e9rer les libell\u00e9s sous-jacents des modalit\u00e9s de chaque variable. La structure gagne ainsi en rigueur formelle, r\u00e9pondant aux standards \u00e9ditoriaux les plus exigeants de la litt\u00e9rature scientifique \u00e0 comit\u00e9 de lecture.<\/p>\n<p>De surcro\u00eet, la r\u00e9organisation programmatique des cat\u00e9gories peut \u00eatre r\u00e9alis\u00e9e a posteriori ou en amont. En manipulant l&rsquo;attribut cat\u00e9goriel des colonnes sources par la m\u00e9thode <code>reorder_categories()<\/code> de Pandas, le statisticien s&rsquo;assure que les colonnes ne s&rsquo;affichent pas dans un d\u00e9sordre alphab\u00e9tique arbitraire mais suivent un gradient conceptuel continu, allant par exemple de la d\u00e9gradation symptomatique maximale jusqu&rsquo;\u00e0 la gu\u00e9rison clinique int\u00e9grale. Cette disposition logique facilite la perception intuitive des tendances d&rsquo;accumulation stochastique \u00e0 travers la lecture transversale des profils.<\/p>\n<h2>7. Normalisation et calcul des proportions relatives<\/h2>\n<h3>7.1 Proportions globales : le param\u00e8tre normalize=&rsquo;all&rsquo;<\/h3>\n<p>L&rsquo;analyse des seuls effectifs bruts pr\u00e9sente des limites structurelles manifestes, singuli\u00e8rement lorsque les effectifs marginaux des diff\u00e9rentes cohortes s&rsquo;av\u00e8rent in\u00e9gaux. Afin de transposer les fr\u00e9quences absolues dans le champ des mesures probabilistes continues, la normalisation statistique devient indispensable. Le param\u00e8tre <code>normalize<\/code> de <code>pandas.crosstab()<\/code> offre une flexibilit\u00e9 calculatoire remarquable pour ex\u00e9cuter cette conversion matricielle. En lui assignant la valeur scalaire <code>'all'<\/code> (ou son \u00e9quivalent bool\u00e9en strict <code>True<\/code>), chaque fr\u00e9quence conjointe brute <span class=\"arabpsy-math-inline\" data-latex=\"n_{ij}\">$n_{ij}$<\/span> est divis\u00e9e par l&rsquo;effectif global d&rsquo;\u00e9chantillonnage <span class=\"arabpsy-math-inline\" data-latex=\"N\">$N$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"f_{ij} = \\frac{n_{ij}}{N} = \\hat{P}(X = A_i \\cap Y = B_j)\">$$f_{ij} = \\frac{n_{ij}}{N} = \\hat{P}(X = A_i \\cap Y = B_j)$$<\/span><\/p>\n<p>Cette transformation produit une matrice de probabilit\u00e9s conjointes empiriques dans laquelle la valeur contenue au sein de chaque cellule quantifie la proportion relative de l&rsquo;\u00e9chantillon total correspondant \u00e0 ce croisement d&rsquo;\u00e9tats pr\u00e9cis. L&rsquo;espace probabilis\u00e9 ainsi discr\u00e9tis\u00e9 respecte rigoureusement la condition de normalisation unitaire : la sommation int\u00e9grale de l&rsquo;ensemble des cellules de la table \u00e9quivaut rigoureusement \u00e0 la valeur $1.0$ (ou <span class=\"arabpsy-math-inline\" data-latex=\"100%\">$100%$<\/span> si une multiplication scalaire par cent est appliqu\u00e9e \u00e0 la structure r\u00e9sultante).<\/p>\n<p>Pour parfaire la lisibilit\u00e9 de ces valeurs d\u00e9cimales au sein d&rsquo;une restitution acad\u00e9mique, l&rsquo;ing\u00e9nierie logicielle sous Pandas permet d&rsquo;exploiter les formateurs contextuels d&rsquo;affichage, notamment l&rsquo;API <code>DataFrame.style.format()<\/code>. Cette m\u00e9thode permet de formater l&rsquo;ensemble des valeurs scalaires sous forme de pourcentages arrondis \u00e0 une ou deux d\u00e9cimales sans alt\u00e9rer la pr\u00e9cision computationnelle flottante sous-jacente requise pour les cha\u00eenes de traitement num\u00e9riques subs\u00e9quentes.<\/p>\n<h3>7.2 Profils-lignes et profils-colonnes conditionnels<\/h3>\n<p>Si la normalisation globale renseigne sur la contribution d&rsquo;un couple d&rsquo;attributs \u00e0 la population g\u00e9n\u00e9rale, elle ne permet pas d&rsquo;\u00e9valuer directement l&rsquo;hypoth\u00e8se d&rsquo;une asym\u00e9trie conditionnelle. C&rsquo;est ici qu&rsquo;intervient la distinction conceptuelle majeure entre profil-ligne et profil-colonne, formalis\u00e9e dans la m\u00e9thode de l&rsquo;analyse factorielle des correspondances. L&rsquo;\u00e9valuation de l&rsquo;impact conditionnel d&rsquo;une variable ind\u00e9pendante (le pr\u00e9dicteur pr\u00e9sum\u00e9, positionn\u00e9 sur les lignes) sur une variable d\u00e9pendante (le crit\u00e8re de r\u00e9ponse, situ\u00e9 sur les colonnes) s&rsquo;effectue en assignant la cha\u00eene <code>'index'<\/code> \u00e0 l&rsquo;argument <code>normalize<\/code>.<\/p>\n<p>L&rsquo;activation de <code>normalize='index'<\/code> instancie le calcul des probabilit\u00e9s conditionnelles empiriques par ligne, divisant chaque effectif <span class=\"arabpsy-math-inline\" data-latex=\"n_{ij}\">$n_{ij}$<\/span> par son marginal de ligne <span class=\"arabpsy-math-inline\" data-latex=\"n_{i\\cdot}\">$n_{i\\cdot}$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"f_{j|i} = \\frac{n_{ij}}{n_{i\\cdot}} = \\hat{P}(Y = B_j mid X = A_i)\">$$f_{j|i} = \\frac{n_{ij}}{n_{i\\cdot}} = \\hat{P}(Y = B_j mid X = A_i)$$<\/span><\/p>\n<p>Dans ce profil-ligne, chaque rang\u00e9e matricielle poss\u00e8de une sommation vectorielle strictement \u00e9gale \u00e0 l&rsquo;unit\u00e9 ($1.0$). Le chercheur peut alors lire horizontalement la distribution probabiliste de l&rsquo;issue clinique au sein de chaque groupe exp\u00e9rimental consid\u00e9r\u00e9 isol\u00e9ment, neutralisant ainsi les artefacts de comparaison g\u00e9n\u00e9r\u00e9s par d&rsquo;\u00e9ventuels d\u00e9s\u00e9quilibres d&rsquo;effectifs entre les groupes de traitement.<\/p>\n<p>R\u00e9ciproquement, l&rsquo;attribution de la cha\u00eene <code>'columns'<\/code> au param\u00e8tre <code>normalize<\/code> mat\u00e9rialise les profils-colonnes conditionnels, o\u00f9 chaque cellule correspond \u00e0 la fr\u00e9quence <span class=\"arabpsy-math-inline\" data-latex=\"n_{ij}\">$n_{ij}$<\/span> pond\u00e9r\u00e9e par son effectif marginal de colonne <span class=\"arabpsy-math-inline\" data-latex=\"n_{\\cdot j}\">$n_{\\cdot j}$<\/span> :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"f_{i|j} = \\frac{n_{ij}}{n_{\\cdot j}} = \\hat{P}(X = A_i mid Y = B_j)\">$$f_{i|j} = \\frac{n_{ij}}{n_{\\cdot j}} = \\hat{P}(X = A_i mid Y = B_j)$$<\/span><\/p>\n<p>Cette seconde perspective analytique r\u00e9pond \u00e0 une logique diagnostique r\u00e9trospective : parmi l&rsquo;ensemble des patients ayant atteint une r\u00e9mission compl\u00e8te, quelle proportion appartenait initialement \u00e0 la th\u00e9rapie cognitive versus les autres modalit\u00e9s ? Le choix m\u00e9thodologique entre normalisation par ligne ou par colonne d\u00e9pend donc strictement de la question \u00e9pist\u00e9mologique pos\u00e9e et du statut th\u00e9orique assign\u00e9 \u00e0 chaque variable au sein du plan exp\u00e9rimental.<\/p>\n<h2>8. Tableaux de contingence multidimensionnels (trois variables ou plus)<\/h2>\n<h3>8.1 Imbrication de plusieurs facteurs dans l&rsquo;index ou les colonnes<\/h3>\n<p>La complexit\u00e9 des ph\u00e9nom\u00e8nes empiriques d\u00e9passe rarement le cadre de causalit\u00e9s unilat\u00e9rales isol\u00e9es. Dans de multiples sc\u00e9narios scientifiques, une troisi\u00e8me variable cat\u00e9gorielle est susceptible de jouer le r\u00f4le de mod\u00e9rateur, de facteur de confusion ou d&rsquo;interaction structurelle. L&rsquo;ing\u00e9nierie de Pandas d\u00e9montre une puissance analytique sans \u00e9quivalent pour traiter de telles configurations multidimensionnelles, en acceptant le passage de listes de s\u00e9ries cat\u00e9gorielles aussi bien dans l&rsquo;argument <code>index<\/code> que dans l&rsquo;argument <code>columns<\/code> de <code>pandas.crosstab()<\/code>.<\/p>\n<p>Supposons que nous souhaitions stratifier notre pr\u00e9c\u00e9dente analyse clinique en fonction d&rsquo;un facteur d\u00e9mographique binaire, \u00e0 savoir la tranche d&rsquo;\u00e2ge des participants d\u00e9coup\u00e9e en deux classes : <em>Moins_De_50_Ans<\/em> et <em>50_Ans_Et_Plus<\/em>. En transmettant une liste explicite de colonnes \u00e0 l&rsquo;argument vertical, sous la forme <code>index=[df_etude['Tranche_Age'], df_etude['Traitement']]<\/code>, la fonction proc\u00e8de \u00e0 l&rsquo;instanciation automatique d&rsquo;un objet de type <code>MultiIndex<\/code> sur l&rsquo;axe des ordonn\u00e9es. Cette structure hi\u00e9rarchique imbriqu\u00e9e segmente d&rsquo;abord la population selon le premier niveau factoriel, puis sous-divise chaque strate selon le second pr\u00e9dicteur.<\/p>\n<p>Le tableau r\u00e9sultant mat\u00e9rialise une table de contingence d&rsquo;ordre sup\u00e9rieur, commun\u00e9ment d\u00e9sign\u00e9e dans la tradition statistique sous le nom de tableau crois\u00e9 \u00e0 <span class=\"arabpsy-math-inline\" data-latex=\"k\">$k$<\/span> facteurs ou analyse stratifi\u00e9e de Cochran-Mantel-Haenszel. Cette mod\u00e9lisation matricielle permet d&rsquo;identifier visuellement d&rsquo;\u00e9ventuelles h\u00e9t\u00e9rog\u00e9n\u00e9it\u00e9s d&rsquo;effets entre sous-strates d\u00e9mographiques, r\u00e9v\u00e9lant par exemple une efficacit\u00e9 diff\u00e9rentielle d&rsquo;un traitement pharmacologique selon la cohorte d&rsquo;\u00e2ge des b\u00e9n\u00e9ficiaires, pr\u00e9figurant ainsi la d\u00e9tection d&rsquo;interactions factorielles complexes.<\/p>\n<h3>8.2 Manipulation et d\u00e9simbrication de tables hi\u00e9rarchiques<\/h3>\n<p>La navigation matricielle au sein de tables denses pourvues d&rsquo;index hi\u00e9rarchiques multiples requiert la ma\u00eetrise d&rsquo;op\u00e9rateurs de transformation g\u00e9om\u00e9trique sp\u00e9cifiques. Pandas int\u00e8gre les m\u00e9thodes jumelles <code>unstack()<\/code> et <code>stack()<\/code>, con\u00e7ues pour pivoter dynamiquement les niveaux dimensionnels entre l&rsquo;axe des ordonn\u00e9es et celui des abscisses. L&rsquo;application d&rsquo;un <code>unstack()<\/code> sur le niveau le plus interne du MultiIndex vertical r\u00e9organise instantan\u00e9ment les sous-cat\u00e9gories sous forme de colonnes hi\u00e9rarchiques compos\u00e9es, transformant un tableau vertical allong\u00e9 en une structure matricielle \u00e9tal\u00e9e horizontalement.<\/p>\n<p>Pour interroger s\u00e9lectivement des sous-ensembles pr\u00e9cis au sein d&rsquo;une table multidimensionnelle dense sans dissoudre sa structure globale, l&rsquo;utilisation de l&rsquo;objet <code>pd.IndexSlice<\/code> s&rsquo;av\u00e8re particuli\u00e8rement puissante. Cet utilitaire d&rsquo;indexation permet de d\u00e9couper un niveau hi\u00e9rarchique sp\u00e9cifique avec une syntaxe d\u00e9clarative fluide, facilitant l&rsquo;extraction exclusive des profils d&rsquo;une modalit\u00e9 d\u00e9termin\u00e9e \u00e0 travers l&rsquo;ensemble des strates factorielles crois\u00e9es.<\/p>\n<p>Cette versatilit\u00e9 g\u00e9om\u00e9trique pr\u00e9serve la lisibilit\u00e9 s\u00e9miotique des donn\u00e9es tout en \u00e9liminant les risques d&rsquo;erreurs inh\u00e9rents aux filtrages it\u00e9ratifs manuels. Elle permet en outre de d\u00e9celer des paradoxes statistiques profonds, tel que le paradoxe de Simpson, dans lequel une corr\u00e9lation observ\u00e9e globalement au sein d&rsquo;une population se trouve invers\u00e9e ou totalement annihil\u00e9e lorsque la contingence est d\u00e9sagr\u00e9g\u00e9e au niveau de ses sous-composantes factorielles r\u00e9elles.<\/p>\n<h2>9. Agr\u00e9gations statistiques personnalis\u00e9es au sein de pandas.crosstab<\/h2>\n<h3>9.1 D\u00e9ploiement des param\u00e8tres values et aggfunc<\/h3>\n<p>Si la fonction premi\u00e8re d&rsquo;un tableau de contingence r\u00e9side dans le d\u00e9nombrement de fr\u00e9quences d&rsquo;occurrence conjointes discr\u00e8tes, la fonction <code>pandas.crosstab()<\/code> transcende ce cas d&rsquo;usage fondamental gr\u00e2ce \u00e0 l&rsquo;int\u00e9gration conjointe de deux param\u00e8tres avanc\u00e9s : <code>values<\/code> et <code>aggfunc<\/code>. D\u00e8s lors que ces deux arguments sont simultan\u00e9ment sp\u00e9cifi\u00e9s, le m\u00e9canisme interne de comptage est suspendu au profit d&rsquo;une op\u00e9ration de r\u00e9duction quantitative op\u00e9r\u00e9e sur une troisi\u00e8me variable, imp\u00e9rativement m\u00e9trique ou continue.<\/p>\n<p>Le param\u00e8tre <code>values<\/code> re\u00e7oit le vecteur num\u00e9rique des observations \u00e0 synth\u00e9tiser, tandis que <code>aggfunc<\/code> d\u00e9signe l&rsquo;op\u00e9rateur de r\u00e9duction statistique \u00e0 appliquer sur les grappes de donn\u00e9es form\u00e9es par le produit cart\u00e9sien des cat\u00e9gories en ligne et en colonne. \u00c0 titre d&rsquo;illustration, supposons que nous mesurions le score d&rsquo;anxi\u00e9t\u00e9 r\u00e9siduelle post-traitement de chaque patient, exprim\u00e9 sur une \u00e9chelle continue de 0 \u00e0 100. En transmettant cette s\u00e9rie continue \u00e0 l&rsquo;argument <code>values<\/code> et en configurant <code>aggfunc=np.mean<\/code>, chaque cellule de la table n&rsquo;affiche plus un effectif empirique d&rsquo;individus, mais la moyenne math\u00e9matique exacte du score d&rsquo;anxi\u00e9t\u00e9 conditionnellement \u00e0 chaque couple (Traitement, \u00c9volution Clinique).<\/p>\n<p>Cette fonctionnalit\u00e9 m\u00e9tamorphose la table de contingence classique en une grille matricielle de statistiques descriptives bivari\u00e9es. Il est tout aussi ais\u00e9 de d\u00e9ployer d&rsquo;autres estimateurs d&#8217;emplacement ou d&rsquo;\u00e9chelle en renseignant <code>aggfunc=np.median<\/code> pour une \u00e9valuation robuste aux asym\u00e9tries de distribution, ou <code>aggfunc=np.std<\/code> pour appr\u00e9hender la dispersion intra-cellulaire des scores continus, \u00e9tablissant ainsi une jonction m\u00e9thodologique directe entre l&rsquo;analyse de contingence et les principes de l&rsquo;analyse de variance factorielle (ANOVA).<\/p>\n<h3>9.2 Application de fonctions d&rsquo;agr\u00e9gation personnalis\u00e9es<\/h3>\n<p>L&rsquo;expressivit\u00e9 de l&rsquo;architecture logicielle de Python permet de s&rsquo;affranchir des fonctions d&rsquo;agr\u00e9gation standards issues de NumPy pour concevoir des op\u00e9rateurs de r\u00e9duction personnalis\u00e9s via l&rsquo;utilisation de fonctions <code>lambda<\/code> ou de d\u00e9finitions formelles <code>def<\/code>. Cette modularit\u00e9 computationnelle s&rsquo;av\u00e8re indispensable lorsque le cadre d&rsquo;investigation statistique impose le calcul d&rsquo;estimateurs non standards, tels que l&rsquo;\u00e9cart semi-interquartile, des moyennes tronqu\u00e9es ou des ratios de dispersion robustes aux valeurs aberrantes.<\/p>\n<p>Consid\u00e9rons l&rsquo;application d&rsquo;un op\u00e9rateur mesurant l&rsquo;\u00e9tendue interquartile (IQR) normalis\u00e9e au sein de chaque strate factorielle. Une fonction lambda condens\u00e9e, acceptant en param\u00e8tre d&rsquo;entr\u00e9e la s\u00e9rie de donn\u00e9es num\u00e9riques relative \u00e0 chaque cellule et soustrayant le 25-\u00e8me percentile au 75-\u00e8me percentile via les m\u00e9thodes quantiles de Pandas, s&rsquo;injecte directement dans l&rsquo;argument <code>aggfunc<\/code>. L&rsquo;algorithme applique cette routine computationnelle de fa\u00e7on isol\u00e9e sur chaque partition de valeurs sans aucune interf\u00e9rence crois\u00e9e.<\/p>\n<p>Il est de surcro\u00eet parfaitement valide de fournir \u00e0 <code>aggfunc<\/code> une liste de multiples op\u00e9rateurs d&rsquo;agr\u00e9gation simultan\u00e9s, \u00e0 l&rsquo;instar de <code>aggfunc=['mean', 'std', 'count']<\/code>. Dans cette configuration, Pandas instancie dynamiquement un MultiIndex au niveau des colonnes, subdivisant chaque modalit\u00e9 horizontale en autant de sous-colonnes que de m\u00e9triques demand\u00e9es. Cette facult\u00e9 d&rsquo;agr\u00e9gation multidimensionnelle permet d&rsquo;\u00e9difier des tableaux de synth\u00e8se m\u00e9thodologique exhaustifs au sein d&rsquo;une structure logicielle unique et hautement optimis\u00e9e.<\/p>\n<h2>10. Visualisation graphique des tableaux de contingence en Python<\/h2>\n<h3>10.1 Cartes thermiques (Heatmaps) avec Seaborn<\/h3>\n<p>L&rsquo;exploration visuelle constitue un compl\u00e9ment cognitif indispensable \u00e0 l&rsquo;analyse computationnelle des matrices denses. Lorsque les variables crois\u00e9es poss\u00e8dent un nombre \u00e9lev\u00e9 de modalit\u00e9s, l&rsquo;appr\u00e9hension directe des patrons d&rsquo;interaction au sein d&rsquo;un bloc de chiffres devient particuli\u00e8rement ardue. La cartographie thermique, ou <em>heatmap<\/em>, propos\u00e9e par la biblioth\u00e8que <a rel=\"noopener noreferrer\" href=\"https:\/\/seaborn.pydata.org\">Seaborn<\/a> via sa fonction <code>sns.heatmap()<\/code>, offre la transposition graphique la plus rigoureuse et la plus expressive d&rsquo;une matrice de contingence.<\/p>\n<p>L&rsquo;interop\u00e9rabilit\u00e9 native entre Pandas et Seaborn simplifie consid\u00e9rablement ce d\u00e9ploiement s\u00e9miotique. La table de contingence, qu&rsquo;elle exprime des effectifs bruts ou des pourcentages conditionnels calcul\u00e9s pr\u00e9alablement, est transmise directement au premier argument positionnel de la fonction graphique. Gr\u00e2ce aux m\u00e9tadonn\u00e9es \u00e9tiquet\u00e9es du DataFrame, Seaborn extrait automatiquement les libell\u00e9s de l&rsquo;index et des colonnes pour configurer sans intervention manuelle les axes graphiques de la figure sous-jacente g\u00e9n\u00e9r\u00e9e par <a rel=\"noopener noreferrer\" href=\"https:\/\/matplotlib.org\">Matplotlib<\/a>.<\/p>\n<p>Pour assurer une transmission scientifique conforme aux standards acad\u00e9miques internationaux, plusieurs hyperparam\u00e8tres graphiques doivent \u00eatre calibr\u00e9s avec discernement. L&rsquo;argument bool\u00e9en <code>annot=True<\/code> force l&rsquo;inscription textuelle explicite des valeurs scalaires au centre g\u00e9om\u00e9trique de chaque carreau thermique, combinant ainsi la pr\u00e9cision m\u00e9trique \u00e0 la lisibilit\u00e9 chromatique. Le param\u00e8tre <code>fmt<\/code> contr\u00f4le le formatage num\u00e9rique de cette annotation, imposant un formatage entier pour les effectifs bruts ou d\u00e9cimal pour les fr\u00e9quences relatives. Enfin, le choix du nuancier de couleurs, param\u00e9tr\u00e9 par <code>cmap<\/code>, doit \u00eatre rigoureusement d\u00e9termin\u00e9 : des palettes continues s\u00e9quentielles (telles que <em>Blues<\/em> ou <em>Viridis<\/em>) doivent \u00eatre syst\u00e9matiquement privil\u00e9gi\u00e9es pour repr\u00e9senter des densit\u00e9s positives croissantes, garantissant une perception visuelle sans distorsion perceptuelle.<\/p>\n<h3>10.2 Diagrammes en barres empil\u00e9es et juxtapos\u00e9es<\/h3>\n<p>Si la carte thermique cartographie l&rsquo;espace matriciel de fa\u00e7on isom\u00e9trique, les diagrammes en barres repr\u00e9sentent la m\u00e9thode de choix pour expliciter visuellement les d\u00e9compositions structurelles des profils conditionnels. Pandas int\u00e8gre une interface de tra\u00e7age direct accessible via la m\u00e9thode <code>.plot(kind='bar')<\/code> applicable aux DataFrames. Lorsqu&rsquo;elle est appel\u00e9e sur un tableau de contingence de type profil-ligne normalis\u00e9 via <code>normalize='index'<\/code>, l&rsquo;adjonction de l&rsquo;option <code>stacked=True<\/code> produit un diagramme en barres empil\u00e9es cumul\u00e9 \u00e0 100%.<\/p>\n<p>Cette visualisation mat\u00e9rialise chaque cat\u00e9gorie de la variable ind\u00e9pendante sous la forme d&rsquo;un rectangle vertical de hauteur unitaire constante, segment\u00e9 proportionnellement selon la contribution relative des modalit\u00e9s de la variable d\u00e9pendante. L&rsquo;observateur peut ainsi comparer instantan\u00e9ment l&rsquo;\u00e9tirement ou la contraction des segments color\u00e9s d&rsquo;un groupe \u00e0 l&rsquo;autre, mat\u00e9rialisant imm\u00e9diatement l&rsquo;effet d&rsquo;entra\u00eenement ou de protection induit par un protocole th\u00e9rapeutique sur les trajectoires d&rsquo;\u00e9volution clinique.<\/p>\n<p>Alternativement, la configuration <code>stacked=False<\/code> g\u00e9n\u00e8re un diagramme en barres group\u00e9es ou juxtapos\u00e9es, particuli\u00e8rement adapt\u00e9 \u00e0 la repr\u00e9sentation des fr\u00e9quences absolues issues d&rsquo;une table d&rsquo;effectifs bruts. Chaque modalit\u00e9 en ligne projette une grappe de barres distinctes, permettant de comparer directement les volumes d&rsquo;individus observables au sein de chaque cellule crois\u00e9e. Pour optimiser la clart\u00e9 s\u00e9miotique de ces figures dans un contexte \u00e9ditorial scientifique, il convient d&rsquo;ancrer fermement la l\u00e9gende \u00e0 l&rsquo;ext\u00e9rieur de la surface de tra\u00e7age, de formaliser les titres d&rsquo;axes et d&rsquo;\u00e9liminer le bruit visuel superflu via l&rsquo;ajustement des styles contextuels de l&rsquo;environnement graphique.<\/p>\n<h2>11. Inf\u00e9rence statistique et tests d&rsquo;association sur tableaux de contingence<\/h2>\n<h3>11.1 Test d&rsquo;ind\u00e9pendance du Chi-deux de Pearson avec SciPy<\/h3>\n<p>La d\u00e9couverte d&rsquo;irr\u00e9gularit\u00e9s ou d&rsquo;asym\u00e9tries au sein des profils conditionnels d&rsquo;un tableau de contingence ne permet pas \u00e0 elle seule de conclure \u00e0 l&rsquo;existence d&rsquo;une relation statistiquement signifiante dans la population d&rsquo;origine. Les fluctuations observ\u00e9es peuvent en effet r\u00e9sulter du simple \u00e9chantillonnage stochastique. L&rsquo;\u00e9valuation formelle de l&rsquo;hypoth\u00e8se nulle d&rsquo;ind\u00e9pendance requiert l&rsquo;application du test du Chi-deux de contingence de Karl Pearson. Au sein de l&rsquo;environnement scientifique Python, ce calcul formel est d\u00e9l\u00e9gu\u00e9 \u00e0 la fonction <code>scipy.stats.chi2_contingency()<\/code>.<\/p>\n<p>Le traitement algorithmique requiert le passage d&rsquo;une matrice de contingence d&rsquo;effectifs observ\u00e9s bruts, excluant strictement toute marge de sommation pr\u00e9alable. La structure peut \u00eatre transmise indiff\u00e9remment sous la forme d&rsquo;un DataFrame Pandas pur ou d&rsquo;un tableau NumPy bidimensionnel extrait via l&rsquo;attribut <code>.values<\/code>. En retour de calcul, la fonction <code>chi2_contingency()<\/code> retourne un tuple immuable structur\u00e9 comprenant quatre grandeurs math\u00e9matiques cardinales : la statistique empirique calcul\u00e9e du Chi-deux (<span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span>), la probabilit\u00e9 asymptotique associ\u00e9e (<span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span>-value), les degr\u00e9s de libert\u00e9 inh\u00e9rents au syst\u00e8me matriciel (<span class=\"arabpsy-math-inline\" data-latex=\"ddl\">$ddl$<\/span>), et enfin la matrice compl\u00e8te des fr\u00e9quences th\u00e9oriques esp\u00e9r\u00e9es <span class=\"arabpsy-math-inline\" data-latex=\"E_{ij}\">$E_{ij}$<\/span> calcul\u00e9es sous l&rsquo;hypoth\u00e8se stricte d&rsquo;ind\u00e9pendance stochastique.<\/p>\n<p>La statistique formelle du Chi-deux synth\u00e9tise la somme pond\u00e9r\u00e9e des d\u00e9viations quadratiques entre les comptages observ\u00e9s et les esp\u00e9rances d&rsquo;ind\u00e9pendance selon l&rsquo;expression math\u00e9matique :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"\\chi^2 = \\sum_{i=1}^{I} \\sum_{j=1}^{J} \\frac{(O_{ij} - E_{ij})^2}{E_{ij}}\">$$\\chi^2 = \\sum_{i=1}^{I} \\sum_{j=1}^{J} \\frac{(O_{ij} &#8211; E_{ij})^2}{E_{ij}}$$<\/span><\/p>\n<p>Les degr\u00e9s de libert\u00e9 associ\u00e9s \u00e0 cette distribution sous l&rsquo;hypoth\u00e8se nulle sont r\u00e9gis par l&rsquo;\u00e9quation g\u00e9om\u00e9trique classique :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"ddl = (I - 1) \\times (J - 1)\">$$ddl = (I &#8211; 1) \\times (J &#8211; 1)$$<\/span><\/p>\n<p>L&rsquo;acceptation ou le rejet de l&rsquo;hypoth\u00e8se nulle <span class=\"arabpsy-math-inline\" data-latex=\"H_0\">$H_0$<\/span> s&rsquo;effectue en confrontant la <span class=\"arabpsy-math-inline\" data-latex=\"p\">$p$<\/span>-value au seuil de significativit\u00e9 conventionnel pr\u00e9\u00e9tabli (<span class=\"arabpsy-math-inline\" data-latex=\"\\alpha = 0{,}05\">$\\alpha = 0{,}05$<\/span>). Toutefois, la validit\u00e9 asymptotique de cette loi th\u00e9orique repose imp\u00e9rativement sur le respect de la r\u00e8gle de Cochran : aucune cellule th\u00e9orique <span class=\"arabpsy-math-inline\" data-latex=\"E_{ij}\">$E_{ij}$<\/span> ne doit \u00eatre strictement nulle, et au moins 80% des cellules de la matrice th\u00e9orique doivent pr\u00e9senter une fr\u00e9quence th\u00e9orique esp\u00e9r\u00e9e sup\u00e9rieure ou \u00e9gale \u00e0 5. La matrice des esp\u00e9rances retourn\u00e9e par SciPy doit donc faire l&rsquo;objet d&rsquo;un contr\u00f4le de validation bool\u00e9en syst\u00e9matique au sein du script d&rsquo;analyse avant d&rsquo;ent\u00e9riner formellement les conclusions d\u00e9duites de la p-valeur.<\/p>\n<h3>11.2 Correction de Yates, test exact de Fisher et mesures de taille d&rsquo;effet<\/h3>\n<p>Lorsque la structure matricielle se restreint \u00e0 une table de dimension <span class=\"arabpsy-math-inline\" data-latex=\"2 \\times 2\">$2 \\times 2$<\/span> et que la taille d&rsquo;\u00e9chantillon globale demeure mod\u00e9r\u00e9e, l&rsquo;approximation continue de la loi discr\u00e8te du Chi-deux tend \u00e0 sous-estimer la p-valeur, augmentant le risque d&rsquo;erreur de type I. Par d\u00e9faut, la fonction <code>chi2_contingency()<\/code> applique automatiquement la correction de continuit\u00e9 de Frank Yates (param\u00e8tre <code>correction=True<\/code>), laquelle retranche la valeur <span class=\"arabpsy-math-inline\" data-latex=\"0{,}5\">$0{,}5$<\/span> \u00e0 la valeur absolue des \u00e9carts cellulaires <span class=\"arabpsy-math-inline\" data-latex=\"|O_{ij} - E_{ij}|\">$|O_{ij} &#8211; E_{ij}|$<\/span> pr\u00e9alablement \u00e0 l&rsquo;\u00e9l\u00e9vation au carr\u00e9, conf\u00e9rant au test un conservatisme robuste.<\/p>\n<p>Dans les configurations d&rsquo;\u00e9chantillonnage extr\u00eame o\u00f9 les effectifs cellulaires s&rsquo;av\u00e8rent hautement clairsem\u00e9s, violant manifestement les postulats de Cochran, le recours \u00e0 un test asymptotique devient m\u00e9thodologiquement proscrit. Il convient alors de solliciter le test exact de Fisher, impl\u00e9ment\u00e9 au sein du module <code>scipy.stats<\/code> sous l&rsquo;instruction <code>fisher_exact()<\/code>. D\u00e9di\u00e9 initialement aux tables d&rsquo;effectifs <span class=\"arabpsy-math-inline\" data-latex=\"2 \\times 2\">$2 \\times 2$<\/span>, ce test \u00e9value de mani\u00e8re hyperg\u00e9om\u00e9trique la probabilit\u00e9 exacte combinatoire d&rsquo;observer la configuration matricielle empirique observ\u00e9e conditionnellement aux marges fix\u00e9es, fournissant une d\u00e9cision statistique irr\u00e9futable exempte de toute approximation distributionnelle.<\/p>\n<p>Toutefois, la seule d\u00e9monstration d&rsquo;une significativit\u00e9 statistique ($p < 0{,}05<span class=\"arabpsy-math-inline\" data-latex=\") n&#039;informe aucunement sur l&#039;ampleur clinique ou pratique de la relation d\u00e9couverte. L&#039;\u00e9valuation m\u00e9thodologique moderne impose la quantification formelle de la taille d&#039;effet. Dans les tables de dimensions arbitraires\">$) n&rsquo;informe aucunement sur l&rsquo;ampleur clinique ou pratique de la relation d\u00e9couverte. L&rsquo;\u00e9valuation m\u00e9thodologique moderne impose la quantification formelle de la taille d&rsquo;effet. Dans les tables de dimensions arbitraires$<\/span>I times J<span class=\"arabpsy-math-inline\" data-latex=\", la m\u00e9trique standardis\u00e9e de r\u00e9f\u00e9rence est le\">$, la m\u00e9trique standardis\u00e9e de r\u00e9f\u00e9rence est le$<\/span>V$ de Harald Cram\u00e9r. Cette statistique se calcule alg\u00e9briquement \u00e0 partir de la valeur empirique du Chi-deux normalis\u00e9e par la taille totale d&rsquo;\u00e9chantillon et le nombre minimal de coordonn\u00e9es libres du syst\u00e8me :<\/p>\n<p><span class=\"arabpsy-math-display\" data-latex=\"V = \\sqrt{\\frac{\\chi^2}{N \\times \\min(I - 1, J - 1)}}\">$$V = \\sqrt{\\frac{\\chi^2}{N \\times \\min(I &#8211; 1, J &#8211; 1)}}$$<\/span><\/p>\n<p>Cette m\u00e9trique adimensionnelle oscille rigoureusement dans l&rsquo;intervalle <span class=\"arabpsy-math-inline\" data-latex=\"[0, 1]\">$[0, 1]$<\/span>, o\u00f9 la valeur 0 correspond \u00e0 une ind\u00e9pendance absolue et la valeur 1 \u00e0 une contingence parfaite. Dans le cas sp\u00e9cifique des tables dichotomiques <span class=\"arabpsy-math-inline\" data-latex=\"2 \\times 2\">$2 \\times 2$<\/span>, le <span class=\"arabpsy-math-inline\" data-latex=\"V\">$V$<\/span> de Cram\u00e9r converge vers la valeur absolue du coefficient de corr\u00e9lation Phi (<span class=\"arabpsy-math-inline\" data-latex=\"phi\">$phi$<\/span>). L&rsquo;impl\u00e9mentation de cette \u00e9quation au sein d&rsquo;une fonction Python r\u00e9utilisable permet d&rsquo;adjoindre syst\u00e9matiquement aux rapports statistiques un indicateur d&rsquo;intensit\u00e9 d&rsquo;association rigoureux, affranchi de l&rsquo;inflation m\u00e9canique propre aux grands \u00e9chantillons.<\/p>\n<h2>12. Bonnes pratiques, gestion des donn\u00e9es manquantes et optimisation de la performance<\/h2>\n<h3>12.1 Traitement des valeurs manquantes et des cellules vides<\/h3>\n<p>La manipulation de donn\u00e9es observationnelles r\u00e9elles confronte in\u00e9vitablement l&rsquo;analyste \u00e0 la probl\u00e9matique des donn\u00e9es manquantes (marqu\u00e9es comme <code>NaN<\/code>, <code>None<\/code> ou <code>pd.NA<\/code>). Par d\u00e9faut, l&rsquo;argument bool\u00e9en <code>dropna<\/code> de la fonction <code>pandas.crosstab()<\/code> est positionn\u00e9 \u00e0 <code>True<\/code>, ce qui induit une exclusion automatique de toutes les observations individuelles pr\u00e9sentant une absence de valeur sur l&rsquo;un quelconque des vecteurs de croisement s\u00e9lectionn\u00e9s. Si cette approche garantit l&rsquo;int\u00e9grit\u00e9 cat\u00e9gorielle stricte de la table finale, elle est susceptible d&rsquo;introduire des biais de s\u00e9lection substantiels si le m\u00e9canisme de disparition des donn\u00e9es ob\u00e9it \u00e0 une logique non al\u00e9atoire (MNAR &#8211; Missing Not at Random).<\/p>\n<p>Pour auditer m\u00e9thodologiquement l&rsquo;impact de ces donn\u00e9es lacunaires, il est hautement recommand\u00e9 de forcer le param\u00e8tre \u00e0 <code>dropna=False<\/code> lors des phases pr\u00e9liminaires d&rsquo;exploration. Dans cette configuration, Pandas instancie une modalit\u00e9 explicite d\u00e9di\u00e9e aux valeurs non renseign\u00e9es sur les axes correspondants, permettant de quantifier pr\u00e9cis\u00e9ment le volume d&rsquo;\u00e9rosion d&rsquo;\u00e9chantillon et de d\u00e9celer d&rsquo;\u00e9ventuelles associations structurelles entre la non-r\u00e9ponse et certains groupes exp\u00e9rimentaux d\u00e9termin\u00e9s. Tout protocole statistique publiable doit obligatoirement expliciter la politique de traitement des manquants retenue, qu&rsquo;il s&rsquo;agisse d&rsquo;une analyse par cas complets ou d&rsquo;une imputation cat\u00e9gorielle par cha\u00eenes d&rsquo;\u00e9quations multivari\u00e9es.<\/p>\n<p>Une distinction conceptuelle fondamentale doit en outre \u00eatre op\u00e9r\u00e9e entre les z\u00e9ros al\u00e9atoires et les z\u00e9ros structurels. Un z\u00e9ro al\u00e9atoire traduit une cellule empiriquement vide imputable \u00e0 une taille d&rsquo;\u00e9chantillon limit\u00e9e (l&rsquo;\u00e9v\u00e9nement est th\u00e9oriquement possible mais ne s&rsquo;est pas produit durant la collecte). \u00c0 l&rsquo;inverse, un z\u00e9ro structurel caract\u00e9rise une combinaison d&rsquo;\u00e9tats physiquement ou conceptuellement impossible dans le monde r\u00e9el (par exemple, le diagnostic d&rsquo;un carcinome ut\u00e9rin chez un sujet de sexe chromosomique strictement masculin). Alors que les z\u00e9ros al\u00e9atoires peuvent faire l&rsquo;objet de corrections par lissage de Laplace (addition d&rsquo;une constante infinit\u00e9simale de continuit\u00e9), les z\u00e9ros structurels imposent une r\u00e9duction dimensionnelle formelle du tableau ou le recours \u00e0 des mod\u00e8les log-lin\u00e9aires tronqu\u00e9s afin de ne pas vicier le calcul des degr\u00e9s de libert\u00e9 du syst\u00e8me statistique.<\/p>\n<h3>12.2 Optimisation des performances sur des ensembles de donn\u00e9es massifs<\/h3>\n<p>Lors du d\u00e9ploiement de pipelines analytiques au contact de bases de donn\u00e9es massives exc\u00e9dant plusieurs millions d&rsquo;enregistrements (fichiers de logs transactionnels, donn\u00e9es omiques ou capteurs connect\u00e9s), l&rsquo;ex\u00e9cution na\u00efve de <code>pandas.crosstab()<\/code> peut faire l&rsquo;objet de goulots d&rsquo;\u00e9tranglement computationnels s\u00e9v\u00e8res. Bien que tr\u00e8s riche en fonctionnalit\u00e9s de normalisation et d&rsquo;habillage, la fonction <code>crosstab()<\/code> g\u00e9n\u00e8re des surco\u00fbts d&rsquo;encadrement logiciel non n\u00e9gligeables en raison des multiples v\u00e9rifications internes et des conversions d&rsquo;alignement qu&rsquo;elle effectue syst\u00e9matiquement \u00e0 chaque appel.<\/p>\n<p>L&rsquo;optimisation premi\u00e8re r\u00e9side dans la rigueur du typage m\u00e9moire. L&rsquo;obligation de convertir syst\u00e9matiquement les s\u00e9ries textuelles de type <code>object<\/code> en types <code>category<\/code> via la m\u00e9thode <code>astype('category')<\/code> constitue une r\u00e8gle d&rsquo;ing\u00e9nierie fondamentale. Cette d\u00e9claration r\u00e9duit l&#8217;empreinte m\u00e9moire d&rsquo;un facteur souvent sup\u00e9rieur \u00e0 dix et acc\u00e9l\u00e8re consid\u00e9rablement les phases de groupement interne, les algorithmes de hachage op\u00e9rant d\u00e9sormais sur des entiers compacts en lieu et place de comparateurs de cha\u00eenes de caract\u00e8res arbitraires.<\/p>\n<p>Dans les sc\u00e9narios de volum\u00e9trie critique o\u00f9 la latence d&rsquo;ex\u00e9cution doit \u00eatre minimis\u00e9e de mani\u00e8re drastique, l&rsquo;utilisation alternative du pipeline vectoris\u00e9 de bas niveau reposant sur <code>groupby().size().unstack()<\/code> offre des gains de v\u00e9locit\u00e9 remarquables. L&rsquo;instruction s\u00e9quentielle consistant \u00e0 grouper le DataFrame selon les deux dimensions cibles, \u00e0 appliquer l&rsquo;op\u00e9rateur de comptage d&rsquo;occurrences vectoris\u00e9 <code>.size()<\/code>, puis \u00e0 projeter le second niveau d&rsquo;indice sous forme de colonnes via <code>.unstack(fill_value=0)<\/code> produit une table de contingence strictement identique sur le plan matriciel, mais avec des temps de calcul fr\u00e9quemment r\u00e9duits d&rsquo;un facteur trois \u00e0 cinq par rapport \u00e0 l&rsquo;appel conventionnel de <code>pandas.crosstab()<\/code>.<\/p>\n<p>Le tableau ci-dessous r\u00e9capitule de fa\u00e7on synth\u00e9tique les arbitrages m\u00e9thodologiques et computationnels \u00e0 op\u00e9rer selon les exigences structurelles de chaque \u00e9tape de recherche :<\/p>\n<table border=\"1\" cellpadding=\"8\" cellspacing=\"0\" style=\"border-collapse: collapse; width: 100%; margin-top: 20px; margin-bottom: 20px;\">\n<thead>\n<tr style=\"background-color: #f2f2f2; text-align: left;\">\n<th>Approche M\u00e9thodologique<\/th>\n<th>Avantages Cl\u00e9s<\/th>\n<th>Limites Principales<\/th>\n<th>Cas d&rsquo;Usage Recommand\u00e9<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>pandas.crosstab()<\/strong><\/td>\n<td>Normalisation int\u00e9gr\u00e9e (all, index, columns), gestion directe des marges, nommage explicite des axes.<\/td>\n<td>Surco\u00fbt computationnel sur tr\u00e8s grands volumes de donn\u00e9es (<span class=\"arabpsy-math-inline\" data-latex=\"N &gt; 10^7\">$N > 10^7$<\/span>).<\/td>\n<td>Analyses exploratoires, rapports scientifiques, tables pr\u00eates \u00e0 la publication acad\u00e9mique.<\/td>\n<\/tr>\n<tr>\n<td><strong>groupby().size().unstack()<\/strong><\/td>\n<td>Performance algorithmique maximale, faible empreinte m\u00e9moire, ex\u00e9cution hautement optimis\u00e9e.<\/td>\n<td>Absence d&rsquo;habillage direct, normalisations et totaux marginaux n\u00e9cessitant des \u00e9tapes manuelles.<\/td>\n<td>Pipelines d&rsquo;ing\u00e9nierie Big Data, boucles d&rsquo;\u00e9valuation it\u00e9ratives, apprentissage automatique.<\/td>\n<\/tr>\n<tr>\n<td><strong>DataFrame.pivot_table()<\/strong><\/td>\n<td>Polyvalence maximale pour agr\u00e9ger des variables continues multiples sur une grille factorielle.<\/td>\n<td>Syntaxe plus lourde pour le simple d\u00e9nombrement de fr\u00e9quences d&rsquo;occurrences pures.<\/td>\n<td>Analyses statistiques descriptives bivari\u00e9es incorporant des mesures d&rsquo;\u00e9chelle (moyenne, \u00e9cart-type).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>En synth\u00e8se, la ma\u00eetrise int\u00e9grale de la tabulation crois\u00e9e en Python exige une articulation constante entre rigueur conceptuelle statistique et excellence d&rsquo;ing\u00e9nierie logicielle. En calibrant judicieusement le typage des variables cat\u00e9gorielles, en exploitant les raffinements de normalisation probabiliste de Pandas, en validant la puissance s\u00e9miotique des repr\u00e9sentations graphiques sous Seaborn et en validant l&rsquo;absence d&rsquo;artefacts stochastiques via les modules inf\u00e9rentiels de SciPy, le chercheur ou l&rsquo;ing\u00e9nieur de donn\u00e9es dispose d&rsquo;une infrastructure analytique d&rsquo;une robustesse m\u00e9thodologique sans faille, pr\u00eate \u00e0 soutenir les exigences des recherches scientifiques les plus rigoureuses.<\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>Agresti, A. (2013). <em>Categorical data analysis<\/em> (3rd ed.). John Wiley &#038; Sons. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1002\/0471249688\">https:\/\/doi.org\/10.1002\/0471249688<\/a><\/li>\n<li>Cochran, W. G. (1954). Some methods for strengthening the common <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> tests. <em>Biometrics<\/em>, 10(4), 417\u2013451. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/3001616\">https:\/\/doi.org\/10.2307\/3001616<\/a><\/li>\n<li>Cram\u00e9r, H. (1946). <em>Mathematical methods of statistics<\/em>. Princeton University Press.<\/li>\n<li>Fisher, R. A. (1922). On the interpretation of <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> from contingency tables, and the calculation of P. <em>Journal of the Royal Statistical Society<\/em>, 85(1), 87\u201394. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/2340521\">https:\/\/doi.org\/10.2307\/2340521<\/a><\/li>\n<li>Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. <em>Computing in Science &#038; Engineering<\/em>, 9(3), 90\u201395. <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>McKinney, W. (2010). Data structures for statistical computing in Python. In <em>Proceedings of the 9th Python in Science Conference<\/em> (pp. 56\u201361). <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.25080\/Majora-92bf1924-003\">https:\/\/doi.org\/10.25080\/Majora-92bf1924-003<\/a><\/li>\n<li>Pearson, K. (1900). On the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling. <em>The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science<\/em>, 50(302), 157\u2013175. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1080\/14786440009463897\">https:\/\/doi.org\/10.1080\/14786440009463897<\/a><\/li>\n<li>Stevens, S. S. (1946). On the theory of scales of measurement. <em>Science<\/em>, 103(2684), 677\u2013680. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.1126\/science.103.2684.677\">https:\/\/doi.org\/10.1126\/science.103.2684.677<\/a><\/li>\n<li>Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., van der Walt, S. J., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., \u2026 SciPy 1.0 Contributors. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. <em>Nature Methods<\/em>, 17(3), 261\u2013272. <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<li>Yates, F. (1934). Contingency tables involving small numbers and the <span class=\"arabpsy-math-inline\" data-latex=\"\\chi^2\">$\\chi^2$<\/span> test. <em>Supplement to the Journal of the Royal Statistical Society<\/em>, 1(2), 217\u2013235. <a rel=\"noopener noreferrer\" href=\"https:\/\/doi.org\/10.2307\/2983604\">https:\/\/doi.org\/10.2307\/2983604<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Guide acad\u00e9mique complet pour cr\u00e9er et analyser des tableaux de contingence en Python avec Pandas, de la syntaxe de base aux tests d&rsquo;inf\u00e9rence statistique.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","categories":[1829,2465],"tags":[4737,9675,2468,2069,3778],"class_list":["post-8655","psych_stat","type-psych_stat","status-publish","hentry","category-methodologie-statistique","category-programmation-python","tag-analyse-categorielle","tag-pandas-crosstab","tag-python","tag-statistique-descriptive","tag-tableau-de-contingence"],"_links":{"self":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/8655","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=8655"}],"version-history":[{"count":0,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=\/wp\/v2\/psych_stat\/8655\/revisions"}],"wp:attachment":[{"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/french.arabpsychology.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}