Téléverser les fichiers vers "/"
This commit is contained in:
233
TP3.ipynb
Normal file
233
TP3.ipynb
Normal file
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Activité — Les matrices d’adjacence\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 d’adjacence**.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Définition\n",
|
||||
"Pour un graphe $G = (V, E)$ à *n* sommets, la **matrice d’adjacence** $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 d’amitié 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 d’adjacence 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 d’analyse\n",
|
||||
"1. Quel est le **degré** de chaque individu (combien de liens possède-t-il) ?\n",
|
||||
"2. Quel est l’individu 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 d’adjacence\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 qu’il existe **un ami commun** entre les nœuds *i* et *j*.\n",
|
||||
"- En sociologie : cela mesure les **liens indirects**, c’est-à-dire les “amis d’amis”.\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 d’une 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 d’adjacence 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
|
||||
}
|
||||
Reference in New Issue
Block a user