-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit ade0143
Showing
8 changed files
with
7,668 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,311 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"<div align=\"center\">\n", | ||
" <h2>S2.02 Exploration algorithmique d'un problème</h2>\n", | ||
" <h3>Etape 1</h3>\n", | ||
"</div>" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"> Ce projet consiste à créer des fonctions utiles à l'exploitation de la base de données de bus.\n", | ||
">\n", | ||
"> Ces fonctions seront utiles lors de l'étape 2." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### Import des modules" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"import json\n", | ||
"from math import sin, cos, acos" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### A : importer les donnees du fichier JSON dans un dictionnaire donneesbus" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 2, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"with open('Fichiers/donneesbus.json') as json_file:\n", | ||
" donneesbus = json.load(json_file)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### B : Créer une liste noms_arrets contenants le noms des arrêts" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"noms_arrets=list(donneesbus.keys())" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### C : Créer les fonctions" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"def nom(ind):\n", | ||
" \"\"\"Retourne le nom de l'arrêt à l'indice ind\n", | ||
"\n", | ||
" :param ind: indice de l'arrêt\n", | ||
" :type ind: int\n", | ||
" :return: un nom\n", | ||
" :rtype: str\n", | ||
" \"\"\"\n", | ||
" return noms_arrets[ind]\n", | ||
"\n", | ||
"\n", | ||
"def indice_som(nom_som):\n", | ||
" \"\"\"Retourne l'indice de l'arrêt de nom nom_som\n", | ||
"\n", | ||
" :param nom_som: nom de l'arrêt\n", | ||
" :type nom_som: str\n", | ||
" :return: un indice\n", | ||
" :rtype: int\n", | ||
" \"\"\"\n", | ||
" return noms_arrets.index(nom_som)\n", | ||
"\n", | ||
"def latitude(nom_som):\n", | ||
" \"\"\"Retourne la latitude de l'arrêt de nom nom_som\n", | ||
"\n", | ||
" :param nom_som: nom de l'arrêt\n", | ||
" :type nom_som: str\n", | ||
" :return: une latitude\n", | ||
" :rtype: float\n", | ||
" \"\"\"\n", | ||
" return donneesbus[nom_som][0]\n", | ||
"\n", | ||
"def longitude(nom_som):\n", | ||
" \"\"\"Retourne la longitude de l'arrêt de nom nom_som\n", | ||
"\n", | ||
" :param nom_som: nom de l'arrêt\n", | ||
" :type nom_som: str\n", | ||
" :return: une longitude\n", | ||
" :rtype: float\n", | ||
" \"\"\"\n", | ||
" return donneesbus[nom_som][1]\n", | ||
"\n", | ||
"def voisin(nom_som):\n", | ||
" \"\"\"Retourne la liste des voisins de l'arrêt de nom nom_som\n", | ||
"\n", | ||
" :param nom_som: nom de l'arrêt\n", | ||
" :type nom_som: str\n", | ||
" :return: une liste de noms d'arrêts\n", | ||
" :rtype: list\n", | ||
" \"\"\"\n", | ||
" return donneesbus[nom_som][2]" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### D : Le réseau du bus peut être modélisé par des graphes" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### Par un dictionnaire " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 5, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# ~~~~~~~~~~~~~~~~~~~~~~~ Création du dictionnaire vide ~~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
"dic_bus = {}\n", | ||
"for arret in noms_arrets:\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~ Pour chaque arret dans noms_arrets ~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" # ~~~~~~~~~~ On crée une liste vide qui a pour clé le nom de l'arrêt ~~~~~~~~~ #\n", | ||
" dic_bus[arret] = []\n", | ||
" for arret2 in noms_arrets:\n", | ||
" # ~~~~~~~~~~~~~ Pour chaque arret2 dans noms_arrets ~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" if arret2 in voisin(arret):\n", | ||
" # ~~~~~~~~~~~~~~~ Si arret2 est dans la liste des voisins ~~~~~~~~~~~~~ #\n", | ||
" dic_bus[arret].append(arret2)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### Par une liste de liste " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 6, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# ~~~~~~~~~~~~~~~~~~~~~~~~~ Création d'une liste vide ~~~~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
"mat_bus = []\n", | ||
"for arret in noms_arrets:\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~ Pour chaque arret dans noms_arrets ~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~~~~~~ On crée une liste vide ~~~~~~~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" liste = []\n", | ||
" for arret2 in noms_arrets:\n", | ||
" # ~~~~~~~~~~~~~ Pour chaque arret2 dans noms_arrets ~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" if arret2 in voisin(arret):\n", | ||
" # ~~~~~~~~~~~~~~~ Si arret2 est dans la liste des voisins ~~~~~~~~~~~~~ #\n", | ||
" liste.append(1)\n", | ||
" else:\n", | ||
" # ~~~~~~~~~~~~~~~ Si arret2 n'est pas dans la liste des voisins ~~~~~~~~~~~~~~~ #\n", | ||
" liste.append(0)\n", | ||
" # ~~~~~~~~~~~~~~~~~ Ajouter la liste liste à la liste mat_bus ~~~~~~~~~~~~~~~~ #\n", | ||
" mat_bus.append(liste)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### E : Distance " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 7, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"def distanceGPS(latA,latB,longA,longB): \n", | ||
" # Conversions des latitudes en radians \n", | ||
" ltA=latA/180*3.14\n", | ||
" ltB=latB/180*3.14\n", | ||
" loA=longA/180*3.14\n", | ||
" loB=longB/180*3.14\n", | ||
" # Rayon de la terre en mètres (sphère IAG-GRS80) \n", | ||
" RT = 6378137 \n", | ||
" # angle en radians entre les 2 points \n", | ||
" S = acos(round(sin(ltA)*sin(ltB) + cos(ltA)*cos(ltB)*cos(abs(loB-loA)),14)) \n", | ||
" # distance entre les 2 points, comptée sur un arc de grand cercle \n", | ||
" return S*RT \n", | ||
"\n", | ||
"def distarrets(arret1, arret2):\n", | ||
" \"\"\"Retourne la distance entre les arrêts arret1 et arret2\n", | ||
"\n", | ||
" :param arret1 : nom de l'arrêt 1\n", | ||
" :type : str\n", | ||
" :param arret2 : nom de l'arrêt 2\n", | ||
" :type : str\n", | ||
" :return: distance entre les deux arrêts\n", | ||
" :rtype: float\n", | ||
" \"\"\"\n", | ||
" return(round(distanceGPS(latitude(arret1),latitude(arret2),longitude(arret1),longitude(arret2))))\n", | ||
"\n", | ||
"def distarc(arret1, arret2):\n", | ||
" \"\"\"Retourne la distance entre les arrêts arret1 et arret2 s'il existe sinon retourne 'inf'\n", | ||
"\n", | ||
" :param arret1 : nom de l'arrêt 1\n", | ||
" :type : str\n", | ||
" :param arret2 : nom de l'arrêt 2\n", | ||
" :type : str\n", | ||
" :return: distance entre les deux arrêts\n", | ||
" :rtype: float\n", | ||
" \"\"\"\n", | ||
" if arret2 in voisin(arret1):\n", | ||
" return(distarrets(arret1, arret2))\n", | ||
" else:\n", | ||
" return float(\"inf\")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"#### F : Modélisation par un graphe pondéré " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 8, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"poids_bus = []\n", | ||
"for arret in noms_arrets:\n", | ||
" # ~~ Pour chaque arret dans noms_arrets, on l'ajoute dans la liste poids_bus ~ #\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~~~~~ Puis on crée une liste vide ~~~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" liste = []\n", | ||
" for arret2 in noms_arrets:\n", | ||
" # ~~~~~ On regarde si l'arret2 est dans la liste des voisins de l'arret1 ~~~~~ #\n", | ||
" if arret2 in voisin(arret):\n", | ||
" # ~~~~~ Si oui, on ajoute la distance entre les deux arrêts dans la liste ~~~~ #\n", | ||
" liste.append(distarc(arret, arret2))\n", | ||
" else:\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sinon on ajoute 'inf' ~~~~~~~~~~~~~~~~~~~~~~~~~~ #\n", | ||
" liste.append(float(\"inf\"))\n", | ||
" # ~~~~~~~~~~~~~~~~~~~~~~~~ On ajoute la liste à la liste poids_bus ~~~~~~~~~~~~~~~~~~ #\n", | ||
" poids_bus.append(liste)" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"interpreter": { | ||
"hash": "7e1998ff7f8aa20ada591c520b972326324e5ea05489af9e422744c7c09f6dad" | ||
}, | ||
"kernelspec": { | ||
"display_name": "Python 3.10.2 64-bit", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.10.2" | ||
}, | ||
"orig_nbformat": 4 | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |
Oops, something went wrong.