{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Paris WiFi Services" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read local data from a JSON file" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import requests\n", "\n", "data_json = requests.get('https://libs.cartocdn.com/cartoframes/samples/paris_wifi_services.json').json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Normalize the json data and build a DataFrame" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datasetidrecordidrecord_timestampfields.cpfields.nom_sitefields.arc_adressefields.geo_point_2dfields.nombre_de_borne_wififields.idpwfields.geo_shape.typefields.geo_shape.coordinatesfields.etat2geometry.typegeometry.coordinates
0sites-disposant-du-service-paris-wi-fi31c3bfd9ad944ec1bea07cbeb28dc6bb0653e5302019-10-08T07:01:10.494000+00:0075010MEDIATHEQUE FRANCOISE SAGAN8 RUE LEON SCHWARTZENBERG[48.8754298708, 2.35366677297]11PW0147Point[2.353666772968424, 48.87542987081135]OpérationnelPoint[2.35366677297, 48.8754298708]
1sites-disposant-du-service-paris-wi-fi322b5836dd2af4413728e67dc4432cf83dde06b12019-10-08T07:01:10.494000+00:0075020PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR)27 RUE PIAT[48.8716051488, 2.38492475051]1PW0168Point[2.384924750509342, 48.87160514880642]OpérationnelPoint[2.38492475051, 48.8716051488]
2sites-disposant-du-service-paris-wi-fiec66708cf6e56caced0ae6485f68c0a44167636d2019-10-08T07:01:10.494000+00:0075013JARDIN BRASSAI59 BOULEVARD AUGUSTE BLANQUI[48.8292152156, 2.34951229427]1NaNPoint[2.349512294267843, 48.82921521555871]En étudePoint[2.34951229427, 48.8292152156]
3sites-disposant-du-service-paris-wi-fi6f37d419ab91b1d9b2972eafe2f5585c4d51f3582019-10-08T07:01:10.494000+00:0075007BERGES RIVE GAUCHE - JARDIN FLOTTANTPORT DU GROS CAILLOU[48.8629641751, 2.30452468194]3PW0189Point[2.30452468193794, 48.86296417505911]OpérationnelPoint[2.30452468194, 48.8629641751]
4sites-disposant-du-service-paris-wi-fi76280ce4b86872e0c0696c047c1d140b66c6868f2019-10-08T07:01:10.494000+00:0075016BIBLIOTHEQUE GERMAINE TILLION6 RUE DU COMMANDANT SCHLOESING[48.8618363826, 2.28427079122]2PW0113Point[2.284270791218422, 48.86183638257241]OpérationnelPoint[2.28427079122, 48.8618363826]
\n", "
" ], "text/plain": [ " datasetid \\\n", "0 sites-disposant-du-service-paris-wi-fi \n", "1 sites-disposant-du-service-paris-wi-fi \n", "2 sites-disposant-du-service-paris-wi-fi \n", "3 sites-disposant-du-service-paris-wi-fi \n", "4 sites-disposant-du-service-paris-wi-fi \n", "\n", " recordid record_timestamp \\\n", "0 31c3bfd9ad944ec1bea07cbeb28dc6bb0653e530 2019-10-08T07:01:10.494000+00:00 \n", "1 322b5836dd2af4413728e67dc4432cf83dde06b1 2019-10-08T07:01:10.494000+00:00 \n", "2 ec66708cf6e56caced0ae6485f68c0a44167636d 2019-10-08T07:01:10.494000+00:00 \n", "3 6f37d419ab91b1d9b2972eafe2f5585c4d51f358 2019-10-08T07:01:10.494000+00:00 \n", "4 76280ce4b86872e0c0696c047c1d140b66c6868f 2019-10-08T07:01:10.494000+00:00 \n", "\n", " fields.cp fields.nom_site \\\n", "0 75010 MEDIATHEQUE FRANCOISE SAGAN \n", "1 75020 PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR) \n", "2 75013 JARDIN BRASSAI \n", "3 75007 BERGES RIVE GAUCHE - JARDIN FLOTTANT \n", "4 75016 BIBLIOTHEQUE GERMAINE TILLION \n", "\n", " fields.arc_adresse fields.geo_point_2d \\\n", "0 8 RUE LEON SCHWARTZENBERG [48.8754298708, 2.35366677297] \n", "1 27 RUE PIAT [48.8716051488, 2.38492475051] \n", "2 59 BOULEVARD AUGUSTE BLANQUI [48.8292152156, 2.34951229427] \n", "3 PORT DU GROS CAILLOU [48.8629641751, 2.30452468194] \n", "4 6 RUE DU COMMANDANT SCHLOESING [48.8618363826, 2.28427079122] \n", "\n", " fields.nombre_de_borne_wifi fields.idpw fields.geo_shape.type \\\n", "0 11 PW0147 Point \n", "1 1 PW0168 Point \n", "2 1 NaN Point \n", "3 3 PW0189 Point \n", "4 2 PW0113 Point \n", "\n", " fields.geo_shape.coordinates fields.etat2 geometry.type \\\n", "0 [2.353666772968424, 48.87542987081135] Opérationnel Point \n", "1 [2.384924750509342, 48.87160514880642] Opérationnel Point \n", "2 [2.349512294267843, 48.82921521555871] En étude Point \n", "3 [2.30452468193794, 48.86296417505911] Opérationnel Point \n", "4 [2.284270791218422, 48.86183638257241] Opérationnel Point \n", "\n", " geometry.coordinates \n", "0 [2.35366677297, 48.8754298708] \n", "1 [2.38492475051, 48.8716051488] \n", "2 [2.34951229427, 48.8292152156] \n", "3 [2.30452468194, 48.8629641751] \n", "4 [2.28427079122, 48.8618363826] " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame, json_normalize\n", "\n", "df = DataFrame(json_normalize(data_json['records']))\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clean the dataframe and save lat and lon columns" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datasetidrecordidrecord_timestampfields_cpfields_nom_sitefields_arc_adressefields_geo_point_2dfields_nombre_de_borne_wififields_idpwfields_geo_shape_typefields_geo_shape_coordinatesfields_etat2geometry_typegeometry_coordinateslonlat
0sites-disposant-du-service-paris-wi-fi31c3bfd9ad944ec1bea07cbeb28dc6bb0653e5302019-10-08T07:01:10.494000+00:0075010MEDIATHEQUE FRANCOISE SAGAN8 RUE LEON SCHWARTZENBERG[48.8754298708, 2.35366677297]11PW0147Point[2.353666772968424, 48.87542987081135]OpérationnelPoint[2.35366677297, 48.8754298708]2.35366748.875430
1sites-disposant-du-service-paris-wi-fi322b5836dd2af4413728e67dc4432cf83dde06b12019-10-08T07:01:10.494000+00:0075020PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR)27 RUE PIAT[48.8716051488, 2.38492475051]1PW0168Point[2.384924750509342, 48.87160514880642]OpérationnelPoint[2.38492475051, 48.8716051488]2.38492548.871605
2sites-disposant-du-service-paris-wi-fiec66708cf6e56caced0ae6485f68c0a44167636d2019-10-08T07:01:10.494000+00:0075013JARDIN BRASSAI59 BOULEVARD AUGUSTE BLANQUI[48.8292152156, 2.34951229427]1NaNPoint[2.349512294267843, 48.82921521555871]En étudePoint[2.34951229427, 48.8292152156]2.34951248.829215
3sites-disposant-du-service-paris-wi-fi6f37d419ab91b1d9b2972eafe2f5585c4d51f3582019-10-08T07:01:10.494000+00:0075007BERGES RIVE GAUCHE - JARDIN FLOTTANTPORT DU GROS CAILLOU[48.8629641751, 2.30452468194]3PW0189Point[2.30452468193794, 48.86296417505911]OpérationnelPoint[2.30452468194, 48.8629641751]2.30452548.862964
4sites-disposant-du-service-paris-wi-fi76280ce4b86872e0c0696c047c1d140b66c6868f2019-10-08T07:01:10.494000+00:0075016BIBLIOTHEQUE GERMAINE TILLION6 RUE DU COMMANDANT SCHLOESING[48.8618363826, 2.28427079122]2PW0113Point[2.284270791218422, 48.86183638257241]OpérationnelPoint[2.28427079122, 48.8618363826]2.28427148.861836
\n", "
" ], "text/plain": [ " datasetid \\\n", "0 sites-disposant-du-service-paris-wi-fi \n", "1 sites-disposant-du-service-paris-wi-fi \n", "2 sites-disposant-du-service-paris-wi-fi \n", "3 sites-disposant-du-service-paris-wi-fi \n", "4 sites-disposant-du-service-paris-wi-fi \n", "\n", " recordid record_timestamp \\\n", "0 31c3bfd9ad944ec1bea07cbeb28dc6bb0653e530 2019-10-08T07:01:10.494000+00:00 \n", "1 322b5836dd2af4413728e67dc4432cf83dde06b1 2019-10-08T07:01:10.494000+00:00 \n", "2 ec66708cf6e56caced0ae6485f68c0a44167636d 2019-10-08T07:01:10.494000+00:00 \n", "3 6f37d419ab91b1d9b2972eafe2f5585c4d51f358 2019-10-08T07:01:10.494000+00:00 \n", "4 76280ce4b86872e0c0696c047c1d140b66c6868f 2019-10-08T07:01:10.494000+00:00 \n", "\n", " fields_cp fields_nom_site \\\n", "0 75010 MEDIATHEQUE FRANCOISE SAGAN \n", "1 75020 PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR) \n", "2 75013 JARDIN BRASSAI \n", "3 75007 BERGES RIVE GAUCHE - JARDIN FLOTTANT \n", "4 75016 BIBLIOTHEQUE GERMAINE TILLION \n", "\n", " fields_arc_adresse fields_geo_point_2d \\\n", "0 8 RUE LEON SCHWARTZENBERG [48.8754298708, 2.35366677297] \n", "1 27 RUE PIAT [48.8716051488, 2.38492475051] \n", "2 59 BOULEVARD AUGUSTE BLANQUI [48.8292152156, 2.34951229427] \n", "3 PORT DU GROS CAILLOU [48.8629641751, 2.30452468194] \n", "4 6 RUE DU COMMANDANT SCHLOESING [48.8618363826, 2.28427079122] \n", "\n", " fields_nombre_de_borne_wifi fields_idpw fields_geo_shape_type \\\n", "0 11 PW0147 Point \n", "1 1 PW0168 Point \n", "2 1 NaN Point \n", "3 3 PW0189 Point \n", "4 2 PW0113 Point \n", "\n", " fields_geo_shape_coordinates fields_etat2 geometry_type \\\n", "0 [2.353666772968424, 48.87542987081135] Opérationnel Point \n", "1 [2.384924750509342, 48.87160514880642] Opérationnel Point \n", "2 [2.349512294267843, 48.82921521555871] En étude Point \n", "3 [2.30452468193794, 48.86296417505911] Opérationnel Point \n", "4 [2.284270791218422, 48.86183638257241] Opérationnel Point \n", "\n", " geometry_coordinates lon lat \n", "0 [2.35366677297, 48.8754298708] 2.353667 48.875430 \n", "1 [2.38492475051, 48.8716051488] 2.384925 48.871605 \n", "2 [2.34951229427, 48.8292152156] 2.349512 48.829215 \n", "3 [2.30452468194, 48.8629641751] 2.304525 48.862964 \n", "4 [2.28427079122, 48.8618363826] 2.284271 48.861836 " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns = df.columns.str.replace('.', '_')\n", "df[['lon','lat']] = DataFrame(df['geometry_coordinates'].values.tolist(), index=df.index)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a GeoDataFrame using lat and lon columns" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datasetidrecordidrecord_timestampfields_cpfields_nom_sitefields_arc_adressefields_geo_point_2dfields_nombre_de_borne_wififields_idpwfields_geo_shape_typefields_geo_shape_coordinatesfields_etat2geometry_typegeometry_coordinateslonlatgeometry
0sites-disposant-du-service-paris-wi-fi31c3bfd9ad944ec1bea07cbeb28dc6bb0653e5302019-10-08T07:01:10.494000+00:0075010MEDIATHEQUE FRANCOISE SAGAN8 RUE LEON SCHWARTZENBERG[48.8754298708, 2.35366677297]11PW0147Point[2.353666772968424, 48.87542987081135]OpérationnelPoint[2.35366677297, 48.8754298708]2.35366748.875430POINT (2.35367 48.87543)
1sites-disposant-du-service-paris-wi-fi322b5836dd2af4413728e67dc4432cf83dde06b12019-10-08T07:01:10.494000+00:0075020PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR)27 RUE PIAT[48.8716051488, 2.38492475051]1PW0168Point[2.384924750509342, 48.87160514880642]OpérationnelPoint[2.38492475051, 48.8716051488]2.38492548.871605POINT (2.38492 48.87161)
2sites-disposant-du-service-paris-wi-fiec66708cf6e56caced0ae6485f68c0a44167636d2019-10-08T07:01:10.494000+00:0075013JARDIN BRASSAI59 BOULEVARD AUGUSTE BLANQUI[48.8292152156, 2.34951229427]1NaNPoint[2.349512294267843, 48.82921521555871]En étudePoint[2.34951229427, 48.8292152156]2.34951248.829215POINT (2.34951 48.82922)
3sites-disposant-du-service-paris-wi-fi6f37d419ab91b1d9b2972eafe2f5585c4d51f3582019-10-08T07:01:10.494000+00:0075007BERGES RIVE GAUCHE - JARDIN FLOTTANTPORT DU GROS CAILLOU[48.8629641751, 2.30452468194]3PW0189Point[2.30452468193794, 48.86296417505911]OpérationnelPoint[2.30452468194, 48.8629641751]2.30452548.862964POINT (2.30452 48.86296)
4sites-disposant-du-service-paris-wi-fi76280ce4b86872e0c0696c047c1d140b66c6868f2019-10-08T07:01:10.494000+00:0075016BIBLIOTHEQUE GERMAINE TILLION6 RUE DU COMMANDANT SCHLOESING[48.8618363826, 2.28427079122]2PW0113Point[2.284270791218422, 48.86183638257241]OpérationnelPoint[2.28427079122, 48.8618363826]2.28427148.861836POINT (2.28427 48.86184)
\n", "
" ], "text/plain": [ " datasetid \\\n", "0 sites-disposant-du-service-paris-wi-fi \n", "1 sites-disposant-du-service-paris-wi-fi \n", "2 sites-disposant-du-service-paris-wi-fi \n", "3 sites-disposant-du-service-paris-wi-fi \n", "4 sites-disposant-du-service-paris-wi-fi \n", "\n", " recordid record_timestamp \\\n", "0 31c3bfd9ad944ec1bea07cbeb28dc6bb0653e530 2019-10-08T07:01:10.494000+00:00 \n", "1 322b5836dd2af4413728e67dc4432cf83dde06b1 2019-10-08T07:01:10.494000+00:00 \n", "2 ec66708cf6e56caced0ae6485f68c0a44167636d 2019-10-08T07:01:10.494000+00:00 \n", "3 6f37d419ab91b1d9b2972eafe2f5585c4d51f358 2019-10-08T07:01:10.494000+00:00 \n", "4 76280ce4b86872e0c0696c047c1d140b66c6868f 2019-10-08T07:01:10.494000+00:00 \n", "\n", " fields_cp fields_nom_site \\\n", "0 75010 MEDIATHEQUE FRANCOISE SAGAN \n", "1 75020 PARC DE BELLEVILLE (PARIS NATURE MAISON DE L'AIR) \n", "2 75013 JARDIN BRASSAI \n", "3 75007 BERGES RIVE GAUCHE - JARDIN FLOTTANT \n", "4 75016 BIBLIOTHEQUE GERMAINE TILLION \n", "\n", " fields_arc_adresse fields_geo_point_2d \\\n", "0 8 RUE LEON SCHWARTZENBERG [48.8754298708, 2.35366677297] \n", "1 27 RUE PIAT [48.8716051488, 2.38492475051] \n", "2 59 BOULEVARD AUGUSTE BLANQUI [48.8292152156, 2.34951229427] \n", "3 PORT DU GROS CAILLOU [48.8629641751, 2.30452468194] \n", "4 6 RUE DU COMMANDANT SCHLOESING [48.8618363826, 2.28427079122] \n", "\n", " fields_nombre_de_borne_wifi fields_idpw fields_geo_shape_type \\\n", "0 11 PW0147 Point \n", "1 1 PW0168 Point \n", "2 1 NaN Point \n", "3 3 PW0189 Point \n", "4 2 PW0113 Point \n", "\n", " fields_geo_shape_coordinates fields_etat2 geometry_type \\\n", "0 [2.353666772968424, 48.87542987081135] Opérationnel Point \n", "1 [2.384924750509342, 48.87160514880642] Opérationnel Point \n", "2 [2.349512294267843, 48.82921521555871] En étude Point \n", "3 [2.30452468193794, 48.86296417505911] Opérationnel Point \n", "4 [2.284270791218422, 48.86183638257241] Opérationnel Point \n", "\n", " geometry_coordinates lon lat \\\n", "0 [2.35366677297, 48.8754298708] 2.353667 48.875430 \n", "1 [2.38492475051, 48.8716051488] 2.384925 48.871605 \n", "2 [2.34951229427, 48.8292152156] 2.349512 48.829215 \n", "3 [2.30452468194, 48.8629641751] 2.304525 48.862964 \n", "4 [2.28427079122, 48.8618363826] 2.284271 48.861836 \n", "\n", " geometry \n", "0 POINT (2.35367 48.87543) \n", "1 POINT (2.38492 48.87161) \n", "2 POINT (2.34951 48.82922) \n", "3 POINT (2.30452 48.86296) \n", "4 POINT (2.28427 48.86184) " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from geopandas import GeoDataFrame, points_from_xy\n", "\n", "gdf = GeoDataFrame(df, geometry=points_from_xy(df['lon'], df['lat']))\n", "gdf.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " None\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " Static map image\n", " \n", " \n", "
\n", "
\n", "
\n", " \n", " \n", "
\n", "
\n", " \n", "\n", "
\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " Source: Open Data Paris\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "\n", " \n", "\n", "
\n", "
\n", " :\n", "
\n", " \n", " \n", "
\n", "
\n", "\n", "
\n", " StackTrace\n", "
    \n", "
    \n", "
    \n", "\n", "\n", "\n", "\n", "\n", "\">\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cartoframes.viz import Layer, color_category_style, basic_legend\n", "\n", "Layer(\n", " gdf,\n", " color_category_style(\n", " 'fields_etat2', \n", " palette='[green, yellow, red, silver]',\n", " ),\n", " legends=basic_legend(\n", " title='WiFi Services in Paris',\n", " footer='Source: Open Data Paris'\n", " )\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }