Skip to content

Commit

Permalink
commit
Browse files Browse the repository at this point in the history
  • Loading branch information
colasnaudi committed May 10, 2022
0 parents commit ade0143
Show file tree
Hide file tree
Showing 8 changed files with 7,668 additions and 0 deletions.
311 changes: 311 additions & 0 deletions Etape1.ipynb
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
}
Loading

0 comments on commit ade0143

Please sign in to comment.