{"id":297602,"date":"2018-08-20T11:22:40","date_gmt":"2018-08-20T18:22:40","guid":{"rendered":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=297602"},"modified":"2021-08-03T00:40:36","modified_gmt":"2021-08-03T07:40:36","slug":"python-workflows-jupyterlab","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab","title":{"rendered":"Optimize Your Python Workflows Using JupyterLab"},"author":8282,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23341,22941,37511],"tags":[164102,210202,24341,26521,220392],"industry":[],"product":[36841,36601],"class_list":["post-297602","blog","type-blog","status-publish","format-standard","hentry","category-analytics","category-mapping","category-sharing-collaboration","tag-jupyter-notebook","tag-jupyterlab","tag-python","tag-visualization","tag-whats-new-september-2018","product-api-python","product-developers"],"acf":{"short_description":"The ArcGIS API for Python's seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.","flexible_content":[{"acf_fc_layout":"content","content":"<p>You may know that the <a href=\"https:\/\/developers.arcgis.com\/python\/guide\/\">ArcGIS API for Python<\/a> provides simple and efficient tools for performing GIS analysis, visualizing your <a href=\"https:\/\/www.esri.com\/en-us\/arcgis\/products\/spatial-analytics-data-science\/overview\">spatial data<\/a>, and administrating your web GIS\u2014but did you also know that the ArcGIS API for Python integrates smoothly with the larger open-source Python ecosystem? These non-Esri software packages are free to use, and many can provide customization options and new features that enhance your Python development experience. There are many software packages worth exploring\u2014but perhaps the most useful of these software offerings is <a href=\"https:\/\/jupyter.org\/\">Project Jupyter<\/a>.<\/p>\n<p>Jupyter&#8217;s flagship software offering is the Jupyter Notebook. Jupyter Notebooks are web documents that let you\u00a0run Python code in an interactive manner, annotate your code with maps\/charts\/text\/equations, and share your results with others seamlessly. Using Python in Jupyter Notebooks has become the preferred workflow for data scientists and GIS analysts in many use cases: data cleaning and transformation, statistical modeling, data visualization, machine learning, and more.<\/p>\n<p>The ArcGIS API for Python is designed to work extremely well with the Jupyter Notebook format. Historically, this was done by running the <code>jupyter notebook<\/code> command to launch the &#8216;Classic Notebook&#8217; server. While we will continue to support this Classic Notebook experience, v1.5.0 of the Python API also supports the JupyterLab experience. <strong>JupyterLab interacts with the same Jupyter Notebook format<\/strong>, but offers a robust file explorer, a more intuitive user interface, support for interacting with other file types, etc. This makes JupyterLab more of an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Integrated_development_environment\">IDE<\/a> when compared to the Classic Notebook server.<\/p>\n<p>In this blog post, we will walk through some of the benefits of using JupyterLab in your development and data science workflows. The below gif shows what this workflow might look like: data is read in from a local csv file, Python code is run in the Jupyter Notebook that transforms that csv data, and the result is visualized on a map.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":297922,"id":297922,"title":"JupyterLab Workflow","filename":"jlab_workflow.gif","filesize":1934297,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_workflow","alt":"","author":"8282","description":"An example data science workflow in JupyterLab: data is read in from a local csv file, Python code is ran in the Jupyter Notebook that transforms that csv data, and the result is visualized on a map.","caption":"","name":"jlab_workflow","status":"inherit","uploaded_to":297602,"date":"2018-08-13 19:50:10","modified":"2018-08-20 13:08:19","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1611,"height":811,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","thumbnail-width":213,"thumbnail-height":107,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","medium-width":464,"medium-height":234,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","medium_large-width":768,"medium_large-height":387,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","large-width":1611,"large-height":811,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","1536x1536-width":1536,"1536x1536-height":773,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","2048x2048-width":1611,"2048x2048-height":811,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","card_image-width":826,"card_image-height":416,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_workflow.gif","wide_image-width":1611,"wide_image-height":811}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Installation<\/h2>\n<p>To start using the ArcGIS API for Python with JupyterLab, follow these installation steps:<\/p>\n<p>1) Install &gt;=v1.5.0 of the ArcGIS API for Python by following <a href=\"https:\/\/developers.arcgis.com\/python\/guide\/install-and-set-up\/\" target=\"_blank\" rel=\"noopener\">this installation guide<\/a>.<\/p>\n<p>2) Run the following 2 commands:<\/p>\n<p><code><\/code><code>jupyter labextension install @jupyter-widgets\/jupyterlab-manager<\/code><\/p>\n<p><code><\/code><code>jupyter labextension install arcgis-map-ipywidget@1.5.0<\/code><code><\/code><\/p>\n<ul>\n<li>Replace <code>1.5.0<\/code> with the <em>exact<\/em> version number of the Python API you have installed.<\/li>\n<li>Since JupyterLab is built upon JavaScript tools like <a href=\"https:\/\/nodejs.org\/en\/\">NodeJS<\/a> and <a href=\"https:\/\/www.npmjs.com\/\">npm<\/a>, you may need to have these tools installed on your computer to successfully complete this step.<\/li>\n<\/ul>\n<p>3) Now that you have set up the arcgis-map-ipywidget extension, run <code>jupyter lab<\/code> from the command prompt to launch an instance of JupyterLab.<\/p>\n<h1>Getting Started<\/h1>\n<p>If you have never used the ArcGIS API for Python before, read the <a href=\"https:\/\/developers.arcgis.com\/python\/guide\/\">the getting started guide\u00a0<\/a>to see how you can leverage the Python API for GIS visualization and analysis, spatial data management, and GIS system administration.<\/p>\n<p>After running <code>jupyter lab<\/code>, you will notice a file explorer on the left pane of the main view. You can navigate through your filesystem for Jupyter Notebook files (.ipynb), JSON files (.json), CSV files (.csv), etc. You can also create new Jupyter Notebooks.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":297992,"id":297992,"title":"JupyterLab File Explorer","filename":"jlab_file_explorer.gif","filesize":636965,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_file_explorer","alt":"JupyterLab File Explorer","author":"8282","description":"","caption":"","name":"jlab_file_explorer","status":"inherit","uploaded_to":297602,"date":"2018-08-13 20:32:05","modified":"2018-08-13 20:43:03","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":824,"height":412,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","thumbnail-width":213,"thumbnail-height":107,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","medium-width":464,"medium-height":232,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","medium_large-width":768,"medium_large-height":384,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","large-width":824,"large-height":412,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","1536x1536-width":824,"1536x1536-height":412,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","2048x2048-width":824,"2048x2048-height":412,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","card_image-width":824,"card_image-height":412,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_file_explorer.gif","wide_image-width":824,"wide_image-height":412}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>You may noticed that a notebook opened from the file explorer will appear in a new window or a new tab. JupyterLab can manage these windows powerfully: you can place notebooks side by side, resize windows, and organize notebooks by tabs by simply clicking and dragging.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":302922,"id":302922,"title":"JupyterLab Navigate Windows","filename":"jlab_navigate_windows-1.gif","filesize":6877145,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_navigate_windows-2","alt":"","author":"8282","description":"","caption":"","name":"jlab_navigate_windows-2","status":"inherit","uploaded_to":297602,"date":"2018-08-20 13:17:48","modified":"2018-08-20 13:18:50","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1607,"height":848,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","thumbnail-width":213,"thumbnail-height":112,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","medium-width":464,"medium-height":245,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","medium_large-width":768,"medium_large-height":405,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","large-width":1607,"large-height":848,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","1536x1536-width":1536,"1536x1536-height":811,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","2048x2048-width":1607,"2048x2048-height":848,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","card_image-width":826,"card_image-height":436,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_navigate_windows-1.gif","wide_image-width":1607,"wide_image-height":848}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Similar to the windows, JupyterLab allows users to move cells in a notebook by dragging and dropping them. JupyterLab supports dragging cells in the same notebook, as well as dragging cells from one notebook to another notebook. Open <a href=\"https:\/\/developers.arcgis.com\/python\/sample-notebooks\/\" target=\"_blank\" rel=\"noopener\">a sample notebook<\/a> in JupyterLab, click the area to the left of a code cell, and drag it around.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":298092,"id":298092,"title":"JupyterLab Cell Utilities","filename":"jlab_cell_utilities_1.gif","filesize":1046698,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_cell_utilities_1","alt":"","author":"8282","description":"","caption":"","name":"jlab_cell_utilities_1","status":"inherit","uploaded_to":297602,"date":"2018-08-13 21:08:37","modified":"2018-08-20 13:08:42","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1264,"height":784,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","thumbnail-width":213,"thumbnail-height":132,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","medium-width":421,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","medium_large-width":768,"medium_large-height":476,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","large-width":1264,"large-height":784,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","1536x1536-width":1264,"1536x1536-height":784,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","2048x2048-width":1264,"2048x2048-height":784,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","card_image-width":750,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_cell_utilities_1.gif","wide_image-width":1264,"wide_image-height":784}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>JupyterLab offers some additional code cell features, such as<\/p>\n<ul>\n<li>Selecting multiple cells by holding the <em>Shift<\/em> key<\/li>\n<li>The right click context menu for &#8216;Copy Cells&#8217;, &#8216;Cut Cells&#8217;, etc.<\/li>\n<li>The right click context menu for &#8216;Create New View For Output&#8217;. This context menu option will take any cell output and duplicate it in a new window, allowing you to stack it, split it, etc.<\/li>\n<\/ul>\n<h2>Map Widget<\/h2>\n<p>The <a href=\"https:\/\/esri.github.io\/arcgis-python-api\/apidoc\/html\/arcgis.widgets.html#mapview\">MapView<\/a> class allows for visualization of geographic locations, visualizing GIS content, and viewing the results of spatial analysis. To use this map widget, run <code>map = gis.map()<\/code> to create a new MapView instance and assign it to the <code>map<\/code> variable. You can then display the widget in the output cell of a notebook, in a new window by calling <code>map.toggle_window_view()<\/code>, or by pressing the relevant UI button in the widget.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":298512,"id":298512,"title":"JupyterLab Widget","filename":"jlab_widget_1.gif","filesize":4352798,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_widget_1","alt":"","author":"8282","description":"","caption":"","name":"jlab_widget_1","status":"inherit","uploaded_to":297602,"date":"2018-08-13 23:08:25","modified":"2018-08-20 13:08:52","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1606,"height":849,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","thumbnail-width":213,"thumbnail-height":113,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","medium-width":464,"medium-height":245,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","medium_large-width":768,"medium_large-height":406,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","large-width":1606,"large-height":849,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","1536x1536-width":1536,"1536x1536-height":812,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","2048x2048-width":1606,"2048x2048-height":849,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","card_image-width":826,"card_image-height":437,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_widget_1.gif","wide_image-width":1606,"wide_image-height":849}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<div class=\"cell border-box-sizing text_cell rendered\">\n<div class=\"inner_cell\">\n<div class=\"text_cell_render border-box-sizing rendered_html\">\n<p>From here, you can programmatically specify properties of the map widget such as <code>basemap<\/code>, <code>zoom<\/code>, and <code>mode<\/code> . <code>map.mode = '2D'<\/code>\u00a0 will give you a two-dimensional view of the widget, while <code>map.mode = '3D'<\/code> will give you a three-dimensional view. You can add layers via <code>map.add_layer(some_layer)<\/code>, you can draw geometries via <code>map.draw(some_featureset)<\/code>, and more. See <a href=\"https:\/\/esri.github.io\/arcgis-python-api\/apidoc\/html\/arcgis.widgets.html#arcgis.widgets.MapView.toggle_window_view\">the API reference<\/a> or t<a href=\"https:\/\/developers.arcgis.com\/python\/guide\/using-the-map-widget\/\">his guide page<\/a> for more information about these basic map widget use cases, programmatic control of new windows, etc.<\/p>\n<\/div>\n<p>You can also view <code>WebMap<\/code>s and <code>WebScene<\/code>s by <a href=\"https:\/\/developers.arcgis.com\/python\/guide\/working-with-web-maps-and-web-scenes\/\">getting the relevant item<\/a> , creating a new instance of the <code>WebMap<\/code>or <code>WebScenes<\/code> class, and displaying it in the output cell. These output cells can also be brought to new window views like the widget.<\/p>\n<\/div>\n<\/div>\n"},{"acf_fc_layout":"image","image":{"ID":298822,"id":298822,"title":"JupyterLab WebMaps and WebScenes","filename":"jlab_webmap_webscene.gif","filesize":3474795,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\/jlab_webmap_webscene","alt":"","author":"8282","description":"","caption":"","name":"jlab_webmap_webscene","status":"inherit","uploaded_to":297602,"date":"2018-08-14 00:28:16","modified":"2018-08-20 13:09:00","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1663,"height":823,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","thumbnail-width":213,"thumbnail-height":105,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","medium-width":464,"medium-height":230,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","medium_large-width":768,"medium_large-height":380,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","large-width":1663,"large-height":823,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","1536x1536-width":1536,"1536x1536-height":760,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","2048x2048-width":1663,"2048x2048-height":823,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","card_image-width":826,"card_image-height":409,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/jlab_webmap_webscene.gif","wide_image-width":1663,"wide_image-height":823}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1>Conclusion<\/h1>\n<p>Have you liked what you&#8217;ve seen and can&#8217;t wait to do more with ArcGIS API for Python and JupyterLab? View the <a href=\"https:\/\/developers.arcgis.com\/python\/guide\/using-the-jupyter-lab-environment\/\">JupyterLab guide page<\/a> for some sample code snippets or <a href=\"https:\/\/developers.arcgis.com\/python\/sample-notebooks\/\">try one of our sample notebooks<\/a>! As always, please feel free <a href=\"https:\/\/github.com\/Esri\/arcgis-python-api\/issues\/new\">leave us a comment, suggest a feature, or report a bug<\/a> about your experience.<\/p>\n<p>We look forward to seeing what you will create in JupyterLab!<\/p>\n"}],"authors":[{"ID":8282,"user_firstname":"David","user_lastname":"Vitale","nickname":"DavidJVitale","user_nicename":"dvitale","display_name":"David Vitale","user_email":"DVitale@esri.com","user_url":"","user_registered":"2018-08-13 18:23:27","user_description":"David is a Product Engineer on the ArcGIS API for Python team. He is passionate about programming trends, cutting-edge technology, and automation. His goal is to one day automate 100% of his own job\u2014including the writing of this bio.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"}],"related_articles":[{"ID":77391,"post_author":"7101","post_date":"2017-06-13 14:25:42","post_date_gmt":"2017-06-13 14:25:42","post_content":"","post_title":"Three Reasons to use Jupyter Notebooks as a GIS User","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"three-reasons-to-use-jupyter-notebooks-as-a-gis-user","to_ping":"","pinged":"","post_modified":"2024-06-07 10:37:48","post_modified_gmt":"2024-06-07 17:37:48","post_content_filtered":"","post_parent":0,"guid":"http:\/\/www.esri.com\/arcgis-blog\/products\/product\/uncategorized\/three-reasons-to-use-jupyter-notebooks-as-a-gis-user\/","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":267942,"post_author":"5891","post_date":"2018-07-08 10:00:38","post_date_gmt":"2018-07-08 17:00:38","post_content":"","post_title":"The Year of the ArcGIS API for Python","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"a-year-in-the-life","to_ping":"","pinged":"","post_modified":"2018-07-08 10:26:29","post_modified_gmt":"2018-07-08 17:26:29","post_content_filtered":"","post_parent":0,"guid":"http:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=267942","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/banner_826_465-1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/banner_1920_1080-1.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Optimize Your Python Workflows Using JupyterLab<\/title>\n<meta name=\"description\" content=\"The ArcGIS API for Python&#039;s seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimize Your Python Workflows Using JupyterLab\" \/>\n<meta property=\"og:description\" content=\"The ArcGIS API for Python&#039;s seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-03T07:40:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.esri.com\/arcgis-blog\/wp-content\/uploads\/2018\/08\/banner_1920_1080-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\"},\"author\":{\"name\":\"David Vitale\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/854bae6fa2cee293735be3a76328d369\"},\"headline\":\"Optimize Your Python Workflows Using JupyterLab\",\"datePublished\":\"2018-08-20T18:22:40+00:00\",\"dateModified\":\"2021-08-03T07:40:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\"},\"wordCount\":6,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"Jupyter Notebook\",\"JupyterLab\",\"python\",\"Visualization\",\"whats new september 2018\"],\"articleSection\":[\"Analytics\",\"Mapping\",\"Sharing and Collaboration\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\",\"name\":\"Optimize Your Python Workflows Using JupyterLab\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2018-08-20T18:22:40+00:00\",\"dateModified\":\"2021-08-03T07:40:36+00:00\",\"description\":\"The ArcGIS API for Python's seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Optimize Your Python Workflows Using JupyterLab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/854bae6fa2cee293735be3a76328d369\",\"name\":\"David Vitale\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=96&d=blank&r=g\",\"caption\":\"David Vitale\"},\"description\":\"David is a Product Engineer on the ArcGIS API for Python team. He is passionate about programming trends, cutting-edge technology, and automation. His goal is to one day automate 100% of his own job\u2014including the writing of this bio.\",\"sameAs\":[\"https:\/\/x.com\/DavidJVitaleGIS\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/dvitale\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Optimize Your Python Workflows Using JupyterLab","description":"The ArcGIS API for Python's seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab","og_locale":"en_US","og_type":"article","og_title":"Optimize Your Python Workflows Using JupyterLab","og_description":"The ArcGIS API for Python's seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2021-08-03T07:40:36+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.esri.com\/arcgis-blog\/wp-content\/uploads\/2018\/08\/banner_1920_1080-2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab"},"author":{"name":"David Vitale","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/854bae6fa2cee293735be3a76328d369"},"headline":"Optimize Your Python Workflows Using JupyterLab","datePublished":"2018-08-20T18:22:40+00:00","dateModified":"2021-08-03T07:40:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab"},"wordCount":6,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["Jupyter Notebook","JupyterLab","python","Visualization","whats new september 2018"],"articleSection":["Analytics","Mapping","Sharing and Collaboration"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab","name":"Optimize Your Python Workflows Using JupyterLab","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2018-08-20T18:22:40+00:00","dateModified":"2021-08-03T07:40:36+00:00","description":"The ArcGIS API for Python's seamless integration with JupyterLab allows you to work with spatial data in a modern, easy-to-use IDE.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/mapping\/python-workflows-jupyterlab#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Optimize Your Python Workflows Using JupyterLab"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/854bae6fa2cee293735be3a76328d369","name":"David Vitale","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c69702b8543daa2b5b4bf8a1b31576e557b324e63a044927ac1275d26034631?s=96&d=blank&r=g","caption":"David Vitale"},"description":"David is a Product Engineer on the ArcGIS API for Python team. He is passionate about programming trends, cutting-edge technology, and automation. His goal is to one day automate 100% of his own job\u2014including the writing of this bio.","sameAs":["https:\/\/x.com\/DavidJVitaleGIS"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/dvitale"}]}},"text_date":"August 20, 2018","author_name":"David Vitale","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/dvitale","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/banner_1920_1080-1.png","primary_product":"ArcGIS API for Python","tag_data":[{"term_id":164102,"name":"Jupyter Notebook","slug":"jupyter-notebook","term_group":0,"term_taxonomy_id":164102,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":210202,"name":"JupyterLab","slug":"jupyterlab","term_group":0,"term_taxonomy_id":210202,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":24341,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":24341,"taxonomy":"post_tag","description":"","parent":0,"count":171,"filter":"raw"},{"term_id":26521,"name":"Visualization","slug":"visualization","term_group":0,"term_taxonomy_id":26521,"taxonomy":"post_tag","description":"","parent":0,"count":45,"filter":"raw"},{"term_id":220392,"name":"whats new september 2018","slug":"whats-new-september-2018","term_group":0,"term_taxonomy_id":220392,"taxonomy":"post_tag","description":"","parent":0,"count":23,"filter":"raw"}],"category_data":[{"term_id":23341,"name":"Analytics","slug":"analytics","term_group":0,"term_taxonomy_id":23341,"taxonomy":"category","description":"","parent":0,"count":1329,"filter":"raw"},{"term_id":22941,"name":"Mapping","slug":"mapping","term_group":0,"term_taxonomy_id":22941,"taxonomy":"category","description":"","parent":0,"count":2691,"filter":"raw"},{"term_id":37511,"name":"Sharing and Collaboration","slug":"sharing-collaboration","term_group":0,"term_taxonomy_id":37511,"taxonomy":"category","description":"","parent":0,"count":424,"filter":"raw"}],"product_data":[{"term_id":36841,"name":"ArcGIS API for Python","slug":"api-python","term_group":0,"term_taxonomy_id":36841,"taxonomy":"product","description":"","parent":36601,"count":151,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":763,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=api-python","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/297602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/8282"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=297602"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/297602\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=297602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=297602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=297602"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=297602"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=297602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}