Vous êtes sur la page 1sur 12

{

"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<table> <tr>\n",
" <td><H1>Numérique Sciences informatique </td></H1>\n",
" \n",
" </tr> </table>\n",
"<H2>TP RADARS DU MORBIHAN</H2>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Création de votre propre carte via un tableur\n",
"\n",
"1. Ouvrez un tableur quelconque et dans la première ligne, colonne par
colonne, entrez les valeurs suivantes :\n",
"\n",
"Latitude, Longitude, Description\n",
"\n",
"\n",
"\n",
"2. Sauvegardez ce fichier au format .csv en mettant comme séparateur la
virgule, et en le nommant par exemp\n",
"\n",
"\n",
"\n",
"3. Avec par exemple de sites comme https://www.gps-coordinates.net/ qui
proposent une carte qui, en cliquant sur un point de la carte, nous propose les
coordonnées GPS précises de ce lieu, remplissez les différentes colonnes en mettant
la description et les coordonnées GPS de divers lieux. \n",
"\n",
"\n",
"\n",
"4. Sauvegardez votre fichier, fermez le tableur. \n",
"\n",
"\n",
"5. En faisant un clic-droit sur votre fichier csv, ouvrez-le avec un simple
éditeur de texte. Qu'observe-t-on ? \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Création de votre propre carte directement via Python ! \n",
"\n",
"On va commencer par créer un tableau qui va contenir les informations
(longitude, latitude et description du lieu). \n",
"\n",
"1. Regardez l'algorithme suivant, en lisant les commentaires, et rajoutez
quelques lieux (maison, piscine, ...)\n",
"\n",
"On pourra s'aider de sites comme https://www.gps-coordinates.net/ qui
proposent une carte qui, en cliquant sur un point de la carte, nous propose les
coordonnées GPS précises de ce lieu. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "columns cannot be a set",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[1], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \
u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m \
u001b[38;5;66;03m#Pandas est une librairie qui permet de créer des tableaux de
données\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;66;03m# Création
d'un tableau vide, ou plutôt une ligne vide, la ligne 0, avec 3 colonnes : \
u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m donnees\u001b[38;5;241m=\u001b[39m\
u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataFrame\
u001b[49m\u001b[43m(\u001b[49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m=\
u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\
u001b[49m\u001b[43m,\u001b[49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m=\
u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\
u001b[38;5;124;43mLongitude\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\
u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mLatitude\
u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\
u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mDescription\u001b[39;49m\
u001b[38;5;124;43m'\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m \n\
u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m#Dans la première ligne, numéro 0, on
va remplir les cases par des données\u001b[39;00m\n\u001b[0;32m 7\u001b[0m
donnees\u001b[38;5;241m.\u001b[39mat[donnees\u001b[38;5;241m.\u001b[39mindex[\
u001b[38;5;241m0\u001b[39m],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mLatitude\
u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39m\
u001b[38;5;241m47.806536\u001b[39m\n",
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\
pandas\\core\\frame.py:639\u001b[0m, in \u001b[0;36mDataFrame.__init__\
u001b[1;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[0;32m 637\
u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\
u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mindex cannot be a set\
u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 638\u001b[0m \
u001b[38;5;28;01mif\u001b[39;00m columns \u001b[38;5;129;01mis\u001b[39;00m \
u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \
u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(columns, \
u001b[38;5;28mset\u001b[39m):\n\u001b[1;32m--> 639\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcolumns cannot be a set\u001b[39m\
u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;28;01mif\
u001b[39;00m copy \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\
u001b[39;00m:\n\u001b[0;32m 642\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \
u001b[38;5;28misinstance\u001b[39m(data, \u001b[38;5;28mdict\u001b[39m):\n\
u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# retain pre-GH#38939 default
behavior\u001b[39;00m\n",
"\u001b[1;31mValueError\u001b[0m: columns cannot be a set"
]
}
],
"source": [
"import pandas as pd #Pandas est une librairie qui permet de créer des
tableaux de données\n",
"\n",
"# Création d'un tableau vide, ou plutôt une ligne vide, la ligne 0, avec 3
colonnes : \n",
"donnees=pd.DataFrame(index=[0],columns={'Longitude','Latitude','Description'})
\n",
"\n",
"#Dans la première ligne, numéro 0, on va remplir les cases par des données\n",
"donnees.at[donnees.index[0],'Latitude']=47.806536\n",
"donnees.at[donnees.index[0],'Longitude']=-3.279851\n",
"donnees.at[donnees.index[0],'Description']=\"Vous êtes ici ! \" \n",
"\n",
"#On rajoute une ligne en y accollant (on concatène) une nouvelle ligne\n",
"donnees =
pd.concat([donnees,pd.DataFrame(index=[1],columns={'Longitude','Latitude','Descript
ion'})],ignore_index=True)\n",
"\n",
"#Que l'on remplit par des données\n",
"donnees.at[donnees.index[1],'Latitude']=47.8063\n",
"donnees.at[donnees.index[1],'Longitude']=-3.28\n",
"donnees.at[donnees.index[1],'Description']=\"Gymnase\" \n",
"\n",
"#On peut ainsi créer notre propre tableau avec autant de lignes que l'on
souhaite\n",
"\n",
"#On sauvegarde le tableau dans un fichier csv pour pouvoir l'envoyer aux amis
par exemple\n",
"donnees.to_csv(r'monfichier2.csv',index=True)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Que signifie csv ? Où est le fichier monfichier2.csv ? "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On va maintenant afficher sur la carte les lieux que vous avez signalés : "
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"import folium\n",
"\n",
"#On créé une carte, ici centrée sur le lycée\n",
"c= folium.Map(location=[47.806536,-3.279851],zoom_start=20)\n",
"\n",
"\n",
"for i in range(0,donnees.shape[0]): # à chaque ligne du tableau, on lit la
Longitude, Latittude et Description, que l'on place aux bons endroits du marker.\
n",
"
folium.Marker([donnees.at[donnees.index[i],'Latitude'],donnees.at[donnees.index[i],
'Longitude']],popup=donnees.at[donnees.index[i],'Description']).add_to(c)\n",
"\n",
"c.save('maCarte.html')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"del donnees # si on ne supprime pas le tableau, on occupe inutilement un
tableau dans la RAM de votre \n",
" #ordinateur, ce qui pourrait le ralentir si le tableau est
immense"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3. Il est possible aussi de rajouter plus facilement des lieux. \n",
"\n",
"a) Pour cela, allez dans le répertoire où se situe le fichier monfichier2.csv,
par un clic-droit, renommez-le en monfichier3.csv afin de sauvegarder ce que vous
avez fait dans la question 1. (Si vous ré-exécutez l'algo précédent alors que vous
avez modifié le fichier monfichier2.csv autre part, alors ce fichier sera écrasé et
remplacé par le fichier monfichier2.csv de l'algorithme)\n",
"\n",
"b) Ouvrez ce fichier monfichier2.csv avec un tableur comme LibreOffice, puis
rajoutez des lieux directement dans le tableau. N'oubliez pas de sauvegarder votre
fichier en gardant toujours le format csv ! \n",
"\n",
"\n",
"\n",
"4. Il faut maintenant que Python lise les détails de ce fichier, on va donc
réutiliser la bibliothèque Pandas qui va prendre toutes les données du tableau du
csv, et en faire un tableau identique sous Python : "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import folium #pas obligé de le remettre si on continue l'algorithme
précédent, mais bien si vous recommencez \n",
" # de zero avec seulement un fichier csv\n",
"import pandas as pd # idem \n",
"\n",
"data =pd.read_csv(r'monfichier3.csv')\n",
"\n",
"#On créé une carte, ici centrée sur le lycée\n",
"c= folium.Map(location=[47.806536,-3.279851],zoom_start=20)\n",
"\n",
"\n",
"for i in range(0,data.shape[0]): # à chaque ligne du tableau, on lit la
Longitude, Latittude et Description, que l'on place aux bons endroits du marker.\
n",
"
folium.Marker([data.at[data.index[i],'Latitude'],data.at[data.index[i],'Longitude']
],popup=data.at[data.index[i],'Description']).add_to(c)\n",
"\n",
"c.save('maCarte1.html')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice : positionnement des radars du morbihan "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Après avoir téléchargé dans le bon dossier le fichier des
radars(radars_france.csv) https://www.data.gouv.fr/fr/datasets/radars-automatiques/
, créez une carte qui recense les radars sur le morbihan seulement ! Le popup de
chaque marqueur affichera le nom de la route où est situé le radar.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ecrire un script ci-dessous permettant d'ouvrir et de visualiser le
fichier \"radars_france\" préalablement téléchargé"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" date_heure_dernier_changement date_heure_creation departement \\\n",
"0 2018-06-28T12:24:19Z 2018-06-28T11:06:32Z 57 \n",
"1 2018-09-05T12:20:05Z 2018-09-05T12:20:05Z 80 \n",
"2 2018-09-05T12:20:05Z 2018-09-05T12:20:05Z 91 \n",
"3 2018-09-05T12:20:05Z 2018-09-05T12:20:05Z 91 \n",
"4 2018-09-05T12:20:05Z 2018-09-05T12:20:05Z 78 \n",
"... ... ... ... \n",
"3345 2018-09-05T12:29:37Z 2018-09-05T12:29:37Z 81 \n",
"3346 2018-09-05T12:29:37Z 2018-09-05T12:29:37Z 86 \n",
"3347 2018-09-05T12:29:39Z 2018-09-05T12:29:39Z 87 \n",
"3348 2018-09-05T12:29:39Z 2018-09-05T12:29:39Z 88 \n",
"3349 2018-09-05T12:29:40Z 2018-09-05T12:29:40Z 90 \n",
"\n",
" latitude longitude id direction \\\
n",
"0 49.119070 6.204080 12923 Vallières les Bordes vers Bellecroix \
n",
"1 49.958420 2.854790 13598 PARIS VERS LILLE \
n",
"2 48.670290 2.279760 13599 PARIS VERS MONTLHERY \
n",
"3 48.632120 2.406500 13600 PARIS VERS CORBEIL ESSONNES \
n",
"4 48.833130 2.085010 13601 TRAPPES VERS PARIS \
n",
"... ... ... ... ... \
n",
"3345 43.896684 2.151713 16942 NaN \
n",
"3346 46.508771 0.471131 16943 NaN \
n",
"3347 45.891151 1.280403 16944 NaN \
n",
"3348 48.198949 6.476978 16945 NaN \
n",
"3349 47.573626 7.494679 16946 NaN \
n",
"\n",
" equipement date_installation type
emplacement \\\n",
"0 FARECO 2010-02-12T00:00:00Z Radar feu rouge METZ \
n",
"1 MORPHO 2003-11-05T00:00:00Z Radar fixe HEM MONACU \
n",
"2 MORPHO 2003-10-31T00:00:00Z Radar fixe LA VILLE DU BOIS \
n",
"3 MORPHO 2003-10-31T00:00:00Z Radar fixe COURCOURONNES \
n",
"4 MORPHO 2003-10-30T00:00:00Z Radar fixe BAILLY \
n",
"... ... ... ... ... \
n",
"3345 NaN 2016-07-18T00:00:00Z Itinéraire NaN \
n",
"3346 NaN 2017-10-11T00:00:00Z Itinéraire NaN \
n",
"3347 NaN 2017-02-10T00:00:00Z Itinéraire NaN \
n",
"3348 NaN 2016-12-13T00:00:00Z Itinéraire NaN \
n",
"3349 NaN 2016-12-05T00:00:00Z Itinéraire NaN \
n",
"\n",
" route longueur_troncon_km vitesse_poids_lourds_kmh \\\n",
"0 NaN NaN NaN \n",
"1 A1 NaN NaN \n",
"2 RN20 NaN NaN \n",
"3 A6 NaN NaN \n",
"4 A12 NaN NaN \n",
"... ... ... ... \n",
"3345 RD 612 31.8 NaN \n",
"3346 RN 147 5.3 NaN \n",
"3347 RN 520 12.6 NaN \n",
"3348 RD 46 20.9 NaN \n",
"3349 RD 419 50.9 NaN \n",
"\n",
" vitesse_vehicules_legers_kmh \n",
"0 NaN \n",
"1 130.0 \n",
"2 70.0 \n",
"3 110.0 \n",
"4 110.0 \n",
"... ... \n",
"3345 NaN \n",
"3346 NaN \n",
"3347 NaN \n",
"3348 NaN \n",
"3349 NaN \n",
"\n",
"[3350 rows x 15 columns]\n"
]
}
],
"source": [
"import pandas as pd #Pandas est une librairie qui permet de créer des
tableaux de données\n",
"\n",
"#Z On ouvre le fichier csv\n",
"radars_f = pd.read_csv('radars_france.csv')\n",
"print(radars_f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>La fonction \"del\" permet de supprimer les colonnes inutiles du fichier
csv</p>\n",
"<p>del nom_de_la_variable['nom_de_la_colonne']</p>\n",
"<p>Ecrire ci-dessous un script permettant de supprimer les colonnes
inutiles.</p>\n",
"<p>On ne gardera que les colonnes (departement, latitude, longitude,
route)</p>\n",
"Visualiser le nouveau fichier"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" departement latitude longitude route\n",
"0 57 49.119070 6.204080 NaN\n",
"1 80 49.958420 2.854790 A1\n",
"2 91 48.670290 2.279760 RN20\n",
"3 91 48.632120 2.406500 A6\n",
"4 78 48.833130 2.085010 A12\n",
"... ... ... ... ...\n",
"3345 81 43.896684 2.151713 RD 612\n",
"3346 86 46.508771 0.471131 RN 147\n",
"3347 87 45.891151 1.280403 RN 520\n",
"3348 88 48.198949 6.476978 RD 46\n",
"3349 90 47.573626 7.494679 RD 419\n",
"\n",
"[3350 rows x 4 columns]\n"
]
}
],
"source": [
"# On supprime les colonnes non désirées\n",
"del radars_f['date_heure_dernier_changement']\n",
"del radars_f['date_heure_creation']\n",
"del radars_f['id']\n",
"del radars_f['direction']\n",
"del radars_f['equipement']\n",
"del radars_f['date_installation']\n",
"del radars_f['type']\n",
"del radars_f['emplacement']\n",
"del radars_f['longueur_troncon_km']\n",
"del radars_f['vitesse_poids_lourds_kmh']\n",
"del radars_f['vitesse_vehicules_legers_kmh']\n",
"print( radars_f)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>On désirme désormais ne garder que les radars situés dans le morbihan.</p>\
n",
"<p> La fonction \"loc\" permet d'effectuer cette opération</p>\n",
"<p>
nom_de_la_nouvelle_variable=nom_de_la_variable.loc[nom_de_la_variable[colonne_desir
ee]=='valeur_voulue',['colonne_1_a_visualiser','colonne_2_a_visualiser'...]]</p>\
n",
"<p> Visualiser et Enregistrer le nouveau fichier (radars_56)</p>\n",
"<p>Ecrire ci-dessous un script permettant de satisfaire cette exigence</p>\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" departement latitude longitude
route\n",
"69 56 47.755658 -3.239926
RD194\n",
"70 56 47.839500 -3.340530
RD769\n",
"71 56 48.022000 -2.820200
RD764\n",
"72 56 47.664000 -2.785800
RN165\n",
"73 56 47.621960 -2.897200
RD101\n",
"605 56 47.671000 -2.939500
RN165\n",
"677 56 47.788690 -3.252680
RN165\n",
"678 56 48.086830 -3.550490
RD769\n",
"996 56 47.695170 -2.554710
RD775\n",
"997 56 47.777140 -3.274320
RD781\n",
"998 56 47.556180 -2.395720
RD139\n",
"999 56 47.762680 -2.736910
RD778\n",
"1000 56 47.787700 -3.453180
RD765\n",
"1483 56 48.017280 -2.794020
RD764\n",
"1602 56 47.660710 -2.859720
RN165\n",
"1605 56 47.941030 -2.616320
RN24\n",
"1608 56 48.022360 -2.961930
RD768\n",
"1663 56 47.637720 -2.672430
RN165\n",
"1664 56 47.711480 -3.222420
RD9\n",
"1665 56 47.739690 -2.438180
RD5\n",
"1835 56 47.863370 -2.819390
RD767\n",
"1836 56 48.025700 -2.957990
RD768\n",
"2004 56 47.771950 -3.377820 RN165 Echangeur de Kerdual vers
D465\n",
"2384 56 47.538340 -2.415060
RN165\n",
"2385 56 47.949990 -2.525580
RN24\n",
"2386 56 48.101430 -2.262670
RD766\n",
"2497 56 47.653720 -2.735360
NaN\n",
"2498 56 47.668690 -2.994530
NaN\n",
"3233 56 47.930480 -2.322900
RN24\n"
]
}
],
"source": [
"# On ne garde que les radars du 56\n",
"radars_56=radars_f.loc[radars_f[\"departement\"]==\"56\",
[\"departement\",\"latitude\",\"longitude\",\"route\"]]\n",
"print(radars_56)\n",
"#On sauvegarde le tableau dans un fichier csv \n",
"radars_56.to_csv(r'radars_56.csv',index=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En utilisant les scripts précédents écrire ci-dessous un script permettant de
visualiser sur une carte (centrée sur le morbihan) les radars préalablement triés"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"import folium\n",
"data =pd.read_csv(r'radars_56.csv')\n",
"\n",
"#On créé une carte, ici centrée sur Guénin (centre du morbihan)\n",
"carte= folium.Map(location=[47.907245 ,-2.980079],zoom_start=10)\n",
"\n",
"\n",
"for i in range(0,data.shape[0]): # à chaque ligne du tableau, on lit la
Longitude, Latittude et Description, que l'on place aux bons endroits du marker.\
n",
"
folium.Marker([data.at[data.index[i],'latitude'],data.at[data.index[i],'longitude']
],popup=data.at[data.index[i],'route']).add_to(carte)\n",
"\n",
"carte.save('maCarteradars56correction.html')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.6"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}

Vous aimerez peut-être aussi