Téléverser les fichiers vers "/"

This commit is contained in:
2025-10-15 11:26:45 +00:00
parent 3adfad41f1
commit 7db4900e6f

233
TP3.ipynb Normal file
View File

@@ -0,0 +1,233 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Activité — Les matrices dadjacence\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction\n",
"En sociologie, on cherche souvent à représenter **les relations entre individus** : qui connaît qui, qui travaille avec qui, qui échange le plus, etc.\n",
"\n",
"Un **graphe** permet de modéliser ces interactions :\n",
"- **nœuds (ou sommets)** → les individus\n",
"- **arêtes (ou liens)** → les relations entre eux\n",
"\n",
"Mais il existe une autre manière, plus mathématique, de représenter ces relations : la **matrice dadjacence**.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Définition\n",
"Pour un graphe $G = (V, E)$ à *n* sommets, la **matrice dadjacence** $A$ est une matrice carrée *n × n* où :\n",
"\n",
"$$A_{ij} = \\begin{cases}1 & \\text{si une arête relie le sommet } i \\text{ au sommet } j \\\\0 & \\text{sinon}\\end{cases}$$\n",
"\n",
"- Dans un **graphe non dirigé**, $A$ est **symétrique** : $A_{ij} = A_{ji}$\n",
"- Dans un **graphe dirigé**, $A$ peut être **asymétrique** : $A_{ij} = 1$ ne signifie pas forcément $A_{ji} = 1$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Partie 1 — Représentation papier\n",
"### 1. Graphe de départ\n",
"Voici un petit réseau damitié entre cinq personnes :\n",
"\n",
"```\n",
"Alice — Bob — Claire\n",
" │ │\n",
" David Emma\n",
"```\n",
"\n",
"**Consigne :**\n",
"1. Listez les sommets : `Alice, Bob, Claire, David, Emma`.\n",
"2. Complétez la matrice dadjacence correspondante :\n",
"\n",
"| | Alice | Bob | Claire | David | Emma |\n",
"|:------|:------:|:---:|:------:|:------:|:----:|\n",
"| Alice | 0 | | | | |\n",
"| Bob | | 0 | | | |\n",
"| Claire| | | 0 | | |\n",
"| David | | | | 0 | |\n",
"| Emma | | | | | 0 |\n",
"\n",
"(Remplissez avec des 1 là où il existe un lien.)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Questions danalyse\n",
"1. Quel est le **degré** de chaque individu (combien de liens possède-t-il) ?\n",
"2. Quel est lindividu le plus **central** dans ce réseau ?\n",
"3. Si on ajoute un lien entre *David* et *Emma*, comment la matrice change-t-elle ?\n",
"4. Que signifie le fait que la matrice soit **symétrique** ?\n",
"5. En sociologie, que représenterait une matrice **non symétrique** ? (donnez un exemple concret)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Partie 2 — Exploration Python\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. Créer et afficher la matrice"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"G = nx.Graph()\n",
"G.add_edges_from([\n",
" (\"Alice\",\"Bob\"),\n",
" (\"Bob\",\"Claire\"),\n",
" (\"Alice\",\"David\"),\n",
" (\"Bob\",\"Emma\")\n",
"])\n",
"\n",
"# Obtenir la matrice dadjacence\n",
"A = nx.to_numpy_array(G, nodelist=G.nodes())\n",
"print(list(G.nodes()))\n",
"print(A.astype(int)) # version entière"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Visualiser le graphe"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure()\n",
"nx.draw(G, with_labels=True, node_color=\"lightblue\", node_size=1000)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. Explorer la structure du réseau"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Degré de chaque sommet\n",
"print(\"Degré de chaque individu :\", dict(G.degree()))\n",
"\n",
"# Densité du réseau (rapport entre liens existants et liens possibles)\n",
"print(\"Densité du réseau :\", round(nx.density(G), 2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Liens indirects : le carré de la matrice"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"A2 = np.linalg.matrix_power(A, 2)\n",
"print(\"A² =\\n\", A2.astype(int))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Interprétation :\n",
"- Si `A²[i][j] > 0`, cela signifie quil existe **un ami commun** entre les nœuds *i* et *j*.\n",
"- En sociologie : cela mesure les **liens indirects**, cest-à-dire les “amis damis”.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Synthèse\n",
"| Concept mathématique | Interprétation sociologique |\n",
"|:----------------------|:----------------------------|\n",
"| 1 dans la matrice | lien direct entre deux individus |\n",
"| 0 dans la matrice | absence de lien |\n",
"| somme dune ligne | degré (popularité / nombre de connexions) |\n",
"| symétrie | réciprocité des relations |\n",
"| $A^2$ | existence de relations indirectes |\n",
"| densité | cohésion du groupe |\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Questions de réflexion\n",
"1. En quoi la matrice dadjacence permet-elle de **quantifier** un réseau social ?\n",
"2. Si une matrice est très dense, que peut-on en conclure sur le **type de groupe** étudié ?\n",
"3. Comment pourriez-vous pondérer les liens dans cette matrice pour représenter l**intensité** des relations ?"
]
},
{
"cell_type": "markdown",
"id": "d6a2470b",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.x"
}
},
"nbformat": 4,
"nbformat_minor": 5
}