{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extracting and processing OpenStreetMap (OSM) vector features\n", "\n", "[GeoHackWeek 2019](https://geohackweek.github.io) -- [vector tutorial](https://geohackweek.github.io/vector/) \n", "[Emilio Mayorga, University of Washington](https://github.com/emiliom/). 2019-9-9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook will demonstrate the use of the [OSMnx package](https://osmnx.readthedocs.io) to request and access OSM vector data and convert from the source \"graph\" data structure to familiar GeoPandas GeoDataFrames. It will highlight the distinct pathways for accessing building footprints vs. other physical features, focusing on water features. The area of interest is the \"hotosm\" task area used in this GeoHackWeek." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Import packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "import geopandas as gpd\n", "import utm\n", "\n", "import osmnx as ox\n", "ox.config(use_cache=True, log_console=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('0.5.1', '0.10')" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gpd.__version__, ox.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Project area bounding box, from hotosm task 5977\n", "The target area corresponds to [hotosm task 5977, Cyclone Kenneth, Comores: Nzwani Central Buildings 1](https://tasks.hotosm.org/project/5977), which has a **bounding box defined below.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "On Day 1 we used a different hotosm task to digitize polygons: https://tasks.hotosm.org/project/6558\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[43.2, -11.74, 43.33, -11.85]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# hotosm task 5977 bounding box. We won't use it here, but it's a good reference to have\n", "bbox_hotosmtask5977 = [43.16, -11.32, 43.54, -11.96]\n", "\n", "# We'll use a smaller bounding box near the southwest corner.\n", "# This is so we're dealing with smaller datasets, for faster processing and to be gentler on the hotosm servers\n", "bbox = [43.2, -11.74, 43.33, -11.85]\n", "west, north, east, south = bbox\n", "bbox_ctr = [0.5*(north+south), 0.5*(west+east)]\n", "\n", "bbox" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Use OSMnx to extract and explore building footprints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "You can learn ore about the `OSMnx` footprints capability at https://github.com/gboeing/osmnx-examples/blob/master/notebooks/10-building-footprints.ipynb and https://osmnx.readthedocs.io/en/stable/osmnx.html#module-osmnx.footprints\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Read the footprints on a bbox, and return as a GeoPandas GeoDataFrame\n", "The `create_footprints_gf` function will return a polygon GeoDataFrame in epsg 4326 projection. Features might be returned as both `Polygon` and `MultiPolygon`, but I don't know for sure." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "buildings_gdf = ox.create_footprints_gdf(north=north, south=south, east=east, west=west,\n", " footprint_type='building')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Yikes, this is not the nice and simple epsg code. It's an ugly `proj` string. Oh well.\n", "buildings_gdf.crs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2046" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Number of buildings returned\n", "len(buildings_gdf)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAANsAAAD4CAYAAABlu5PYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAe1UlEQVR4nO3deZgU5bX48e/pbRaYQTZRhGEJFwE1oIDEn7iheKPRqLkalceFe1WyiQvX+NO4Ek3I1SRuwQUlEU0wGiNGg4oLKiggDIgIAqJCWJTLvgwzPdPdde4fVbMwzAL0dFdP9/k8Tz9UV1XXHKDPvG+9VfUeUVWMMakX8DsAY3KFJZsxaWLJZkyaWLIZkyaWbMakScjvAFpSp06dtGfPnn6HYXLYwoULt6hq54a2ZVWy9ezZk9LSUr/DMDlMRP7V2DbrRhqTJpZsxqSJJZsxaZJUsonIRSKyTEQcERlSZ31HEXlXRMpE5A9NfP55EVnsvdaIyOJ620u8Y9yUTJzGZIJkB0iWAj8Anqi3PgrcARztvRqkqhdXL4vI74Cd9XZ5AHg9yRiNyQhJJZuqLgcQkfrr9wAfiEif/TmOuAf4ITCizrrzga+APcnEaEymyJRztpOA/1XVVQAi0gb4/8B4X6MypgU127KJyNvAYQ1suk1V/9FCcVwKPFfn/XjgAVUtq99qNhDfGGAMQElJSQuFU8fOnVBaCrNnw+bNMHEirFsH3bpBM7EZU1ezyaaqZ6QyABEJ4Z73Da6zehhwoYjcBxwCOCISVdV9BltUdRIwCWDIkCHJP5y3fj3s2gX5+fDwwxCL4Tz9NNFjB1P44WzYsoXonLnk33gDjBuX9I8zuSMT7iA5A1ihquurV6jqSdXLInI3UNZQorWIv/4V+vWDQYNAlar1Gwh9/1wCe/aw86TTaDdjOgGg8LOl8NBDxCc9Sd76dbB2bUrCMdkr2aH/C0RkPXACMF1EZtTZtgb4PTBaRNaLyABv/VN1LxMAl7B3FzJ93n6bPZ27wKWXwqOPotdcQ/jXv6J8RxlaXk7hzDdJ5OdDURGcdhp8/TVORRSnY0ecV191u5XG7CfJpmkRhgwZos3eG+k4EIvBqlXw6afoz36Gk5dHMBRCd+xA7rkHnTABjjgC6dQJ3n0XjccRgA0b4Ec/IvH2OwSjFbXnbsZ4RGShqg5paFsmdCPTZ8wYePJJnHCYQCwGgJSXE9y8Gdq1Q7ZsgW99Cxk7FgIBdwDkl79EXnsNbroJunaFf/yD4Lx50LOn+96Y/ZQ7LduKFVQNP5nw1s0IoOC2Vln09zf+a6ply5TrbKn32mvEY153MBRChg6F117zOyqTQ3KjG/nllyR69aawe1eY/jH06OF3RCYH5UbL1qEDwUUL4Xe/q0k0ffZZ+ENqriYY05DcOWcDGDgQliyBvDxijhIOiHuHSF5e+oI0Wc3O2QDef5+qZZ+RAKisJBSrwqmshAsv3Hu/JUsgGvUjQpPlcifZhg8nEhACQKX31w4AvPVW7T6bN1NRWQW33eZHhCbL5U6yBYPw/vsARHBQqGnlaixYQMH118EJJ/gRoclyuZNsACecgEydinTsSBwhIcG9t599NsyZs2/X0pgWkFvJBu59kBs2EMmL4AQCaHGx3xGZHJEb19nqy8uDRYvIf+YZaNvW72hMjsjNZKuowDl+GPGKCiLFRXD77f7G4zjuIzuhkN3YnMVyrxsJMG0aVJS7t24lEn5HA0ceifbqRWLQIHj6ab+jMSmSm8k2ciQiQthJwK9/7Xc0sHEjOyKFBLZuhUWL/I7GpEhudiM7d0bee899Hu3SS/2OBmbOpP3w4Tjt2yPXXed3NCZFcrNl27gRZ8ECeD1DpqQcOhR27CDwxRfQZ79m/zOtUG4m22GHEbjsMvjjH/2OpFZBAXTo4HcUJoVysxsJ0LnBElrGpExutmzG+MCSzZg0sWQzJk0s2YxJE0s2Y9LEks2YNLFkMyZNLNmMSRNLNmPSJGML2IvIt0Vkrnf8T0UkP5lYjfFbRhaw9wok/hm4XFU/EZGOQCzJWI3xVVItm6ouV9WVDazfo6of4CZds+oUsK+u03YmsERVP/GOt1VVM+ApzybE4zB3LlRV+R2JyVCZcs62VwF7oC+gIjJDRBaJyM2NfVBExohIqYiUbvazOOHWrTh/mOgmnDENyNQC9iFgODAUKAfe8aZ1fqf+B1u8pvbBWLiQ2LN/Jrz0U5tz0jQqUwvYrwfeV9Ut3j6vAccB+yRbRjjuOMK7d8Ndd0Ik4nc0JkNlQjdynwL2wAzg2yJS6CXjKcBnvkS3P0Tg1FOhfXu/IzEZLCML2Kvqdu+zC4DFwCJVnZ5MrMb4LbdKRhmTYlYyypgMYMlmTJpYsvlp8WJ4/vm9y1aZrJW7s2v57fLLqZy/gKDjEHrzTZg82e+ITIpZsvnhxBOp/Gg+wUTc7VoIUFoKQxo8rzZZwpIt3aZMITZ/PuFEHBAEJbZqFaGhQ5F+/dyL4oEALFjgVrUxWcP+N9Nt/nzEUQSI4f4ZBBwgvmIFAUAkQGjWLBgxwtdQTcuyAZJ0+81vCAUEwf1NJ7jLCkSAcCRC6ILz4aSTfA0TcEseP/ssZNG1WD9ZsqVbURHEYrB4MYGTTyZUWIAADkJlKAIXXwx//zuEw/7Ed801bmVWEfTEE3GuuBImTPAnlixjyeaXgQPh/fdhzx74y1+IdDuC/KMHwLBh/sb1zDPsiSWofipPUFi61NeQsoWds2WCUaPcl9+2boWqKvJxB0gBd7CmqMjHoLKHJZtxffghnHIKjvd2dzif4lgUKS2FY4/1NbRsYd1I45ozh6p+/UngDtYUx6KIiCVaC7KWzbiuv55IWRm6zD0/Kw+GadOrh89BZRdr2YwrEoHx45F585D8fApRtHt3v6PKKtaymb0NGwY7dyL33w/9+/sdTVaxZDP7ikTgttv8jiLrWDfSJGflSvj6a7+jaBUs2czBU6Vy6l/hiCPsmbz9YMlmDl4iQd4v73aXYzY7fHMs2czBC4Xc6dYnT4bLL4fdu/2OKKNZspnkbNlC+ZdfUfnqdPjhD/2OJqPZaKRJTseO5D/0IJKIwRdf+B1NRrOWzSRHBO3Qwb1xuV07e/atCZZsJjnhMEERYsEQ8YUL3WfxTIOsG2mSo4pGIoQScSQYzIwnzDOUJZtJjgjy+efuSGSbNhAM+h1RxrJuZDLicfdp61w/TxGB4mJLtGZkZAF7EQmLyBSvcP1yEbk1mThTIpFAb7+d+MWXwKJF7kXdX/3Knf/RmAZkZAF74CIgT1WPEZFC4DMReU5V1yQZb8tZuxad8gzBzZugb1+46ioS775LsLDQJls1DUoq2VR1OeA+0bv3+j3AByLSZ3+OU6eAffVEiQq08QohFgBVwK5kYm1piU+WQL8jCZzwHXeOjrvvJnjaaZkxl4jJSJkyQFK/gP2LwHnAN0AhcKOqbmvogyIyBhgDUFJSkoZQAVWCO7bDpk21z3z17u2+jGlEphawPx5IAF2B9sBsEXlbVb+q/0FfCtiLwOjR7suY/ZSpBexHAW+oagzYJCIfAkOAfZLNmNYiE4b+GypgvxYYIa42wHeAFb5EZ0wLycgC9sBEoC3uaOcC4E+quiSZWE0TEgm/I8gJVsDewP33EzvjTMLtimyQJ0lWwN40bc0aQtf+FByn+X3NQcuUoX/jp4kTkeb3Mkmyls2YNLFky0UNnaerwqpVNliSQpZsueZPf0IPPRRKStBhw9BAAH7wA5gyxb3Hc/hwvyPMWnbOlkvmz6fizbdJ7CyjYMsWWLeePeF8iqdNw5k5EwH32TSTEtay5ZL+/SlY/SVtxSFwyCEEjzma4nZtYPBg+MEPSEjAbqROIWvZcklREcybB4DE4+68j57A1KkEiorg9793V8ydC+3bQ79+fkSalaxly1Wher9nR42Chx5yn7b+7/8m/sMfwj33+BNblrKWzewj9uhjhKMV8MYbfoeSVaxlM3uLxQgX5Lu1tS+5xO9osoolm9lbOAyjRrlfjEcfhR07/I4oa1iymX3ozJkouA/J5uf7HU7WsGQz+5BYjDi4d5U8+KDf4WQNSzazr6uvJly9fOutsHEjHHOMW/73mmvslq6DZMlm9vVf/1Wz6AD07k350qVoLIY+9RS88opvobVmlmxmX507QzhMtPrrUVFBgbdpV16bmgvj5sDYdTbTsMcfJ3LVVTVvpaAArruOduXlcNttPgbWelnLZhp2xRUEiovZHfJGIysq3PO2hx+G11+Hc891nxQw+83mIDENcjp2JLBtG3GEIEoCrxs0YgSxjp3Rl14iEgCiUQjY7+xqTc1BYt1Is6+RI5Ft29gTjBByEogmqKlPM3Mm4eJinETMnUZ3xQoYMMDHYFsPSzbjUoUHHoC8PHTePARok6iiut9Tt/8j06YReO45dyau6unXTbMs2Yxr9mwq77qbvLLd+0z+I7iXAAIAp50GI0a4L3NArLNtXJMnEy7bvfe6oUPdP/v2Jfjmm+4gycyZ6Y8tS1jLZgDQceOQmTOhY0e44goYNw7AprhrQdayGQAkHEaef56K/7jIfYjUtDhLNuMaMAAqKgg9/5x7D6RpcdaNNLVOP53wK6+4c4+YFud3AftBIjLPK2BfKiLH19l2q4h8ISIrReTfk4nTHIDevS3ZUiTZbmR1AftZ9dZXF7C/qZnP3weMV9VBwJ3ee7zyUpcARwHfBR4VkWCjRzGmFUgq2VR1uaqubGD9HlX9ADfpmjwEUOwttwO+9pbPA/6qqpWquhr4Arf0rzGtlt/nbDcAM0Tkt7iJ//+89UcAdZ/jWO+t24cvBeyNOQjNtmwi8raILG3gdV4L/PyfADeqanfgRmBy9Y9tYN8G75hW1UmqOkRVh3Tu3LkFQjImNfwuYH8lcL23/DfgKW95PdC9zn7dqO1iGtMq+X2d7WvgFG95BLDKW34FuERE8kSkF/BvwHwf4jOmxSR1ziYiFwCPAJ1xC9gvVtV/97atwR38iIjI+cCZqvqZiDwFPK6qpcA1wEMiEsIdTBkDoKrLROQF4DMgDvxMVW2WGdOq2cOjpuU4jjvXpOTuHZVWwN6k3syZblGOY4+F1av9jiYjWbKZA6cKTz8NT3njWevWwZw57vInn1B2ymkweXKjH89VlmzmwL33Hvznf1J1/2+hrIyqv72Ijh9PeSiCAm3W/Qt+/nNYvtzvSDOKJZs5cN6cI+FOHeHZZwk/MwXicQritdMoRMujbkVTU8PvO0hMa9SlC5SVIZEI0T59yV+7hgRQFQwTdBKgSrgySuLMMwmq5vSASV2WbObgtGkDK1eSv3YNijtHSX4iBtTe6hPod6QlWh3WjTQH78gjYc0aZNIkAkA8EESB3eF8qoJhWLbM7wgziiWbqbVzJ1RV7b1OFZYs2Xd9tR494MorCZaUIOoA0C4WJU8TcMMNKQ64dbFky1X1b2YoK0N79Nh7wtXXX4eRI4lddjmcf37jx4pEYPx4Qt26EbjoIvd8rqwMzjknNbG3UpZsuWbRIujWDV20CLZuda+PjR4NZ54JO3fifPklnHKKu23iRPSddwitXOGeozVl9GhYuxZeeMHdt6Cg6f1zkA2Q5JpvvoENG5AhQ4jfdx+hm28m3ulQQls3UxEIU+DE0FmzkE6dANjW9hA6lO2AkH1VkmUtW67p2bNmMXjzzZS3KUa3bCYmATfRvG3loQgO0KFsB7FAEP3b36C83I+Is4b9usolmzfvM214aM8uQoA67kMVAaAsGKEwXkUAdxg/2KE9ctxxUFiY7oizirVsueTFF3E2bUKh5taqCFARiiDUzunfJuGOPDoAhYUETj8dZszwKejsYcmWS376U2LeYmG8CsGt+lTo3WblQJ2kExSQiy5CJk3yJ94sY8mWS7p2JYLXYnmqn8gNDBpEoEsXKs86G83PJ4S6NdmuuAKKi/c5lDlwlmy55JFHagZAHNzzsTC4xTTef5/EKaeS16sXMnCgW7FG1UpDtSAbIMklF1xQM+ghdf7k+uthyhSC0Qp48AEIh/2MMmtZsuUSEQgGcRIJHLz//F/8Au64w90+dqyPwWU/60bmmiuvBNxEk1Gj4N57/Y0nh1iy5Zrjj0fbt3fvCLnnHnsEJo2sG5lrhg4ldNVV7t36vXv7HU1OsWTLNccd575M2lk30pg0sWQzJk0s2YxJE0s2Y9LEks2YNMnIAvYiMlJEForIp96fdoOeafWSHfqvLmD/RL311QXsj/ZejakuYP+6iJztvT8V2AKcq6pfi8jRwAwaKfNrTGuRVLKp6nIAqXcXgqruAT4QkT7NHYIGCtir6sd19lkG5ItInqpWJhOvMX7y+6J2YwXs6/oP4OPGEs0K2OegsWPhmGPgmmta1e1mmVrAvvpnHwX8D/Cjxg5gBexz0GOPsWHS0zCkwZqDGStTC9gjIt2AacAVqvplCmMwrUFFhTsX5bp14Dh0XTgXvvc9mDoViorg7LPdYowZzO9uZHUB+/eoU8BeRA4BpgO3quqHvkVnMkMshnPeeVQdO5j8J5/AUUWA6GtvkDd9OrHOhxLZvcudzbm0NGO7lhlZwB64FugD3CEi3pONnKmqm5KJ17RSwSAycybBt96qmZTIAfI04c4Qttn9WlQ4UJChiQZWwN747Ysv4PDDYfZsGDmy8a6gCGXhfApiURy8uVOAGFD9iUBxsVscxEdWwN5kpm3biN4wjni37nDWWfD8803u3jYWJYjbHVMgLuI+cY77Ra44dQQsWJDysA+WJZvxz8MPkz/9VYK7vNbosMOa3D0mAXaF3YIdCoS8c7eqQMgtxvjKy763bE2xZDP+uf12Yr+aQDwYgq5dm542b+BAwupQHKsAas/bEkDEiVNzprZ2bWpjToIlm/HPtm0E/jQZjcXRjRsbL7gIMHUq8UiEuiMMAahJsopAmIQE4O23UxhwcizZjH8OPZTgnXcSOqQd4jjw9dcN71dRAbfcglbV1uzeEylARdwv8CGHUOjECJV0h8cfT1f0B8zv62wm1112GYFo1K2QU6ecVY0nnsC54w6cbdsJoShusrUNB+Dl6Tjnfp/Ajh1UdCuhYOzY5os2+siSzfhLxL3Hsb5oFE48EZYsQeLxmi6YANK/P7z8MgQCyFEDYMkSCtavpeqjBURWrICjjkrn32C/WTfSZKZ774VFi4ir1lzIrh4Gkf79oW9f6NMH+fhjtybB008TWfYp/OhHsG2br6E3xpLN+EsVXnoJfvMb6N4dpkyBP/4RnTABB4gTQA7v6g71C0heHtx1V+3nA95XeMQI+Owz+PBD+OgjP/4mzbJupPHXhAk4d96FFLWlbNBgil5/Hefllwk4DgKEiosIjDwDxo2DPn0aPyfr3h1eecUtRXzWWWn9K+wvSzbjr1mzCCTixHfvpui9d4jjdhmrJEhYE4RWroD9fXTq3HNTGWnSrBtp/DNvHrRtCy+8QMi7gbj61quwJpDOnfc/0VoBSzbjn1NOYed3vwdXXonG45QHIwSAhATcoZATTvA5wJZlyWb88+GHtHvmT/DQQ0heHoVODAEqwnlQUuIO72cRSzbjnyFDYNYs9zpbNAqOAxdcQFGPbtC/Pzz6qN8RtihLNpNZXnoJLr8cZsyAa6+FLl3cywNZwJLNZJx4YZ3h/U2bYPHi2vdbtkAikf6gWoAlm8ks0SjBRx6ufZ+f7yYYwGOPuaOT3/2uP7E5TlKtrCWbySz5+cjs2XD11VQdexxaWEj0hBPdL/mDD1IVDLvneSNHuk8DpMvq1Wi3bu5zd7/4xUEdwpLNZJ7u3eHEEwlXRpHRo8mf/iqIoGvXgjo4VVWUvzcbXn01fTFt387uc85Hd+zAKelxcF1ZVc2a1+DBg9VkkYqKvd//9Kcaz8tXR0QdUO3cWfXkk1XnzFF96aXUxfGPf2iiYyfVkhLVRx5R3bWr0V2BUm3k+2mza5nWo6zMnWPkxz9Gp0/HUcVp25ZQURG6ezeBuXPh6KbquBykWIytF19Gh39OQ5p6mhybXctki7ZtIRTC+eYbiESoCkYIlJWxKxBBysuhffvU/NzSUtp/PB/59reTOowlm2ldunQhMHEi8uabFHz/ewSB4m/WoXn58PnnqfmZAwcSmDjRvZczCXbXv2l9hg0DQEeNoqKwiMJ4JTr2Wvfxmu3bW76FKyx0awkkyVo20zrt3o1s307+EYfBnDkEunWDc86BJ5+E1av9jq5Blmym9Vm0COfIflBZSWDwYBg8GNq3x0FwJkwgNvFRWLPG7yj3kZE1tetsL/GOcVMycZos06YNztYtJBIOsX793XWXXop8ZxjS5TBCz011z9+efx7icX9jrSPZlq26pvaseuura2o3lyTVNbUHAXd67+t6AHg9yRhNNtm2Db78Ej2sK0GB8HZvcp9gEOnVCz5fya4Bx8DAgVTN/hCeecbfeOtIKtlUdbmqrmxg/R5V/QA36Zo8BA3U1Abwykx9hVtT2xh4/HGcjh1xzjmHULwKfvtbePDB2u2RCPFDu9CuU3t46y0iWzbBySf7F299jV3tPpAXbjHDIQ2sHw38oYnP9QfWAuuADUAPb30bYC7QFrgbuKmJY4wBSoHSkpKSJG4TMBntggs0AeqAxkErEXUKClSj0dp9li1TveUW1fJy38KkiTtIMrWm9njgAVUta+4AajW1s1d5OWzYAKefTmLaNBRq5pAMoUj37pCXV7v/gAEwYYJbDjgDZWpN7WHAhSJyH3AI4IhIVFUbHWwxWWb1anTio+iDD+AkEuwK5xMB2sSiKN75z7LWdYbh90XtBmtqq+pJ1TuIyN1AmSVajojF3ElWr7oK5/PPCeCe2LePuaf/ituyKSDTp8N5LdHBSo9MraltclE8DqNHUzV1KmFqR+9CuHXYFCGIOx15EFJz03EKJZVsqjoNmNbItp6NrL+6zvIHwOBmfsbdBx+hyXgff+w+jDl4MBx1FDp1ak0Z36pAiDwnTgVCPop41dkCY8ZAv37Qu7evoR8ov7uRJpepoldcibP0U5w33qipj53AbbnynDhVQAG1xTXkzDPhiSd8DPrgWbIZ/4ggxx1LcOmnNRVEq5+uFG97RAQpKSF49NFuCalbbvEn1hZgD48a/4XDqHdbVSUBIjhAbQlfefVV9ybjVsAeHjWZ7YMPiHmplYdDJeJ1J72ztM8+cydxbeUs2Yz/jj+eyNlnIbgXrfO9cr5Br1Opt97qTkfuVy9s1aoWmcnLks34TwSmTyf62CSCgIRCEAzWXFOLBsOwY4e7X7p99BGJiy+Gq6/ee7LYg2DJZjJGfp9e8O67EIsRWLaMwNKlVP3zNQq+1QuWLvUnqEMPJbh6NYmFC2HjxqRmY7ZkM5njjDPg1FPd5SOPhD59yPvic7cEcN++/sTUqxcMH07V+g2UfzAX/da34O67D+pQNvRvMldeHlx/ffP7pdrDD1Nw++2waAGxQccSHjXqoA5jLZsxzenVC/7yF/jqK6IjzjjoO1cs2YzZXxdeSNGsd6Gy8qA+bt1IY/bXvfcm9XFr2YxJE0s2Y9LEks2YNLFkMyZNLNmMSRNLNmPSxJLNmDSxZDMmTbLqSW0R2Qz8K4U/ohOwJYXHP1CZFg9YTD1UtcHZgrMq2VJNREobe+TdD5kWD1hMTbFupDFpYslmTJpYsh2YSX4HUE+mxQMWU6PsnM2YNLGWzZg0sWQzJk1yOtlEJCgiH4vIP73394jIEhFZLCJvikjXBj7TXUTeFZHlIrJMRPaZJENEbhIRFZFOfscjImNFZKW3rX7N8rTHJCKDRGSe9/lSETk+TTHli8h8EfnEi2l8nW0dROQtEVnl/dn+QGPaL42VJM2FFzAOmAr803tfXGfbdbilrep/5nDgOG+5CPgcGFBne3dgBu7F9U5+xgOcBrwN5HnvD/X73wh4EzjLWz4beC9NMQnQ1lsOAx8B3/He3wfc4i3fAvxPKr5vOduyiUg34HvUVjtFVXfV2aUNtXUeqLPPN6q6yFveDSwHjqizywPAzQ191od4fgL8RlUrve2bMiAmxa3bB9AOtyBmOmJSrS0bHfZe1fudB0zxlqcA5x9ITPstFRncGl7Ai7i14U7F+w3prf8VsA5YCnRu5hg9gbV4v1mB7wMPectrOICWLUXxLMatT/4R8D4wNAP+jfp779cBG3Bvb0pLTLiVqBYDZdRpvYAd9fbbnorvXE62bCJyDrBJVRfW36aqt6lqd+AvwLVNHKMt8HfgBlXdJSKFwG3AnZkQj7c6BLQHvgP8HHhBZP/m8E5hTD8BbvQ+fyMweX/iaYmYVDWhqoOAbsDxIpLe0qWpyOBMfwETgPW4rc9GoBz4c719egBLG/l8GPe8bFyddccAm7xjrgHiuL/BD/MjHm/9G8Cpdd5/STMtURpi2knt9V0BdqXr/63efncBN3nLK4HDveXDgZUp+d75/cX3+0Wd7gjwb3XWjwVebGB/AZ4BHmzmuGs4wAGSlo4H+DHwS2+5L243S3yOaXn1LwDgdGBhmv7fOgOHeMsFwGzgHO/9/ew9QHJfSr5rqfoSt5ZXvf+0v+P2+ZcArwJHeOu7Aq95y8NxT6yX4Pb/FwNnN3Dclki2pOIBIsCfvWMsAkb4/W/kbVsIfIJ7Ljk4TTF9G/jY22cpcGedY3UE3gFWeX92SMV3zW7XMiZNcnKAxBg/WLIZkyaWbMakiSWbMWliyWZMmliyGZMmlmzGpMn/ATgsH+PIVEAtAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "buildings_gdf.plot(edgecolor='red', linewidth=2);" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['Polygon'], dtype=object)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# All geometries are Polygon type; no MultiPolygon geometries\n", "buildings_gdf.geom_type.unique()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['nodes', 'geometry', 'building', 'name', 'amenity', 'denomination',\n", " 'religion', 'source', 'source_1', 'building:levels', 'area', 'length',\n", " 'building:condition', 'building:material', 'comoros-dgsc:code',\n", " 'roof:material', 'source:geometry', 'office', 'height', 'addr:city',\n", " 'shop', 'addr:street'],\n", " dtype='object')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf.columns" ] }, { "cell_type": "code", "execution_count": 9, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nodesgeometrybuildingnameamenitydenominationreligionsourcesource_1building:levels...building:conditionbuilding:materialcomoros-dgsc:coderoof:materialsource:geometryofficeheightaddr:cityshopaddr:street
369069459[3728944964, 3728944967, 3728944936, 372894495...POLYGON ((43.2794523 -11.80665, 43.2795914 -11...yesNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
369069461[3728944944, 3728944958, 3728944961, 372894495...POLYGON ((43.2794037 -11.806205, 43.2794912 -1...yesNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
369069462[3728944954, 3728944966, 3728944946, 372894495...POLYGON ((43.2796457 -11.8069795, 43.2797118 -...yesNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
369069463[3728944948, 3728944938, 3728944965, 372894496...POLYGON ((43.2790613 -11.8066263, 43.2791229 -...yesNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
369069465[3728944942, 3728944962, 3728944963, 372894496...POLYGON ((43.2791949 -11.8069023, 43.2792905 -...yesNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

5 rows × 22 columns

\n", "
" ], "text/plain": [ " nodes \\\n", "369069459 [3728944964, 3728944967, 3728944936, 372894495... \n", "369069461 [3728944944, 3728944958, 3728944961, 372894495... \n", "369069462 [3728944954, 3728944966, 3728944946, 372894495... \n", "369069463 [3728944948, 3728944938, 3728944965, 372894496... \n", "369069465 [3728944942, 3728944962, 3728944963, 372894496... \n", "\n", " geometry building name \\\n", "369069459 POLYGON ((43.2794523 -11.80665, 43.2795914 -11... yes NaN \n", "369069461 POLYGON ((43.2794037 -11.806205, 43.2794912 -1... yes NaN \n", "369069462 POLYGON ((43.2796457 -11.8069795, 43.2797118 -... yes NaN \n", "369069463 POLYGON ((43.2790613 -11.8066263, 43.2791229 -... yes NaN \n", "369069465 POLYGON ((43.2791949 -11.8069023, 43.2792905 -... yes NaN \n", "\n", " amenity denomination religion source source_1 building:levels ... \\\n", "369069459 NaN NaN NaN NaN NaN NaN ... \n", "369069461 NaN NaN NaN NaN NaN NaN ... \n", "369069462 NaN NaN NaN NaN NaN NaN ... \n", "369069463 NaN NaN NaN NaN NaN NaN ... \n", "369069465 NaN NaN NaN NaN NaN NaN ... \n", "\n", " building:condition building:material comoros-dgsc:code \\\n", "369069459 NaN NaN NaN \n", "369069461 NaN NaN NaN \n", "369069462 NaN NaN NaN \n", "369069463 NaN NaN NaN \n", "369069465 NaN NaN NaN \n", "\n", " roof:material source:geometry office height addr:city shop \\\n", "369069459 NaN NaN NaN NaN NaN NaN \n", "369069461 NaN NaN NaN NaN NaN NaN \n", "369069462 NaN NaN NaN NaN NaN NaN \n", "369069463 NaN NaN NaN NaN NaN NaN \n", "369069465 NaN NaN NaN NaN NaN NaN \n", "\n", " addr:street \n", "369069459 NaN \n", "369069461 NaN \n", "369069462 NaN \n", "369069463 NaN \n", "369069465 NaN \n", "\n", "[5 rows x 22 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Explore the distributions of distinct values for some attributes" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "yes 1316\n", "residential 668\n", "apartments 18\n", "commercial 17\n", "mosque 9\n", "industrial 8\n", "public 6\n", "school 3\n", "house 1\n", "Name: building, dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf['building'].value_counts()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "place_of_worship 16\n", "community_centre 7\n", "marketplace 4\n", "school 4\n", "restaurant 1\n", "library 1\n", "Name: amenity, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf['amenity'].value_counts()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "#opendri-comoros;survey 752\n", "#osm4km 563\n", "#opendri-comoros 190\n", "#opendri-comoros; DGSC; initial load 22\n", "DGCS-Comoros 6\n", "Kaart Ground Survey 2017 5\n", "Name: source, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf['source'].value_counts()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Bing 444\n", "bing 437\n", "BING 62\n", "mapquest 12\n", "1 2\n", "Name: source:geometry, dtype: int64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buildings_gdf['source:geometry'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ... and the distribution of building footprint area\n", "\n", "We'll reproject to [UTM](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system) in order to calculate building footprint polygon areas in $m^2$. First we need to identify EPSG code for the UTM Zone our lat-lon bounding box is in. For reference, we'll use use the `from_latlon` function from the [utm package](https://github.com/Turbo87/utm) to get the UTM Zone code. But we'll generate the EPSG code directly using a simple equation I found, using the latitude and longitude of the center of the bounding box. I found this equation (and related discussions) by Googling and landing on the [GIS StackExchange](https://gis.stackexchange.com): see [here](https://gis.stackexchange.com/questions/190198/how-to-get-appropriate-crs-for-a-position-specified-in-lat-lon-coordinates) and [here](https://gis.stackexchange.com/questions/269518/auto-select-suitable-utm-zone-based-on-grid-intersection)." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((38, 'L'), 32738)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "utmzone_code = utm.from_latlon(bbox_ctr[0], bbox_ctr[1])[-2:]\n", "utmzone_epsg = 32700 - round((45+bbox_ctr[0])/90)*100 + round((183+bbox_ctr[1])/6)\n", "utmzone_code, utmzone_epsg" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "buildings_gdf_utm = buildings_gdf.to_crs(epsg=utmzone_epsg)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "building_area_m2 = buildings_gdf_utm.geometry.area" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print out simple stats, then plot a slightly customized historgram." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.4053317558159584, 132.18867198942908, 78.8650210469506, 2083.277673061675)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "building_area_m2.min(), building_area_m2.mean(), building_area_m2.median(), building_area_m2.max()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bins_seq = [i for i in range(0, 1000, 20)]\n", "buildings_gdf_utm.geometry.area.hist(bins=bins_seq);\n", "plt.xlabel('Building footprint area ($m^2$)');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Extract waterways from OSM on the same bounding box, using OSMnx `graph_from_bbox`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll use `graph_from_bbox` to request the \"network graph\" (*edges* and *nodes*, in graph speak), then convert the graph edges (lines) to a Linestring GeoDataFrame using OSMnx `graph_to_gdfs`. Note the arguments `network_type='none'` and `infrastructure` followed by string that starts with `way`. \"infrastructure\" is a generic label derived maybe too directly from the OSM focus on the built environment (roads, buildings, etc), but it's used in `OSMnx` to request any type of feature. We're using the `Other infrastructure` feature in OSMnx, illustrated at [this osmnx example notebook](https://github.com/gboeing/osmnx-examples/blob/master/notebooks/16-work-with-other-infrastructures.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Navigating and finding OSM tag types
\n", "\n", "OSM [\"represents physical features on the ground (e.g., roads or buildings) using tags attached to its basic data structures (its nodes, ways, and relations)\"](https://wiki.openstreetmap.org/wiki/Map_Features). OSM tags can be messy (if you ask me) and hard to navigate. Go to https://wiki.openstreetmap.org/wiki/Map_Features to navigate the (overlapping) hierarchies of tags. \"Waterways\" are found as multiple tag types; the most useful ones I found are \"Waterway\" and \"Natural\". You can learn more about the variety of waterway tags here:\n", "- https://wiki.openstreetmap.org/wiki/Waterways\n", "- https://wiki.openstreetmap.org/wiki/Map_Features#Waterway\n", "- https://wiki.openstreetmap.org/wiki/Map_Features#Water_related\n", "- https://stackoverflow.com/questions/55033816/plotting-importing-rivers-in-osmnx\n", "\n", "The OSM [Nominatim API](https://nominatim.org) may be of interest, too: \"Nominatim (from the Latin, 'by name') is a tool to search OSM data by name and address and to generate synthetic addresses of OSM points (reverse geocoding).\"\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Read `waterway` ways" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "waterways_g = ox.graph_from_bbox(north=north, south=south, east=east, west=west,\n", " network_type='none', infrastructure='way[\"waterway\"]',\n", " retain_all=True, truncate_by_edge=True, simplify=False)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "926" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "waterways_edges_gdf = ox.graph_to_gdfs(waterways_g, nodes=False)\n", "len(waterways_edges_gdf)" ] }, { "cell_type": "code", "execution_count": 20, "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", "
uvkeyosmidnameonewaylengthgeometry
010193142691019932392087706692PessiniFalse110.747LINESTRING (43.2640864 -11.8010712, 43.2650795...
110199322451019932388087706693NaNFalse47.895LINESTRING (43.2760658 -11.7987359, 43.2756259...
210199322451019932287087706693NaNFalse88.895LINESTRING (43.2760658 -11.7987359, 43.2768705...
310199322501019932358087706692PessiniFalse35.509LINESTRING (43.2742955 -11.8005633, 43.2739737...
410199322501019932309087706692PessiniFalse28.244LINESTRING (43.2742955 -11.8005633, 43.2744243...
\n", "
" ], "text/plain": [ " u v key osmid name oneway length \\\n", "0 1019314269 1019932392 0 87706692 Pessini False 110.747 \n", "1 1019932245 1019932388 0 87706693 NaN False 47.895 \n", "2 1019932245 1019932287 0 87706693 NaN False 88.895 \n", "3 1019932250 1019932358 0 87706692 Pessini False 35.509 \n", "4 1019932250 1019932309 0 87706692 Pessini False 28.244 \n", "\n", " geometry \n", "0 LINESTRING (43.2640864 -11.8010712, 43.2650795... \n", "1 LINESTRING (43.2760658 -11.7987359, 43.2756259... \n", "2 LINESTRING (43.2760658 -11.7987359, 43.2768705... \n", "3 LINESTRING (43.2742955 -11.8005633, 43.2739737... \n", "4 LINESTRING (43.2742955 -11.8005633, 43.2744243... " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "waterways_edges_gdf.head()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "waterways_edges_gdf.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Read `natural:water` ways\n", "The request is identical to the previous one, except for `infrastructure='way[\"natural\"~\"water\"]'`" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "56" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "natwater_g = ox.graph_from_bbox(north=north, south=south, east=east, west=west,\n", " network_type='none', infrastructure='way[\"natural\"~\"water\"]',\n", " retain_all=True, truncate_by_edge=True, simplify=False)\n", "\n", "natwater_edges_gdf = ox.graph_to_gdfs(natwater_g, nodes=False)\n", "len(natwater_edges_gdf)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "natwater_edges_gdf.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. Let's put it all together: All OSM-derived layers on a single plot" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10, 10))\n", "waterways_edges_gdf.plot(ax=ax, linewidth=0.5)\n", "natwater_edges_gdf.plot(ax=ax, edgecolor='blue', linewidth=5)\n", "buildings_gdf.plot(ax=ax, edgecolor='red', linewidth=2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Use Holoviz to generate richer, more interactive plots
\n", "\n", "The next, \"bonus\" notebook provides a teaser of the Holoviz tool kit. After going over it on your own, try to map these OSM datasets using hvplot, Holoviews and the built-in tile sources they facilitate, including OSM map tiles.\n", "\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:vectorenv19]", "language": "python", "name": "conda-env-vectorenv19-py" }, "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }