Refonte du cours en 12 séances alignées sur le programme officiel
This commit is contained in:
174
Seance_8_Centralite.ipynb
Normal file
174
Seance_8_Centralite.ipynb
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
Reference in New Issue
Block a user