{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 🎯 Séance 8 — Centralité : qui est influent dans un réseau ?\n", "\n", "## Objectifs pédagogiques\n", "À la fin de cette séance, vous serez capables de :\n", "- calculer et interpréter la **centralité de degré**, de **proximité** et d'**intermédiarité** ;\n", "- comprendre que ces trois mesures répondent à des questions différentes, et peuvent désigner des individus différents comme \"centraux\" ;\n", "- relier ces mesures à des situations sociologiques concrètes (popularité, accès rapide à l'information, position de pont).\n", "\n", "## Introduction\n", "En Séance 3, on a vu qu'un réseau peut être **inégalitaire** : certain·es individus concentrent beaucoup plus de connexions que d'autres. Mais \"avoir beaucoup d'ami·es\" n'est qu'une façon d'être important dans un réseau — il en existe d'autres. Cette séance formalise plusieurs notions de **centralité**, c'est-à-dire plusieurs manières de répondre à la question : *qui compte le plus dans ce réseau, et pourquoi ?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### On reprend le réseau de la Séance 5\n", "Le même réseau à 7 personnes que celui utilisé pour la diffusion en BFS :\n", "\n", "```\n", "Alice — Bob — Chloé — David\n", " │ │ │\n", " Emma Félix Gaël\n", "```" ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "\n", "G = nx.Graph()\n", "G.add_edges_from([\n", " ('Alice', 'Bob'), ('Alice', 'Emma'),\n", " ('Bob', 'Chloé'), ('Bob', 'Félix'),\n", " ('Chloé', 'David'), ('Chloé', 'Gaël')\n", "])\n", "\n", "plt.figure(figsize=(6,4))\n", "pos = nx.spring_layout(G, seed=0)\n", "nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=1000)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partie 1 — Centralité de degré\n", "\n", "C'est la mesure la plus simple, déjà rencontrée : **combien de connexions directes** une personne a-t-elle ? NetworkX la normalise entre 0 et 1 en divisant le degré par le nombre maximal de connexions possibles ($n - 1$).\n", "\n", "$$C_{degré}(i) = \\frac{\\deg(i)}{n - 1}$$\n", "\n", "**Interprétation sociologique :** popularité directe, nombre de contacts immédiats." ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "centralite_degre = nx.degree_centrality(G)\n", "for personne, c in sorted(centralite_degre.items(), key=lambda x: -x[1]):\n", " print(f\"{personne} : {round(c, 2)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partie 2 — Centralité de proximité (closeness)\n", "\n", "Une personne peut avoir peu de connexions directes, mais être malgré tout **proche de tout le monde** grâce à des chemins courts. La centralité de proximité mesure l'inverse de la distance moyenne entre une personne et toutes les autres.\n", "\n", "$$C_{proximité}(i) = \\frac{n - 1}{\\sum_j d(i, j)}$$\n", "\n", "Plus une personne est proche (en moyenne) de tout le monde, plus sa centralité de proximité est élevée.\n", "\n", "**Interprétation sociologique :** vitesse d'accès à l'information — une personne avec une forte proximité reçoit et diffuse l'information rapidement dans tout le réseau (voir Séances 4 et 5, BFS)." ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "centralite_proximite = nx.closeness_centrality(G)\n", "for personne, c in sorted(centralite_proximite.items(), key=lambda x: -x[1]):\n", " print(f\"{personne} : {round(c, 2)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partie 3 — Centralité d'intermédiarité (betweenness)\n", "\n", "Certaines personnes ne sont ni très connectées, ni particulièrement proches de tout le monde en moyenne — mais elles occupent une position stratégique : de nombreux **plus courts chemins entre les autres passent par elles**. Ce sont les **ponts** entre des groupes qui, sans elles, seraient déconnectés (cette notion de pont a déjà été rencontrée en Séance 3 avec le coefficient de clustering, et en Séance 5 avec Chloé).\n", "\n", "$$C_{intermédiarité}(i) = \\sum_{j \\neq k \\neq i} \\frac{\\text{nombre de plus courts chemins entre } j \\text{ et } k \\text{ passant par } i}{\\text{nombre total de plus courts chemins entre } j \\text{ et } k}$$\n", "\n", "**Interprétation sociologique :** pouvoir de contrôle sur la circulation de l'information — une personne avec une forte intermédiarité peut filtrer, ralentir ou accélérer ce qui passe d'un groupe à l'autre." ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "centralite_intermediarite = nx.betweenness_centrality(G)\n", "for personne, c in sorted(centralite_intermediarite.items(), key=lambda x: -x[1]):\n", " print(f\"{personne} : {round(c, 2)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partie 4 — Comparer les trois mesures\n", "\n", "**Questions :**\n", "1. La personne la plus centrale change-t-elle selon la mesure utilisée ?\n", "2. Bob et Chloé ont le même degré (3 connexions chacun·e). Ont-ils/elles la même centralité d'intermédiarité ? Pourquoi ?\n", "3. Emma, Félix, David et Gaël ont tou·tes un degré de 1. Ont-iels tou·tes la même centralité de proximité ? Pourquoi ?\n", "4. Imaginez une personne qui a un très fort coefficient de clustering (Séance 3) — a-t-elle plutôt tendance à avoir une forte ou une faible centralité d'intermédiarité ? Justifiez." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Synthèse\n", "\n", "| Mesure | Question qu'elle pose | Type d'individu qu'elle repère |\n", "|:--------|:------------------------|:----------------------------------|\n", "| Centralité de degré | Combien de connexions directes ? | La personne \"populaire\" |\n", "| Centralité de proximité | À quelle distance moyenne de tout le monde ? | La personne qui diffuse/reçoit vite l'info |\n", "| Centralité d'intermédiarité | Combien de plus courts chemins passent par moi ? | La personne \"pont\", qui contrôle la circulation entre groupes |\n", "\n", "## Questions de réflexion\n", "1. Dans une entreprise, un individu avec une forte centralité d'intermédiarité mais un faible degré perd son emploi. Quelles conséquences cela peut-il avoir sur la circulation de l'information dans l'organisation ?\n", "2. Sur un réseau social, qui serait plutôt \"central en degré\" (beaucoup d'abonné·es) sans être \"central en intermédiarité\" ? Donnez un exemple.\n", "3. En quoi la centralité d'intermédiarité peut-elle représenter un **pouvoir**, y compris pour une personne peu visible dans le réseau ?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 4 }