From 8b6cbae6b9a9e738589f99cb9635f6f7c6a1ee3e Mon Sep 17 00:00:00 2001 From: NANAE AUBRY Date: Thu, 15 Aug 2024 17:59:52 +0200 Subject: [PATCH 1/4] fix part 1 guide --- .../part1_introduction_to_dataengineering.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb b/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb index 681181ee81..27717eb582 100644 --- a/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb +++ b/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{"slideshow":{"slide_type":"slide"}},"source":["# Part 1 - Introduction to Data Engineering"]},{"cell_type":"markdown","metadata":{"toc":true},"source":["

Table of Contents

\n","
"]},{"cell_type":"markdown","metadata":{},"source":["## Introduction"]},{"cell_type":"markdown","metadata":{},"source":["We live in the digital era of smart devices, Internet of things (IoT), and Mobile solutions, where data has become an essential aspect of any enterprise. It is now crucial to gather, process, and analyze large volumes of data as quickly and accurately as possible.\n","\n","\n","Python has become one of the most popular programming languages for data science, machine learning, and general software development in academia and industry. It boasts a relatively low learning curve, due to its simplicity, and a large ecosystem of data-oriented libraries that can speed up and simplify numerous tasks.\n","\n","\n","When you are getting started, the vastness of Python may seem overwhelming, but it is not as complex as it seems. Python has also developed a large and active data analysis and scientific computing community, making it one of the most popular choices for data science. Using Python within ArcGIS enables you to easily work with open-source python libraries as well as with ArcGIS Python libraries."]},{"cell_type":"markdown","metadata":{},"source":[""]},{"cell_type":"markdown","metadata":{},"source":["The image above shows some of the popular libraries in the Python ecosystem. This is by no means a full list, as the Python ecosystem is continuously evolving with numerous other libraries. Let's look at some of the popular libraries in the scientific Python ecosystem."]},{"cell_type":"markdown","metadata":{},"source":["## Libraries in Scientific Python Ecosystem"]},{"cell_type":"markdown","metadata":{},"source":["Data engineering is one of the most critical and foundational skills in any data scientist’s toolkit. A data scientist needs to get the data, clean and process it, visualize the results, and then model the data to analyze and interpret trends or patterns for making critical business decisions. The availability of various multi-purpose, ready-to-use libraries to perform these tasks makes Python a top choice for analysts, researchers, and scientists alike."]},{"cell_type":"markdown","metadata":{},"source":["### Data Processing\n","\n","Data Processing is a process of cleaning and transforming data. It enables users to explore and discover useful information for decision-making. Some of the key Python libraries used for Data Processing are:"]},{"cell_type":"markdown","metadata":{},"source":["\n","1. __[NumPy](https://numpy.org/)__, short for Numerical Python, has been designed specifically for mathematical operations. It is a perfect tool for scientific computing and performing basic and advanced array operations. It primarily supports multi-dimensional arrays and vectors for complex arithmetic operations. In addition to the data structures, the library has a rich set of functions to perform algebraic operations on the supported data types. NumPy arrays form the core of nearly the entire ecosystem of data science tools in Python and are more efficient for storing and manipulating data than the other built-in Python data structures. NumPy’s high level syntax makes it accessible and productive for programmers from any background or experience level.\n","\n","2. __[SciPy](https://scipy.org/)__ the Scientific Python library is a collection of numerical algorithms and domain-specific toolboxes. SciPy extends capabilities of NumPy by offering advanced modules for linear algebra, integration, optimization, and statistics. Together NumPy and SciPy form a reasonably complete and mature computational foundation for many scientific computing applications.\n","\n","3. __[Pandas](https://pandas.pydata.org/)__ provides high-level data structures and functions designed to make working with structured or tabular data fast, easy, and expressive. Pandas blends the high-performance, array-computing ideas of NumPy with the flexible data manipulation capabilities of relational databases (such as SQL). It is based on two main data structures: \"Series\" (one-dimensional such as a list of items) and \"DataFrames\" (two-dimensional, such as a table). Pandas provides sophisticated indexing functionality to reshape, slice and dice, perform aggregations, and select subsets of data. It provides capabilities for easily handling missing data, adding/deleting columns, imputing missing data, and creating plots on the go. Pandas is a must-have tool for data wrangling and manipulation."]},{"cell_type":"markdown","metadata":{},"source":["### Data Visualization\n","\n","An essential function of data analysis and exploration is to visualize data. Visualization makes it easier for the human brain to detect patterns, trends, and outliers in the data. Some of the key Python libraries used for Data Visualization are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Matplotlib](https://matplotlib.org/)__ is the most popular Python library for producing plots and other two-dimensional data visualizations. It can be used to generate various types of graphs such as histograms, pie-charts, or a simple bar chart. Matplotlib is highly flexible, offering the ability to customize almost every available feature. It provides an object oriented, MATLAB-like interface for users, and as such, has generally good integration with the rest of the ecosystem.\n","\n","2. __[Seaborn](http://seaborn.pydata.org/)__ is based on Matplotlib and serves as a useful tool for making attractive and informative statistical graphics in Python. It can be used for visualizing statistical models, summarizing data, and depicting the overall distributions. Seaborn works with the dataset as a whole and is much more intuitive than Matplotlib. It automates the creation of various plot types and creates beautiful graphics. Simply importing seaborn improves the visual aesthetics of Matplotlib plots.\n","\n","3. __[Bokeh](https://bokeh.org/)__ is a great tool for creating interactive and scalable visualizations inside browsers using JavaScript widgets. It is an advanced library that is fully independent of Matplotlib. Bokeh's emphasis on widgets allows users to represent the data in various formats such as graphs, plots, and labels. It empowers the user to generate elegant and concise graphics in the style of D3.js. Bokeh has the capability of high-performance interactivity over very large datasets."]},{"cell_type":"markdown","metadata":{},"source":["### Data Modeling\n","The process of modeling involves training a machine learning algorithm. The output from modeling is a trained model that can be used for inference and for making predictions. Some of the key Python libraries used for Data Modeling are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Scikit-Learn](https://scikit-learn.org/stable/)__ has become the industry standard and is a premier general-purpose machine learning toolkit for Python programmers. Built on NumPy, SciPy and matplotlib, it features algorithms for various machine learning, statistical modeling and data mining tasks. Scikit-Learn contains submodules for tasks such as preprocessing, classification, regression, model selection, dimensionality reduction as well as clustering. The library comes with sample datasets for users to experiment.\n","\n","2. __[StatsModels](https://www.statsmodels.org/stable/)__ is a statistical analysis package that contains algorithms for classical statistics and econometrics. It provides a complement to scipy for statistical computations and is more focused on providing statistical inference, uncertainty estimates and p-values for parameters. StatsModels features submodules for various tasks such as Regression Analysis, Analysis of Variance (ANOVA), Time Series Analysis, Non-parametric methods and Visualization of model results."]},{"cell_type":"markdown","metadata":{},"source":["In this guide series, we will focus on two key libraries in the scientific Python ecosystem that are used for data processing, __NumPy__ and __Pandas__. Before we go into the details of these two topics, we will briefly discuss `Spatially Enabled DataFrame`."]},{"cell_type":"markdown","metadata":{},"source":["## Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["### What is a DataFrame?"]},{"cell_type":"markdown","metadata":{},"source":["A [`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html) represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or SQL table where each column has a column name for reference, and each row can be accessed by using row numbers. Column names and row numbers are known as column and row indexes.\n","\n","DataFrame is a fundamental __Pandas__ data structure in which each column can be of a different value type (numeric, string, boolean, etc.). A data set can be first read into a DataFrame, and then various operations (i.e. indexing, grouping, aggregation etc.) can be easily applied to it.\n","\n","Given some data, let's look at how a dataset can be read into a DataFrame to see what a DataFrame looks like."]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["# Data Creation\n","data = {'state':['CA','WA','CA','WA','CA','WA'],\n"," 'year':[2015,2015,2016,2016,2017,2017],\n"," 'population':[3.5,2.5,4.5,3.0,5.0,3.25]}"]},{"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","
stateyearpopulation
0CA20153.50
1WA20152.50
2CA20164.50
3WA20163.00
4CA20175.00
5WA20173.25
\n","
"],"text/plain":[" state year population\n","0 CA 2015 3.50\n","1 WA 2015 2.50\n","2 CA 2016 4.50\n","3 WA 2016 3.00\n","4 CA 2017 5.00\n","5 WA 2017 3.25"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["# Read data into a dataframe\n","import pandas as pd\n","\n","df = pd.DataFrame(data)\n","df"]},{"cell_type":"markdown","metadata":{},"source":["> You can see the tabular structure of data with indexed rows and columns. We will dive deeper into DataFrame in the `Introduction to Pandas` part of the guide series."]},{"cell_type":"markdown","metadata":{},"source":["### What is a Spatially Enabled DataFrame (SEDF)?"]},{"cell_type":"markdown","metadata":{},"source":["The [`Spatially Enabled DataFrame`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#spatialdataframe) (SEDF) inserts _\"spatial abilities\"_ into the popular [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html). This allows users to use intuitive Pandas operations on both the attribute and spatial columns. With SEDF, you can easily manipulate geometric and attribute data. SEDF is a capability that is added to the Pandas DataFrame structure, by the ArcGIS API for Python, to give it spatial abilities. \n","\n","SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values, which are fundamental to statistical and geographic manipulations.\n","\n","Let's quickly look at how data can be imported and exported using __Spatially Enabled DataFrame__. The details shown below are a high level overview and we will take a deeper dive into working with Spatially Enabled DataFrame in the later parts of this guide series."]},{"cell_type":"markdown","metadata":{},"source":["#### Reading Data into Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) can read data from many sources, including:\n","- [Shapefiles](https://doc.arcgis.com/en/arcgis-online/reference/shapefiles.htm)\n","- [Pandas DataFrames](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)\n","- [Feature classes](https://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [GeoJSON](https://geojson.org/)\n","- [Feature Layer](https://doc.arcgis.com/en/arcgis-online/manage-data/hosted-web-layers.htm)\n","\n","SEDF integrates with Esri's [`ArcPy` site-package](https://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as with the open source [pyshp](https://github.com/GeospatialPython/pyshp/), [shapely](https://github.com/Toblerity/Shapely) and [fiona](https://github.com/Toblerity/Fiona) packages. This means that SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. "]},{"cell_type":"markdown","metadata":{},"source":["#### Exporting Data from Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["The SEDF can export data to various data formats for use in other applications. Export options are:\n","\n","- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n","- [Feature Collections](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n","- [Feature Set](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featureset)\n","- [GeoJSON](http://geojson.org/)\n","- [Feature Class](http://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n","- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)"]},{"cell_type":"markdown","metadata":{},"source":["## Quick Example"]},{"cell_type":"markdown","metadata":{},"source":["Let's look at an example of utilizing `Spatially Enabled DataFrame` (SEDF) through the machine learning lifecycle. We will __focus on the usage of SEDF__ through the process and not so much on the intepretation or results of the model. The example shows how to:\n","- Read data from Pandas DataFrame into a SEDF.\n","- Use SEDF with other libraries in python ecosystem for modeling and predictions.\n","- Merge modeled results back into SEDF.\n","- Export data from a SEDF."]},{"cell_type":"markdown","metadata":{},"source":["We will use a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) from Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) to illustrate this example. __Note__ that the dataset used in this example has been curated for illustration purposes and does not reflect the complete dataset available at [CMS](https://www.cms.gov/) website.\n","\n","__Goal:__ Predict \"Total Number of Occupied Beds\" using other variables in the data. \n","\n","\n","\n","In this example, we will:\n","1. Read the data (with location attributes) into a SEDF and plot SEDF on a map.\n","2. Split SEDF into train and test sets.\n","3. Build a linear regression model on training data.\n","4. Get Predictions for the model using test data.\n","5. Add Predictions back to SEDF.\n","6. Plot SEDF with predicted data on a map.\n","7. Export SEDF."]},{"cell_type":"markdown","metadata":{},"source":["### Read the Data"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":["# Import Libraries\n","from IPython.display import display\n","\n","import pandas as pd\n","from arcgis.gis import GIS\n","import geopandas"]},{"cell_type":"code","execution_count":30,"metadata":{},"outputs":[],"source":["# Create a GIS Connection\n","gis = GIS(profile='your_online_profile')"]},{"cell_type":"code","execution_count":7,"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 "]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["# Read the data\n","df = pd.read_csv('../data/sample_cms_data.csv')\n","\n","# Return the first 5 records\n","df.head()"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 17 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Weekly Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total Admissions COVID-19 124 non-null int64 \n"," 5 Residents Weekly Confirmed COVID-19 124 non-null int64 \n"," 6 Residents Total Confirmed COVID-19 124 non-null int64 \n"," 7 Residents Weekly Suspected COVID-19 124 non-null int64 \n"," 8 Residents Total Suspected COVID-19 124 non-null int64 \n"," 9 Residents Weekly All Deaths 124 non-null int64 \n"," 10 Residents Total All Deaths 124 non-null int64 \n"," 11 Residents Weekly COVID-19 Deaths 124 non-null int64 \n"," 12 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 13 Number of All Beds 124 non-null int64 \n"," 14 Total Number of Occupied Beds 124 non-null int64 \n"," 15 LONGITUDE 124 non-null float64\n"," 16 LATITUDE 124 non-null float64\n","dtypes: float64(2), int64(12), object(3)\n","memory usage: 16.6+ KB\n"]}],"source":["# Get concise summary of the dataframe\n","df.info()"]},{"cell_type":"markdown","metadata":{},"source":["The dataset contains 124 records and 17 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n","- Name of the nursing home, its city and its state\n","- Details of resident Covid cases, deaths and number of beds\n","- Location of nursing home as Latitude and Longitude"]},{"cell_type":"markdown","metadata":{},"source":["#### Read into Spatially Enabled Dataframe\n","\n","Any Pandas DataFrame with location information (Latitude and Longitude) can be read into a Spatially Enabled DataFrame using the `from_xy()` method. "]},{"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 \n","\n"," SHAPE \n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n","3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["sedf = pd.DataFrame.spatial.from_xy(df,'LONGITUDE','LATITUDE')\n","sedf.head()"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) adds spatial abilities to the data. A `SHAPE` column gets added to the dataset as it is read into a SEDF. We can now plot this DataFrame on a map."]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["m1 = gis.map('IL, USA', 6)\n","m1"]},{"cell_type":"markdown","metadata":{},"source":["> Points displayed on the map show the location of each nursing home in our data. Clicking on a point displays attribute information for that nursing home."]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["sedf.spatial.plot(m1)"]},{"cell_type":"markdown","metadata":{},"source":["### Split the Data\n","\n","We will split the `Spatially Enabled DataFrame` into training and test datasets and separate out the predictor and response variables in training and test data."]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[],"source":["# Split data into Train and Test Sets\n","from sklearn.model_selection import train_test_split\n","train_data, test_data = train_test_split(sedf, test_size=0.2, random_state=101)"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Shape of training data: (99, 18)\n","Shape of testing data: (25, 18)\n"]}],"source":["# Look at shape of training and test datasets\n","print(f'Shape of training data: {train_data.shape}')\n","print(f'Shape of testing data: {test_data.shape}')"]},{"cell_type":"markdown","metadata":{},"source":["__Response Variable__ \n","Any regression prediction task requires a variable of interest, a variable we would like to predict. This variable is called as a `Response` variable, also referred to as __y__ variable or __Dependent__ variable. Our __goal__ is to predict \"Total Number of Occupied Beds\", so our __y__ variable will be \"Total Number of Occupied Beds\". \n","\n","__Predictor Variables__ \n","All other variables the affect the Response variable are called `Predictor` variables. These predictor variables are also known as __x__ variables or __Independent__ variables. In this example, we will use only numerical variables related to Covid cases, deaths and number of beds as __x__ variables, and we will ignore provder details such as name, city, state or location information. \n","\n","Here, we use __Indexing__ to select specific columns from the DataFrame. We will talk about __Indexing__ in more detail in the later sections of this guide series."]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[],"source":["# Separate predictors and response variables for train and test data\n","train_x = train_data.iloc[:,3:-4]\n","train_y = train_data.iloc[:,-4]\n","test_x = test_data.iloc[:,3:-4]\n","test_y = test_data.iloc[:,-4]"]},{"cell_type":"markdown","metadata":{},"source":["### Build the Model\n","We will build and fit a Linear Regression model using the `LinearRegression()` method from the Scikit-learn library. Our goal is to predict the total number of occupied beds."]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[],"source":["# Build the model\n","from sklearn import linear_model\n","\n","# Create linear regression object\n","lr_model = linear_model.LinearRegression()"]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[{"data":{"text/plain":["LinearRegression()"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["# Train the model using the training sets\n","lr_model.fit(train_x, train_y)"]},{"cell_type":"markdown","metadata":{},"source":["### Get Predictions\n","We will now use the model to make predictions on our test data."]},{"cell_type":"code","execution_count":18,"metadata":{},"outputs":[{"data":{"text/plain":["array([ 70.18799777, 79.35734213, 40.52267526, 112.32693137,\n"," 74.56730982, 92.59096106, 70.69189401, 29.84238321,\n"," 108.09537913, 81.10718742, 59.90388811, 67.44325594,\n"," 70.62977058, 96.44880679, 85.19537597, 39.10578923,\n"," 63.88519971, 76.36549693, 38.94543793, 41.96507956,\n"," 50.41997091, 66.00665849, 33.30750881, 75.17989671,\n"," 63.09585712])"]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["# Get predictions\n","bed_predictions = lr_model.predict(test_x)\n","bed_predictions"]},{"cell_type":"markdown","metadata":{},"source":["#### Add Predictions to Test Data\n","\n","Here, we add predictions back to the test data as a new column, `Predicted_Occupied_Beds`. Since the test dataset is a __Spatially Enabled DataFrame__, it continues to provide spatial abilities to our data."]},{"cell_type":"code","execution_count":19,"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","
Predicted_Occupied_Beds
7470.187998
12379.357342
7840.522675
41112.326931
7974.567310
\n","
"],"text/plain":[" Predicted_Occupied_Beds\n","74 70.187998\n","123 79.357342\n","78 40.522675\n","41 112.326931\n","79 74.567310"]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["# Convert predictions into a dataframe\n","pred_available_beds = pd.DataFrame(bed_predictions, index = test_data.index, \n"," columns=['Predicted_Occupied_Beds'])\n","pred_available_beds.head()"]},{"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"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEPredicted_Occupied_Beds
74GOLDEN YEARS HOMESTEADFORT WAYNEIN0500000000110104-85.03665141.107479{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....70.187998
123WATERS OF DILLSBORO-ROSS MANOR, THEDILLSBOROIN040000070012375-85.05664939.018794{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....79.357342
78TOWNE HOUSE RETIREMENT COMMUNITYFORT WAYNEIN00111101005846-85.11195241.133477{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....40.522675
41UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITYINDIANAPOLISIN0000000800174133-86.13544239.635530{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....112.326931
79SHARON HEALTH CARE PINESPEORIAIL000000010011696-89.64362940.731764{\"spatialReference\": {\"wkid\": 4326}, \"x\": -89....74.567310
\n","
"],"text/plain":[" Provider Name Provider City \\\n","74 GOLDEN YEARS HOMESTEAD FORT WAYNE \n","123 WATERS OF DILLSBORO-ROSS MANOR, THE DILLSBORO \n","78 TOWNE HOUSE RETIREMENT COMMUNITY FORT WAYNE \n","41 UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITY INDIANAPOLIS \n","79 SHARON HEALTH CARE PINES PEORIA \n","\n"," Provider State Residents Weekly Admissions COVID-19 \\\n","74 IN 0 \n","123 IN 0 \n","78 IN 0 \n","41 IN 0 \n","79 IL 0 \n","\n"," Residents Total Admissions COVID-19 Residents Weekly Confirmed COVID-19 \\\n","74 5 0 \n","123 4 0 \n","78 0 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Confirmed COVID-19 Residents Weekly Suspected COVID-19 \\\n","74 0 0 \n","123 0 0 \n","78 1 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Suspected COVID-19 Residents Weekly All Deaths \\\n","74 0 0 \n","123 0 0 \n","78 1 0 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total All Deaths Residents Weekly COVID-19 Deaths \\\n","74 0 0 \n","123 7 0 \n","78 1 0 \n","41 8 0 \n","79 1 0 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","74 0 110 \n","123 0 123 \n","78 0 58 \n","41 0 174 \n","79 0 116 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","74 104 -85.036651 41.107479 \n","123 75 -85.056649 39.018794 \n","78 46 -85.111952 41.133477 \n","41 133 -86.135442 39.635530 \n","79 96 -89.643629 40.731764 \n","\n"," SHAPE \\\n","74 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","123 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","78 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","41 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","79 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -89.... \n","\n"," Predicted_Occupied_Beds \n","74 70.187998 \n","123 79.357342 \n","78 40.522675 \n","41 112.326931 \n","79 74.567310 "]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["# Add predictions back to test dataset\n","test_data = pd.concat([test_data, pred_available_beds], axis=1)\n","test_data.head()"]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map\n","\n","Here, we plot `test_data` on a map. The map shows the location of each nursing home in the test dataset, along with the attribute information. We can see model prediction results added as `Predicted_Occupied_Beds` column, along with the actual number of occupied beds, `Total_Number_of_Occupied_Beds` , in the test data."]},{"cell_type":"code","execution_count":23,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["m2 = gis.map('IL, USA', 6)\n","m2"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"source":["test_data.spatial.plot(m2)"]},{"cell_type":"markdown","metadata":{},"source":["### Export Data\n","\n","We will now export the Spatially Enabled DataFrame `test_data` to a feature layer. The `to_featurelayer()` method allows us to publish spatially enabled DataFrame as feature layers to the portal."]},{"cell_type":"code","execution_count":31,"metadata":{},"outputs":[{"data":{"text/html":["
\n","
\n"," \n"," \n"," \n","
\n","\n","
\n"," sedf_predictions\n"," \n","
Feature Layer Collection by arcgis_python\n","
Last Modified: November 25, 2020\n","
0 comments, 0 views\n","
\n","
\n"," "],"text/plain":[""]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["lyr = test_data.spatial.to_featurelayer('sedf_predictions')\n","lyr"]},{"cell_type":"markdown","metadata":{},"source":["## Conclusion"]},{"cell_type":"markdown","metadata":{},"source":["There are numerous libraries in the scientific python ecosystem. In this part of the guide series, we briefly discussed some of the key libraries used for data processing, visualization, and modeling. We introduced the concept of the __Spatially Enabled DataFrame__ (SEDF) and how it adds \"spatial\" abilities to the data. You have also seen an end-to-end example of using SEDF through the machine learning lifecycle, starting from reading data into SEDF, to exporting a SEDF.\n","\n","\n","In the next part of this guide series, you will learn more about [NumPy](https://numpy.org/) in the Introduction to NumPy section.."]},{"cell_type":"markdown","metadata":{},"source":["## References"]},{"cell_type":"markdown","metadata":{},"source":["[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython (2nd. ed.). O'Reilly Media, Inc. \n"," \n","[2] Jake VanderPlas. 2016. Python Data Science Handbook: Essential Tools for Working with Data (1st. ed.). O'Reilly Media, Inc."]}],"metadata":{"anaconda-cloud":{},"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.3"},"livereveal":{"scroll":true},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":true,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"calc(100% - 180px)","left":"10px","top":"150px","width":"244px"},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":2} +{"cells":[{"cell_type":"markdown","metadata":{"slideshow":{"slide_type":"slide"}},"source":["# Part 1 - Introduction to Data Engineering"]},{"cell_type":"markdown","metadata":{"toc":true},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","metadata":{},"source":["## Introduction"]},{"cell_type":"markdown","metadata":{},"source":["We live in the digital era of smart devices, Internet of things (IoT), and Mobile solutions, where data has become an essential aspect of any enterprise. It is now crucial to gather, process, and analyze large volumes of data as quickly and accurately as possible.\n","\n","\n","Python has become one of the most popular programming languages for data science, machine learning, and general software development in academia and industry. It boasts a relatively low learning curve, due to its simplicity, and a large ecosystem of data-oriented libraries that can speed up and simplify numerous tasks.\n","\n","\n","When you are getting started, the vastness of Python may seem overwhelming, but it is not as complex as it seems. Python has also developed a large and active data analysis and scientific computing community, making it one of the most popular choices for data science. Using Python within ArcGIS enables you to easily work with open-source python libraries as well as with ArcGIS Python libraries."]},{"cell_type":"markdown","metadata":{},"source":[""]},{"cell_type":"markdown","metadata":{},"source":["The image above shows some of the popular libraries in the Python ecosystem. This is by no means a full list, as the Python ecosystem is continuously evolving with numerous other libraries. Let's look at some of the popular libraries in the scientific Python ecosystem."]},{"cell_type":"markdown","metadata":{},"source":["## Libraries in Scientific Python Ecosystem"]},{"cell_type":"markdown","metadata":{},"source":["Data engineering is one of the most critical and foundational skills in any data scientist’s toolkit. A data scientist needs to get the data, clean and process it, visualize the results, and then model the data to analyze and interpret trends or patterns for making critical business decisions. The availability of various multi-purpose, ready-to-use libraries to perform these tasks makes Python a top choice for analysts, researchers, and scientists alike."]},{"cell_type":"markdown","metadata":{},"source":["### Data Processing\n","\n","Data Processing is a process of cleaning and transforming data. It enables users to explore and discover useful information for decision-making. Some of the key Python libraries used for Data Processing are:"]},{"cell_type":"markdown","metadata":{},"source":["\n","1. __[NumPy](https://numpy.org/)__, short for Numerical Python, has been designed specifically for mathematical operations. It is a perfect tool for scientific computing and performing basic and advanced array operations. It primarily supports multi-dimensional arrays and vectors for complex arithmetic operations. In addition to the data structures, the library has a rich set of functions to perform algebraic operations on the supported data types. NumPy arrays form the core of nearly the entire ecosystem of data science tools in Python and are more efficient for storing and manipulating data than the other built-in Python data structures. NumPy’s high level syntax makes it accessible and productive for programmers from any background or experience level.\n","\n","2. __[SciPy](https://scipy.org/)__ the Scientific Python library is a collection of numerical algorithms and domain-specific toolboxes. SciPy extends capabilities of NumPy by offering advanced modules for linear algebra, integration, optimization, and statistics. Together NumPy and SciPy form a reasonably complete and mature computational foundation for many scientific computing applications.\n","\n","3. __[Pandas](https://pandas.pydata.org/)__ provides high-level data structures and functions designed to make working with structured or tabular data fast, easy, and expressive. Pandas blends the high-performance, array-computing ideas of NumPy with the flexible data manipulation capabilities of relational databases (such as SQL). It is based on two main data structures: \"Series\" (one-dimensional such as a list of items) and \"DataFrames\" (two-dimensional, such as a table). Pandas provides sophisticated indexing functionality to reshape, slice and dice, perform aggregations, and select subsets of data. It provides capabilities for easily handling missing data, adding/deleting columns, imputing missing data, and creating plots on the go. Pandas is a must-have tool for data wrangling and manipulation."]},{"cell_type":"markdown","metadata":{},"source":["### Data Visualization\n","\n","An essential function of data analysis and exploration is to visualize data. Visualization makes it easier for the human brain to detect patterns, trends, and outliers in the data. Some of the key Python libraries used for Data Visualization are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Matplotlib](https://matplotlib.org/)__ is the most popular Python library for producing plots and other two-dimensional data visualizations. It can be used to generate various types of graphs such as histograms, pie-charts, or a simple bar chart. Matplotlib is highly flexible, offering the ability to customize almost every available feature. It provides an object oriented, MATLAB-like interface for users, and as such, has generally good integration with the rest of the ecosystem.\n","\n","2. __[Seaborn](http://seaborn.pydata.org/)__ is based on Matplotlib and serves as a useful tool for making attractive and informative statistical graphics in Python. It can be used for visualizing statistical models, summarizing data, and depicting the overall distributions. Seaborn works with the dataset as a whole and is much more intuitive than Matplotlib. It automates the creation of various plot types and creates beautiful graphics. Simply importing seaborn improves the visual aesthetics of Matplotlib plots.\n","\n","3. __[Bokeh](https://bokeh.org/)__ is a great tool for creating interactive and scalable visualizations inside browsers using JavaScript widgets. It is an advanced library that is fully independent of Matplotlib. Bokeh's emphasis on widgets allows users to represent the data in various formats such as graphs, plots, and labels. It empowers the user to generate elegant and concise graphics in the style of D3.js. Bokeh has the capability of high-performance interactivity over very large datasets."]},{"cell_type":"markdown","metadata":{},"source":["### Data Modeling\n","The process of modeling involves training a machine learning algorithm. The output from modeling is a trained model that can be used for inference and for making predictions. Some of the key Python libraries used for Data Modeling are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Scikit-Learn](https://scikit-learn.org/stable/)__ has become the industry standard and is a premier general-purpose machine learning toolkit for Python programmers. Built on NumPy, SciPy and matplotlib, it features algorithms for various machine learning, statistical modeling and data mining tasks. Scikit-Learn contains submodules for tasks such as preprocessing, classification, regression, model selection, dimensionality reduction as well as clustering. The library comes with sample datasets for users to experiment.\n","\n","2. __[StatsModels](https://www.statsmodels.org/stable/)__ is a statistical analysis package that contains algorithms for classical statistics and econometrics. It provides a complement to scipy for statistical computations and is more focused on providing statistical inference, uncertainty estimates and p-values for parameters. StatsModels features submodules for various tasks such as Regression Analysis, Analysis of Variance (ANOVA), Time Series Analysis, Non-parametric methods and Visualization of model results."]},{"cell_type":"markdown","metadata":{},"source":["In this guide series, we will focus on two key libraries in the scientific Python ecosystem that are used for data processing, __NumPy__ and __Pandas__. Before we go into the details of these two topics, we will briefly discuss `Spatially Enabled DataFrame`."]},{"cell_type":"markdown","metadata":{},"source":["## Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["### What is a DataFrame?"]},{"cell_type":"markdown","metadata":{},"source":["A [`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html) represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or SQL table where each column has a column name for reference, and each row can be accessed by using row numbers. Column names and row numbers are known as column and row indexes.\n","\n","DataFrame is a fundamental __Pandas__ data structure in which each column can be of a different value type (numeric, string, boolean, etc.). A data set can be first read into a DataFrame, and then various operations (i.e. indexing, grouping, aggregation etc.) can be easily applied to it.\n","\n","Given some data, let's look at how a dataset can be read into a DataFrame to see what a DataFrame looks like."]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["# Data Creation\n","data = {'state':['CA','WA','CA','WA','CA','WA'],\n"," 'year':[2015,2015,2016,2016,2017,2017],\n"," 'population':[3.5,2.5,4.5,3.0,5.0,3.25]}"]},{"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","
stateyearpopulation
0CA20153.50
1WA20152.50
2CA20164.50
3WA20163.00
4CA20175.00
5WA20173.25
\n","
"],"text/plain":[" state year population\n","0 CA 2015 3.50\n","1 WA 2015 2.50\n","2 CA 2016 4.50\n","3 WA 2016 3.00\n","4 CA 2017 5.00\n","5 WA 2017 3.25"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["# Read data into a dataframe\n","import pandas as pd\n","\n","df = pd.DataFrame(data)\n","df"]},{"cell_type":"markdown","metadata":{},"source":["> You can see the tabular structure of data with indexed rows and columns. We will dive deeper into DataFrame in the `Introduction to Pandas` part of the guide series."]},{"cell_type":"markdown","metadata":{},"source":["### What is a Spatially Enabled DataFrame (SEDF)?"]},{"cell_type":"markdown","metadata":{},"source":["The [`Spatially Enabled DataFrame`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#spatialdataframe) (SEDF) inserts _\"spatial abilities\"_ into the popular [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html). This allows users to use intuitive Pandas operations on both the attribute and spatial columns. With SEDF, you can easily manipulate geometric and attribute data. SEDF is a capability that is added to the Pandas DataFrame structure, by the ArcGIS API for Python, to give it spatial abilities. \n","\n","SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values, which are fundamental to statistical and geographic manipulations.\n","\n","Let's quickly look at how data can be imported and exported using __Spatially Enabled DataFrame__. The details shown below are a high level overview and we will take a deeper dive into working with Spatially Enabled DataFrame in the later parts of this guide series."]},{"cell_type":"markdown","metadata":{},"source":["#### Reading Data into Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) can read data from many sources, including:\n","- [Shapefiles](https://doc.arcgis.com/en/arcgis-online/reference/shapefiles.htm)\n","- [Pandas DataFrames](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)\n","- [Feature classes](https://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [GeoJSON](https://geojson.org/)\n","- [Feature Layer](https://doc.arcgis.com/en/arcgis-online/manage-data/hosted-web-layers.htm)\n","\n","SEDF integrates with Esri's [`ArcPy` site-package](https://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as with the open source [pyshp](https://github.com/GeospatialPython/pyshp/), [shapely](https://github.com/Toblerity/Shapely) and [fiona](https://github.com/Toblerity/Fiona) packages. This means that SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. "]},{"cell_type":"markdown","metadata":{},"source":["#### Exporting Data from Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["The SEDF can export data to various data formats for use in other applications. Export options are:\n","\n","- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n","- [Feature Collections](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n","- [Feature Set](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featureset)\n","- [GeoJSON](http://geojson.org/)\n","- [Feature Class](http://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n","- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)"]},{"cell_type":"markdown","metadata":{},"source":["## Quick Example"]},{"cell_type":"markdown","metadata":{},"source":["Let's look at an example of utilizing `Spatially Enabled DataFrame` (SEDF) through the machine learning lifecycle. We will __focus on the usage of SEDF__ through the process and not so much on the intepretation or results of the model. The example shows how to:\n","- Read data from Pandas DataFrame into a SEDF.\n","- Use SEDF with other libraries in python ecosystem for modeling and predictions.\n","- Merge modeled results back into SEDF.\n","- Export data from a SEDF."]},{"cell_type":"markdown","metadata":{},"source":["We will use a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) from Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) to illustrate this example. __Note__ that the dataset used in this example has been curated for illustration purposes and does not reflect the complete dataset available at [CMS](https://www.cms.gov/) website.\n","\n","__Goal:__ Predict \"Total Number of Occupied Beds\" using other variables in the data. \n","\n","\n","\n","In this example, we will:\n","1. Read the data (with location attributes) into a SEDF and plot SEDF on a map.\n","2. Split SEDF into train and test sets.\n","3. Build a linear regression model on training data.\n","4. Get Predictions for the model using test data.\n","5. Add Predictions back to SEDF.\n","6. Plot SEDF with predicted data on a map.\n","7. Export SEDF."]},{"cell_type":"markdown","metadata":{},"source":["### Read the Data"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":["# Import Libraries\n","from IPython.display import display\n","\n","import pandas as pd\n","from arcgis.gis import GIS\n","import geopandas"]},{"cell_type":"code","execution_count":30,"metadata":{},"outputs":[],"source":["# Create a GIS Connection\n","gis = GIS(profile='your_online_profile')"]},{"cell_type":"code","execution_count":7,"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 "]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["# Read the data\n","df = pd.read_csv('../data/sample_cms_data.csv')\n","\n","# Return the first 5 records\n","df.head()"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 17 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Weekly Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total Admissions COVID-19 124 non-null int64 \n"," 5 Residents Weekly Confirmed COVID-19 124 non-null int64 \n"," 6 Residents Total Confirmed COVID-19 124 non-null int64 \n"," 7 Residents Weekly Suspected COVID-19 124 non-null int64 \n"," 8 Residents Total Suspected COVID-19 124 non-null int64 \n"," 9 Residents Weekly All Deaths 124 non-null int64 \n"," 10 Residents Total All Deaths 124 non-null int64 \n"," 11 Residents Weekly COVID-19 Deaths 124 non-null int64 \n"," 12 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 13 Number of All Beds 124 non-null int64 \n"," 14 Total Number of Occupied Beds 124 non-null int64 \n"," 15 LONGITUDE 124 non-null float64\n"," 16 LATITUDE 124 non-null float64\n","dtypes: float64(2), int64(12), object(3)\n","memory usage: 16.6+ KB\n"]}],"source":["# Get concise summary of the dataframe\n","df.info()"]},{"cell_type":"markdown","metadata":{},"source":["The dataset contains 124 records and 17 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n","- Name of the nursing home, its city and its state\n","- Details of resident Covid cases, deaths and number of beds\n","- Location of nursing home as Latitude and Longitude"]},{"cell_type":"markdown","metadata":{},"source":["#### Read into Spatially Enabled Dataframe\n","\n","Any Pandas DataFrame with location information (Latitude and Longitude) can be read into a Spatially Enabled DataFrame using the `from_xy()` method. "]},{"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 \n","\n"," SHAPE \n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n","3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["sedf = pd.DataFrame.spatial.from_xy(df,'LONGITUDE','LATITUDE')\n","sedf.head()"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) adds spatial abilities to the data. A `SHAPE` column gets added to the dataset as it is read into a SEDF. We can now plot this DataFrame on a map."]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["m1 = gis.map('IL, USA')\n","m1"]},{"cell_type":"markdown","metadata":{},"source":["> Points displayed on the map show the location of each nursing home in our data. Clicking on a point displays attribute information for that nursing home."]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["sedf.spatial.plot(m1)"]},{"cell_type":"markdown","metadata":{},"source":["### Split the Data\n","\n","We will split the `Spatially Enabled DataFrame` into training and test datasets and separate out the predictor and response variables in training and test data."]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[],"source":["# Split data into Train and Test Sets\n","from sklearn.model_selection import train_test_split\n","train_data, test_data = train_test_split(sedf, test_size=0.2, random_state=101)"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Shape of training data: (99, 18)\n","Shape of testing data: (25, 18)\n"]}],"source":["# Look at shape of training and test datasets\n","print(f'Shape of training data: {train_data.shape}')\n","print(f'Shape of testing data: {test_data.shape}')"]},{"cell_type":"markdown","metadata":{},"source":["__Response Variable__ \n","Any regression prediction task requires a variable of interest, a variable we would like to predict. This variable is called as a `Response` variable, also referred to as __y__ variable or __Dependent__ variable. Our __goal__ is to predict \"Total Number of Occupied Beds\", so our __y__ variable will be \"Total Number of Occupied Beds\". \n","\n","__Predictor Variables__ \n","All other variables the affect the Response variable are called `Predictor` variables. These predictor variables are also known as __x__ variables or __Independent__ variables. In this example, we will use only numerical variables related to Covid cases, deaths and number of beds as __x__ variables, and we will ignore provder details such as name, city, state or location information. \n","\n","Here, we use __Indexing__ to select specific columns from the DataFrame. We will talk about __Indexing__ in more detail in the later sections of this guide series."]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[],"source":["# Separate predictors and response variables for train and test data\n","train_x = train_data.iloc[:,3:-4]\n","train_y = train_data.iloc[:,-4]\n","test_x = test_data.iloc[:,3:-4]\n","test_y = test_data.iloc[:,-4]"]},{"cell_type":"markdown","metadata":{},"source":["### Build the Model\n","We will build and fit a Linear Regression model using the `LinearRegression()` method from the Scikit-learn library. Our goal is to predict the total number of occupied beds."]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[],"source":["# Build the model\n","from sklearn import linear_model\n","\n","# Create linear regression object\n","lr_model = linear_model.LinearRegression()"]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[{"data":{"text/plain":["LinearRegression()"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["# Train the model using the training sets\n","lr_model.fit(train_x, train_y)"]},{"cell_type":"markdown","metadata":{},"source":["### Get Predictions\n","We will now use the model to make predictions on our test data."]},{"cell_type":"code","execution_count":18,"metadata":{},"outputs":[{"data":{"text/plain":["array([ 70.18799777, 79.35734213, 40.52267526, 112.32693137,\n"," 74.56730982, 92.59096106, 70.69189401, 29.84238321,\n"," 108.09537913, 81.10718742, 59.90388811, 67.44325594,\n"," 70.62977058, 96.44880679, 85.19537597, 39.10578923,\n"," 63.88519971, 76.36549693, 38.94543793, 41.96507956,\n"," 50.41997091, 66.00665849, 33.30750881, 75.17989671,\n"," 63.09585712])"]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["# Get predictions\n","bed_predictions = lr_model.predict(test_x)\n","bed_predictions"]},{"cell_type":"markdown","metadata":{},"source":["#### Add Predictions to Test Data\n","\n","Here, we add predictions back to the test data as a new column, `Predicted_Occupied_Beds`. Since the test dataset is a __Spatially Enabled DataFrame__, it continues to provide spatial abilities to our data."]},{"cell_type":"code","execution_count":19,"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","
Predicted_Occupied_Beds
7470.187998
12379.357342
7840.522675
41112.326931
7974.567310
\n","
"],"text/plain":[" Predicted_Occupied_Beds\n","74 70.187998\n","123 79.357342\n","78 40.522675\n","41 112.326931\n","79 74.567310"]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["# Convert predictions into a dataframe\n","pred_available_beds = pd.DataFrame(bed_predictions, index = test_data.index, \n"," columns=['Predicted_Occupied_Beds'])\n","pred_available_beds.head()"]},{"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"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEPredicted_Occupied_Beds
74GOLDEN YEARS HOMESTEADFORT WAYNEIN0500000000110104-85.03665141.107479{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....70.187998
123WATERS OF DILLSBORO-ROSS MANOR, THEDILLSBOROIN040000070012375-85.05664939.018794{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....79.357342
78TOWNE HOUSE RETIREMENT COMMUNITYFORT WAYNEIN00111101005846-85.11195241.133477{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....40.522675
41UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITYINDIANAPOLISIN0000000800174133-86.13544239.635530{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....112.326931
79SHARON HEALTH CARE PINESPEORIAIL000000010011696-89.64362940.731764{\"spatialReference\": {\"wkid\": 4326}, \"x\": -89....74.567310
\n","
"],"text/plain":[" Provider Name Provider City \\\n","74 GOLDEN YEARS HOMESTEAD FORT WAYNE \n","123 WATERS OF DILLSBORO-ROSS MANOR, THE DILLSBORO \n","78 TOWNE HOUSE RETIREMENT COMMUNITY FORT WAYNE \n","41 UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITY INDIANAPOLIS \n","79 SHARON HEALTH CARE PINES PEORIA \n","\n"," Provider State Residents Weekly Admissions COVID-19 \\\n","74 IN 0 \n","123 IN 0 \n","78 IN 0 \n","41 IN 0 \n","79 IL 0 \n","\n"," Residents Total Admissions COVID-19 Residents Weekly Confirmed COVID-19 \\\n","74 5 0 \n","123 4 0 \n","78 0 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Confirmed COVID-19 Residents Weekly Suspected COVID-19 \\\n","74 0 0 \n","123 0 0 \n","78 1 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Suspected COVID-19 Residents Weekly All Deaths \\\n","74 0 0 \n","123 0 0 \n","78 1 0 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total All Deaths Residents Weekly COVID-19 Deaths \\\n","74 0 0 \n","123 7 0 \n","78 1 0 \n","41 8 0 \n","79 1 0 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","74 0 110 \n","123 0 123 \n","78 0 58 \n","41 0 174 \n","79 0 116 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","74 104 -85.036651 41.107479 \n","123 75 -85.056649 39.018794 \n","78 46 -85.111952 41.133477 \n","41 133 -86.135442 39.635530 \n","79 96 -89.643629 40.731764 \n","\n"," SHAPE \\\n","74 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","123 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","78 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","41 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","79 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -89.... \n","\n"," Predicted_Occupied_Beds \n","74 70.187998 \n","123 79.357342 \n","78 40.522675 \n","41 112.326931 \n","79 74.567310 "]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["# Add predictions back to test dataset\n","test_data = pd.concat([test_data, pred_available_beds], axis=1)\n","test_data.head()"]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map\n","\n","Here, we plot `test_data` on a map. The map shows the location of each nursing home in the test dataset, along with the attribute information. We can see model prediction results added as `Predicted_Occupied_Beds` column, along with the actual number of occupied beds, `Total_Number_of_Occupied_Beds` , in the test data."]},{"cell_type":"code","execution_count":23,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["m2 = gis.map('IL, USA')\n","m2"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"source":["test_data.spatial.plot(m2)"]},{"cell_type":"markdown","metadata":{},"source":["### Export Data\n","\n","We will now export the Spatially Enabled DataFrame `test_data` to a feature layer. The `to_featurelayer()` method allows us to publish spatially enabled DataFrame as feature layers to the portal."]},{"cell_type":"code","execution_count":31,"metadata":{},"outputs":[{"data":{"text/html":["
\n","
\n"," \n"," \n"," \n","
\n","\n","
\n"," sedf_predictions\n"," \n","
Feature Layer Collection by arcgis_python\n","
Last Modified: November 25, 2020\n","
0 comments, 0 views\n","
\n","
\n"," "],"text/plain":[""]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["lyr = test_data.spatial.to_featurelayer('sedf_predictions')\n","lyr"]},{"cell_type":"markdown","metadata":{},"source":["## Conclusion"]},{"cell_type":"markdown","metadata":{},"source":["There are numerous libraries in the scientific python ecosystem. In this part of the guide series, we briefly discussed some of the key libraries used for data processing, visualization, and modeling. We introduced the concept of the __Spatially Enabled DataFrame__ (SEDF) and how it adds \"spatial\" abilities to the data. You have also seen an end-to-end example of using SEDF through the machine learning lifecycle, starting from reading data into SEDF, to exporting a SEDF.\n","\n","\n","In the next part of this guide series, you will learn more about [NumPy](https://numpy.org/) in the Introduction to NumPy section.."]},{"cell_type":"markdown","metadata":{},"source":["## References"]},{"cell_type":"markdown","metadata":{},"source":["[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython (2nd. ed.). O'Reilly Media, Inc. \n"," \n","[2] Jake VanderPlas. 2016. Python Data Science Handbook: Essential Tools for Working with Data (1st. ed.). O'Reilly Media, Inc."]}],"metadata":{"anaconda-cloud":{},"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.3"},"livereveal":{"scroll":true},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":true,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"calc(100% - 180px)","left":"10px","top":"150px","width":"244px"},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":2} From b3076a8ae3623d8c4164ee809884d8fbfb61c1f0 Mon Sep 17 00:00:00 2001 From: NANAE AUBRY Date: Thu, 15 Aug 2024 18:09:37 +0200 Subject: [PATCH 2/4] remove zoom --- .../part1_introduction_to_sedf.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb b/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb index b52f48917a..5257a3f5a0 100644 --- a/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb +++ b/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb @@ -1 +1 @@ -{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Part-1 Introduction to Spatially enabled DataFrame"]}, {"cell_type": "markdown", "metadata": {"toc": true}, "source": ["

Table of Contents

\n", ""]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Introduction"]}, {"cell_type": "markdown", "metadata": {}, "source": ["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure that represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or a SQL table where each column has a column name for reference and each row can be accessed by using row numbers. \n", "\n", "The [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) adds _\"spatial abilities\"_ into the popular Pandas DataFrame by inserting a custom namespace called `spatial`. This namespace (also known as accessor) allows us to use Pandas operations on both the non-spatial and spatial columns. With SeDF, you can now easily manipulate geometric and other attribute data.\n", "\n", "The SeDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspection of subsets of values which are fundamental to statistical and geographic manipulations."]}, {"cell_type": "markdown", "metadata": {}, "source": ["
\n", " Note: Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the Introduction to Data Engineering guide series and then come here.\n", "
"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### What does \"adding spatial abilities\" mean?"]}, {"attachments": {"image-2.png": {"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2YAAAHxCAYAAAAGKa8sAAAgAElEQVR4AeydBXgV1/bFn/v7P3d3rXtpCwVaaKm7e1/dKC0Viru7lNJSCsXdHYK7E0JIQgIEDwkkgQTZ/++3w0lvbhQKQbrm+yZz78yRfdZZc3PW7H3OfMm0CQEhIASEgBAQAkJACAgBISAEhMApReBLp7R2VS4EhIAQEAJCQAgIASEgBISAEBACJmEmEggBISAEhIAQEAJCQAgIASEgBE4xAvnC7ODBg5aSkmJxcXG2fv167cJAHBAHxAFxQBwQB8QBcUAcEAfEgXLiQL4wQ5TFx8fbrl27yrwnJCRYampqmdMfS9lKW/Z+EFbCShwQB8QBcUAcEAfEAXFAHDizOZAvzPCS0Zk5OTl24MCBUnfSbd682TIyMsqcpyzlKk3p2AsjYSQOiAPigDggDogD4oA4IA6cXRwoIMx27tzpgmz//v1W2g4RNm3aZOnp6WXOU1qZul467sJIGIkD4oA4IA6IA+KAOCAOiANnHwckzMogQkX8s4/46lP1qTggDogD4oA4IA6IA+LA6cQBCTMJs1K9o6cTYWWLfkDFAXFAHBAHxAFxQBwQB85GDkiYSZhJmIkD4oA4IA6IA+KAOCAOiAPiwCnmgITZKe6As1Htq016iiUOiAPigDggDogD4oA4IA4cGwckzCTM9HREHBAHxAFxQBwQB8QBcUAcEAdOMQfKVZgdzs31FRwP5uQY++msosPyo8djI+083dt3PO1SnmN76iG8hJc4IA6IA+KAOCAOiAPiQFk5UK7CbPSSpbZjT5qtSNpos2PXWW4p4uzA/v2eJgg50uccOHDSBR2ibG9mpu9lBTKkw75FGxJs5cZkyz0OW8lfGi6hrlN5pG8O5ebakYMH/chncMMm7A99FnkM7SJdZJpwPrI9kdeLKiMyrT7rB08cEAfEAXFAHBAHxAFx4EznQLkIMwbv01attlvatLVNO3bYXZ06W/+5c31QXxKA+zIzbeO2bb4npKZa4tattj1ttw/6gwgoKf/xXMPbNWDePKvevIU9/eFHtmvPnjKLQUTV9rQ0u7p+A3t34GCzQ4eOSUTSJvLTzvIQoMeDD3kQSgiz5YlJNmHlSlu9MdlWJW20tIwMP795505L2rbN20Fbws558mfs2+d9yvmErVtt2+7dlptzIN/LmJ2d7Tyh70PecNyyc6dln2I38/Hipnz6hyEOiAPigDggDogD4oA4UBwHCgmz3NxcK2qPLgARUdILphm4M4BH6DDQfrBrNxuyYIH1mzPHHurewwfwpIkuN3wn38INCXZr6zZWuXETu71tO7utbTur2rSpNRo+wrKysrwM0mML6RGA7NQbysm7vr/Adbw7kdf5jBCiDMTUpp077aU+n9it7drn2VkGzxc2kDd9715rN368LdmQUMCO4F3CE1ScnZxvOGy4vTtwkNnhw/keqEhbsTPk50i9kddL+xzp6SI/bS4tT+R1sN2wdas92bOn3dyqtd3QqpUL0cvfrWPLkjbajrQ0e6hrN6vUsJGL25tatTb265s1t/u6dLE9e/fayMVL8q/f0KKlXdu4sT36fk9bt3mzt21Daqrd06GTVWzYyLieX0bTZvZA1262Kz3dcqL6ONJGfS7+vhI2wkYcEAfEAXFAHBAHxIHTkwMFhNmuXbts69atFh8fbxs2bMjfk5KSLDMzs8AAviRhxuCfUMC1ySkWt2mTdZsyxao2a27zYtfZdU2bWa9p09xLUpKocNGWnW2dJk+2a5s0tdVJGw2vWafJU+yiN970cEFEBUIB4Td7XZz1mT3bBi9YYMnbd3h4HaSjjn2ZWbY0IdGGLlpkfWbP8s+RHinKQTAsXB/vIZaIvpr9PrV3EEhl8HpRB/mnr1lrE1eucoESWT52UP/k1asNr9G45cvdK5ewbVt+2CKCjXpvatPGOk2a5GGQeAxpW7h5EFIIn4krVlrfOXNsyqrV7n0qKhQw5Ik8Hth/wLKysz2UdPjixdZ7VozNXx9vnI9MV9xn2pmZlWn3delqz33U27bs2mXZWVnWetw4u/Ttd9y7RX9MX7nKEGqD5s+39Vu2eL81GTXaarRp6/XgNb26QUPrOnmyrU3ZZNhSuUlTu79rV8cAj9iIhYvsinfr2IRly70MxFrDkaPs5rbtbH929jEL0uLapPOn5w+T+kX9Ig6IA+KAOCAOiANfNA4UEGZpaWm2du1a69y5s3Xt2tX3jh072ogRIwoIBEBikF6cx+xgbq4Ppp/q+YHd1bGTXfbOu3ZHh47uAWEA/lCXrvbxzJmlemsQRXiQnu71oYVt1tpYu6T2W7Z4Q6J7lRA3j3Xv4R6Zu7t0tWsbN7GqTZq6+MBLhejqMGGCVWrQwG7r0NFuaNXarqjzngulcD1mzVq7pW07u65JU7u2YSO7o30H9wIhLBBDpZGCcgjnu71de7vs7Xft1vYdCogHxBBtOP/V16x685ZeFzbc1r697U7f4zY2HzXaqrdoaZe8/Y5VbNTYbmzdxqq1aGnDFi7067Rj3NJlnqZGq9Z2R8dOLn4e7tHDduzZU6b5bEcO5lrvmBirVL+B24hQom8QlJRfWjvp19iUFM+DKPTtyBEPYURAZWZluZCdvHKVVW3c1Pbty3ShO3zBQhfFeBLtyBFbm7zJ8V2xMdn7kHLGLlvmQgwhR5pP582zG1u1tkM5OTZpxUqbuGy5DVqwwNpPmFCmPimtLbquH3txQBwQB8QBcUAcEAfEgdOJAwWEGR4zPDRDhw51UdajRw9jT0xM9PDGSMNLEmZ4cBjoHzxwwBoMH2Gv9u1nyxIS7MaWrS1u82b32mRlfeYJiiw38jOLZ9zVqZM92r2HD+y7T51qVZs2s1qf9ncvD16q2zt0tLs7dXZPEgP83Xv2uDgjDcIOO2JTNhnia/3mzbY6Kcm9NQzyEQBLExLsqnoNrOHwEZayfbslb9tmT/TsaRe9UduWJ20sk2DBZvdsZWfZq3362mt9Py3gaUPcTVyxwi6u/ZZ9GDPTRS1C5uq69dwmbFy1Mdlajhlr1zRoaEMWLrSJq1bbhBUrLWXnThcic9bFuaBsO3684UmjbTNWr7FL3nrbPp41q0xi5XBuXhjizNVrbN2mTZawZYt7I3tMm1am/PTr1t27XTBdVa++vfRxHxdKC9bHe368nLS146RJdvGbtV0IX92ggXWfMsUFFp4u7B4wf75d16x5/vw98syJXWeVGjT0OWekqTd0mHvhbu/YySrUq28D583LK6OE8NdI7uizfmjFAXFAHBAHxAFxQBwQB84kDhQQZjt37rSDBw9abGysdevWzcXZ6NGji/SkFCfMCGVbk5xiDYYOc2/XFe/VtWc/6m33du7iHjM8YPPi1ueHGhYHFiIgddcuF2K3tGvvoZDnvfyKtRk/3r1RDN6Zq3T+azXtzvYd7MXeH9szH/SyFz7q7R6dmn37ufBCCL7c5xO7sWUru6t9B7u1bTsf8MfErnNvzbO9P7b7unZzAYbnC7E2aOFCq9K0Wb5wKM7GyPOIkpz9++2mNm2t98yYAkIH4dFh0iS7s2Nnr4f5Y3iVmHdFG2kr9faYPt1u7dAxL82hQ14G4hSv0ZMf9PK5eZRFekIlqfO6Fi19ThvnI+2J/kye5O3bXdTe0LKVY3Zbu/Yu7EYvXVbA3ui84Tt9ju14KfFCPtHzA6vUqLGXgQftMCs05uTY0x/0smc//Mhmrouzas1b2Ny49S7IsBcRighmniF4UzZ92XXqVKvespWHhNJm+vStAQNtyuo1VrlpM8O7RnrKCPboKCzEAXFAHBAHxAFxQBwQB84WDhQSZiyqwFyn4DUryltG44sTZggAFofoM2uWC7FX+31qtfoPcC9WvzmzPZQudtPm/LlVxQHpXpR1cR5ayLysrbt2+YIR7wzOW+2Q681HjXEBNXD+fOs7Z7b1nTvH+Dxi0SK3AY8aC3ggEhbEx/uKhx/PirGKDRr6qn+E3lVp1ty6TJ7swoi2IxLeGjjIHuzew0VEcfZFngcLRAOrCCJU5sdvKCB0sPWpD3r5oiWUz/d2EyfYvV26+By5IFgQl2/2H+DiB4FLOsrFQ4adnSdOcjupm3IIn7y8zns2ftnyAvVF2sZn7GNu2IPdutvD3bobohTP1/CFi6zCe3XdoxhEUnTe8J0yWHSj/fgJti0tLS8E8fBhx5H5Yh0mTvBzYI6oZaEXNkITlyUkWp0hQ3w+HPUwRw3vIGKUNu7JyHDh3IJzhw8bKy9e3bCRTVuz1r+vSk7xMEmJMv3wBj7qKC6IA+KAOCAOiAPiwNnGgULCjAE4qzKuXr3aRo0aVax3gnTFzTFDNBDedkubdpayfYd7R1iNkY2BOOKtNCDxrBC6yFyr9L0ZPkBnMM+iEoQmMoDvMHGSVahbz8MjKftA9n4j5I/FRli6femGBLv0rbdt2urV7slZFL8hz1PUoaOLTwQo5d/ZsZNt3rnDdqen2/vTp3sYXssxY0oUO8F+xELeIh1ZNnbpMp/flpSa6oufUD5iLy093YUVC5O42MrJscff72l1Bw/JrwMvEfPfmo4Y6fPF4rdssU9mz/Y5WpTBvDXsxEbKiNu8xdtyf5euLniiFxsJ9nFE5OE5vOzd92z4okV2JDfX5+Ah0vCe7UxLK3V5frxh89fF2QWv17IPY2Icf/p5+uo1dmXdehazJtbPLYlP8D7BK5qVlem4d5kyxW7v2NGYo8bS+MyhG7VkqWXs3Wv0CXMEeYXCzj15bWNO2TX1G/jiMYSIIuYkyvTjG8lpfRYfxAFxQBwQB8QBceBs40CRwoxG7tu3z3bv3u3elqIaXZww4/zeffvs3k6dDQ9Z39lz7J5OnV0Ica2osqLPITLwsrEwxUVv1rZ6w4a7h4h3Xl1dr77PcUrdvcuSd+zwJfQRZwgXQuFY+IMQON6Vxep/hNKx0AbXWHKf95OxqmNYiOLTuXNciPHuMRbbIB11VmnSLH+VwWj7wncEJvPS7uncxaq1aOFz1y6q/ZZd36KFf5+yYqV7g+7v1s0uqPm6PdK9h39/49P+dkGtN9yjyKqEhP8hPhoMG+HCE4F2baPGLpqmrlxlRw4f9vfAMa+LxU1oa6WGjT2UEG8iwivYVNQRPHfu2ePeQzCljTe3bmM1aOsbbzi+2FBU3nAOETZwwQI775VX7bJ369hD3bq7oKrSuIl7HA8dPGgfzpzpgurCN9700NNqLVsZO2K61bhxlpmd7WGjiDvCE1nEpFqz5vbaJ31dGFNHhwkTXdhRRpUmTazO0KFlWtgk2KmjfqTFAXFAHBAHxAFxQBwQB85EDhQrzBBRJQkprhXlMUMkxKem2ntDhnr4GQJo1tp1ZQ4LDCAuSUi0GWtjbWbsOovbssU9OgihNSmbbN76De6lQsywIiHLz7N8PMvII5TwtmEfXihsYXVFVv1jPhdLvM9cG+uhjggWylyWmOSLS7A6IS+U5v1p89bHu7grDQNC92bFrfewuxmx6yxmXZxNWxtr09fG+oIk+7KybO76eA8fZDERVmhclJDo3/PrOBpuyCsGpq1Z4wudsIw970QLgom2IkzxeBGuuWhDgnuRShNlAU+wSNy2zV8nwJwyROvWtDTHIuAb0hZ1pJ6VG5Ot/5y5NnnVaus2dYqHq65OTnEbKX99aqrjEBO33tsPDuzgQj/hQXQs1sX53DHmnvHiaMpmB2uEKthRBqGMhL2W5A0sylad04+xOCAOiAPigDggDogD4sCZxoFihVlpDSlOmJGPa0EcISzKKh4i60SIELLHHpmf85Qd0iIIQjqO0WGS5A3XucYenS7URbmIAI5ufxkWmghtDXVEHoOgoCzOUw92R9YXGaJHWSF/sCW0k2NkW8pqX3H5HYuj9UXiG5k++nM01pFtirYvtCMco7HgPG2IrjuyjaSJvh5tk77rR1ccEAfEAXFAHBAHxAFx4GzgwEkRZmcDMGqDbnBxQBwQB8QBcUAcEAfEAXFAHCgvDkiYlcErVl6doXp044sD4oA4IA6IA+KAOCAOiANfTA5ImEmY5YeF6kfgi/kjoH5Xv4sD4oA4IA6IA+KAOHDqOSBhJmEmYSYOiAPigDggDogD4oA4IA6IA6eYA2eUMON9XiyQUZyi51pJ14vLV97nsZG2lHe9qu/UPwkprg+OHDliBw8ePC5OBD6dKE6dKfdRcVieyPMBW47FlVva71Jx+Tife+SIHYhYzKiktLpW+v37efE8wAJRR47Y/hL6W/3wWT/kHDpk7MLkM0yEhbAQB8SBz8OBM0aY8aLhtLQ0y8jIKPRPgAEtA9vMzExLT0/3F2R/HlBOZl4GeLSBttCmstRFHtoYdl4AXpZ8RaU5dOjQcYtX6g02RB9LGrgWZccX5Rw4ldZfvEZg/Pjx/lL30tJG4xbJpz179hw3LygXbhw+fNj27t3rHD1WW6JtO92/I6hoc0l28j5H7lX6KDIduPObQxkB92MVxtmZmZY8fbrtil9vCIJQPp9zDh7M34sVbjzggV/YESXqyePngsA48FmZ+yPqQoDkl8Eg++DBgrYcLYfzYc/PfzRvOB959DQ8KMvNyxfaF9rmbcK2iLaSNr/s8MSypDoOfIYZ7cjet8+Spk6x3RuTCrQh4Frq8UCOZaRu8TL27d5dQJwFPEMbQ3sKlBlha1F9FtoeygjHyLTR9ZCmtOuRaUL+/DwRffBZn+RxIz9f4MhRzEMZwb5wjG4z90Dq4sW+7z9QeCDGdX5POBbAKfStjsJFHBAHxIFCHDgjhBk/7h07drS///3vdtttt/mLr8MgiIHvihUr7O6777Z//etfnqZVq1Y+aDrd/hkw0E1KSrIKFSq4rcOGDfN/XCXZyT81XvS9du1a31evXm0pKSk+IASXkvJGX0MILlu2zAeax/PPEtvXrFnjdnBkx57169e7KI6u74v+HY5u2LDB+zzwNRoTzm/evNm++c1v2gsvvGBs0WmK+w6fKP/SSy+1v/3tb/bf//7XlixZUqrYKKo87qPZs2fbjTfeaP/85z/tH//4h/Xu3btUfhZV1plwDuy2bt3q90NRfcP9geCqXLmy49GhQ4f83xSu8RCoZcuWdt555zn2FStW9H4sqqwi8ThwwBj8D7v8QlveuaPlhn7nwc3WrS7WdidusF0b1lvaxkTbHy0MeThz4IDtWLvGhcSO2LUuahhUZ2dlWVryRiM/YoUB+d6dO7ys3QkbLGP7Ns/rg/f8MiZb6tKlniY9dYsLG/IGGziSFxGZsW2bX8/KSM87t2G9H/36hvVext6dOy1rb0Ze/oQNlr5li/M6ffNm27Uh3nYnJrhtlBXycSQfHphgW2ZaWp7dR7EAj7w93vELni1EA2UNuegci+3X9zM8j+Gffu7hw5Y0ZaKXsX3VqjxhezT/npSUz+yIX297Nm0qeJ8eOOC2YxvtAP/ofk9PTXX8PI23Jz6vnzcmGiKd9Hs2peSdS/gM7/yyeDiZnHS0/evz+4bywDXkp/6Ab+aePfl9Az5Ze/d6Psfc25Hi+YLXKzszy3YnJeT1Cf0d8I5fb9if3ybeAXrooE1/+gmb9uSjeeIrQoBxj/AAcsGCBf4A8nj+3+TXdQx9qDyFBbIwESbiwJnFgZMmzPghRjhEbtFCgkFM5FbUE3qeaLOl8tLq996zP/zhD7Z9+3YXJuTnqXWlSpXskksusQEDBtj777/v3oeiyipEzgP7Ledg0fuB3LJ1ZLCP+hjcshX1FD60FVxmzZplv/nNb6xz586evpBdEf+IaN/AgQPt17/+tf3ud7/zQeBvf/tbYyAYExNToK5QvxdqViBcEvvAjQH31KlTPUlR/yxDe0hA3SENHoM777zTfvnLX7rtiGR2BAG2zZkzx/ubPGzYEvonfA/tjLYz9FXAKJTBMaSNtIVyyBO5kTeUX5ZjSfzkGht8DW2g/mBnKD9cC3ZE9zv5H3/8cXvxxRc9CekDnqEM8nC+UaNGNmHCBG9vuMYx2k7sCNe5hod42rRp1rdvX/u///s/mzJlyjGLKTBGaCDIqlevboMHD7bu3bs7v2hzJNbUWVyfFMedcB7b2fgefhv4HNpT0hGMwkYe7AjlUVbkd9JRVmQebA7lcx5P2E033WTvvPOOFxuuhXyUzQ6vL7roInvllVfy0/Fh+PDh9rWvfc2aNGnivztdu3bN/12KLKvYz4i7jAwbd1M1i+3XJy987mh/L2nZzMZUu9ZGVb7Kxt5Q1SY/eG/eoPgoxxEhmbt329zatWxU5au9jFFVrra579S2rIwM270x0Sbdf5cNv+pSW9K6pfGrtLJndxtzXUUbcc3ltqxDO0OEZGzfbrNrvmJjrr/WJtxWw0ZdW8GGXXa+LWmTl2fHmtU28e5bbdxN1x+1pYqNvaGKLWvfzvhVXtuvr42oeIWNv/UGG1Otso2uWtE/Y/fiFk1t09w53o6Rla60BXXfddtm13rFRl5bwcbVuN62LllsS9u0cpv4TtmUMffNWu65wu74kSNszPWVvP7xN1ez8bdU9zooY0mbVt4Ox/io0AW3hLGj8vEsFv+I39iQBnGyZcECG3H15bY7KfEzcZiRYTNffNbGXJdnB30y67WXLHvf3nyvGl7LNb0/9DaMrFTB27hp7lzLOXTY09DXCBjsG3dzNb9Oe+n/MddXdlG8PzvbYl550cbVuM7bPPq6io799Kces8y9GbZzfZyXT3+MvbFqXt/fXM3PTbjzVkvfutVmvvCs4znhjpsNsZ4wdrSNrV45r9/bt7XURYvycQZL8J5w122WNGWyY8ZDgEn33pFv3/hbbjB27J788P2WuTeizWY2q+arNvv1VwuIWPDkHuPBBg+NunTp4vdSwFnHso0thJNwEge+mBw4KcKMQRKEYsCIp6tHjx42atQomzRpkv9gc42BEp6goUOHWtu2bX1gieeAQRbX+WEnzapVq2zkyJEWFxfnZfz5z3/2ARCDRYTGzJkzXSwwQMJ7sG7dOg87CjYUS+wD+21fWrZtW7fftsbmHfnMnro229K27LeiwjMiy8PGuXPn2ogRI2zLli1uK+3EK4V9XCc9A8kdO3bY5MmTbeLEiR4qdv7555dJmNEOBt9VqlRxbyEeqnHjxvkA+qc//amtXLnSy6cuPFh4Odq0aeNibteuXfligusJCQn2q1/9yvDU4T2j3OhwSjwuH3zwgfcJuBPWFtqRmJjogvDmm2/O95YtXrzYfvazn3kf0VZsY9BKXfxjBo9evXq5V41y2OknhAR2fvLJJ+65oK8R3+RFOHL+008/9bSI7SFDhrh4AA84kpyc7GXAHfLQlsjBd2Q/RX+mDHa406lTJ+cnbQ38pK/4zqB8586dzmP6jT4O/CQ//B0zZoxzvFu3bvn9Tn1cR8zecccddv/99/t38EAAcY00YLF06VJvG6IM/gesg82kR4BTPl4bsAn5Qz0IBexE7B+rMKMs2kU7EHb0VXx8vPcX17CHewr8sRG+wMEPP/zQcYcfpAOXwD9E3YwZM/w8fbJo0SLHE3wRMDxFxzvHgA1vN/dKaG9RR2zYtm2b20i/LFy40PubPuHemz59unuBCQfl+ujRo523cARukIb7JGALXvAPLyVtieQN9yr9hP2UBxfuuusue/XVV12Y0afg89xzz/mDCezHm433LZRfVBsKnYMD2dk2/YlHLXHc2AICA49Z0qQJNuyKiyxx3Bj3YOAFC2UQWragYT0bcc0VLn4y96RZyqwYG17hElvYuIELis3z59nQS861oRefa9tWLDfSrBvQzwfpeEQQd7NeecnGVqtsW5ctde/WplmzPP3cd95yMYd3BTGQumypi7cVXTrnecy2pvr1xa1b2eQH77O0hA1Gnkn33eWf5733rk1/+nE7kJ1ts2u9ZpPvu8vSN29ygYKnaepjD9us119zfuA9Qyyu6fORC4n1I4bZmOuutamPP+JeJGxYN7C/exa3LJjv9uA1otyYl14ogBtpJz9wj22KiTmueU946WjvmOqVLWPH9gJhldi9qtf7NuKqyyx18aLCHrGjwnDjtCk2/MpLDKE8542a+aGh+3btcpEd27+fbV2+3EZee5Wt/eRj275qpY27oYolTZnkbSEMc/eGeJv5wjM27anHbMe6WO//nEMHXTQOp/6lS2z9sCHe32CC+IILeMTgwbDLLnD+wC8E3bqBn9rwCpe6p4x7dc6br9vkh+71sjfNm2eza9W0YZeeb5vmzHF74QuCbWXPHnnezaREWzdwgCE48cAFLyXCeX6DeragUYMihTA3TPPmzf3BHb8xpd3ngd86fjEHo+p39bs4kMeBkyLMGKS1aNHCBRNP4C+//HL70pe+ZP/+97/zhQqDvcsuu8x/tPH+/OlPf3Jvzrx581xoMACsXbu2IT5+//vf2x//+Ee7+OKLPQQQQcbGwA6hxpNrPDl4cP7zn/9YKKOkTs49fMAWvp9tva7Kto8qFtw5N/JJ/qnttwM5xd8sDOKeffZZb9uFF17oHi3s+MEPfuBeEp7KgwWD0HPOOcdtxOPHE3jaxQCWrSQ7ucZ277332pNPPumf+cOAmPYyQGTbuHGjf2dwfs0117hYQhQwkMSG+vXr21/+8hfHijR4zsjfvn17f5pJmiCywPSqq66yH/7wh+4pCANX6sFr9vTTT3udDRo08IH1Qw895INt/vkiIL/1rW+5N4KQTepiAPzAAw94HsQMovTnP/+5XX311S4U8XiCFQN2vG9whf6mnOCh+/rXv+6DaQpBfMCXv/71rx5qhti89tprXayV5Z8//dauXTsv+7rrrrMrrrjC64Q74MXDADCg/fQbbfjJT37i3kEEDFhRxrvvvmvf+c533FtLSNuPfvQjF1FcR4Tggfre975n3//+9/0zeN933335YhdcwZC+oM08xGALfMBjM2jQIPv2t7/tvOY++u53v+uCnmshHYIAUQd2xyrMsAFucI999atfNbyx2HnBBRe4OKMeRBh4f+Mb38QgwTAAACAASURBVLCXXnrJ66Eu0uP9ZUPgghEYYuePf/xj5yzhTG+//ba3D+FHPo70GX3LbwKisiRRA9aIO+4dcMILiRCCz3wnjBmxD6/4jg0IOYQbDw0416xZM+c5A1PELr89VatW9Xo5B5ZggVCD+/CTNoMF2Lz55pveTsQe12kfvMZjjB0It7JwL/RZOBIayKA9DHY5n3vosA/OGWzj9cgPc0Tw5+ZaWkqyDa9wsa35+CMXSIgsBsl4bAiNTN+21TJSU2101Uo27fFHbcb/nvAyNs+baxPuuMWyM/e5GEO0JU2e5HkJd8TrkzR5om2cPjXPA4IwP3TIBdL4W2tY/PBh+fVhEwPymS8+Z8RFLG3T2vDs8HlF92425dEHPe2iJg3z6sczSvjb4cMW89rLtqBhfb9OqCIeO+qlDewIg6GXnmdJ06b4981z57jwQGgwp4lQxbjBg215p46fCbOjHrAdceuMMiPxDFiX5Uj45vbYNZad/ZkQJh92JU0ab6OqXGOZ6emFPETeb+6Z7OFie8PokS7i8LyBId5JxA4eK0T22Buus+TpU30O3sQ7brYNY0Y7/vQv3kiELuIz1/IWh6GMlJgYG1HxSs+POMQTSegnHEKwEc6IsBxx1eUe4kqenMOHbdOc2e5dQ1TRjsXNm9iMZ590u+jz3MOHbNrjj7gYRPTTvnE3V/c+gVuLWzYzQjuxB/Gbjy1esZQU52OhuYFHoxp4iMHv+Ok6vaAsnFCa4sdAwkbYiAMnngMnRZghqhiwPPPMMz6YCQM3hAWDIAZat9xyi5177rm2adMmT4PHgwHPlVde6QOcjz76yAc+eEsYhOG9YCDOQAlhxiCIAR0eBwZQ9erVc68aT+3DU/ySCIPgwjO2+KNsWxK1L+6VbXGTS1+Yg7ZQFwNwBu8Mxpn/hc2IRQbaXGfwiQBAjNJeBnkMFknHVpKdXGOgz+CTAWlIz/H555/3+WoMKBEUDJIRpXgXEa2IAp7okx9c8EAhCAmbY9A6duxYT8ugmLbgKcD7gECiDMK8GEAz6Adv+g2ByAAccYlYwosSBqSUwX7PPffYl7/8ZXvrrbdcMOKtwKsQBt/0JXtsbKzbxIAfrxAbniEG4OD4v//9z37xi1+49+3WW2+1J554wgfVcAAvBjxjw1YG+QjGSMFSHK7YyHzERx55xPPzB68u+RGIbITF0kfUyeAC+7EBYUEfgilz6/AKgzFeUnhAn7AhUsGGhw4IAAQToo7+we5gG/3G4hLgiQeRLVwDL7yI5MWTCV4IO0QFZdAO0pLueIUZZXA/gT8iBvzhKXUF7x79i5cKUcg9iFeU+mgL/J4/f75zAQGGPWzwC+GC6IM3iCauI6AQszVr1nTMEGncw3A4tLuoIzbgseWhAzs28BvTuHFjz0cd8AB+I5gDjoh+HgpwnXKph77ENgaLIR040Bekx1b6E+xJAw94SMRGGh6CwG3qp18Qc3Ai9EdR9hd3joHw/py8fgxpWARj57pYFyN4VDwNouyoAENgIcC2Ll2S7xliEJ66aKGfT12y2AfpeJ5IiyBIGD/WtixcYBNuv9kH9nGDB9nQyy7w+WyUiyBANAVxlD/4Rsimp9v4W2+09UMG53tGqC9xwjhbP3yoCwlCJqc/+ZiXQTjg2k96e1kLGtW3GXjPiB7whShyPVxvfv26fh1RSoggZVE/aRBH426pbss7tveyERZDLznPRSViNeblF/PCDCPuo4CdY3X0vgjnjul4dAGP6DzYljh+jAucSCFNfaHO7KxMm3jP7RY7oJ/jNP6WG23l+91dFIPhso7t3XO4Ly3NvWeI4txDh9wzRT/74idHReDct9+0WTVfsZyDed5k+gcBtqJrZ8dy8/z5LsyYu4c9S9q08H5iziFevcCbPEE30z10zGmkfxc1bWQznnkiT2AhlhGUH7zv3lTCMxG2CDP4M+7WGu6ZQwDu3//Z71bAB7vYw/fIY7gfeABXrVo1vz/Cuch0+nziB3bCVJiKA2cuB06KMGPQykAGjwMLEiC2GPQyUOUagzqeQvN0nrC466+/3mrUqOEDcgZWDGoZBDPxno3BFBuDxhDKyGA0CAIGxAysQ9qy/PjnHtpvq4dn26B7Mm3IAwX3wfdk2vQGWZadWXI4I/UwUKN+FgII9XPEW4UYw1uGSEOIsNF+vAh4hBBPbOEGojyERfQglTxFCTPmveCdID2Dw9tvv91FIHH9iMGvfOUrPngmP+USlsU8NUIq2TgXMKQMwjLBHI8Dg388AXgOECZcZ3CLxwwvKKFeDGARo5FiKNhK+B4bedjJT12EOOJhQxgxLxBxjucFkchGP1Iu5TDo5p86G55BRAkDZoQcHko4E7iDaKDd9EcQgMXhiT0IeTyb8BOP2VNPPeWDfWxkw1OFKA0PDjgHxohdwuNIhxeGduBdom6uYSMbNrCBA+KODZyoO/Q3R2wkLXhHCzMwI+yUtoITaXgAgOeYBxmhnRxLE2bUA6bR9WMD9eBhQnSGfuBcsJM8eBHxCBL+yUb7KY8N7zj3LQKPtNTFRj/jNUVEYjthjOThvic0kvQIau6RouwK9YcjeXkYQ5mIJcQdW8CBz3Xq1PEySQc3EX5wJpRPH3CehwqEPQbu0h4EGzyi79nIQ9ngHerCFjY8zXhT4RtlkD/YGY6cC+WEc2U5FiXMGPwS1rZx2lQPX0SYbVuxLF+0uTBbsjhPmC1c4IttMP8ML8qqXh/Y+Ntucg/IhDtv8RDKtZ/2dbHDgg6IA0LjZr38goffzXvnLRcBPuAuRpjRDhcl3NtmPpcNYYYAC+fxxixoUK9oYVbvvRKF2YTbb7Kl7drkCbOjYZrMg1rcqnmeJ4n5rzmFMS8NX/qUraj+KilvUcKMdqbMmmWb585zUZm6cKGHjxJOuvqjXjbh9ltswm035XuZwANMETnMU8NLSLnsLlyPev3AM1qYYRtpSEtfb543L0+Ybd6cJ6pZmZOQ+dWrixZmlSr4YinFCTO8rczlYw4ZAo65b0vbt7WECeNt7I3X+TnKLwmjoq6B9cMPP+z/2/m/x29DUel07swdRKrv1HfiwInlwEkRZvz4Ll++3Od6MAAmzIdBOAM7vAwMAhlgIjaYS4TniHlN/fr180ET/zQRNQy6wz9RjoT+IcwQGAyY2HmqTygYoo0tDNJKI0oOwmxElg15MNOGP5ZVYB/6YKbNaJJl2VmlC7NQP4NTNga0bAgzwvqYE4RAwgvFxsAgCLNgM7aCGefxwER6l7jGgBQvVBjgUwYYIcrCObBiAEk9eBiZH8MgE7FFftIzeGdQjOcm2BKODDARRAhlPFwMmglhQ5zg5aBdlEO7QigjdjIAjvxnyyCVfn399de9jsj+ID/24nVhgI89eFsY1DMviC0IM+ojzI8QRTZCRhE5QZjhsWA+HdxhXlT//v29rcEWjngAwR9PSqQdXENoIELw6MBPsERY4Vlkw2OGaIgWZmDKvDk8QgzuERusVkk6OItwZaPfaAP9hkBhow/YwCHwE7vYES7Ml2PjO2kpF48h9tEG+oR2IwjgSmgT9eDdQVjBH7aAQ6iH/oULhKtGX6Mu8tPXgRuhbPLDN/DCo4ZIx/5QBnW1bt3avajc16TlGhueKh7KUDftY7Eb6uLhABjCUzDmoQX5gq3FHeEW3jx4yu8A3AD3IK7AgVBDHibwu8NTegaF4TrlsjGvlXsSboS+IC+/WfQvYpiNc9jLb1etWrX8XCiDvqIf8BiSLuARbCcftvAwCo5HeklDmuKOOQcP2c64dXkes9WrPBwN5qzp28emPvaQpSVucAEW2/9TFzeUw69O3KAB7gVjPhRzuhBmrOiHB2rivXfalEcfcI8OXhEW5hhy4X8scVJeCCFz0tb2+cjnjCEoCL3z8DR+Y/fuzfOYDR2SF1YZNbimbhbiQJi59+jo3FpsXtSsiU1+6L688wfwzOW4UFvcqkWeMGOeJh6zieO9bPKwAuTwKy/2eVKUvWn2LMeCBTQyM9J9RcS4IYNseedOLlSKwzH6PH3E7wfeVv4PRXI8Om30d0RV4oSxeR6ztDQ7wOtLzGx2rdeNOXXIvfn16tjYG6+3ubXf8Dl0LIyBgE6eOSPf04gwQ/i4MGNeWURIstfJ4joeyljbZrGoxuFDn4UOHhVuhCfme8xSU/M9VpSNV425ialLllju4SNefuL4sT5vLoQyLmrWOM9jlpPrYo768ELOeOZJLwuPHsKMPuEaKzPyUGBO7Vp5q3xG9X80VpHfuWn4f8FvK3Oeo++TyLT6fGIHd8JTeIoDZyYHTrgw458dg0Y8CAysGXCxMfDmKTchUwyUWJabeTmErLExwOEpetOmTV1sMdjDk4JwY14Sg5swn4PBGAMfBnwM7hno423Ai0DaspKRFRnxnCHSInfOMQettHL4J4MwwzvFYJNBGO3p2bOnh/Ix8ZnBNANmBA/eIgaveBMJ9WNeThgYggnijgEjg84ghrCBgR/eMAaZ1Mcg/eWXX/Z/duBCXrx2CCKu43EkpA688WzRB/QL2CCIGzZs6G1DgDHXilA5RAwiAEFFu6gfEYbXE08RNjC4ZCU7hAYhf6SLHNxwnb7H20n9pOGfcRiUUgZiFY8HfYXAJlySNtP3bAzew1wv+EN4K/YTFku5lEkoI4InhB2CKYIOoYtN7ODK4BycEe70C5wJfUroIN4VzrHRd+DFYJ0Ne/hO+Ch4I0J5VQMPFxAxiFY8d4T4wUO8L1wDM9pJPdhA+G7wcDFQZ9EJHjCQB1zAB3GLV4wFbLgPCG2kzYgoQu6oizYRNkdZCAJ4BfaUQXpsROQgeMCWnTzYAT/wAlEW892ihRC20D76H4FLeezkpQyuk4cQVuZ6cY1+5hp2co55JHiVsJ9z4AE+cA088CpyT5MHDmIPOFInYpI8oW+KOtJPiEM8lIh0RB3eVAQ1XA19S9/hacUePKJwPLJsPhOCybw9bACb0E4wg3t4UOE8/cLvCjxAHIe04EEd3HPwinRwMdJu+h6PNnm5b8Eg9EdkuqI+H9h/wLYtX+arA6YuXOCrGbJc/spePV2YUQ4LNrBwB8uew2AG5GOqV7HZtV51DxgLfIyqVMFYWREvC4tSDPzv3zxEjQE6Yo3VHlmxbztpeGh0VBD4ohpHcWHJe+arEdrG3K79mZkFB+eE1GZn2+JmTWzq4w9bFmUfXagE0UGo45CLz7FNs2J8kL997WqfH8eCFVz3uVdVrjHmZFHX9pUrbMojCMg7PDQP25OnTXYvECsGsuokvCcUEjHB9aIwjD4Xfv/47aBPePAS+jM6bVHfwTx++FD3UrGkvS+CQfj4a6/6QiweklmtssUPG+I4gifLyYPJrFdfyrORMM2sLNuTkuyrWNLm6Ncg0C8HsjJtzhuvW8zLLxivJKDNBWzKyrLkGdNtZMUrvd/3Z+ZxD48aYYjMLcTjRh7EWsxLz7toJkwUoUV4qa/0mL7Hl+cn3JJQ0aSpk/P6JDXVhSPid38Wy/hnO39GVb6mwOIfBWwqYpVLMOM+4P8S9y33SFnvgdLK1vUzc8CpflO/iQOlc+CkCDMGZ/wQ8w+QwQuDJwaNiAsEAIMjBoKIN57C8wSc0D4+E7LGDziDPwa5DNqZc8RgDiHHQJtwMf6pImzCggAMiplrRhqeqofB8ckkAf9kEEKEmdFG/unjdUDMMCCnDWwMdjnHwJZ2ED7HoBFPEfPC+OdFexByYIZXiye6tIHz5GegydN8xCkeAcQoy+iTl535bKQBD/LjqaA+BCMDUTBnR+xwHlsDZkEUMfcNMYwwpAwEFHXSh2DKvC4G28wRon5EXRjccGT1O84jAHhCymd2QtWCncxzo0zKxzYGwQhXcGOwS4grfcxAmDYRBoowQWRRN14uxBN52eEOecGVcNIwAKa+unXrOp7wAlEUyQlwBGuOgZ/Me0S8sjFoh4/YBzcDVnhb2BDZoR8J+aQcvEIM+LEdrLGBOXvYBqbcA/R5uA7u5OUauMMRviPSsBcBwD1Au8ERbBAjeOrwBsG9UEa4D6iDMvBWkR+O0je0hzroGx6OYBv3BpggUMESPGgzeCGIET8IHsqiDVwnHfbivaR+yqeteC7hJXUjHOE3goR7mQcR3MeUzUMAuAdeiB/6Dp6Be6TIj7xvsZ/wURbcwAYeSiBIwZvvPBhBnJMfe8GOe4Hw1MDPUB7XeZiDQA3zxsI1MIFb8JEQSPDGTsQj6bEBQUy9tI+6wR28uK9CXWDCbyD8oK/AG4xCPSUeDxywxc0auwAYfP6/bHSVa3yhiHE3XufelxnPPOUD/owtW3ywPeLqy4yl0lnifdoTj3oIIwN0FmoYdM7fvRwG3gdZdOOlF3yhDQbveF1YKAJvFt4phBCeMlZyXNI6z5u1Y/UqY9EPBODgC//jXiu8W0vbtnHxhygilG/cjdfb8CsusiEXn+v2IiDdE3Q0DJIl3Bn4T7z7dl+BcebzT7sXDtHA4iAIRlYpZDVE2sGqjSx6goiIHzXCRl5zuQ0+/59uB54msEDszav7bl49RYiCaIzBH48xvy38ZvDbXBzfCuSlDXszbMZzTxtYDzr/Xy6q8u246BxzD9T/nshrR6UKljBujB08csQWNqzv7aZ9K9/v5iJyft067nUbfMG//VUDYIJXE08jC2vEvPScl4+nbeil5/tnFlLBiwVee3ds99UvWSERW/CKIsZd4B1drAUxzMqMhCAiqFkkBK8jeLKKI6t3svALC5DwigT6dG3fPu49S0tM8LBXuIfwA2vS8VoE+tlFYhk9ZuDLAxzuTx6kce9xbxTAtwx9p/SlD+SEkTASB84eDpxwYQY5+PFlQEq4GmFBDKwJ/eJHOvwz5B8l3gJC7vAwMahHjHCe/PyIM/BjPkifPn3cM8FAkTJZLIByWAyAgRTneOrOoI9BUKS34GSSFTvZ+ceD4MADhC08pce+0FYGfGGhCwZ3tIM2YDMDvVBOCL1DtHIO2ymDp/J4vkiPZwcxx0A0ciBIetoO1mDCwJDQLD5jV6iDMgl3RNSBF/UHzBnI008svIKHBPxJS5vAFM8IdtC35EWchDZyxFPH+cg0kfWH9lAmddAWyqW9tA2vD22gPrwj4ERZLLZA2XwOoWtgApaEwIbFKILYoB7ay+ALeyg32BmuUQc7ZRAKGWyBd2y8ywuBAUexhbTYEOpA0GAX/Y7ogYtgiY2h/6kLbOE1gg4vUhDc2INAwL5ozMCAewVbECzYiOeY/qRfuY7YpvyAefR9gLeN66G99CUDU/owcCtcg5vR+en/8IQbrobrHLE3snzKgYu0DdwIMcU+7GdHgIELO7xlsRQ4TFvwAuL1hXvB3uhjwAqO0HbKQ5jBI77TLmylb9jwGiISCUsF/+jy6DtEI168IF5DGsoghJT7g7bAM/gJ5+kvcMT28PsW8IjkGOXTVzxUwMsLBpGYh7qKPPLC57h1ljJ7ti+PvmnuXEuZM8d3ljPHQ4bng4E8IYbJ06db7Kd9LXnGDBcQHkq4f79tX7vGw90oJ7yTixBHFtIIXhrmDDHQTpk1271h6wcP8gVCWKiCMEYEHMupUz8Levjn2bN8CXVsYM/YscOXWeca4XVe38ak/KXmEYkIjsQpk3wVyaRJE90ThsggP23NK3e2rzq4dcUKYxENn8+Uk+NCM9QfcOAILnieiloNsChc4UV48MX9zlZUuiLPZWf7EvdF2jFvnodWblu5Iq/9c+b4O+doN+ISO2mf90FOjvcLYtbxnDvXj/krHVLPihV589bmz8/Hk9cVBOHFi6hZmTLfltmzbfvqVQXaAnaci+33ib9qAAHueB59CTb9ROhqcsxMr4MFRNzziAjNyLDNC+bb5tDfR7lHfbSnSHyKEVfcS/yO8ECIcUD4f3UsZSjt2TPYVF+qL8WBsnHgpAgzwOdHmZ0fYzaOkYNj0vA98joDmsiOYzDDdXYGWAxwwmfShe8hDUfqLPMgqJh/KJE2lPQZ+xm04qUgBJBBImICO6JtoG3BTuymPXyPxCS0NxqHgFPITxspI9I28nKejSN5Qh2RtoR0oazIckL9oYyQNmAayisqL7ZE2xnSRbaRdJTDxvVIO7GFujgPBqE8zrOH9JQRvody+B6JR6Q90XhyjXpCXaEM6qPNDPIJwaNfGVAQrkj50eUEG4K94Xt0Or6TJqQLdob2hWvhGPCObAPXwC3kIU309ZA/pA31cIzsy8jzfI60L5QRyud6dL8XVX50OZFtiCwf+ykvXA9ccEIU8yfUF2wL+FIG54KtCDweLOA1xwsavGjR7aVOBCFesfD6g8g0kfbSp6H92E66UG+wh2OwietsH3/8sXvUWGgn2BdZR0mfEVcMlIvag/Dy/EcXg8A75QPro/ZxLbIMF0FHw9p8gB75uxdZBuUgZINX4+jy9tF2hPIK2BBhb4Hr1BXKKcVO6gkCIuCDwImuP3wvVE9kuyI+w336kFBkvJs8bAl9Geop7Yhdod7oI3ZEXsdmyiuqDyLPeTmReHuewvVE91lkXZRRgBNH2+31gDe/sZH/V0NfFNdfXD9UBu5F4FscdvCeUHDCxsNDnuLS6nzZBmzCSTiJA2c/B06aMPsikId/9uFFs4T7Eb6Jd+9YB2JfBKzOlDbSp4ht5nIRxka/Mi8OzxSD9DOlHWeKnQgavJGEAvIah+J2vJbF4R/ENPM4mU9I2CdzxVhMqLh7kfPMZ40MQTxRmDHox+uGl7QkT+CJqk/llP6PGo7gvSGsOlJEC7vSsTsejLgH8PYT8gzu/K4eTznKc3L6R7gKV3Hg9OWAhFkZnvwVR2D+2RMuxyIG7AzeCc8qLr3On743QmTfECaHtyX0KaGgkdf1+cT1I4NkwpVfe+01X/mQ1Q+L2hHLpQ2oWYSDezDcjzylL66vuHcReicr7Jmy8aRRT3E26PyJ41FZsEQcSCCUH+Y8lOD/YWn3bVn6TmnKr9+EtbAWB04tByTMPocwg7w8GWQQFnYNxE4toU/UD0roT47HGvZ0omz4opTDwK20jX4oDY/juRd1v54d92tp3ND1U9PPur9ODe7iu3AXB85cDkiYfU5hJvKfueRX36nvxAFxQBwQB8QBcUAcEAdOFw5ImEmYleqJOF3IKjv0wykOiAPigDggDogD4oA4cLZyQMJMwkzCTBwQB8QBcUAcEAfEAXFAHBAHTjEHJMxOcQecrYpf7dLTLHFAHBAHxAFxQBwQB8QBcaDsHJAwkzDT0xFxQBwQB8QBcUAcEAfEAXFAHDjFHJAwO8UdoKcIZX+KIKyElTggDogD4oA4IA6IA+LA2coBCTMJMz0dEQfEAXFAHBAHxAFxQBwQB8SBU8wBCbNT3AFnq+JXu/Q0SxwQB8QBcUAcEAfEAXFAHCg7ByTMJMz0dEQcEAfEAXFAHBAHxAFxQBwQB04xByTMTnEH6ClC2Z8iCCthJQ6IA+KAOCAOiAPigDhwtnJAwkzCTE9HxAFxQBwQB8QBcUAcEAfEAXHgFHNAwuwUd8DZqvjVLj3NEgfEAXFAHBAHxAFxQBwQB8rOAQkzCTM9HREHxAFxQBwQB8QBcUAcEAfEgVPMAQmzU9wBeopQ9qcIwkpYiQPigDggDogD4oA4IA6crRyQMJMw09MRcUAcEAfEAXFAHBAHxAFxQBw4xRyQMDvFHXC2Kn61S0+zxAFxQBwQB8QBcUAcEAfEgbJzQMJMwkxPR8QBcUAcEAfEAXFAHBAHxAFx4BRzQMLsFHeAniKU/SmCsBJW4oA4IA6IA+KAOCAOiANnKwfKTZgd2L/fDufm2oEDB+xgTo7vJwpUymQ/UeUVVQ7l53zOOsh/su2Mtv1E2B1dpr7rB1EcEAfEAXFAHBAHxAFxQBw4sRwoN2GWnZ1tg+fPt+1pabZowwabvnrNMYmz3JwcO3LwoO/Rwm7P3r2WvnfvSRNmiMqMffssLSPDsrKzj7se7KSc8iJxsHt3RoZlZmWVW73l1T7Vc2J/DISn8BQHxAFxQBwQB8QBceDUcaBchBmCauLyFXZrm7aWsn273d6+gw2aP99FVmmdj5cJT1vytm02ddVqF3TxW1ItbvNmO3zwoM1cG2tVGzexl/t96kIPMVJamcdyHRG4NjnFbmrT1qq3aGmrklPsUG7uMdWB/VNWrXY7X+s/wPOfaDuj24TdYHRru/ZWtWkzi4ld5zhGp9P3E8sX4Sk8xQFxQBwQB8QBcUAcEAeOhwMnTZghPBAwiLLMzCy7r3MXG7VkqX0UM9Me6/lBmUQUXjI8TE1HjrLqzVvanR06WMUGDa1CnbpeBoIHb9A9HTraG/0HGhv1IUqiwQi2BK9b9PVIjxxpKJtyCAXcl5lpnadMsWsaNLRNO3aYHT5sduiQ11WW0ETE5Y49e+zOdu3tnUGDy2wnwjPazoO5ufl1Y2d0eGXAHfuy9+93AVzhvbq2ImnjMQvK6Lr1XT8y4oA4IA6IA+KAOCAOiAPiwMnhwEkRZoiDvZmZtnRDgq1ITLR24ydYlabNbMaq1Va5cRN7f8oUFzjRoiKykxE8hD++8klfu6FlK1sQF2/7MvfZ6o3JduV7da3Wp/1doJDm5rbtrPvUqTZyyVLrNWOGrdu82RBalEcdh3JybHnSRvsoJsa6TZ1qs9aus5wD+y14rRBAqbt22ZCFC637tGk2bvlyW7A+3lZtTPb8iJwe06fbbR06Ws7+/TY3br0NXbTIxixbZoQnlibOuE4oYY02ba3XjOk2fPFi+3DmDFu/ZUshO5clJtmHMTHWfeo0m7MuzusPdnKMTUmxwQsXWpepU9yGyPqDIF2akGijly6zjVu32pily+yGlq1td3p6IREXibc+n5wbTLgKV3FAHBAHxAFxQBwQB8SBsnDgpAgzvDqIjmd6fWh3d+xkl779jt3bpatdXb+BXd+8hT3WvYd9EhNTYmgd3qB+c+bYFXXeszUbk91Lhcji/NuDBrvwQDBtSE21q+o3bRtQugAAIABJREFUsEqNGtudHTtZhbr1POxw55497vFCuDUYPsIqN2psD3Tr7nZc+tbb1nbCBBdseMYmLFtuVZo0tcpNmnreS99+2y5+s7a1Hz/e66POF3p/bPWHDbe09HS7qn59o4ynen1o23bvttxSFgUJYYXYdm3jJvl2EmaIYOJ6VlaW1R06zCo3amQPdu9h93Tu4nV0nDQpz86DB12oVWrQ0MMT7+/e3a83GzU6z0uYm2sbt2+3pz7o5SGT1Vu0sIoNG3n45ZO9PvQ0ZSGE0uiHQxwQB8QBcUAcEAfEAXFAHCh/DpwUYYaAQvAcyc21+sOG2Rv9B9iyhASr0aq1JW5NLdVz4x6i7Gy7q2Mne6nPJ+4ZiyQHYos0CKZxK1bYJbXfsgHz5nmo3oTlK+yqunVt/ebNLubajh9vl9d5z2avjTU7csR3hNrV9RvajrQ9hncJD1yzkaNtV3q6HcjOtt4zY+yCmq/b2GXLvA5CGW9s3cYaDR9hT3/Qy1755JM8b1cZV1nEzlFLl7qdeOUOHTxoo5cstavq1rPErVvdzpZjxtgV79W1+XHrPdSRcMk6Q4e5uNq2a5fPp9udnmEz1qy15QmJ7g17sffH9mCP9z0/nrN7O3W2ezt38bllLIbSa+ZMb0enSRMLYRiJpz6X/40nzIW5OCAOiAPigDggDogD4kAkB064MMP7s3Jjsr0zYKC9NWCgXfZuHffi3NG+g1Vs2NDeHTjIZq2NLXG+E2GIqTt3WsVGja13TEwhb08IHUTwtBk/3r1LfEbMjF2+3Ko2a2a79uyxHWlp7gVDmD3d8wP31D35fk+r0bKVe652paXZy5/09fyEO2I7opKVFxF4O9PTXWCyiMZV9RrYBa/XsuotW9n+rCwXSiHEMBLQoj5jW/PRY9xjh5cPO0csWeLeQzxwW3ftco/fFe/VK2DnjS1beQgoK1ky167JyFFWrUVLu61tO7urfQf3JjYYOsyF3OAFC9xb6ELv0CG3G2/eNQ0b2YSVKwthWJSdOqcfB3FAHBAHxAFxQBwQB8QBceDUcOCECzPC+pK2b/el8RFWbw0cZLUHDvKVAYcvWuSLUcSnppYY/ocwY/VGQhS7TpliduSwz+NiAQ88cUEQIXgef7+nNRs58uiCGIdcqN3frbuLH7x0hFGycAceq2GLFvlx3LLltjgh0W2o1qq1NR4+wj1pCL78RT+Ozk+jDvIicPrExNiVdevZBzNmeH3BjtLIS5kPd+9hrceOOWpnnlB76Ki3a9H6eLez27SpvkBKpJ1LEhLdpsYjRnpY4rTVa3w+3IbNW+zqBg0NQYYnsP6wEXZr+w52MCfvPXGcG798hS+WkrB1q4vO0uzU9VNzEwp34S4OiAPigDggDogD4oA4cMKFGaTCKzQ7NtZua9veNu3Yafd16eqCLKyaGBbmKI6ALniys+3uTl187tfKpI2+mMja5GSrPWCgdZk40Y4cOmTbd6dZ5abNbNCCBe4RYmGOR7p3t7qDh9rhQ4c8pA+PXafJk/w6AmlNcoq1nzDBQxsp47H3e1q15i08NJEFOhYnJPjcuFZjx3oehCYhjMz7Yus0ebKHPi6IW+/zwoprQziPB849Yk2a+KIfCD3a90CXrtZo+HA7fPiwrUlOtsveedcXMOE63jsWHmk3frzNWxfnwuz6Fi3tzf4DPNSSeXW1+g+wS9562xcpwQPHnDnmvU1ascLSMtJtyqpV7oW7uW1bnxeHHcEmHXXjiwPigDggDogD4oA4IA6IA6cXB064MMPrxHynuzp0dK/ZhzNn2v1du9l+5oUdgzjAO7Y4foNVbdLULn+3jlVt3sIqNWxkj/bo6eKKRTPu6dzV51A92K27v2D65b797MJab9g1DRrZmpRNPper5Zix7o1C2FQjNLBJU3uoW3dbnpjk4m3JhgSvg3lmpGE5fhb1QPwgZp7p/bFd8uZb1h3PnZn1njnTzn+tpocR9p8zx0MaiyN1Tk6Obd29y+7s2NkuqFnLHu3xvmXs3WvP9/nE7WTBkrgtWzyss+mo0QXspN2PdO/hq1Ai1uoMHmIXvfGmh2YyV+/hbt3t4tpv2YNdu/mLr5O2bfM5fBfXru1pCHdkef9Latc27KSM4uzU+dPrplR/qD/EAXFAHBAHxAFxQBz44nHghAszvGEbtm71+VAs0tFl0iRf6h5v1bESDHG2Zdcum7hipQ1buNBYSh6xxHkW5FiWtNFDEtdu2uxL669MTvHvKzYmu4eNtHi8SDdy8RIvByHEOeaTYU+oY/LKVTZ66VJbvTGlwHVeKL0oIdHSji6Ln7xjhxFeuDAh0balpZUoNvGM+WsDjtoZW4KdePuWHrVz0spV+YuLYCflIOgIYyQ8kVBQVnHkFQAIUObE0Y7U3bu9jVNXr3HbWKWRkM2taWmlLrhyrH2j9F+8Hwv1ufpcHBAHxAFxQBwQB8SBk8eBEy7M6Cw8YyFkD0EWRNDxdCRCj7LYER+RXje+R5ZPCCDfPd3+PNAQNXwnf0jLuUhbCtURcT2UGUIBSUs57OFcZFnRn0P9oW6uhzKPxU7qogza4WItYj5cqDO0g3R8Jl1Z7Qxl6FiQG8JDeIgD4oA4IA6IA+KAOCAOlAcHToowKw/DVYduEHFAHBAHxAFxQBwQB8QBcUAcOFs4IGEW4R07WzpV7dAPlDggDogD4oA4IA6IA+KAOHBmcUDCTMKsQFinbuAz6wZWf6m/xAFxQBwQB8QBcUAcODs4IGEmYSZhJg6IA+KAOCAOiAPigDggDogDp5gDZ4wwY9EPlp9nL+6pQEhT3PWizlNe5IIiRaU50edCO8q73hPdDpV3djydUT+qH8UBcUAcEAfEAXFAHDj1HDhjhNm+ffts+/bttnv37kLC7CArFR48aHv27LGdO3eWKN4iSceS8zt27LD09PRyFWe0Ydu2bZaZmVmoLdjHS6eLEqC5rDh56FCReSLbpc+n/sZSH6gPxAFxQBwQB8QBcUAcEAeOhQNnhDBDqLRr187++Mc/WvXq1V2cBeGCIFu0aJHdeOON9uc//9n+8Ic/WJMmTezIkSMlChiuDxkyxP70pz/ZU089VWr6YwG1uLQIq8TERLv00ku93kGDBhWqF+E1f/5827RpUwFxRt7169fb4sWLJc5OsZu5uP7Vef34igPigDggDogD4oA4IA4cLwdOmjAjTA/xE7lFiyXEVeSG+IhuCEKFbdeuXda0aVMXZ3jOyEt6yqxQoYJdddVVNm7cOOvfv79NmzbNr0WXFfmd/JT50EMP2dVXXx1pRiHvWWl2Rl8vyquFrWwIyWXLltnvf/9769y5s58LdiFAY2JiXLQtX768gACjnRMnTvT2r1mzpsC1kF9H/RCIA+KAOCAOiAPigDggDogDZyYHToowQ5RlZ2fbmDFjXEy1adPGPv30Uxs5cmS+YEK8ILD69OljDRo0sO7du7s3CXECmRA77HjD+vXr52Jm+PDh7hUjHwJny5YtNmHCBPvFL37hZaxatcrTEfZYlvlbqKL33nvPrrnmGps3b561aNHCBg4c6CGGIT92bt261T7++GOvo0ePHpaUlOThhsHO1NRUb1/jxo2tdevW7tXCvnBTUAa2jhgxwoYNG+aC8Pzzzy8gzKiP9l577bXuFYwWdwFTvG2PPvpofv2hDh3PzBtQ/aZ+EwfEAXFAHBAHxAFxQByAAydFmCGu6tevb7/61a/szjvvdLHxpS99yf75z3+6YEN0rFy50s4991wPPSQMkWuEIc6YMcNFB/OvXnzxRfvRj35kf/3rX/3aOeecY//+979d0CGqunbtan/5y1/s61//uv3yl7+0f/zjH/af//zHQwGjhU1RhMcLhSj89re/bX//+989xPArX/mK1a1b1z1xlIF3izIJeaxRo4bXQcjk7Nmz3WtFW59//nn7wQ9+4O28+OKL7ac//anNnTs3//rUqVPtb3/7m/3mN7/xtvz3v//1diFG2bCNcmbOnOltQYiG85F2c65jx472ne98x/GLFH+R6fRZN7c4IA6IA+KAOCAOiAPigDhwZnHgpAgzvGWIqWeeecYFBn969uzpQguvEILihhtusAsvvNDwNrHt3bvXKlWqZJdccol7jvBMfetb37K+ffv6nDIEEqIMAYXHjNBAFvtYu3atizPmlaWkpFhCQoLhMSsLERFmiLCf/exn7uVCHD377LMuvjIyMlxYValSxQUbdbJxntDJK6+80lg8hLZs2LDBRRXzv5gfRpjiO++84+lZ5AMsbr75Ztu4caMvNoJo/fKXv2zvv/++p8FWNtqAwIuPj/dyo9uAfdQBLr17987PG51O38+sm1D9pf4SB8QBcUAcEAfEAXFAHDgpwgwBUa9ePfvhD3/ooum8886zBx54wEaNGuWeIRa2+N3vfucetapVq3ooYeXKle23v/2thyUS9oeQue6661x8hPlZiDu8VYikEOqICMTbFrxPCKUQhhgIzne2aC8awgwB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QqAQAhJmhSDRCSEgBISAEBACQkAICAEhIASEQPkiIGFWvnirNiEgBISAEBACQkAICAEhIASEQCEEJMwKQaITQkAICAEhIASEgBAQAkJACAiB8kVAwqx88VZtQkAICAEhIASEgBAQAkJACAiBQghImBWCRCeEgBAQAkJACAgBISAEhIAQEALli4CEWfnirdqEgBAQAkJACAgBISAEhIAQEAKFEJAwKwSJTggBISAEhIAQEAJCQAgIASEgBMoXAQmz8sVbtQkBISAEhIAQEAJCQAgIASEgBAohIGFWCBKdEAJCQAgIASEgBISAEBACQkAIlC8CEmbli7dqEwJCQAgIASEgBISAEBACQkAIFEJAwqwQJDohBISAEBACQkAICAEhIASEgBAoXwQkzMoXb9UmBISAEBACQkAICAEhIASEgBAohICEWSFIdEIICAEhIASEgBAQAkJACAgBIVC+CEiYlS/eqk0ICAEhIASEgBAQAkJACAgBIVAIAQmzQpDohBAQAkJACAgBIXC6IpCYmGg1a9a01157rcD+6quvWoMGDezgwYNFmn748GHbuHGjkf/IkSNFpgknSUd5gwYNCqd0FAJCQAicdAQkzE46xKpACAgBISAEhIAQOFEITJs2zb70pS8Vuf/sZz+z3NzcIqs6cOCAXXrppfavf/2ryOuRJ2fPnu3lP/bYY5Gn9VkICAEhcFIRkDA7qfCqcCEgBISAEBACQuBEIpCVlWXr1q2z9evXW40aNVxAtW7d2uLj4y0pKckyMjJswoQJ1qdPH1u4cKFXjbdsypQp9vOf/9x+8IMf2OTJk23fvn3uOUOE9erVy/r27evlkmHu3Lle7v/+978TabrKEgJCQAiUiICEWYnw6KIQEAJCQAgIASFwuiLwwAMPuIAaMGCAm7hp0ya7/PLL/RxetW984xv2wgsv2O7du+3CCy/081/+8pftd7/7nS1ZssSefPJJP/fTn/7UvvnNbxoet5kzZ/o18kuYna49L7uEwNmJgITZ2dmvapUQEAJCQAgIgbMegfvuu8+FVb9+/bytjz/+uH9v1aqVxcXF5XvUhg8f7vPL/vjHP7r4wrPGfu2119pTTz3lwq1Nmzae97333rOlS5f6Zwmzs55CaqAQOK0QkDA7rbpDxggBISAEhIAQEAJlRSAIs/79+xvhiuecc4795Cc/sezsbC9i3LhxLrDeeecdO3TokP3973+3X/7yl/6ZBIQ3vvHGG3brrbfab37zG0/79ttvy2NW1g5QOiEgBE4oAhJmJxROFSYEhIAQEAJCQAiUFwKRwoyVFs877zz70Y9+ZHv37nUTRo4cme8Fy8nJsb/97W/2q1/9yq8Ryvid73zH/vznPxsetoYNG+aLOK4plLG8elH1CAEhEBCQMAtI6CgEviAI8FS5cePG9sorr9hLL73kO59btmzpoT3HCwMT7mvVqmWEA/FkOnp7//33vc5du3ZFXyrz98zMTJ+cv23btjLnOZ6ELLddv379QhgxeEtJSTmeIj1PWlqaL+/dsWPHQst1M6js0qWLX09PTz/uOsAoNjbWduzYcdxllDUjq9zVqVMnH6cXX3zRlxhv27atbdmypazFFEq3c+dO52W3bt0KXYNbHTp0cC8HbT3eDb6CE3OPtJ25CARhFkIZ4SCC6s0337SpU6falVdeacwpmzRpkq/WiDBDjJG+c+fOnva5556zrVu32rPPPltImD399NNnLjiyXAgIgTMOAQmzM67LZLAQ+HwIIDp4Yszg5bvf/a6vUMZn9v/+9792vKKHfDytvueee4p8j1DVqlW9joSEhONuwKxZs+yHP/yhC8DjLqQMGffv3+9P3YvCiAUEjncwz8IELNX98MMPe9hVtClXXXWVY7R58+boS2X+zmAUjJgnc7I3xA2DXHD63ve+V4BLV1xxha+Odzw28J6pv/71rz73p6j8F198sdeJgDvebciQIY5Tp06djrcI5TsNEGDxj69+9av26aefujUIrJtuusn5wXl4iSeMBx88lHr++ec9PQt9wIHzzz/fvv71r9svfvELO/fcc+1rX/uaL/jBao7kR7RpEwJCQAiUFwISZuWFtOoRAqcJAggzJsAzmEboIKhWrlzpcy84N3ToULcUz0RMTIx9/PHHNm/evALWr1ixwj766CPf+cyGmBk1apTNmDEj3xs0f/58z798+fL8wRKDbja8QmPHjvUn1yx9HTYGRIsWLbLk5GQfbGEPy2OTvmnTpm73DTfc4HNAyMOS2SyL/cEHH9iCBQtCMZ/rSFuYh8LADHvAiMUAAm7YzQaWtBeMwrLcoeJly5bZhx9+aL1797ZVq1b5adoxYsQIxzWkY1lu7AdHxCt1Bm8THrbRo0c7DrSTjQEmuBJqxUtwefLPwgbYjGDE00c/3nbbbYYNbHiGsJElwRcvXuznTsQfwsUIG/v2t7/t9jMopg/CXB1EIhshZLx7inZG18937MK+tWvXenqWMR82bJjNmTMn30y4Sn64dPXVV3udwfvKEVxZmS/wC/6CLek3bNhgn3zyiWPJO662b99ur7/+uuPEYhGhf7gP4DX9Rj5tpz8C3Jv0L5wJG/fl6tWr/feN35HIDS7ye0OfwwW4A7fgIXzmwVFqaqrfT5T7ecR/ZL36LASOFYG9H3e3PU3f1n4WY0AfR28SZtGI6LsQOMsRiBRmDDzYeJIclphGjCEgwpNoBvksOf3qq696Op4y8x4g3gfE02ieMBOmiChgqelKlSp5uubNm3s+8uPBYUI+afEaMfi55JJLfGDMdQb3DJzZLrroIk/7pz/9Kf/6o48+ahMnTvT6SM8T7jvvvNPDk3jSTf4f//jHHrLUqFEjL+fz/AnCDHuD94oBHU/XqR8RxiAOGxBSnOMJfO3atV04IZbABtvwKIEfooJBJNhVr17d0yGiqCNgQDu+9a1veRgig8cLLrggHwOW8x40aJDn+89//uNYB6FI/meeecbGjBmT78ECI/oQEUle8KEfvvKVr/h8ms+DT8gbhBltDANYuINXEJsQOgjqm2++2evlHO2rW7euF4EAwmuLCEbcsdNGBtN8vv32251LLMYQcA7t+P73v+8eOerA00vZ7JQ1fvx4F4PMHcI7/Nvf/jb/On2Ed4X+Ij1HQtgGDhzo+MBhyqY+eK1NCAgBIXAqEECU7X7qLu1nMQb0cfQmYRaNiL4LgbMcAYRZED2EzuF9YmDLPAwGwjxF7t69uw9aCYdjyWnOM4jFA/LQQw/5565du7pHhtBF5qzh5WFAW7FiRfd8IEz+8Ic/uIhBHDAAZ7DLoBvBgCDBG4Z3jHQIPcpAmFEX87mmT5+e75FB0LHyGtfIjxBgbhzf69Wr53ZiG/PcEFGfZ0OYhXDPa665xjEKYoM5LQhZ5lFRN23HI3XjjTf6d56+I9i4hieI9t11110+h4+2IwSqVavmT+z5TMge3i+8XogWBAlP7MGc63jM8JAhOBAYYPTvf//by2euGnNnwBrBhycIjw91P/HEE+4NYLlvvuNtxCN1//3321tvvVXkPMBjxQxhhlBC7CHI4dI//vEPrw8xzRa8nPQn9VepUsXT06aAGS/2xSt7xx13WPv27d0DAh+D1w+u0Ga8WAgohC7tZR4dIhdhyOp6vH8KcfvPf/7T5wwF4Uo/4M0FT3jGQ4R27dq5nQg1PJPUDU6ENiL27r777vwQuGPFRemFgBAQAp8XgXxh9sJD8pqdZV6z3S885IJbwuzz3iXKLwTOAgQihdmll17q7/EJHgU8G4gShA+DVOZTETaG54HvCKDgDcIjg6hgsj3CBFHwf//3fx6ON3jwYE/PtbCFeR+E7PFyV/IzDwlxyCCb8hEZ2IQ4CYtXXH/99X4NzxUDb9KFeR8IOzxxCD7EHe8jYsD/eTcw+PWvf+1iFU8i7zriO3UzYEf4BbHKfCcwCiIATyGeIMQCbUSoICAJRURcIr7AGRwpj6W6w4ZoIQ9hVnhuEBIsXgBGiF7SI1ZZEhzMmOPFRv1gQFjWhAkTPF3NmjX9Gt4hPGVcR5DjWYsOJwz1H+sxUphhJ+L+4lazAAAgAElEQVQMAYmdiGRwQqzxHQ8pdtL3fEeAsbgHeCC0EFPYjDeVHbEH1oSCkh7uha1ChQouRtesWeOcA2vOscMd8hIG+Ze//MWFGIuUsOHxpD4WDQkiv0WLFn6NBw1gHHjNS4kJh9MmBISAEDgVCARhVtTg/VTYozpPHAIl9a08ZicOZ5UkBM4IBCJDGRFUbAgGVitjAIz3JrykFW8Cg2e8CHiGCCfEY0OoGB6HyEF3fHy8CwDmSYUlqiNXNEN0UD6i4/e//717WljBkfIZpDdp0sQFHmIQr0cQZkEAsRoi85Qogwn8bIhBPCUMqnkPEdfwdIW8nug4/kSGMvISWjaO2I0nhzbce++9Xh+rEkZihFcREQlGtO+6667zdIgrwhMRDojUIF5ffvnlfAsRFogUBAeeHfYgYMC7WbNmjhHeIwRQWL0RrxHCi3bjnQQHPIdszPtC8LICHYKQa4jYkDe/8uP4EBnKiJePDQGKbQgc2nvLLbd4nYRtghNePriEyKZPsZcVQStXruzp4A+eNdqDMENYYjNcDBteVbyEpEOgIprhKOWDOeKYumkngpnwSuacIR4RZtiNl45yW7du7cUGXoM3eHINnMmrTQgIASFQ3giUNHgvb1tU34lFoKS+lTA7sVirNCFw2iOAMGPAysCTwWvYghhjEB+8OYTDsbgFngy8ZoTpEQrHZ0LPECiEKCLqGCTjmSH0j0Up8PiEeVHM1UFwMNgmnC/URTggHiBC1vCoICKYV0U5QVxxDVsZxJOWz3jV+Mxy/9SDCMLLwiAc4UM5n2dDmDE/DHtpS9jC0tzMw+vZs6fbgvcOjPAO4kEEF8QkmCBy8U7h+SJcFIywj1BG7EVUIGJY6ALhRH3BfoQfIpDztLVGjRouLJinhncJ0RbEFV5FvERgFl6oixBE/CCOqQNRS1gqIoZ6Cd/7vBsCh74KNofygkhmIRCEGH2G1xCc8Njxkl/m6SHsET+EDoIbbcADiacKLCgHoYdHDE8b4YghhBTvLOGsCD/SsvgLIp0HAIg8cEJIw/UgzPB+0hfYHTiOCGOREPBm0RLswB5CNBH5kYtKhPbpKASEgBA42QiUNHg/2XWr/JOLQEl9K2F2crFX6ULgtEMAYUaIF/N2IoUZHivOMfDFu4BXCmHAzsCX7+Rl8IsAYrDMoBzvFnN4EAUMZpljxsYqe4QZMihHRFAng2K8c4is4EHjOoNsBtasOIg3BEEXhBlzf7CL1fbwyoQFOBAehKuxEAblUjflMKeJcj7PhjBjkI53JXjMKA/vGLbgmSFMj9BJ7AcjzrNACtjhBUJIIFrBiPYgBPDK4OlBmLH16NHDr1MG4gnBSx7ajnBD5HKNHZxZIIXyaTMCKwgz5mr9P3v3AW7fUZUNXAWpgoiKDSNFNEQhEHqHBENCAEMSBIEkIJ0AUpNICYQQkCIgkBBKqNK7QUQwgoAKKqBiQRQVFbEh6oPYPd/zG773ZrI5Z/9vOfeectc8zzm7zZ6yZs3s9c5aswYN0AdtPfcO7RMQCQipCxoBZbREO6WR8gM46sYEMBoz93k8RA/r3b7yla+07QGUB50AdNov9bCuTj2yRg6f0CSiuXiAmQDcycP7wBL+Q1emnHiYSWzoBFDz0Kh9mG7iuwAzPIO+QCnAB0h7z5pA2uDwNVrj3e04/0BX+9GZNACoE5jwAu+c58wrWCsH8FoTugpBm9uDDm1M8iSYwEAbmvZ5Bdp02mhjU4WiwCpSYEx4X8X6VJkvosBY2xYwu4hOdVYU2BcUIDgS3gEdjj4SCNnuEWgSeG0kQPUAzjNrmYAiGhAaMIHQRaDuBXQmfeIBY4RhYAO4EwjONBMf+chH2vN2czJpZoC0VNITaD76sn7pS19qGhX3BMI5zQyNkPTnEdBIveSR8iYv9+KB0D0CPhrRRvUBuFI3Wiv1F6SFRr1GTz5ohFYE7T5Pa6MI9NLxPEF63uOERJBe/550aJ0CKtHM2jtAIfeS1k6O8tdW0kx7SQ9gVB58koA+6MTktQ/4Tf0AyNQRX3pf2yfIB53wl3Q9T56AtK0BPM874XO87lwAjPuyakdaX3EEdKM9w9e51x5s4Q9NTE4AfBzGSFMAyNzL+sgtJDkzqrpIk4ZwFQL+j/dXex5mjWS0l4961KPmVg1jFtowG65QFFhFCowJ76tYnyrzRRQYa9sCZhfRqc6KAkWBokBRoCiwIwoAZnFYAxhw9S/Q4rmmxQEUgVFmk+K7ZvIKxAPj7tMiAbG0pCYdxGH+SQuZ/fqAVeafzFwBeI5SANw+mBBhAgr8ZE2pPKUFrAO6nm0XiPZ5HegcMAtoRYszzzyzvWL/Odc0qcqmDuqozikrUI82wDcQDujbggLNxEMztIljG8+lSRvKmyfaoHkfgGbtov4mWARgH13QB5C3FtGxQlFgrykwJrzvdVkqv/lSYKxtC5jNl9aVWlGgKFAUKArsYwoAElnzx7SWyS/NcNb+MXel4WPqymMnsEFDSJPEhJIm1HpEppTZqJtZJ8ct0gM2pMnsj6aUiSpzUmaqnjE75iRGoDXiTMd9P+afQIgyys+19YqeASi7HQLMmLkyTVUfZbTGUhmAWGv6mLTSqCknU1jrTpn6og2zXPVlAusd6xvRhomqa+nyTAq0ooU1qOjqmXyZagva5LrXvW677xl602pqC/m5jkMka1grFAX2mgJjwvtel6Xymy8Fxtq2gNl8aV2pFQWKAkWBosA+pgAwYW0fwGDdJnBgTWG8cAaYWStn/VuAGacnQAXwwQTSejpaHhtuZw0jxzy8RgIS1jfS5MgHOAPUaHqkKx0aMHsM0qh5Zj89a+6AHnlkXZ51d/LpTZB3q/kAM1smAGQ8c6oX5z7xvAmYMakGMq2TDDCzPQQwptzWYaKpd2gT0QINmOna+sC1NWzMPMUD2AArWjhp+KEbMMdzqGe0bUAwsIxuAbO2yaCV6827d4s2lW5RYEiBMeF9GLeuV4sCY21bwGy12rJKWxQoChQFigJLTIEAM6CANigeSLNtQoAZjQ+NjLWWtDQ8jQIswActFnDimXVYNGac4ggx0eMhFIgI8AtJeOEETuzxx7mJ50CYrRhoyDwDRgAy6dqaYa9CgBkgaT0oD6/KE9oEmNFWAWNMFGnMaM9ovtAGuAQ+Bes4gTt1E5hzSg/Npe88DmQ8P/HEE9s9TmeAMMDMFgreR3u0An55iKWVtMa2QlFgURQYE94XVabKdz4UGGvbAmbzoXGlUhQoChQFigJFgabloTGjqQKiODQBJIAEPw4u4vWTeR6wAoAAYzxmBpjRbInH0QkABVwJtlyQDlADmDHPs7F3wkknndSeW1fG7I/GiCdEHkBp25g5cgzDlBEYiXOSvL+bxwAzHkRptIAnGqzQ5vGPf3wzZQTCbHMg0CjSkvG2iTY8ZwJV1oLRfAFmNFvCJz7xiZaWbT4CzGyHkGBfPPHf/e53t/TR23YUaGOfQBo3tGHKqAy0dxWKAouiwJjwvqgyVb7zocBY264VMLNI95RTTmm/Bz/4wZPHPe5xbTHwvAdXm5f6uPYex9JUbNu5FfeBWHSwEDr04Ans1FNPbWYZX/7yl+datLPOOqttZhvX3X3iF1xwQaMHe/69CNxbq7M2UGeLyfGFWdd5hic/+ckt7Wl7HFkvoQxZaD/PfFc1LcKftkAXbrGZGjn60SCM7alF+ERLWoWxwPMgN+2ET1qLVQvMpZR/SCPX9pEbG8cIrLQz8VI4q+7GLPTmzh0YWMXA5M74O41OxrhZfV19eXIElg7EH9Zu4dFXvOIVWyaRtG0FAQAQ8gX0DvhAf+2U9U021/YTn6ZIW1p7BhgEmNHs3OQmN2lpBZhFY0b7RNNjSwFONGjagBjeKU8++eSWr+0RbHzOSQhtELBIQ8fkca+BWTR1cbZhQ/DQhsZMP1d/dQKWmIN6TsOINgDbVa961Q1g5lm26BgCM2kAtbYT8B0ARIE6mrbsE4hutgCxLlDZgD1tAzCO9bktM0a9UBTYIgXGhPctJlXRl4wCY227VsAsZhFm47LY16DNlME+NvMKbOLZoMe1c58uL1PyfMMb3tDfXsh5Nub14Y4Ji7JZd2AWcl7BjKTZ12l2+KeffnqjB9ORvQjWcqijNQd9nZmwHEiw30r5uKe2VmKaUGNfIWWoBeMXUZRJECEQXYY/AmncyV/0xkVnZrnNbPcu6i96etEZoY2WAi8eCKBc9NbynBG4jV1D+rgmXBImZwXrZQiScT8+K552kB4Ny6oCMx72CNzT6EQ7NEYD9SbgH2j8i0mcjcK3GgAzY6K2jJkgk0RjBu0WkC1wQmFsVg8mjbRbwJiJCOurgA/lNMbY5814I5ikkM69733v1m888260csY9k3ICrVS/XyDg55ky0sABcdPGsPbyLvzRmNFuKXO2TfBtBojUicZMoNVLX6BJtBbPGjC0YZ7pWh8H0sWjoRTwhnSYcwLh6Ot9QBWd1Z/zEwEw7PcJpKG0bs13gsYMPQuYNVLV34IoMCa8L6hIle2cKDDWtmsFzDI7yDQBSDBIG5QNyFzsWvzMBa8ZMYuGIwxyoWtzW5vCRgPig2rD0WjFHGnDDOb2uLGYOmCPQGXxtMXHT3nKU1p+FmwLBnmujn0MLTCOMOTjapaOsGktANe88w4AmLqrG3pwv8wkxD0uhS0URxN0sMDZLLHycT/sHcAidaTxQo9oNgiJ6EHQUz+aMbO7gn2B1NdiazOg8mNWIxA01NvzuHx2H73N6KKHRfLb1Tje5S53aflpX3VGVwIO4V+57FGEDj7wNkBWD0KKtlNndUw98I/1BtEEmoFWZyYy73//+xu/RMAjyKkTXiJ4qbN3Bek5xyPonaA88lVn/CKNdQ36AUGJoBj60Gq79qPFxRfawJEgK+BTa03Q04x39qjSri972cvaBsDhI3xMMDd7vorArKcRja86066gDw9zaISP0EifI+QK+rFxDo+/6U1v2gCw7tMgo1NciONd2hcTGBmLWiIr9Ic31ANd7ne/+zU60ca61q8BM2MXOhmD9G/B+UEHHdRArokiGlaBG3ambOLr84K+if60KtsJ+FSbadME44gy9kDIuOfbZFz1jfGOdjXph5+1kfKbdDA+C9KUjrELnzv3vufGN9d9QC/1kY9vXwJQI93QJ/d3+6icqWfy0hapR+5lvEY3Y6Syog26ZFJU/aWVcUFdpSO+uM6lrd5oI40+GL992zwLfdFcfLy017Tpy1bnRYEx4b2os9oUGGvbtQRmzDkSzKT5wBKoLfA1K2bGzT3xCEBm2Fz7mUU0QLPJd83mXHj2s5/drs2oEfzMTvuwcYFsFk5cWprMWnK7C+QBR5ndNevNVMlgby8b9+P9KbOoKfc8jgFmvRtkNFBWIEjeymsxtXuEFbb5tA6u/czS+sgx33TN7EN46lOf2q7Vk4mNWWiCBTO+aKosnraGwntAL4GJ9jLpm+l8whOe0IQPM5zoYaZS/Cc+8YnbIkGAmfZO4O1MmgDnIYcc0oAaAc09aw3uda97bZTJPTO6BB0gm7BLuBXM5noOlFuMbq0DoYF2NNogwCCzs2gsnTve8Y4tHe+awaVV9fGnxSMkp868lO2H8PSnP73RUdsLZqVtAos+fmiOZmh33HHHbdynBcdHeA8Pme2nSdPvtBE+XWVg1rf9k570pFbv8AThst8bC430JffRKrQzLpk0wKtoZGxivqUvmnwhcK46MOvpxFxd3ZnqCSZjjFmhhzHlnve8Z+un0Y6gnT5KGGdKK67vAt7Rj00i0ea4v11g1pexzosCRYGiwHYoMCa8bye9emd5KDDWtmsJzMwG+2BH2AMazLIBED62zCYIKUxJXAMwZtYCPqxdoBkDHHzkzaoBNAAHwYZtPoHQmg72+gRDAIXGI7P7Pu7nnntuS5+NvPRSHjOX0RoACDR8MXmZJ9sEmFlXgB5HH310Kw9AoR5Z4wCI0Eak/haPm4WM9s+71koAsLxnoQdQR5gxU6nOTHDU0f47zFTUn9bLWgE0NtOftQSEKOs84omLFsl6MPGYqKDbdtdnBZg5Pvaxj90QZpkKAdIpDyEXoLI+Tr5cT6tzwNcZZ5zRyk+4lZY6My9iTmOmGrh3TmMobfwADKpLtJI0qwRr6b/whS9sdQLqpWlm/j73uU97xgzJGgj02w8hNKFNFeLi2mSFNqAlQjPxgP0I1GgL3ONrP7Pm+ExcbYSn8d6qasz6tgda1QsIFWIirS+iUfqLvgSQGtv0T7P/NDLMmAES/TNu2oEMGgMTRKusMevpZKILnazREqwLc61fG9PRwDVtNtBmfAJSjT+ujcn6IT6jMRM34z8AV8Csp3adFwWKAntJgTHhfS/LUXnNnwJjbbuWwMyMMLBk9tiagpiUAROEkpirRABk4iIQcMykXu9612tmEAQ8M6g0To5mqAUaGDPRZqbN4nO3mxBtgHeOP/749qGnXRHHomUffsIUAcs5c7rdCgFmoQfwZJ0DwCDYK4cGB8AUHvSgB7UyxdwOkFE/WkRmIQApLYW6ec+aPgFgAX7Rw6xz7P09y8w/zWJm9mmI0MMibDQATDNzHRPQlvA2/gLMtDMeAB6VBximpQKalJHQJsSDGbMZgeBKuAdWmQwBr9KgTURHbpgFABLAVWd5EfAS0rb4Dr3VkatrdQbmXNPwAIPOgYv9FIbAzDoedGDqKOBHtA5NM6EAeAnMGIE67wUE65smX9YVmFmzBNCHBgAY4GD9nWCcQ7OYyTGbZt4HoOFT9AUy8P06AjMWDYI+ZmwKHfR7dQdkBf1Q/4/JurHQBI41ehmPxMWDBcwayeqvKFAUWBAFxoT3BRWpsp0TBcbadi2BGXM7oIJmA6BIyF4oEW6itSJcC0wYAa7sF0PL4aMec8MsGvZcPKZxwE7iSyNAhCAfZySESOs8eOYC3AhNQ1CYMs7zGGBm/UTokbU36EJ7ZP0VOgnW/KivNRcCkAKQ0hYKZqV7ejBbFJgHAmboQXOU+J4RerwDmBGendNG9fSwRih573StXYBZNkwFtrNOgNaLkEqYZwImZI+hgFEmTACdBfNCTDZjbqgeQoAZwU58ACwhIBNfxRmJGfzUmQZVftGYrfPastCkPw6BGXCBL6zVFIAO2p9MhISGhG1aDuax+h864m1xtfs6AzMgFTALeMU/aMYzn2ASCTCzJtTaGBMoJhQ4UYhHQOPBugMz1hDokPVCzInRiSbNxIyxHDAzDtKaGd8AMpNlsaAoYNZYqv6KAkWBBVNgTHhfcNEq+x1SYKxt1wqYRfvBLG9aoP0ApLJwmMMKH22zzZw+ZME9l8uCWdOsl7IWK+/5uAMghKSs+wC4aJKyxsw6JNow6Vs/xaEB4QAoYOLH3bNnwMxuhQi8zCyHATBjQgeYEXaFmDypE21PFtZzDS8AEIQa5WaCGUBH84augFzWdxB05Ou++Oj74he/uJ0zFSIwAWNMAplJRlu3U2Bm5lt+1o4NA2BGa6kNrF8SOAkRn+CrzuEhAq1AADYDLw4wlvekQfsFDDBnJTRbl8j5QjyCalvunr2rvdXZGj50x1txVrPfgRkzTjTCr9rghBNOaNc0qUKAGVNbjnLEpdHUH7WT6wAz/Mn0MRMQLYEV/BuaMoaPrIdEo0xAnH/++a12gBk6ABfWzjqnaTQJFZPkADPARR8HVFY9DE0ZMzFmbDHm4BO0yCSSCRbrzphLc4XvmQk0vJQxOcDMMzSrUBRYFQqsQ59eFVrvRTnHhPe9yH9V81iFfjDWtmsFzAi9hI5ZwIwJImE6GjOaFKCDMGfWnXDN3Md6A0HjMiGSZmam3beeA+CQTr+Oyuyr9VbiEwSYwvnIS5dZjPu0dIRGQoDrmFHuRgcgcMhjFjCz3gLACDBTLu7taYDQgwDDQUW8EqJXTKZi0qfcAC+NGe0UT3BxrgK8ykMZeEkDjAL20MMaPvlJlyAlXjRX26UHZxHSmQbMeOyyHoymMADLPW0CfKmzHz6Km2RtyP26NLWlgC+kQfuGNjSMcaACyDPtFJ/nPJ70AvbUGW3xnDrTmIlHQ7SfgkkM9Y6DF/tOoa176M/UziRJvGMCvEwUCcqACE2aeLRmtOCcW+BLnvpoipiurjowo1VGD1pBgekdvgyP6jvGEPwpWKdn7RQamRAybonLnBuN0M896xiNd9adrsLHq1Vu5M8kGjqZCBJowq0rM+aqv7oCueEHa0j1dX2R2bSJJO+jkwk3/dM3wGQRPuSSfhmDtlN+W3OYXJoWaEezT2A0iOIx29bfONKxBlFf202T+mllW4V7vhH2RESrrX6XTHwyr0V/a0KnBVYsrAdMCpp8wqfZQkB8EzC+i5mgcs93iYmyCYjwtHGSabzvvUkp5e0nOK19zkSFtfXOtbkJUj/n7vlekZ1MkvqOJ1hHLU1rxAWTGq6956jceDHjtW+qSTTP+5+41npuNVhXzOqIrOB8VvBtUA91FEw0p5x9Xd0ziU4mEd+Ead5V3j6u52Q05UaX3lu0dfDSYlkl+E4lP0dtZCIRPQTfOeN5TxPn4s6SWceE95Zo/W1QgKylDfQly28e+MAHbsjXZFxynrXa4VMv6lvaONY67vmmklHc7xUn+p7vsjbzzM+1CUChf963sfbFB8Mw1rZrBcwAKoOgBpoWDIQ0HBnQEsc9AxHTlqGw4kMvzX5A8JHzTswkCecGbkKPvMWPm3l5EBh5AOsHXYO+eMDKbgVAaViWPi/A0kzxkB40X8wt+/LmvZQ7wMV96fR0FceHwYBOoFSGftNX6aIHuiQwUxMvg1jub/VIizfML2loW/VVXsCoD95RZ2UehpQt61I8l45f0hFHnWlRU+d+AMAb6hxTNGmEX3da52F5l/1af0HvmJOmvGijDXoaeabdxOcgR79CV/3NDx+mLQyozPgIm6seMu5kUiT1wZ9olDWSuY8P3UMjfQ2d8CM3+Wikf+J7NNK/MxmT91f1mPGoH5/xi/6GTvihD8Y64w466Xdow5SawGXsFt/47hk6GUOXMRAmgUsTEYSIaSGaUmCdVjrBpKF7BGoA1Hk/8Zh4+/0I9KMNSwkgaSvBdz3m78b9YfANNGkpfRMqJpecs2BJ/JjRmzjQ3gLeNMnCTBkv6+dZIoAfTIZKxwRhlmiEDxwzSSjO8EcrbyLC/X5jdcKpeyxDhHi6Hr4PYBqvjM8mJ4fPXdP4bzUYt9DHxLfzaUE/zfpt1jzGwGjAp5UDyIt23aRWln1Mi8vSJ/4C+v1pCeTiA8NCPF4P0zBZTCYw1pgYHj53bb35tDAmvE+Lv1/v6QuAElqyikrfwzPWGRvzTdYxW+/ljlh4maRK8N0UV1r8IgQTkCsoINzHj+mz+h2A51uU5+L0P5YdwzDWtmsFzIYVr+uiQFGgKFAUKAqsKgVo083WM08FrgUTFxGgad2nebAlHMfrLgGBRjkTcMzs3SOomyl2TmDfj8Hkqr0krf/t9+0knLF+YTVCaxaz/c3SCDBjaUHA67VP3tcOWX8OqGQyKU6jrJNUrnhJ1j4cbwFhysFaB/gQsi7SOncm8YTHAA7mzQItjTTcNxloAgfYUjeCJHCOpwCH8FWvQWUR4n3lEuLEC3jzHm0Zyxtx5KV+BGMaZ9o6YDKTZyYwtxpMqHPKBow6nxYAJvmrE0EZjxPA1dXEi3dZWBDS3QMgQycTG5nEBsClwwLGcgP1A6qybYu6JgC+4vIuLcRsmi8CQECZ4vBNO+EJ6/EBcdpJdQldCPXTwpjwPi3+fr2HjqweLCXSvgJeZDVB22pil/UES6d+IjzLJPrtlWIer21NdGR8NZmpPU2G2QvXNU0nPjfWypcVlef6fN++PRhMG421bQGzUKmORYGiQFGgKFAUWBIKMB1jWklA8KNNsYE951YEDvc8J8APQ4RG2hRmPbQuMcMqYPZVatGQWtea2XH0zNpVGhQCvnuE+q0uORgDZoAKjZa1yAHbSqQ8BEdtS+PLPFf+BE5HppE0w4AZAZGACXArZ+/Zl1ac6VTuBZjFdFxewCAQIx1lTcj2EpsBZr0wy9mZMlrmAUAyC1YPZoVArh9hdWgBkHzHjgcCZqwFrKfF49GS9WtDgS4Cu3bsrSnQQ5nRJwHd3dMOsYbxLJ6DNwPM4vXaewGM2kn70iQyQ3efxQe6AI69xj9lcRwT3vt4+/1cGwNF+rJJJvwPWONzoMg57RkeMKGgHf2yvVV4GUAGyk18xGt2xtcAM/1PHxZYsEiXVh2A8y4wx1Q2beuoTwzDWNsWMBtSq66LAkWBokBRoCiwQAoQJKyFI8hZE8YbrBlfggTNhnVGBEgz8a6HgWMhAruZ+TjXYbooFDD7KrWyz6j10gS4mPwxYSSgMXPSBkwL+1n2Ia2nXY8BM5otbcdp1jDELJGZXBz+ABAHH3xwm4mn3WOyRwCkPeNIimljlh0wuwM21cn6NhqyOEjqgRlNEGBGAAUYErYCzHrzr6RHOCbAMntUR4KyfPyc472thgMBM31F36Ch1BeAKsJxNCeE6AAzmpWEacAsGmR07dt8K8AsZqfykZ5+qP3QJVrsIV2yTilly3FMeE+cOn6VAsBuzFnxnskPAF2bA1Cu3Z/2CzCLmbd1hvgHX9k+Cy/ob/odYK1/ceYXYEfzra9Fc5z2dTRBMdSaK/FY2xYwK64uChQFigJFgaLAElHg9a9/fRMg+vVjtAI+9ARN2hMCRhwd9EUnANpSgokN7VoAR8x44o14v5syEqbQMEITutFA2gtPYObkOgJ+T+MDnY8BM1qZgKJeWyXNmMMBgzFTZMraa6SYShEQaZ8Ijdo5e7MCG9auEQbdB5isoVLPrQCznq9mmTL2wMyazQAQ5WJaiVc52zExADACwtuh5YGAWTSC1r5xhCNv9cX7wjyBGYciCdFKD00Ze2DG5E1ZmHbS3Jho0TbMKHu6mBiYFsaE92nx9+s95rPWguEVYydHWcJKY2wAACAASURBVPGQzstzNFs0ZhyEMF1++ctf3iZHtE+AWTyZW69myyVWCviYCSy+DvAyLjBJNRFBQ4fHaO1ooN3n1Cft69hratNGY21bwCxUquNcKJCFknNJbEkS6U0alqRIVYwFUGAzvL2ZOAso+p5muRkabCbOnhZ6yTJjZkNg4PUrwV6JBHozt1l/RHgYBkKHd4c/AoZtW+K0YL8Ds2xXEs9rzAppyJidGfNtKUEAI9RtNfTAjMlaH5g1WWtEQO9N44AxQh3TRWuxsm8oQCNkiwztSkDUh3hNdk2DmgCMcXJgth8Q2gow4+VTerzXJQBp7tHmCVljFmGWUJz9SmncaBeyxoxDtZ2GHpjh/T5YS8lsUvmGP844tCOheKcaMx7+pK9NEuyh6V4c5wRUx5TROkFaS3GYxSmrdqfh3CxAHRPeU446ftWDKRDFG2ICE1HmrSak9EEmhzSh/WRItrsCpjmWMekx5CPXtGPMTbPGjHkivurXjrmmgWbqCKQdKIy1bQGzyaR56OIKlRvz3nsgE4BHPOIRU9HugYi+356zwUcrHooM4GYJQkvCgBmMeJsyWDO9MKAva9B5zajwNMUswwcwm0srsxkui6Z7c4dZdTGbwhypNxmZFXde95niWEzOVavZzFnBh8tHmPnONJOoWe9pO8IA71bT7KdnvZf73penhbnhkzxbtiOnAOjItMnsm1nZeGRNWQlYzBsskLclRGZW1dO44oNBYEqIy3Kz4uIaf+JFDU3ll5/2iRCU98eOysJZRD+hgHe1l5m8oaA4ltZWntHEqAcaMCFhWtKXwbnZTAIxWtrfkSZA0I+Y2hFk+nU3n/zkJxsdzHLaI1D6BB90JQyGRo7q1s9WH6jsFm4zXelBorUB+o2xf5HbWPAIyVkB0xxlVH8CQjzARUswBGbocsQRR7S4xmBmc340F95Hc5oO5/gyplvGt/0Wsv6HJlL/8o1Cl6wpoYEB1HYCzKQHUOFbtDc20G4F7BDSrYsyDsYMC2AWaEu9H3f5xozskWmmHt/SyBA4xdOGgAONn2te48aAGaAOwPXfJdvM5F394KyzzmrCqHu0XgJ6uSbU0ixkD0WgkvbRGrd4xWMCCNSk7nG53xLa5B9gRgPMhIyWU3qAziMf+cim+VAW4AwtrKOk3SCA0xga64Bc7xOYN2vKyHti/2235ZB80N/4rI3igS9bAASYoU/GQe9oH+OY7xyNGbrz8tjTJdq9IUnGhPdh3P18HY0YrS25wtiO59AfD5I38aetnPp1jhkrTc7EtFk/0ke1me+T9/Q3/Y+m2rg8TcMJmAFu+A5Y79uXLDkMY21bwGwymcS0QyNmTwpE1IncY8NcYTYF7AHiA4ZWBj+zus4JYAY3woMOEftydAV2+pmL2akv5knsz8208Yilw/sRDgXqawMuAepAQVrict+9VyGbDGsHgHksGHSUz8Cy2QCYEBIJL1sBdEnfx5sA7+Peb0OQ58tyJOhod3RkBuHoZ08UQINwhL65j/9zTtgSDNLuEfYTgBD3ABHxnMdsLW54k06O4hK8ZwXPCJg+/AQVNBYi1KdfsrWftaZhVtoHuk+ASzl5UMs5QCAoG2El93s6RRDN+hpe8BLQ2TtAWM6BWXUjqCW9HLUVevZgK2nliHezloAwFfAIAEvHh9VRe2cyKe/u5RFgNwObdrOGJmAReFDO3uRM2UzCEPYJpr3ATUAnVEoPYPOuNrNg3TnAsN8CnjRZQfCivdJvCGVxxEDAtlap39ZlszTy3QNYwkvhT8fsWUXW0B55RlOmL+S7aOzxvvZKAMjd076ZHOJJkElj0gHweFfEv9qdExHvAOIJ7tMGclrQ84l+w00/4TPp0bwZ42h8BP20rxca6UfZUgAA4XCmj5O0aCO3Gkxs+kbRfiQdR/nam1Y+Q2BjrBBfnU1SojONSu9u3zPvBogrV/oDGaUHZnjFmB1gLH/fTOA18Zi+9nUWl+BvXaCAr5hZ9nFSH7w2LYwJ79Pi7+d7QBSNZGjqiC8pAkyKag/Pe2Bmb0/tYeKSSao+kfYKLcko4pxzzjnNTJhMyMvjMDCFtpZwyKfKwQvrMIy1bQGzyaQ1ShrTzEoW0hJuAI6o46Fkg6oB1cxqBnAzkhZZE9LNwvmg0iKwJQdazEJFSNI4Zm3MHJt5385s3LCBF3mN4QlZGJq3Gypceydlk2kzEeKor7oSCHUQs01moWgJ3MvHgamCGd0IIIuomw+LgVxnjO2+GQ/XNAFm5bK4mTlDBnuzc651YHb5goE+ph8E7/CWD6P2R5fNgLut0mFo9uLjlOAjQ7OgTnjXYOUjbmDRdrSfKR8+9+HRHkykfHwDSLSTAY2AIE2aUX0DEO+1Q2bl5dXThQCgX9BGpW/oX/qPPqNcCWiIR/QbPON5PzASRpVN+rzWzSuYMSO0ATIEeYt7aWsC0PRv9AAGCEOe4X/3gBMCNTDOO5rxhSka2qlvFoGb3WWu5nnMZPQngztQYOwhmEVQmrZZvPrqW1mILC0aKXlpd+YZ+psZP2UEaAiNEex2Si+z5PqGMprkQif9Wj9HG/wdGphRVGd0wj+EUe/qUyY9lF1/EYyhzFDQUd+KuRQhDA0BWEIjnjV5xlkCYU38aB+HdUMDH0/5+NloWzApoa0JqtpV2aRz7LHHbgC3YVp7cW22nyZAuSMYy9e3R3/JuJmyoBl6TzOloXnwDvMbR2mgo/PtuDFPnqt+VH9mT8NvsW8R7e12+onxzXgq7eGvtzBAd/yrD4nfh7RxP3FlnJWetuwDPsAjvjvKre8bL5XdxJl3eoHUffd8u6ZNYkjf2KWvDr9PeKuvk3IrV4L09Kc+Ts6Hdcw7Y0dpK2fSyFH9tI/rgNmkg8buhxbeF78vJ3qIEznOu+kP6j+NLtIxLvv1mn3vyitlc5xGFyCzj5Nz704LY8L7tPj7/Z62NF6Sb8gN2lNw1F7aVd9ISJvpP9pWnJ5HxPMN1U6O2i/9KmnkKF3pp037o2/iMIy1bQGzDpgRJHysqct1SrMbgBkh08AJtJlZi8kBAcKAID7hwqxOPviQej8bRr0qEHr7+wSm3kRu2HjLfk2Nr85U831AL4IyIYcpBiGHQGUmTXwCG3oSVp0TyIV4kIpdfZ/mXp3rxBFyqcHtS0L494HSOdnRK7N6RGhnx2/GlRBMQMUPBEVCt7qLS/BDCyC+1yrgm626Yx6jBSFVXjR92RgzAr1Bh9lXyg9kENTxoQ+J2SHv9jxqJilgRB3NwAqEbCYfPvz2/gAmMrNJ4CZwEBSc+yUNC5+VQx5mfgFhA2n6FVoB+snH7Kd8eTFLuQnXhBq0RO8+fTOh0z6qYzSb9izreHq7dfHMqOFPAy/bc+XtZ13FiQbJc4KVMqqTQR0IMY6oO9AbjVkPzPCPQT4hm83O0mz4oDDF0t74LXsO4QXlCwCRHiBuXNuOkJTy9Ef0lod26gNwxPzJBy+uh3ttmLgxsTM+6lvAFnBF+CP8SFdfxC9Ml1z3wIx2qP/oZY1MtJV9eZwTvmny9Wu8FLrgVWnTNCTgZeXp1xHkWR2LAkWBosBuU2BMeN/tvCv93aXAWNsWMOuAGTMGa4p8oM38WjwaYGaWnqrafUIDoYogCrR5zzvU2j7wVOYRIAiOZnUJQwQIqnfCu5l9z6jDzZ73s2K7yw7zTT2bNFrfMSuwK0cPmhQzDgRwM9OATjQOBEqzeMAEYajXiMxKdzfv09BoY+X204bMDWh/CJBU4O5rR8CCsKcO6kRz5BmzDaAlts40qXiANpFtP16hNSKE03AMZ/22W78ACsAY4COAEkQFM6CurQEgtAPEPTADwpQd0ASqtIVrmj1aI4CCCaPZe+3I5prgDXSJC7ToI8z3aNsCOpiB0BYCFmz08TuTAHxgdvXQQw9tJlgmKazdY0qiXMyI9CtlIDTTYKKVa2Z7BHrnALBJAOu8pB/zku3S0HsxvaONmxWyQSU+7kNcktO4CNlQ1kRG+gPQJjCnUochMAP8EmhwxDE+4TcaTT/jTw8cnAPWWfgOvJoEMOmkTLTa+M1P+88jMOtVNhrgWSHrUIYTENGSZQE9PpUWfjOmONf+QkDXEJj1JrgsGrxjTDZr3tOpN7k1DuHlaOeAYIAQrfAVzS+Aq98veiyaRdO6XxQoCqw3BcaE9/Wu+frXbqxtC5h1wIwmgVBoFhaQMmPqw0ygJFATqHzwgQeCDQHIDGwEEypUAfjyjGBl5p5WgUkOoRgoA8asF7AZI+HTj9p1FUPcNtOY9IFZBSHQkSBFWLIeAj1oSmg/CE4EaO59CekEIkC43xyyT3OvzqmklRMABy7wRdyk0kQAkHGrGtNEbQ+EEMRjxklrKmQneaYh6IF3CMp4AC8REAmFtCk7DegZL1XAivVFNDXSpyGJxzbavAT0B6w8B8wAt5hpAJC0aYAU0w/lZsbp2jN0cd/6J4IsXpaedXUEZoCCsEvjRUOq/+gHaKzN9QsejrwH7CYEXNL0BdwxexTi+MA6OjyT9KWnL0p/HiGmcwFMSZNZHYDFzDCAC+juA5CC52lXhQAGddTuaAzAC5sBZlkzCJwyDza+6CvoRpuWAHAEmOFTQd7aV/vQLKKT94YmSkljq0d7vqgrMNMHWnOTMQBzABfQ3ofwI22fkGsAFB8rc8xTs5ZvDJiZjFAW2jXmk2gUOsV5gXyArQCzaFdpQfG3+8xJ/XwLeuDXl73OiwJFgaLAblJgTHjfzXwr7d2nwFjbFjDrgFmEgwiCPvAEWrOumT0n+NEcEBpozHpgxkRJ8Az48h6zuAAzduw+/LQENHCAC9Megt+8zIp2n50ungNNAaGbgB3TK0J3ZsgJlAQitATMCIuAGVO02P9mZhygFS9OQi6e095d0WQBHTzwJWhL5mhMFwm/wKOyAt+AiTrhFaCBMAoMZaFzTLAAEECO4Mc8i3CPBzgzAPqls9NAY4UvlS0/IMC5tUoR8ONwgVAKSPbATHtGW0P7y2RR2Whf8C8w2QMzdtqEb+1mHV3MVWmvCLU0w/idVkTaBF7AT9q0klnLFXqhQdZdSZMGTPmlI2Qy4NWvfnWz62cGKf273/3uDfCoyyyb/a3QN2AKkErbmEwwaZPy6L/OLYiPlo5GK+sKtatAq2hSBtAQX3/J+qBZwCz9id08kzvvMfXFizy54SuAGDhNGAIz/c2EAICLfiYG0JymM/nn3e0erR9UNprUpKnMxjn3mSTGRFm/CWAUlymzOACVoG7GztBJP4kmeRYwM2km0GQrg/SUiXYbjUKnADxxh8BM2wH06KQPWeNoDOjzb5nUX1GgKFAU2CMKjAnve1SEymaXKDDWtgXMOmBGkBR86H2QfeAJ24Rp683MMvtoEzQIlwRsz2LKGI0ZMzEzrQFmBF+aBeCLlx5aOEIybQIwwkSOwLeKAbi6853v3GjFHA3IihZBndEyXuEI0kAbEEP4ChghQMVkjtDYm2YtgiaEetpS7Q+QA5TxCAd0MOMD2jynGQIeCJI0oLQQ2Rg0QCPvcp8K9GlzIA+A40mIhgmoCFDdSZ25L065COGcdnBIApwxAWQKSKNC6DTBkLVLtCj4k5dFcQPMmCuKG2AGmEZjBlgRvvUBR+ZzJiq0szLgA6DKOzSPwBtAIH+Ccd4H+GgXvQPovO1tb2tmkmgEnETjCIAJJjLEtfaPKaP0aUdosIBI/WseWg7gMyCTC2qgM7xu8kWfRbNoSIExwDzmoACcuiUcd9xxrdzKTsuUEHPMaOaMLdoAT5gsylikPwWs5d3hETAzKaC81mUBQc7RiHlgQC7gO6+AN9BDvQAjdDKmuUY/oAcQ1+/dQ0PjRNqcR7kAX+NDQK24vSY+6/l6jZl+Rytp7AZ2vROz8bH64T/vxhuaPs2kHO1pPwFeaQ3XxI2lWc++lgLRRn7tk7pTFCgKHIgCY8L7gd6t58tNgbG2LWA2mbQZZ6CLEJ5AkAQefKh9xAEpAh8AQUAiBDCRIWhbN+N9M/8CQYjJECGdYGS9DA2RNQ6E5Xj08+EnqPYz3sl/lY6E0/vc5z5NIFQnP+AjM9SAGfpkDQqhlDmfeECZkLU6QwcCi6ID73XAeOrjCHjReglm5Am77tMIcgADqNOKEDSBCu1MKLWOjLmduAR3mtUI2+7hpdBqJ/VleglQKoNJgQSaCfyHXwEzJlsmHGivxM8PICUUA04xZQQ6aHwJzjQSzBEBMKAFGJOu9Dk1UWfp6idMVU1UcJqCHvKmbUMzAARokC8hmoaJCXFM/FIuAE2wxiiTIq4BetfWJ3nPhEDSlweN2rwEQnQEqHotJPDRe410Hic22lP58bO694F2VLkBp5gxem79nfvRrgHCrqXlBzQrg7oeKACkaGBSIEDfZJJxRlrSBWK03zwDcA5wATspN5r0NMAPWR8ojrhMFuP1NuXBn8ppciveTT0D0tynXVM3mtGMI9ID9IFZZTlQMDbjU5pOYFAA7qUhLX0AOOs9IR4ozXk+1z40fb5J1qhynmKNHVPP3ovcZvM0WSItkyO7HUwOGOdoefGA/tvzwW7nP0zfemE83/PSMM60a2MgmtHGVygKLIICY8L7IspTec6PAmNtW8BsMmkfX4MwwbMPZqeZIMX0xkeNOaL7Po7e8eH2nvMIQgRc7xE+BR8qvwgAEUStVRnm2ee/audo4ONHS6OOCYQMz6IVRBdOCwhk7hOwARWCGposS1AHQjcTMILFUEizJowDBcBE2wPmhE8AnICMB9LmrsWNBsU7QDpgvx1BaxqNopmYpi3Ck30bOEdr5cGDeFpZgTv1msa7nqsTIA74eAdfBwS5pk1Wp2hAlFO7ow3wGU2c+3k/NEJf4AMNe62ptJQ3Jm3o29cFLaelP41G27mnfiZnOK7AB+g8DNofIBCHw5KMGX28tA/6ps6ep35xToEu6pdfeKZPa9a5dKWvvdMu4kpDe+t3/f1Z6WznvryljwYmXGbRwDgqjrjhsz6/0Amv9WXFE2hiPHHf89DIcStjqXzRCb/3Ad1MvmjvRQblCMg10eIXwAug9XTZTDmtTfS+CafdDCYyshUE4GuSQL4mpqLx3s38p6UNWLHEyETPtDjT7hn7ld164gpFgUVQYEx4X0R5Ks/5UWCsbQuYzY/OldI2KGCNmo8fbRMzvF5g3UZy9UpRoChQFFh5CgCMtHY0zCYzgHbAwljJbDSgFyDlWZVGbKgpBDBf+tKXtgkRXmO9CxALntE80k6aSJlHMHaznJCPtYTKDWBmOwUWCNHUAtGsUuQPLPZA08TEm9/85malYiJUUF/ALo595GUSyKSZCRv3TfyY2FFn3l0zkWYCkNlzrAi8K08m3tLMhKp80N1Eofi2e1AX1hAVigKLoMCY8L6I8lSe86PAWNsWMJsfnSulbVCAtsBHkjZp2uz5NpKsV4oCRYGiwEpTIMCMOb3xkRbZ1iTWHnIWI/DOyRwYePBj2mndssC8OuawwB2Nm8kvgAzoAPp4W/VMmkwkdxpoZZn+M0GlDU2gAaVFkw8QCLBlTaJyM/21/hY4Uz6m06kTE2J7AtKWWh7AsgKwYs3AhFmdWQgwnWfOzNQ671oHDHQxEZYHZ0sAHpCKFsmbNhG4Awhjvu559lX0vEJRYBEUGBPeF1GeynN+FBhr2wJm86NzpVQUKAoUBYoCRYEdUwAwA3CAByDKz7k1dTQ6JrGAEcCKtghIs76TIyHr5wAUaz49A3aAMKaRPHTGCQ3wxlyP8xTrMncaTK4BX9Yz9loo6fLIqvy0ftleAWDiLIgHX6AK+LROURq0gMyGrc8GvpQTMHMdYKau7gFmAXrWM9OMZc2y9WXZroWXVZo45bAVhngx8bS+8Mwzz2zPrGVk5hpHSgXMdsoZ9f52KTAmvG83zXpvOSgw1rYFzJajjaoURYGiQFGgKFAUaBSIxgw448Kfybe9/TiOAVSY+AFrntu+AkiLw5R4RaUZSuCgCiDxXhwXAWoczXBwYb3rTgNNGIClfDFZTJrxtMnjpfIClNaGCjRqTButGbQmjXYtgTkibZm1rIAmjRnNGo1ZvGgCZjwhe551zGimvmhmfz3nNIUPfehD2zmHS5w58eIaoGYPShq67ClqnaRnZcqY1qjjXlNgTHjf67JUfvOlwFjbFjCbL60rtaLASlLALPSBwmbiHCiNen5xChRNL06PuvoqBQLMmCBmPZknMbWj/aEh4yGYcwtbb9AWce+fdbuARgKtGJBBs0YbxBOw9V13uctd2n2aqKzJyjtbPXpf+Wi8lCeB0xkmmcAY0ANE8m4cZy3WhimLeJyEcNSRfmFTeZo973kGSAlMD5lxuhdgJv04DQLC1JcmMMDMdhEcp7hvH0AAlgkn8Gat2fHHH38xB1TMLguYpRXruAgKjAnviyhP5Tk/Coy1bQGz+dG5UioKrBwFCGhMdmzxwHU4QcUMdh/MclvUb08qG6wTesxa+9kHzfoQZkwJZprNwhN4mC5x9W3LAOHxj398c//NBbiffeCYEUUQSxqzjsqSjcoTh/DGJTcnA3EOkGfLeEQ3plpoaYsA+73Zz26/BgI5HvLDE0zdCNQ9T22XNjyI2iIiAjuHD/LhNGOZQ4AZLRizOxvC09wACjRDPH/aL49pI+Cif+El9+wdCWjR/nDwASQBQjRkgBnHHEwdY+boGZCzU2CGnsCPMtKcaUfr4Wjl3NP3hezrCCTpz3muvbMHpn3uACcaQfXlJdPWGurwzGc+c2MDeltJZI2ZPB7ykIe08YRpI4DIS3D20bRdi7FCPOacGTdskcCJCN7wzBYO6Jm9+Epjtsw9Zb3LNia8r3fN1792Y21bwGz9279qWBSYSgGz6xbFE0YIajkH1DJLn82dE8fRj1Al2ADZNccECRbru0fIzgbW9uoSmDkljf4onSEgTHqOymPvL4IoAS1CJMFTOhbrE8S46ObtbVmDtUExp1Jua39Ch+xjtqxl361y0f6EBv2RNiTOLLabt8kBPGEzdcHkgzysWVrmAFwBJHHgocyAFvAVEM/80LVneJ82ibZMcIxjEHTUZ9ABCAbO7E/IFJLWDQ+abJlXYCpJk5e2VA8bmqfPAp1c0McBh7HHHn+CNWdHHHHExlhkvVomdex/yJRTutaXMUe0aTlgRlOnPhyCSNc4YbJGeO5zn9uAIqAnmAwS13jnZxKJBo5ppbVwaInWNHvyswdahaLAIigwJrwvojyV5/woMNa2BczmR+dKqSiwMhTgVpp5kdlyC+J5VPvoRz+6scEuwZUAR8gxK21GWRzutjPD7R6wRJChcQOeAA9rSAhPnhOMnZvxF7wrvrTN+vOURjATJxuQD4nImQGBSxw/a0OAOOtYvMsTnPJaP0P4lP8YyBumv5fXtIPqjw5MuJhzAQ00DEyxaHgEjg+4/Qaee9ffBEjXz3ve8xrt+v22aB3R/LzzzmuuvnsHDLRGNCscIch3mQLtoXZlVsfMjrOKAH4blWefP1ovtEIXjiL6YO9E9aYdAUrQgpDPM5+0TSTQ5NqAGv3RSb4AAW98CYALsG/DdP1hUUH5lcu6q/yss9L+fQB21As9YhqY5/qr+97nbh9t0y94w2Wqp47hubw3j6P08Zw+yWX+MNAaax9lGOaPb5kufuITn/iaOtGqeUffV180AqisN+MIBI3wgrElQVw0yPoz911r6+EWA8YveRtPrGMTb0jXpFvHosBuU2BMeN/tvCv93aXAWNsWMNtd2lfqRYGlpEDMewjAfSC0M+kh8JtxJtQGVCUezY77HAoQDLmVNsNMyAEozPKbrSfYRGOWNALMesHpOc95TkvPOphpwYw4LZ7ZbDPhgBcQyCW368MPP3zjNTPnZsGBuWUM8fRm9r8PF1xwQTMjJQS+8Y1vbDP1ZvXRFpAwq09gZYYHLNN4ONJAEr49Y3LlnrZBA/RCJxoHAJzmJBpLpmLLEgLMmLElEKKtNVIXQI1jCRoM1340GXhYAO7xgYmGaH552GPyhi/FB3yZuvKwh569RudGN7pR42NaI8CeBomWx3sAWoXlpgBeud71rtcmaLJJ+3KXuEpXFNgcBcaE982lULGWlQJjbVvAbFlbrcpVFNhFCjzykY9sgqeF8bNCzL5oefpgXRqh9aijjmq34/GNpiGmhcwYBYBM3CEw+8xnPrORpIX34tz+9rdvs98Al9l0P7P+CQQwXtuAr2jMmG9Zh8KFOFMlAjtQYrZ+2QItiDVA6qrOswJacRtOM4AG6qeewKZzDiFsrkt7BIzREKm/dJmecgPO/Mo1bWgcHgBjtAHWCwIptAPLEALMAMk+xGGFulk7lPow4eOdD4hCH2Zy6EUL7Aek0bTRlGQ9E4DlmsZMOiYdPvnJT7Z0XNOeyN85raJ0TjzxxKbxpd2psLwU0K+0n0klExEVigLrQoEx4X1d6rhf6zHWtgXM9itXVL33NQWsCSOEBjCFGMAAByDMo2JOlrUZiWPBvnfvete7tlscfLimubrlLW/ZzrM2aDPAzJow7zM745CAwE3T4Xf66acn2wbSAsyyXkXetEqcAjBlcg6Y9cBvI4ElOLG2Rl258+4Dk1CaH6ZZtJXoJq61NOoGmNGmAby0YsCHZwCWNTvZGwogoQESXz5AGdNHmjJ0oTXjRt1+VssSZgGzOF/Ab+qq/EC5+mlr9XvXu97VNKf4mUOHgw8+uMWjbROyNxWnFELoH1NImkjpfOADH2imtECvfPARpzXAW4WiQFGgKLAICowJ74soT+U5PwqMtW0Bs/nRuVIqCqwMBWhbCKRMgDgaEKxfce0+YR5Ac37kkUc2s8TE4Ybb/bPPPru9BxjEhMx9C/azLmMWMIspI9OjbHgrrnUwp556atP80OoF4MmI9qwHZmbKAQwgh2Bt/QlNCi9r1rgsY2Beh0bWU2W9Dw+B6uU+TR+ACxzQ6gAeaMsE1FocGi8azGc84xltrZ13uP6O2alza/U4YLC+D/2skwH84RVnCAAAIABJREFUrKeKxgjwiKfCRdMpwKw3ZbSWkSlnXKxbQwSM0sjyymm9HHNQAIu3UCCeUwcgHy2vda1rtWrRpqERrZsQYGYNkfCwhz2sPeehD51sSGwNW3hSOtlvq71Qf0WBokBRYI8oMCa871ERKptdosBY2xYw2yWiV7JFgWWmAI0T72eEVmt3rAWL6SJww+ECcEVTIY64tA9AmmsaiX7Rflx5e0bTkECj456jADS5JvjS3MjLNe9q1hGNBcCMoM4VNhAJmAExBHigg+dHaXHRvayBcwLCvnLe4Q53mPBgyXFKaAJQ8pQHjFmvB3TSkAFmrjliue1tb9tM+IAT7zHzixtwJn3AGBfrwBeADXygm3MmetKmGQp4XjStAsxo+Whp8QatqboBnEK8gwJf6qGeXMIDWNof/1jjyDW8NWTXvOY123tZ40i7yxEFV/HSjalrPGQCZEwXaeKAfIAPwEPDAmaL5pDKvyiwPykwJrzvT4qsT63H2raA2fq0c9WkKLAlCtAQWMfDMQJh1Y8pIm9oCTQ0TMriVIJZnXVS1vn0IQ4rrPHqtVy0atKPswmAzjXhWX4cLRCaeVI7UAAkABNAJqaM1lpxmy0t6dobLF78DpTeop6rq/V0tGLKjRY2t6UtFABLGiBgimkekBGPc1x/A1XAG/BCwxntD/BrDZp0vc/RiHVkQAYArG2kKa1lcmphHZy2oxFDD0f1AlqjVTQJgEaeqx/nHLwwWv9Fs4o/ASlgDUjDJ/iA10Gg1nviWXsnr/Cbe64/+MEPtnV7eAnQQ19pDM14F8Uzle9FFKDpBahNAGlPv4c//OFNw78d5x80pNKytrVCUWCZKDAmvC9TOassW6fAWNsWMNs6PeuNosBaUQAgsLYLCOtdrKeShHsOJcQhvExbYO+e9VF+NFkJHC64F4GJgJ14jlvR2kiXxonpZO+QgZYJmFTG/n7KsIxH9EJLDgs4sOjL7bx3ga5+QHTojm4AB63PUJsjnnWCMRVN3cUT33veX6bAe2fPE7xwujcM6IJW6ocPEvAFbaL1YGiFp6QXejHVpU1zJNR7Fj4X33Xc0ONT6dCuKUeF5aMA019A289WGVlv6Doa1q2UOmary7Tucivlr7jrS4Ex4X19a70/ajbWtgXM9gcPVC2LAkWBokBRoCiw8hQwkURDypGNiR6TDjT2gBlteiY5TNRYj8ipDkDfB5NMTIE//OEPb6y7tC2D4JmtGGiVTQJUKAosigJjwvuiylT5zocCY21bwGw+NK5UigJFgaJAUaAoUBTYZQoEmDFntVE97aY1lUxcORASrBm0PjCaNesqbSsh2IcxptnMX5mt2nuRSTCHR86Zv3omTesWKxQFFkGBMeF9EeWpPOdHgbG2LWA2PzpXSkWBokBRoChQFCgK7CIFADPgydpM6wGtnQTAHN/xjne0dYmcFtkighaMR1JrLzkNYj4McFk/aO0l016aN+nRjmWLhvPPP7+ZR3MIM7bX4y5Ws5IuCkzGhPciz2pTYKxtC5itdttW6YsCRYGiQFGgKLBvKACYcW4DYF1wwQVts3bbR3Aaw+urtWKeX+EKV2geZ69//eu3Z5zmMGsE4uxflxCPstYWnnvuuU2DRlMmLfGsX6xQFFgEBcaE90WUp/KcHwXG2raA2fzoXCkVBYoCRYGiQFGgKLCLFIgpI61XgnVltGRMFF/3utc1TRqPptaY2dfvBS94QVszlm0l7OeXwCss7RtA97nPfa5tPWH9mb0GgTiatjiSyTt1LArsBQXGhPe9yL/y2D0KjLVtAbPdo3ulXBQoChQFigJFgaLAHCkQYMaM0dqyJz3pSRsbh9t+A7i69a1v3UwbX/KSl0ze9ra3TWjNjjnmmObR1T6CTBeBL1suSMc1px/2x5MGkGb9mmfXvva1C5jNsf0qqc1TYEx433wqFXMZKTDWtgXMlrHFqkxFgaJAUaAoUBQoCnwNBWwJYT8++8/FuQdgdatb3appu7zALPHGN75xe84sERj70Ic+1NKyQbnNzN3nIOSQQw6ZXPGKV2x721144YVt30B7BLpnT7y3v/3tX1OGulEU2AsKjAnve5F/5bF7FBhr2wJmu0f3SrkoUBQoChQFigJFgTlSwL6K9pizl11+3OZnb7pkZW+6T3/6083b4nDTeXvd2ddPOvZalE7ez76InIHY+65CUWBRFBgT3hdVpsp3PhQYa9sCZvOhcaVSFCgKFAWKAkWBokBRoChQFJgLBcaE97lkUIksjAJjbVvAbGHNUhkXBYoCRYGiQFGgKFAUKAoUBb6WAmPC+9fGrjurRIGxti1gtkotWWUtChQFigJFgaJAUaAoUBRYewqMCe9rX/k1r+BY2xYwW/PGr+oVBYoCRYGiQFGgKFAUKAqsFgXGhPfVqkmVdkiBsbYtYDakVl0XBYoCRYGiQFGgKFAUKAoUBRZIgTHhfYHFqqznQIGxti1gNgcCVxJFgaJAUaAoUBQoChQFigJFgXlRYEx4n1celc5iKDDWtgXMFtMmlWtRoChQFCgKFAWKAkWBokBRYCoFxoT3qS/UzZWhwFjbjgKzr3zlK22PD/t81K9oUDxQPFA8UDxQPFA8UDxQPFA8sPs88I9nnTr54v1PmDgWvXef3ntJ47QtgDYMo8DsHve4x+TqV796/YoGxQPFA8UDxQPFA8UDxQPFA8UDe8QDFx5/ZANmjiWLrxcWSdtuGZh9/vOfn3z2s5+tX9GgeKB4oHigeKB4oHigeKB4oHhgj3jgC2c8qgEzx5LF1wuLpG23DMz+8z//c/If//Ef9SsaFA8UDxQPFA8UDxQPFA8UDxQP7BEPfPFppzVg5liy+HphkbTtloHZv//7v0/+7d/+rX5Fg+KB4oHigeKB4oHigeKB4oHigT3igaxDcixZfL2wSNq2gNkedabqQOvVgao9qz2LB4oHigeKB4oHigf2kgcivBcwWz++S9sWMCtgVrMuxQPFA8UDxQPFA8UDxQPFA0vOAxHeC5gVMNvw3FimjOvHDHs521N5Ff8UDxQPFA8UDxQPFA8UD2ydBwqYbZ1mq8Jnadt9ozGz/5rftAbKsxynxXFvs883k88wj6TdH4dx6np9O2S1bbVt8UDxQPFA8UDxQPHAGA9EeD+Qxiyy5Fhay/Qs5XXcarm2885W89iL+GnbtQdm//Vf/zX57//+78m//Mu/tJ9zniVD5N6rDW2gZ//7v/876TWD7v3P//zP5F//9V/bz3mfBqZwz0Z0X/rSlxqAc508pJX3PXetHHnel8G5533+iVfHGrCLB4oHigeKB4oHigeKB/YnD0R4HwNm5Mgvf/nLk3/6p39qciZ5kpy6W3KltMna4cnkl+tpxz5OLwO7Ly1y+GYAV2Rp9Z2WzyLvheY5Hqgsadu1BmYa7Nd+7dcmP/ETPzG52c1u1n4Pf/jDJ3/8x3/cGh4zPPnJT57c/e53n/zYj/1Y+/34j//45BnPeMbkC1/4QmNiDPLpT3968ohHPGJyq1vdqv1OOeWUye///u+3NBAcYDvnnHMmt7/97SeHHXbY5I53vOPk7W9/ewNvmOyLX/zi5Oyzz57c5ja3ac/vete7Ti688MIGzjx7zGMec7Ey3O1ud5vc+973nvzJn/xJc4d6oMas5/tzgK52r3YvHigeKB4oHige2D88EOF9FjAj1/7Zn/1Zk0NPPPHEJmc+5znPmfz8z//85Kd/+qcn//AP/7ApwLNZniLj/t3f/d3kt37rt5pyAkAi077//e+/GFjr0yObk4nJyWTgRz/60RsyMPlXuV/ykpdM/vmf/3m0rBQkr3/96yfHHHPM5Pzzz5+ZX5/3Xp0r2x/90R81mr/1rW+dvOENbzhg+dK2awvMaKje+973Tq585Su3RnvVq141ednLXtaA0SGHHDL5y7/8y6bF+qEf+qHJTW9608YkT33qUyePetSjJt/2bd82ude97tWe/97v/d7k+7//+yc3uclNJi9+8Ysbs9z85jefHHTQQZOPf/zjbe3dc5/73JbPM5/5zMk73vGOyX3ve9/JZS5zmckv/dIvteePfOQjJ9/zPd/TwJsGustd7jL51m/91snv/u7vtk7yXd/1Xe0eRj3zzDMnT3nKU1p5lBHT7xUjVT77Z3Cvtq62Lh4oHigeKB4oHlgtHojwPguY0TS94AUvmFz/+tef/PVf/3WTQX/kR35kQznwV3/1VxtKhziPiLaLvEl2di383//938WUA55LP89ci/OBD3xgcvDBBzcg5R4FCPkXAJv2jvcpS8i6f/u3fzu5ylWuMjnuuOM25PAHPvCBk8td7nJNcRLrs5QpFm0AKI3gNa95zcmDHvSgySc/+cmL1Svx8DeQ5H1H9ylUvJ96OBdPWeUnXp65lz4invoKoZln0vOeoM6uHT/0oQ9Nbnvb206e+MQnNrCaMuWYdHNM264lMEMUJoO0VzRgCBZiYkqgioZLuO51r9vAULv4/39mFQApswAnnHDC5MY3vnEzg0wcJou3vOUtG+DTOM5puBLkdfTRR7fG8PzqV796Y7A89740AUWMpTxQ/zD0DJGGq+NqDaLVXtVexQPFA8UDxQPFA8UD8+CBCO9jwOzpT3/65Pjjj9+QfVlzPe1pT2sWX2Rgculv/uZvNm0ObRolg3uA3C/8wi+0ZxQOL33pSyd/8Rd/0YAKUAJEvfrVr27yLGUH7Zt3TjvttKZsePnLX96uacs+85nPtDSH7/z93/99E3VZkCmT55QTlBZ9uOc97zk59NBDG8BRtt/4jd+YPOtZz2qy8j/+4z827ZzyUaScccYZkz//8z9v9f31X//1Fo+GSvkApE996lMT9//gD/5g8prXvKbhA+V74QtfODnvvPMmf/qnf9repWl83/veN/md3/mdyc/8zM80LRwcQBYH1jyXJyXMRz7ykQbuPCPT00i6731aQ7gDMLv1rW89ecITntCUPrCBNN74xjdO/uZv/qal2/NE2nYtgZmGYMJ4xStesREPgYA1jQupYrQwJ2D2+Mc/vt0PgZgqAk7iQfIaUshzxH3Tm97UGFGchz3sYU1j9qIXvagxAPWrhqGi1ZhHHXXU5Pu+7/smGJlZpEZk/igek0nADIOEyTE6Zk1+dawBvXigeKB4oHigeKB4oHhgf/NAhPdZwIx8CiAce+yxTeYl91JE0GA9//nPb0qGX/7lX27Khx/90R9tS3C+5Vu+pQEXcvOlLnWpJq96Rrnxwz/8w235D2UH7Q8rMwoLMq1lQp/4xCeavHzZy152cqc73amBmhvc4AaTV77ylS0vwEQa3iHrnnzyyU2eHgKz173udRtyuLxo+Zg0CsDQ937v904sA6IJZLpoSZJlSPIlr//Kr/zK5BWveEWLR/t2vetdrylIyNlA1rWvfe1WdkoT4PMHfuAH2vPDDz988oM/+INNNr/gggsmV7rSlSa3uMUtGv2+4zu+Y0O5w8LNOyzsjjzyyIYvWNGh7wMe8ICWfuoIqMIhykh7Kd23ve1tTUEEO6AxoClO35/TtmsJzIAvlf/2b//2hk5dY56TTjqp/RARsncfA1GFYsI73/nOk+tc5zqtYd7znvdMmDECdx/+8IcvRkDE/NjHPjb55m/+5kZcgAqYw3RMFDEABA9ciWutGAb77u/+7vYcY5mN4JBEHPnrGFe96lVbZ6Gtw4AaDKDsG67O9/egXO1f7V88UDxQPFA8UDywP3kgwvssYEbmjKwbwZ9yAoBwFCybiXxME2YJzS/+4i82RcY3fMM3NFAlHs0UefUnf/InmxxriQ/NlAD8XeMa12haI8uGrna1qzUrM0oJCg+aNZoo71BgCPw3WBqkXEBeNGbeBQLJ4UCXOORhmqvPf/7zLR8WZmT2z33ucw0UAmu0TsASUEbJwTotsr08oxChNLnkJS/Z6qXfAGPMH9WdogSgBDLRwDIkWi+BUoY8jg7qwTqOUkU5LH1icumd7/zO72ymlO4DfWj727/9243e7qG9H3lemYEyaQ7l+7Tt2gIzakXI9w//8A8bEakyrfU69dRTJ9aYaQgB00HmGu5nf/Znm/YMUZ/3vOc1UAcwAWkYOgOhc6pazwA+DYvRqDypS9nNAmhUsd4BwDSKBvngBz/YbE3Zzz72sY9tKlXMQ/WsrBiRrSyknfzquD8H4Gr3avfigeKB4oHigeKB4oHwQIT3acCMbErzRIsEXASY5V1HVlycUtD8ABR3uMMdmuxLs8QpHSACDAEtAgd5N7zhDZsM++53v7uBNNo471JCABe0ccAVM0XAjAki7RXtHW0RYJd3yN/k4R6Y0YbRpEUOf+hDH9qs0MjelCA0TMoLUJHXmS9KM8CMyeCseI973OOaIoSmDz0AOIASeGTi6QfcAV3MKYFC1m7KLl1xKVfUicZRUGdpCZY+Xf7yl2/lUj6aQPL9m9/85oY9eto7Z/oYkDZ8lrZdS2CG8RBS44WQCJFwxBFHNGTuWuMAUoKGEGi/OPtAfMANkhYwapjV4kYN/dnPfrYxLZQspLEAO4CLtk0a0LOQGQvva2iMJd5rX/vajefiSGeIpoeNWNc1WBcPFA8UDxQPFA8UDxQP7A8eiPA+DZiRfZncMc2j0SJHDvmCXEnu5FyOIgHwoozgeRwQsXzHOqjIshQIt7vd7ZoygsJBfOvTeE0EaAANGjPaKlqgALOf+7mfa5os75CxvWM9l7JJuwdm1pi95S1vaTJw/gCchzzkIU35QQniXUCNrM1MkmxNe6YMv/qrv9pkbPGUq4/30Y9+tK05A7zI+MAjK7XTTz+9AUpg03o0yhzATHqAGU0XRYq45HxyPI2foPw8s7/zne+cPPvZz26glOYMCPVTBsuW4IUh/YMh0G34LG27lsBMZYGbJz3pSU2rhei0WdaVaYyv+7qva/auCMx0sV9jpjGs9zITgHDehdYtOjSL4EezdulLX7otDJQGBM+elaaLMw+qXrMQGAujAn+uacHYztKMaWSOScQ3W6ATUft6lp+4Bc72x2A77KB1Xe1ePFA8UDxQPFA8UDzQ80CE92nATDwBeLIchkKif9c5GfenfuqnGjCiPQLmeApnQgiokY95JwdOOAWxBId8aq2Uc7I0cCN9SgVyKo0ZcMfii+aNzEtzR1aOIz3vMVWkWWNlBpidddZZbTkP7Rsgp2zKCEAxE2TZxnSQnM6lvvcsMeIBUnzy+LWuda2JNXMs06xlAyQTDwikubLGzHZXUXpw1kdTBqAql7qrM3AmvR6YAZzyoaGjTaNtBAilZ/kTpYu1aPIhrzuKp5xD+gNlAB08IY0hcEvbri0wQyCNA6ljHuCHzSpVo4ZjZihQj7KvDUM42lsBgkdA12xbNVbSQHQqV0TF1JBx1KsYAfNyBWpfB++zJ6WB03gAn7TtdWZWwvo0TIypvZefvJhJDht22Mnqugbt4oHigeKB4oHigeKB4oH154EI77OAGZmTed0sYEZmJdtymEE2BnIAGlonWii+E250oxs1AEUutccvBYPlQKzEmPaRczne8Bxgs56LiSIQQ0NFKUGpAcS47x35SMs7NErAIIACGJGp+YVQdjzsSDulXACXNWTkZKCORi9KDeCGUsRzwRIjIE488jY53/t8OlCO0HSpPyUIYAY0+pHXWdnRdlGaUJgoA3pITz5AHKAIRJLT+aegjBEPAJWnenqm7EPQlXrxyHiJS1yi4QLl6fts2nZtgZnKAmeADbTL2wwiQt+ecbrhOWL3i/Dc05AaIhorxDNDQBXLjhUjSVdcaWlo6lvMjjEAKmm477m4rs0meA5J9+8pn/wwd36uvZM8xK9f0aB4oHigeKB4oHigeKB4YH/yQIT3MWDGZwFtjjCNT4AG8i2ZmAKBTCvQPAEY5FDyKmBFBhXfTzzxmfa59pz8yrqMksF75FaaOOCGDEzWHr5D7nafZorszBN55G3lladr5pbSI4OLq0wsysSRJ+WL/CMrk7WnxSPjK1NooVze5T4/Wj735Cm9lEG6rsWNPC9/74ibe/JVB9ozChf3p8nufb2CRVImx7TtWgOzVFgDIlyIhTjuee44JGCe9/fF875f3k36juJ61uez2efSm/br36/z/TkIV7tXuxcPFA8UDxQPFA8UD+CBCO+zgBkQwySPZZZlObP4JjJrZFrvURzQ+ABOroGvaXJw7jtGHo4MK77zvOdcHsN3hnESP+VNOrkeptPf79+dFm+YlnfdUyZly/vDeNOuh+/05Ug9c2/acZhmHydtuy+AWV/xOq/BrXigeKB4oHigeKB4oHigeGDVeCDC+yxgFpBh3ywOM2ikNlNHgIZ/BI41aLuSzmberTjz6Udp230LzDBd/5vFWIkz7XnPuP35rLhJqz+K21/359PSWeQ9ZZuW/1bvz6pzn/Yy06Ev507Pe9r15ztNt96fz0BZdCw6Fg8UDxQPFA8sCw9EeJ8FzFJOji6yZsu9yFR5Pu0InHlnliyy1fvT8ljGe5uhzV6UO207d2BG/YkhmPSNNfBeVHJWHhoBA+ZHNamsjnmHSlI92JjGxtW9PE8arp17V3p57ug6DZ68hsekM7zvuk9r0ecpZ08jZcr9sfNh2afVNfWVHrqz6Y39sWv3h+ms+vUs2q16vRZdfnQdBuPRosu1iPz1nT70H2rjmSDOso7Ve00zfJKxKHmjjR9PYb5vub+KR/VTj7R56qDPqKP7nvffusRZ96N2D20ch3zgelHjyLB9Uo704b6POx+234Hi4Wt1Dg+krWfl67k0e3qJ6/5wzEnZPPfr3xmWM/lu54gmvXziXAhPD9szeYjXl2kYT5mlnfp5b6we804v5cwxwvuBgFniOyoTmcpaK9fqqA7DuvbvTDufFT/pzXontEu8WelMe9895cejSce9WeOytPv29G7SHbZb6GJ9XMqWuLOO0vDbTPw+nvNZaeZ+2nauwEwn42SDW0l7f51//vnN2cZmCpSC7fZRB7PfAO8wJ5xwwuT444+f3O1ud2vuRS1c1FDiWOD3sIc9rG06d4tb3GLy4Ac/eMP9peevf/3rJ094whMas/DkcuKJJ7aFkBloHLkY5dKTh5zjjjuu5XWPe9zjYnnzhGMDPGXJT5l4neElpmeq3abNrPTV1yJRZWKDHOHEfa5BuWZ171WvelXzgmkgtB8El6wGg7791YcnntQ1R/RBC2nauZ2XS95xHKW7mU4wq/zLeB+90Mj2DWjC3awN0MuEYGczs3gNDbnHtQ1Gfh/5yEe+RlhZRr6YZ5n0GWOTbUP0RbRgpiIP/GfhM6+13BK/+tWvbv2076vzLMuyp2W8RhP7XuIV4xBa+DEJsuGp7xovXRnjl71Ow/KpE49pxhnfM17T1A+fMHeyl+aDHvSg5rXY4vZVreew3pu5NgZzRsDD3P3vf//Jc57znOboIN8dgp7tbs4444wNB2KbSXcecdInuR/XV7UfOQu/cmdODvHTv/X1pz3tac05QdpP3WbFs+eV77Vvr32s8Pk73vGOje9t+AK/8GYtHen6oYf8lImXPW7SIxP0ZTLGGI85jiAPvPSlL5084AEPmJx22mltz62Ucye0QosXv/jFTd5K+Xjek7e8rLUCSrRnn4+45D5u27W7/Wc5eks89VFmXvY4d0NLzzhuMJaiy6mnnrpB76T31Kc+taVnPInQL98+PeNv0jP5b0Nm/e9AdInwvllgJg/OOnglPOmkk1rZyab2A0Of1LWny/BcGswc8d5nPvOZDbkUb6IPV/NkGO3Qv6u+vJ7jKXymjXg9JwNykrGZvKXBIyT+5sBDWeRr3zP0x7f4F+09w2e8MGp37aB9PZMX2YB8ic7KZS0dPibjq8NQXu3r4lxZjJvkXnI9npD2MJ5r9+EIjliUFWbw/rS4uZe2nRsw0yDcwtvU2T4IV7jCFdqR4KlBkvGij1C2DeG+6Zu+qQGKs88+uzEbl5lc2GtYgxW3l1xoGkQ0pM3puNvnXUYwSHHTKUhPnQG8MA162Mga02BKDKITyPeoo45qjWoA9aHkGt+u6BraAOHn3L5rm2Hc3aap9gNm1ZHLU4yvnmhJ4ON2VTCo2xZAMGBzk2oAy4dFOTGr/Su4IDU4pL7og4kJiFe84hXbfUKlgeAbv/EbJ1yMLhMf7ZTmPvQ+8rZP0FkJBNnvYxnafKf1W9T7+ItXVJtacud7n/vcp32M8O/wo7GoMu5FvvocoUpfs9+KiTIfZR9ENCIU6MtHH310u6+PEUrWqY9tls4+xsYeH3P7UxqDMuOKJle60pWaAGAPHueEgFXjJWMMUMnVtG8NYdo4a9sXdfWd5izg4Q9/ePtuHXTQQRebaNwsLVcxnr4CVOgLhx12WKNNXG2jG8AGCPluuy9u/03b7TpHZsF7NtxVTi7HjXNkLhO5fsY7/d13mtCdvqwOeLaPx525eLzwXXjhhZMrX/nK7f373ve+TUZ5zWte0/gCwMIz5BjyDB4hJBN2bcQrPxMWXIiLo6znnHPORl4mc201pLzoCMT4zuGzm9/85i2NePjbLh3laSNgLsgJ3PiZhzyu1slwBG4yFtfpvq1puwjqhHLyiPLzSIiOngFLPGiTcS55yUs2OqGpvm9PLXUmn6Cl9Hko9I48uXaXHnf0aEBewjfSA7yMtx/4wAdaG2kf6XC64XjrW996Mtb/IrxvFpihD/kCb2sD3gRNeAPL7imbOimHNkAf77jvGi0EcrF6koHF9R0RTxw8EGAmvvsJ5EOyrnCve92rASL5Z/JH3rPGU2n5jh155JENUwCFgrVz3Pobx/RLuMMebOJzw+/bpo20Az4LOMbfZC6yqo2jlcP4b2Ntbc+rYugwjR/ViyIFSNQftCF+c1/eoZdrP+nqI0984hMnj3nMYzbi9fH7fNK2cwNmMvLh19l1au7edUgdHiLViH0BFnWunGbD7MeA8RIgYA2trLQ4AAZQkYA5CDjAGybqAYn01NP7tDsaShwMo6MluIdhzN5EdPGIAAAgAElEQVQkmJ3B7ND0MKShF0Wr5GswItjaVZ3AmwEYLQEwoFXQOdFIMBtB4zUNmGFo2shhkJ69N+wv0YeTTz55Y8BNmVb9iEeAUeDeQOBjZjIA6F2Wdl9FGuMhfel2t7vdxT4OY4PtKtbzQGXGQz7CPj5AWB/051NOOaV9WHL/3HPPbR/PfIwPlP66PEcnQhxhyjhMAKOZEAhSvmEm1AQ85CNv/NN/V4kG+gWhiCDiXDApSbimWSBk0gAI6mXsJkCKu0r13E5Z9QcTfwQz469A4Lrf/e7XxmJ9w75Nvn/6014CM0IyvvNdBWYE9+wXRe4QlF87kS9Y5ODPYT923ccDPnyvvWdzXZPKCSadCexclQOitByCbzk6mKwgw4QWnpl8Rh8THNKUlyANvGRMprHCb6yIBG7I8R3Za7t8pl7ajPCrr4ZG9p4lrBsDBZO8ytdre9ALgDVBQfMhABcAMADlHsAGjF7ucpdrPCEOzRF5j6wnWHKhPfAJiyJyYMZccpP0pCXNpHf5y1++gWXv0xxJj8ZaQCeADpiaNs5EeN8KMNPXAXPpAWZkMPyjbcjm733ve5s2FD3lr00AZrynDXl5BMjQGHgRAHSyPgXC+973viY7i0+m1cbkG8AE8KVoEIBU46n8ATNtIG+TA9PkHuX1LjBFZtd+3iGfs9QS8BolgPrY0srkmm2tBGVEf+mbXMHP9h0WAE1ADR/6AXHKK/1Z4wg+BbDI/2QMEx7oo760eeovLdd4j/UFoG2CwwSB+qCr/kBbN6xz2nZuwExFVAzq11AC4RtQ02iIN6uye3kfYTWghpQvQgk0YzqyWUV1wHBCyiYeZgVMzBYhdDRF1NzACe2Pd3U08QPMnBtMzaYYmMxUKIdG0ZhmR3RCA4xG9uv3XEgZFnXUdgYwg7LBx0BmABK2C8yALbMYqS/hCFPTIhm00NSMoEEP7RwXVf/dyBdPFDDbmdnitHZBV5MCeJUpA0HFBxQP+U17Zx3v+dj6gBqvmOiYbNK39DOTTIAI/qMlIsj15kvrSI+xOqGHsdd3i6CSyTUCjHGIQGUMNF7beNWsPz4bS3PZnhlbTSrSKCS8853vbEKk7zM+8e1TL4Fpue/Xfug36kuzTmikLSW3ACPMnrS5ox+ZIGBkN8cSacs3P7KCvmtSgODJ5I31Ti9Eajdmc+SaaSZ74Ufx9HlCrjrhC4IzQTMB/5OFCM7MsAB3ZRDfRsBoQwMADLnvB5DRAr3rXe9q1+ogbXxkwl6+vuF4TV9TRpZI6ElA3s7EvTwI0bQmhGWaDPytPDSBZCpAQ7BsQJ167Zx4rJ1o1tBaGYyPALrNjqVNRiHck9uk6R1xyHrkQNfqQ4YzsWGjYXKwfKVHvgGy5C89oMV4AuDYFNn7xh3pUWagE4Fe+5JJXaftcozwvllgJg3ghqZcGcih2lD+ZGHP733vezdNLFrRPpLbA6YAcbIuflBuIBNIU2ffDnxx6KGHNr6UNu2W7y8giM8AJWnIRx8CxMiRaING+M+ea8qWOjoac5XFRs74yiQ2YKbdyZ/oZYx+97vf3doMqAa6fNdMnghMbwFloIy1CJ5lVgjA6wdoLV9gG2iOiXBfjv5ceY2b8mRtYLkRfsAfrFLwPJlDndDFc/HIz0w40QBvoQlt97DOadu5ADNMDUiY8dcgmE8gIGlgNpkYsK/gos6VwwCmsQzGhDdCC9NLAkwa0keqJ5pzKNx7BB6ApAdmEDym9OGmMtcATA5ozJxjplnAzOBkNoeKH7DzozlCI+8tilbJN8DMgGUQQTODDxWwWYutaswICMBXX18zdOloZmp9AMwiORp0DYIGu5Rp1Y94ooDZ/IGZgRN/4hvmEwZggyCNJD5edb7ZbPnV1doofYgdPoBhfDYmEYqMOWaCfTx9lJlY+0jvJxr1tDS2GJ9veMMbNmCW71X7kE0m7RlNArMu3wgf4P79ZT833pipZlLG5Md4as3JpS51qSaMEH5oTcziEnAANQIW0LoM36Ddoq+64XkygG8waw3CvW8TrZLnfuhHuN5tYCYvAh15itBIljKmmXk3868/G8+0TQAY3vXtJChb16+s0+jVxwPuxPMjo9AWW0cOhBEqTb4yzUsAUGgXyADyImRe9rKXbUflZGJJ1iN0ShNNCa/AEGCjDqGjutEiqMed7nSnJlyTIaeVeeyePkrTGdmL6ZqxTt76p6AshG3gyLO+33qmT6gv2vgBWdqYxk0QX19h6QSYkQPVI0F8gJ5grl7So91Memhj3EXvpAcEkJMBI+mpe4L4/B94PkvmifC+WWCmDsZ4k+EZ3x21CRo6157AIJ4CYIwTNKlo5JtBzgOK0AHQUCcysPIbI8iDtES0fsaO8A7wgZeijBBfeeSZNgdUAXt0TXt7hue0DQsG6QF5gE7eV3791rcLMMSX0heUW3lvetObNisBaeMP8jt5lcWINtPfjfv6mboBjqFRyjI8yj9lUE7xAUXfBmOGfhhtoOdonHeUA5/AElE69OmnbecGzDAUhtZgMhZolXRWnScfur4QizhXDsDMIAyIGYQ1ktkOqnqI2zODSt9AIb5nmGQIzAAyzEC1iVEgfOBqM8DMoEFwkjcm9cOAi6DPtDzVHeJXToOFj7dzwJuKfKvATGfAwOqY+uqYZjkwKyY2QADA1qH5SJq9PdDCzGllX9Z7eKWA2fyBmfbGnxmDjEPAmQF63YXMntd9AAh4+qv+KxAEfCSta2VCRKBI8OE1224Gsv9A9mmu87k6q/sQmKGdj6gxDn2YxPj4rxotCAjGVLO5hC7fakCMaQ8tgolIM8aEMxOOfkC799aZH9RNe9ImoAkaCcCpyVpghQCID8y0i7Obpoy+C+Qmwh3zOO3gOwnIWDvjnKbMM/GUyzs0EkCT8muzafwpHgHZuxEKxTVe0lgQLGlEaLkANYKud/C8iVPgncZOnsZSmmP8Iy4hXv5MBslYaOoekCG+8ngnR3nSnpkcIo9tVT4EfPAtAEPLqT5MT0866aRGA8/Jc4AScOgboH/3tFE332CyW4CU7wYZNma97rOA6oGZOqgfzQ9AoI3wiSA/QBHPeFc90TsWWO6l3AFmSY/ZI4DjW0WwJwd5NvxFeN8MMEN7YAmIDrAcpqdMJtzxtjIAO9pWOUxCGReMD3jP2GEyB6jWfgI6owMABfwActpT33Kk6aV9m9XGoVVfLvSljZMW8Kvs2tq3K3wkfbiD9k4ZTQ7IQ320HxlVv1Y3wboy/AoYC97Tx7WjQGusfuR7ZerLc6Bz76MZvKOPCbPeUW7pOw7jpG3nAsxkgOE1JFvcMCnNyNd//dc3sILQw0Is4lrDmRmGvjF+gvvqAD0bhGjTBI3sJzBxYOuKMSz+0yEFoErn9r7OroEMcO7R9riHRrM0Zgbh2BfrSH7oNa3hFkEz5QkwM6Mm0IJiYm3M1lYYrjFDR3VAZ4zo55x9sU4ipL7or4OjaWiBBoKBl0Ap7612mEXQazN55qPQrzGLYKDeoVf/IdlMuvs5Dl7DQwZlH7/wD6GFUA2o7Bd6GrPM4hEwM56YQTSxRCDQz0wuJejPBCsfwf1Co76v4J0hMDNWoR/h0foAM7gZy/t3V+FcmxKsrH0hmBAYTR769lgTwZyMACqOCTCgjKCDd1ahfjspoz5gkpYWKn3F+EFDxZTKOOL+XgAz7aSfEoT9CI8mLYEmwmkCAZhZln6u7oRfE8x9e0lLECeyBBNmcozvrffEMSFMGNX+NAe+t4Rgz2jAfOcBGPJL5CTCLvDAHA0/4R8TqCZT9RFr9Wn3sn7M98wkLGsiwnTGZhO0fvraVtrQ+wHPBHB8TMg2KU6zR0azppKZIgChTJEdQhe04U0SsNT31U251fc973lPoyXaDYEZGjP3FA/g0F+8Kw8mgsoCvLuHroAh4d970hsCM/dp1KRHW6Xs3k2bDekS4X0zwCx0ByxNcvf80aer7EA07+LkOQD88MMPb4AW0BSXCaMycrwRJxr4xbMAMyauNIbKHxmGebi83evzzLm8+2fqjaYmI4y92tdEIlNZljDAI6sYPOddQTtoa/VThsjU+MRPPBY05P7cw4es0yiO3DM5YbLKOC8dYVYbpOyO2tR30zcVCNcX0cX9Pl7O3RfwYe7lmLadCzCTKMJaEAoxMpHwIQPKDAS7OcOUCm32qJzsig080wQ1DUJIMSsAcBmA/Ah3l7nMZTZU0sztAC+BHbaZVoRGdA3rGi3EwxQa2MCGsQBD5RDfDI2BQV4GZMyfn8FiM4yx2bpvNx6a0CAqZ8CRgVQnVkcLygUzHNGe0aYZDHQewoA6MWlAc8DMYCyt1NXRMwO3GSvmNmbBzNqZwdG5p7XXduu06PfwBBqZIUNLpnY+bGbnfYhDL/yxDDywaHptJv/QyQQRbTXaEToM2AQvg+9m0lmHOPjLx5BQ4COrL9He+8jpRz5eTDnwGht5H2Mz3Mav0HEd6LDZOqiz8dZkEmCPfr5bJk6sYfHhJYRGeF01GvneGGMIIoR9YMy32boIba79jckECgIvvjEZZ+zfLA1XNZ46AqkEe0Kf/mFyVV9BJ99pcYAMgtduyzPawzfBz5hFC5YxTPsY08gvgJh2BYyYj9FY4FvtoMy05eQK31/p4F1gieOBxHNk9eKb65vjHXkx2zVmmKyhmZOvb7E0TH5xjgK4opt4BHXjLlCBVnEGAuirjx9AYmIIyNPXfOt88wjM6rFV/tEO+qQy6580ZmQSchZwqa7MGH0H0Ej55UHuQBflIZNQJtBySMPksj5C5ku51dlYCRijl3Rolq0LI+v1dLEunnaKvEjwp6kT1xib9OSbNWbSUzZ5aoc+PXSdNs5EeN8MMFNfgUWEbyKemkZn9MffZFzmg9rQxAzaZP0hYG3yGJ/oF0CT+qkXOYZW0EQGcMysURtbJwcHWM81rY3VD8gFjqTTl83kEdrKyySjNsAz+ieARTuKL8nNtLmUKSYGmCuS4T3DG+grHzIlnlVOvEMON84Bz/Iiryq/IC5NLt7Rl/py9efSBUCNo/CAtLStbwZaD9tPHfEcIKlswzqnbecGzBQ+HRSoIbD7qJn1mcUMfQX36hxzWBSKiLMEfYRmq40RdCqDB2KbDUFITIvRfcx0LExn9goNNIQ8zJCYXbBo17X7BjQffgDWPfF1XnQSV+fMDwjSyZeBdurrY23ANqhkJsQAp6OyE0cHIJTJYWiiE6Q+ObJlBr58SHIvRwODDmK2Fj3QH+3NRGRvob3ik93OR/sTnAFZbUwYNKAY7EIPRzN64u52edYlfbT0MQbkCVb4x0yYAX44CK5LnafVw9jiw9Sbrvl4ZibYuGN20MwiOpnl8+FdhvFmWn12+57x2cfaOB4BlwDM9MU3AJ2MyX5mtY1xu12meaafb42xlTCiTupqDDe+E3wIJurnGW0qmvjNsxzLmFbqabJCXwBSWMYAF+kPaGTRP83AbgOzIY2AKoDR91fZfBdYqgAMvg2AtnHOBEzK6+ibycuob67guXjiJx6+AG6YjNHKJW3jAyGYpQqe6PmfIE0GAGK8g1+MLdYTua9MhFr3gKTwkHp41+Q0eYoWhFYLIFKOYb0PdC1d7/kJ5A+TTwKLHMAMsEy/JbyTL4BKrvWNhYKJevVWD/H1f2WVv28GAdpEu/eEmISjSU8XYMC44LvuO5703O/TAxSkZ9mLAPCh8zC9WUuAIrxvFphpD0B0DJilniYeWHkJNMRkOKas6gWQkVVjEYdO5DTPycIsncQDWPEZXvUd1t6Refs2TfuZIJrm/CNtq++Z4Ke5I3/KA83wF/lTXpbHaCcOZchR+nHaXZsCWt7Dl97xUy6aSvTxrvT0GYETFxM1JjXwdF/u/ly7mpzAy+EPHizRhVlv2j3vyEu70v4xyxw+T9vODZjJOISkDqbmBnwyAKRgiz5iBuWChGeVRRwEM1PFxtZAZiZDXTzznmcGr6TnvE8PLeQhXt7x3D35554ZJvfM0Bgg83MNyPVpLvLcAKucVMwph85M+DOwqo+65lwdzRIN62UWxTuepa45ekeaaIeHMDpw6kO4bHwUGmz3iF4mMsI36DKNXrNmzbab7354z0CKngZzs2loja/2Q937OvbjMVrgpXwIPEMXM9q0ZsaasQ9Qn+46n+uPeAdtjHlma4dj2HBMXxV6aHNl1d4EDm2efqHtfeMIXZnJRYNVqdtOy5kxQluboMj3vk/Xd8g3sL+3V+e+f/hOPzYrL9+0HT4FOPpvs+fa1zclQNJxWjzpkEMI3njDuXvij32TxDF+oJdvd8YPtFTWfNt6Ghl/3Pdd927GqD7Ods6Tp3ZzTg4Zyhiu1Q29nDuKi7ZkELyvfYeyRmS0xJ/1rY5c530TgbPS007y2Wx6Q3pEeN8KMKONA36EYXr9tbZJPfCP8U/90Snldt+1n/6C5v24GXriVXzg+Zgc410yYV+O4bk8e/lTHtJMf1BG/Ce/YbsrY2gtjj7gPflKB0+qJy0cRRLwhKfRS5yMm8MyuUYDvKZsiecoPXXyvH/PdfqVOvXPnKdt5wrMUlAdFgGGhRoWYlHXyhUijpVBHPXwG8bv0+jP+/S8M6TBrHvuD399Wos+H6ujcitfHyfnwzq5P/Ys6eAhnWaZ+WinbRI6pM5DWrkWZ6f57Mf30Q3v4KP9TEN1z3icfhp+yLP9TqPQw3HY59atT461ubpO+9b19Fn38zEaoJ3ni6JByjatv84ql/vKnTLPijeNL1Jf7/S/pJd3pn2j827y7Y/S2o2xWZ592foy51w5UrbEdS9lcuzLmnP3Ez/vJ80c83w30ks5HCO8bxaYAR60OLR4NEF9WsPzafXs43g+vA49ZtW/T7N/N+ehX65nHaflPeSjlCVp5tin6V7GOX0JkOOxEzAzKUVDR9vFHJMM2r877Tx59s/k0dOjfzYtfp6nbecOzJJBHb/Wm07RpGhSPFA8UDxQPFA8UDxQPFA8sB0eiPC+WWAWgMA01zYA28lzXd8BzGhLLUdi6guwqSuabQaUzZsuadt9B8wQPIw6JOqsZ2Pxp6Ux7d5Y2nmW4/D9uq4BvHigeKB4oHigeKB4oHhgf/NAhPfNArPwC02QX67r+FU+ot2y/iygbJF0SdvuS2A2Tc0IFE27715+fYOJD2171t8fpkGNrMHZ7bIp1TH6dxI/oEyabFz7OH36db6/B+Vq/2r/4oHigeKB4oHigf3JAxHetwrMil82zy/kcWCN/O4Y7ZnjtDAveT1tu6+AGYBk/7GTTjqpudAEgjCrRrBAkScfXn2yUFEjcL/JjTDPRhpJfPd5beQi08LCIG2Nw80s+1RxxOdNyUauvEDyXMPblQWF3hH/9NNPbxs68pjjx1MarzYWKKZ81aE236GKVkWr4oHigeKB4oHigeKBdeSBCO8FzHaHv+EBDjp4YSfjk+k5cqFU4ZGTzJ4fT67k9WwLsVN+S9vuK2AGKHH3yZW//RUgYYREcHu2uM+FJi8rQBPNFZew7t/mNrdpAE6jiW//Bvc9d+2+d7xvfwTB4sHLX/7yzT08l6n2tuAC3sZ58lAe+5G45rLV3gb2T+FqkxtZwEy6O23sen93OnDRtehaPFA8UDxQPFA8UDywVzwQ4b2A2e7wHHnenry2ULAfM4WKbQRscwAnUJ7YjJuMTuECB1DgRHGzEz5I2+47YGYTRPu42OQYkArQsjkdQGSvEKCJxou3FkDLXmT2SuBKE/E1HEBmjxvv0IrF/JBnF/ukcdtpLwUNK3gucANvDy+bKgri26C6D67twcAFZ2nNdqfz7aTz1LvVJsUDxQPFA8UDxQPFA3vNAxHeC5jNn/fgAUuO7LNn03GB9Zr93OyzK5D/KXW44Icj7Fs3D1CGj9K2+w6YQbhAGMBlQ0SAySabNFdcZtpYEjATbFYnHjNHGjOmjhpEw9gV/bjjjmsADbgCxJgnOqcCtcG0TQPtFwPkpfN6n7bNpskaExAE/JzbiwFT3P/+958AkAGOebeO8++IRdOiafFA8UDxQPFA8UDxwCrwQIT3Ambz4ddYu5G3/cjiD3jAA9om7jRhFCU2pLbHX5YtkeMpXW5729vOVU5P2+47YMaUkcmg9VxsRwUaLruKZ1d6G8NpnMMPP7yBKHFe9KIXNa2ZjeM0CmB27LHHNkBGzfm4xz2upQWYnXfeeZNXvvKVbRd568l6rRcgKC2AD5g77LDDWqMfc8wxk6OPPnpy8MEHN3RuV3plWIWBoso4nwGi6Fh0LB4oHigeKB4oHigemMUDEd4LmO2cR4AyihdaMb8sMeJT4jKXuUyzrrvEJS4xOfnkkzc22qZo+fjHPz65ylWu0hQwFDWz2mqr99O2+xKYPetZz5q85S1vmRxyyCHN0QdtmHVhb33rWxtI4kHRYr9LX/rSDbDd8573bHambEmtGxMAs+ykTsV5hStcYfKhD32oAS3ATMMyc2SXGpStkYC6pzzlKZPrXOc6rTEPPfTQCVD2kpe8ZHLuuec27Zn3lAeI22rDVvydd9aiYdGweKB4oHigeKB4oHhg2XggwnsBs53zJhmbg4+DDjqoLT066qijmgUdBQkLOnucWVdm2dI555zTZHIyvKVMrN7mbdWWtt2XwMz6ri996UvNbJF3FWpK5owcdDhnO3raaadNrnGNa0ye//znNxtSx5vd7GaT29/+9s2UkVkjYKaRaLaYR97gBjdo7wBY0mPKyMmIoAEhbaaK173udRszuE/DdvbZZ7c4mESQtrx6E8hlGxyqPDsfFIqGRcPigeKB4oHigeKB4oHN8kCE9wJmO+cZGrNPf/rTk4997GPtx1yRLwl+KCxDSjjhhBOasw/yPq0abEB54jrtxjJOIOu7J8TqjWyfuMN4ed8xbbvvgBlQdOaZZzaiPfrRj24eVY4//vh2/drXvnYDpF3taldrnhLbg///Rwt2qUtdqmnTrBO7053u1IhNI/a5z32uNRatGmQtPOYxj2mOPl73utc1NalG582FCvRTn/pUQ9/WtD35yU/e0I5pQN4bATYuO9PIfePV+c47ZNGwaFg8UDxQPFA8UDxQPLBKPBDhvYDZ/2PvTuC9m6r/gZfMkTElKjKESMmQiDKGqFAJkamBjJkyFDJEEYUUiZLIPIQoZVamQqYy0ywVv0Z1/q/3/rdu+zm+9zz3Pvfe57nD2q/Xued7z9lnD5+99j7rs9fa+wyP3CJKjCAObomPPPJI2XzPDuncHK+//vpC1OycLtx8883NbLPN1lxzzTV9xAsH4GXH0PPQQw8V3f2II45oLr744pLuySef3Bx33HHl9+23317iPfjgg5MscyKD0bYTjphxW7SLCvYKcG6DsdvKWWedVVwXESmMuF7shyBZL4ZIWaPme2ibbbbZJITK83PNNVejERAs1jFui0ieXRbnn3/+ZpVVVin5EgICYZMPDRh+qp7jUrngggs2d9999yRukGNp8MiyDs+gkTgmjikDKQMpAykDKQMpA2QglPckZiMjD3RzOrilTngAvf3DH/5wIWn08wsvvLAYcGpi5ToewXDD+mb/CPtIIHeC5UpcH4Wzzz67LJNC8MKiFn072nZCETOVt7GHNWRMmP5Htp555pnyPwsVM6UPTDsHWHH2jOcd4mDTkY44ftvinpuk/8N90TW7uzCZImsaPtKUj/LE/87i2GREeer06zj5e2Q6ZeKauKYMpAykDKQMpAykDIxGGQjlPYnZyMknHZ1+z7ONBYwuH95r9Hu8wS7qtXzQ120gQn93XRw8gQ4vLbq+3+14dRrRthOOmAG3JjsBNnBcj/v19Rq4uC9unU7Eifvxv7NrTJ0sZO1nesWPctRp5O+R64SJbWKbMpAykDKQMpAykDIw2mUglPckZiMrq/3p7f3p5+3rtW5f36t/t2Ut2nbCEbM2EPn/yAp34pv4pgykDKQMpAykDKQMpAwMXQZCeU9iNnQsR5s8RtsmMfu/8de4o03YsjwpYykDKQMpAykDKQMpAykDQ5OBUN6TmA0Nx9Eoh9G2ScySmE3iJzsahTXLNP4GoGzTbNOUgZSBlIGUgZSBwclAKO9JzAaH21iQs2jbJGZJzJKYpQykDKQMpAykDKQMpAykDIxyGQjlPYlZErOyzaM/FrSNBeaZZRx/Qpttmm2aMpAykDKQMpAykDIwUWUgidn4lf1o27SYjfLZkYk6+GS9x+/gk22bbZsykDKQMpAykDIweBkI5T0tZoPHbrTLW7TtoIlZbPluy8c8EoOUgZSBlIGUgZSBlIGUgZSBlIGRl4FQ3p0T75HHe2piHG07aGLGnfE///lPHolBykDKQMpAykDKQMpAykDKQMrAVJKBPx62b/PU9ps2zqmLjy8uEm07RcSsb8FZ/kgEEoFEIBFIBBKBRCARSAQSgRFHgNKOmPVS3kc888xgRBHoatsXjGjOmXgikAgkAolAIpAIJAKJQCKQCAwKgS7lfVAJZeRRh0BX2yYxG3XNlQVKBBKBRCARSAQSgUQgEZjICHQp7xMZl/FQ9662TWI2Hlo465AIJAKJQCKQCCQCiUAiMG4Q6FLex00lJ2hFuto2idkEFYqsdiKQCCQCiUAikAgkAonA6ESgS3kfnSXOUg0Uga62TWI2UBQzXiKQCCQCiUAikAgkAolAIjAVEOhS3qdC9pnFCCLQ1bZJzEYQ+P6S/te//tX85S9/af75z3/2FyWvJwKJQCKQCCQCiUAikAhMUAS6lPcaEroknXIiBPrzc889N+ar2tW2Y5KYPfTQQ8273vWu5tOf/vTzGuemm25q3vnOdzbf/OY3y71jjz22OfTQQ8vvww8/vPnCF77wvGd8VG6HHXZorr766ufdu+WWW5oNNtigecc73tF3rLPOOs3+++/f/OMf/2g+9rGP9V0XR97y89Vx4fvf/36jDILvUHz5y19u3vrWtzbLLLNMs/LKKzdf/OIXy/USIf8kAolAIpAIJAKJQCKQCEAR45AAACAASURBVEx4BLqU9wDn0UcfbVZbbbVm6623LpcOO+yw5qKLLmoOOuig5plnnolow3Z++umnG3o2ckSn/chHPtJcddVVnekfcMABzbnnnls+kv3hD3+4T2ded911mw033LA56qijyr3ORJqmOeWUU5rVV1+9+drXvja5qFP9/i9/+cuC+Xe+850+/tFViK62HZPE7I477mhe8IIXNHPOOWfz+OOPT1L3rbbaqtzbd999y/XNN9+8CIF/EKwPfOADk8T3j5mGBRZYoDn11FOfd++8885rZphhhuboo48uQkEwvvKVrzSXX355EXrPydN1B1I222yzNbvssktJ6+STT26UQfjWt75VynzCCSc0N9xwQ/O5z32umWmmmUalkD0PiLyQCCQCiUAikAgkAolAIjBVEOhS3qMA9Mk3v/nNfRYzBgK65RprrNH84Q9/iGjDdr7xxhubxRdfvGG5Eg455JDm5ptv7kx/lVVWaRBGuvZ8881XDCGhMx988MHN7LPP3nzyk5/sTIMB5TWveU0xiiBBoy385Cc/adZcc81GffbZZ5/JFq+rbccsMUOI5p577uakk07qAwBJIzDzzjtvs99++5XrZhE22mij8vs973lPIVF9D/z3B2HR4Keffnr7VnP++ec3888/f58FrI7w5z//uVlooYUaDLkOO++8c7PsssuWS1/96lf7yOCWW25ZrGV13D333LMxg5AhEUgEEoFEIBFIBBKBRCARgECX8h4IIWHve9/74t+GRxcLFMvSU089Va4zBOy9995FL/7xj39crv3mN79pzjnnnGIkOPDAA8szjz32WF86SN2XvvSlZqeddiqeXX/605+aJ554oqHf0r15gknjsssuax588MHy3O9///tJnvnjH/9Yrr/97W9vjjzyyELMXvGKVzSXXHJJXz5+bLvtts0b3vCGvmvXXnttw7hCf5Yv7zT5zTXXXM0nPvGJJojZNddc0xePJU+46667Gtedkda//e1vzf33318IpDLEsyyNF198cXPrrbcWsnfMMcf04SUdnnlwhNsPfvCDvrIpy1lnnVWus0yGWyVipp48+fbaa68SXx4IaC+C3NW2Y5KY3X777YWA7bjjjsWEG8w9Zg7WX3/9PmCGSswuuOCC5qUvfWnz05/+tPnVr37VPPnkk+XgqojQIWannXZaaRzlIBzMs2El+9nPftYnhNwWWciQMTMMBE7ItWZ9Mp8/EoFEIBFIBBKBRCARmPAIdCnvAQ5Csckmm8S/xWXQEhzkAYm48sorm5e//OXF5ZBeyqOL1YsePd100xUd1lIeFrZFFlmkeeCBB4puu+KKKxZL3K677tosscQSzRZbbNH84he/aNZaa63mxS9+cTFyIDnLLbdc8Qaj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cMABzSc+8YlyT3rK4JlIN87RtknMkpg9TzhCSPI86YCYeCQeKQMpAykDKQMpAykD00oGQnnvImZI2MYbb1zICBKw5pprNoceemjz1re+tRAzBOPSSy9tPvzhDzc77rhjc8UVVxQy8uCDDzYnn3xyubfzzjs3++23X3PnnXeWe55x/zOf+UyzxRZbFFLFVfIXv/hFs8022zRzzjlnuSbOWWedVaxFyNAvf/nL5pBDDinPOD/yyCOF26y++uqlTIjZ/PPP35x77rnBecpZmssuu2ypAzJz4YUXNh/72MeaI488snn00UeL66L05phjjuYjH/lIc9ddd5W4dTx5IVA33nhjc8kllzSI0mGHHVYI3Y9//ONCllgTb7311kKafv7znzeI4fe///3m4x//eCF8Dz/8cCGByNrtt99eMIGb8iJgyoYgfvnLXy54nnbaac3TTz9d0rv22muLFZD1b/fddy+EjDXzqKOOKjjUpI88RdsmMUtilsQsZSBlIGUgZSBlIGUgZSBlYJTLQCjv/REzRIzF6d3vfncfoTrvvPOam2++uTn77LPL2q8LLrigeelLX9rsuuuuhVTNMssszZVXXlkIzAte8IJihUJM1l133eaVr3xlc9tttzW/+93vmte//vWF3O2zzz7N0ksv3bznPe9pkJl3vOMdzWyzzdZst9125X+E6tRTTy3r3MTjpuiZ173udc273vWunsSMux9yYr0YQsWixoomIFOvfvWrmz322KOQzDe/+c3FXXOnnXZqZp999ma99dZrbrrpplLvOt5KK61U3CGPPvroZoEFFmgWX3zx5oMf/GDz7W9/u3nVq17V7LDDDsXt0r2f/OQnhbzNPPPMpY6sda95zWtK2ggmC+DLX/7yUn71fPGLX1yIJXIGa3nttddezWtf+9qCKdKlHuecc0559oc//GEha/5nDUQMpVsT/GjbJGajvBPWjZa/c5YuZSBlIGUgZSBlIGUgZWBiykAo772IGZLgYC1j1QnFn9WIxcsZcWOxmWuuuYqliBwhUTfccEPDwjPDDDM0iJsgLVa27bffvrgK7r333s2vf/3rkhZrFeIi3auuuqq4MiJV0kPMrB9DTDzDKibeQQcd1Cy66KKlXNwqWfHc44642GKLNausskqDdM0777yFiD3wwAMNixVyKD0baLCWcZs89thjC1lEhJT7iSeeaBZc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wJQg0KW8T0l6+czoQaCrbccMMfvb3/7Wh+hzzz3X/OMf/+j7v/4hnvsR6ufimmf/85//xL99Z9f//e9/N77f5jlH+3dEdr0d5BvPxbPtOPF/r+fjXp4TgUQgEUgEEoFEIBFIBCYuAl3Ke43K008/3Tz++OPl0r/+9a+iA//zn/+so4zY79CbuzKIMokjfq0n1/p6Vxpx789//nN5Pv4fLWecAubqM5A6dSJhdPEAACAASURBVLXtmCBm3/3ud5sVV1yxufzyy0sb3H777c2qq67a3HvvvZO0yVVXXdWsu+66zW9/+9ty/dJLLy3Pfe9735sk3tZbb91stdVWBcS48eSTTzYbb7xxc+WVVzYbbbRRs/LKK09yvPnNb24++MEPNgTs5ptvbvz/jW98Ix4v5xNPPLFZaaWVmre85S3lEGfDDTdsrr322kni3XDDDeX5M844Y5Lr+U8ikAgkAolAIpAIJAKJQCLQpbwHOvfff3/zhje8odluu+3KpX322ac5++yzmz322KNBYoY7/O53v2vo5HRhhoz3v//9DV27K+y8887NN7/5zeb//u//mve9731F/6Un07Od99xzz+aPf/xjVxLFmPK5z32ueeMb39icdNJJnXGnxc377ruvYH766ac3X/nKVyZbhK62HfXEDAtdf/31m1lmmaV55zvfWRrnqaeeal7+8pc3n/3sZyep/Oabb96sttpqha167h3veEd5DjmqLWSE+AUveEGDSEX4xS9+0bz0pS9trr766kLOLr744ubggw9uZppppgLyRRdd1PzoRz8q0XfYYYeSLqGqLV+Eb7HFFmsuueSScpxzzjmlzMr6q1/9KrJqtt122/I8gTR7kCERSAQSgUQgEUgEEoFEIBEIBLqU94jzxS9+sVl99dX7rDTrrbde8/nPf75Zc801mz/84Q8RbdjODAsLLbRQIWYSpUf/7Gc/60yfIeXwww9v/vKXvzQve9nLmr322qvoyPRsJGauueZqPv7xj3emgdTJV91+/etfd8adFjdvueWWZq211moOOeSQBjmeXOhq21FPzO66667SGF/96leb+eefv/n5z39e6vuxj32sWMPCZIisLbDAAs3Xv/71cp+gaMR47p577unDifUN65beAw88UK7/8pe/bF7xilc0t956a188lq755puvYU2L8MQTTzSvfvWrS7oLLrhgc801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"}}, "cell_type": "markdown", "metadata": {}, "source": ["Well, it means adding capabilities that allow us to: \n", "- take _spatial_ data as input\n", "- visualize the spatial data\n", "- perform various geospatial operations on it \n", "- export, publish or save spatial data\n", "\n", "To add \"spatial abilities\", a SeDF must be created from the data, and to create a SeDF, the data must be spatial. In other words, the dataset must have location information (such as an address or latitude, longitude coordinates) or geometry information (such as point, line or polygon, etc.) to create a SeDF from it. There are various ways to create a SeDF from the data and we will go into those details in part-2 of the guide series.\n", "\n", "In the background, __SeDF__ uses the `spatial` namespace to add a `SHAPE` column to the data. The `SHAPE` column is of a special data type called __geometry__ and it holds the geometry for each record in the DataFrame. When a spatial method such as `plot()` is applied to a SeDF (or a spatial property such as `geometry_type` is called), this command will always act on the geometry column `SHAPE`.\n", "\n", "The image below shows a SeDF created from a Pandas DataFrame. A new `SHAPE` column, highlighted in red, gets added to the SeDF.\n", "![image-2.png](attachment:image-2.png)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Custom Namespaces"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The [__GeoAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) and the [__GeoSeriesAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) classes, from the [`arcgis.features`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#module-arcgis.features) module, add two custom namespaces to a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) or a [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The _GeoAccessor_ class adds `spatial` namespace to the DataFrame and the _GeoSeriesAccessor_ class adds `geom` namespace to the Series.\n", "\n", "By adding custom namespaces, we [extend](https://pandas.pydata.org/pandas-docs/stable/development/extending.html) the capabilities of Pandas to allow for spatial operations using various geometry objects. The different geometry objects supported by these namespaces are:\n", "\n", " - Point\n", " - Polyline\n", " - Polygon\n", " \n", "You can learn more about these geometry objects in our [Working with Geometries](https://developers.arcgis.com/python/guide/part2-working-with-geometries/) guide series."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### The `spatial` namespace"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The `spatial` namespace allows us to performs spatial operations on a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame). The namespace provides:\n", "- Dataset level operations\n", "- Dataset information\n", "- Input/Output operations\n", "\n", "\n", "The spatial namespace can be accessed using the `.spatial` _accessor_ pattern. E.g.: \n", "\n", "a. The centroid of a dataframe can be retrieved using the [`centroid`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.centroid) property. \n", "\n", "```python\n", ">>> df.spatial.centroid\n", "```\n", " \n", "b. The [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method can be used to draw the data on a web map.\n", "\n", "```python\n", ">>> df.spatial.plot()\n", "```"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### The `geom` namespace"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The `geom` namespace enables spatial operations on a given Pandas [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The namespace is accessible using the `.geom` _accessor_ pattern. E.g.:\n", "\n", "a. The [`area`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.area) method can be used to retrieve the Feature object\u2019s area.\n", "\n", "```python\n", ">>> df.SHAPE.geom.area\n", "```\n", " \n", "b. The [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method can be used to constructs a Polygon at a specified distance from the Geometry object.\n", "\n", "```python\n", ">>> df.SHAPE.geom.buffer()\n", "``` \n", "\n", "__Note__ that `geom` accessor operates on a series of data type \"_geometry_\". The `SHAPE` column of a SeDF is of _geometry_ data type. "]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Importing namespaces"]}, {"cell_type": "markdown", "metadata": {}, "source": ["_GeoSeriesAccessor_ and _GeoAccessor_ classes are similar to [pandas.Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series) and [pandas.DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) objects. However, you do not work with them directly. Instead, you import them right after you import Pandas as shown in the snippet below. Importing these classes registers the spatial functionality with Pandas and allows you to start performing spatial operations on your DataFrames.\n", "\n", "You may import the classes as follows:\n", "\n", "\n", "```python\n", "import pandas as pd\n", "from arcgis.features import GeoAccessor, GeoSeriesAccessor\n", "```"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Geometry Engines"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The ArcGIS API for Python uses either [`shapely`](https://pypi.org/project/Shapely/) or [`arcpy`](https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy) as back-ends (engines) for processing geometries. The API is identical no matter which engine you use. However, at any point in time, only one engine will be used. \n", "\n", "[__ArcPy__]((https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy)) provides a useful and productive way to perform geographic data analysis, data conversion, data management, and map automation with Python. With `arcpy` as the geometry engine, you can read/write different file types, perform various geometric operations and do a lot more without needing multiple other third-party packages that perform such operations. \n", "\n", "\n", "By default, the ArcGIS API for Python looks for `arcpy` as the geometry engine. In the absence of `arcpy`, it looks for `shapely`. The ArcGIS API for Python integrates the [Shapely](https://pypi.org/project/Shapely/), [Fiona](https://pypi.org/project/Fiona/), and [PyShp](https://pypi.org/project/pyshp/) packages so that spatial data from other sources can be accessed through the API. This makes it easier to use the ArcGIS API for Python and work with geospatial data regardless of the platform used. However, we recommend using `arcpy` for better accuracy and support for a wider gamut of data sources. Here is a one-line overview of each of these packages:\n", "\n", " - [Shapely](https://pypi.org/project/Shapely/) is used for the manipulation and analysis of geometric objects. \n", " - [Fiona](https://pypi.org/project/Fiona/) can read and write real-world data using multi-layered GIS formats, including Esri File Geodatabase. It is often used in combination with Shapely so that Fiona is used for creating the input and output, while Shapely does the data wrangling part. \n", " - [PyShp](https://pypi.org/project/pyshp/) is used for reading and writing ESRI shapefiles."]}, {"cell_type": "markdown", "metadata": {}, "source": ["
\n", " Note: In the absence of arcpy, the ArcGIS API for Python looks for a shapely geometry engine. To allow for a seamless experience, both Shapely and Fiona packages must be present in your current conda environment. If these packages are not installed, you may install them using conda as follows:\n", " \n", "conda install shapely\n", "conda install fiona\n", "
"]}, {"cell_type": "markdown", "metadata": {}, "source": ["It could be that both `arcpy` and `shapely` are __not__ present in your current environment. In such a scenario, the number of spatial operations you could perform using SeDF will be extremely limited. The cell below shows how to easily detect the current geometry engine in your environment."]}, {"cell_type": "code", "execution_count": 1, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:04.173110Z", "start_time": "2021-09-07T19:07:04.161107Z"}}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Has arcpy\n"]}], "source": ["import imp\n", "try:\n", " if imp.find_module('arcpy'):\n", " print(\"Has arcpy\")\n", " elif imp.find_module('shapely'):\n", " print(\"Has shapely\")\n", " elif imp.find_module('arcpy') and imp.find_module('shapely'):\n", " print(\"Has both arcpy and shapely\")\n", "except:\n", " print(\"Does not have either arcpy or shapely\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["So far, we have gone through some of the basics of __Spatially enabled DataFrame__. Now, it's time to see the `spatial` and `geom` namespaces in action. Let's look at a quick example."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Quick Example\n", "\n", "Let's look at a quick example showcasing the `spatial` and `geom` namespaces at work. We will start with a common use case of importing the data from a csv file. "]}, {"cell_type": "markdown", "metadata": {}, "source": ["In this example, we will:\n", "\n", "- read the data with location information from a csv file into a Pandas DataFrame\n", "- create a SeDF from the Pandas DataFrame\n", "- check some properties of the SeDF\n", "- apply spatial operations on the geometry column using the `geom` accessor\n", "- plot the SeDF on a map\n", "\n", "__Data:__ We will use the Covid-19 data for Nursing Homes in the U.S. to illustrate this example. The data has 124 records and 10 columns.\n", "\n", "__Note:__ the dataset used in this example is a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) and has been curated for illustration purposes. The complete dataset is available at the Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) website."]}, {"cell_type": "code", "execution_count": 2, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:38.468200Z", "start_time": "2021-09-07T19:07:21.842196Z"}}, "outputs": [], "source": ["# Import Libraries\n", "\n", "import pandas as pd\n", "from arcgis.features import GeoAccessor, GeoSeriesAccessor\n", "from arcgis.gis import GIS\n", "from IPython.display import display"]}, {"cell_type": "code", "execution_count": 3, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:38.933465Z", "start_time": "2021-09-07T19:07:38.471207Z"}}, "outputs": [], "source": ["# Create an anonymous GIS Connection\n", "gis = GIS()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Get Data"]}, {"cell_type": "code", "execution_count": 4, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:40.562179Z", "start_time": "2021-09-07T19:07:40.539177Z"}}, "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", "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722
2PARKWAY MANORMARIONIL00013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505
\n", "
"], "text/plain": [" Provider Name Provider City Provider State \\\n", "0 GROSSE POINTE MANOR NILES IL \n", "1 MILLER'S MERRY MANOR DUNKIRK IN \n", "2 PARKWAY MANOR MARION IL \n", "3 AVANTARA LONG GROVE LONG GROVE IL \n", "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", "\n", " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", "0 5 56 \n", "1 0 0 \n", "2 0 0 \n", "3 6 141 \n", "4 19 75 \n", "\n", " Residents Total COVID-19 Deaths Number of All Beds \\\n", "0 12 99 \n", "1 0 46 \n", "2 0 131 \n", "3 0 195 \n", "4 16 180 \n", "\n", " Total Number of Occupied Beds LONGITUDE LATITUDE \n", "0 61 -87.792973 42.012012 \n", "1 43 -85.197651 40.392722 \n", "2 84 -88.982944 37.750143 \n", "3 131 -87.986442 42.160843 \n", "4 116 -87.726353 41.975505 "]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["# Read the data\n", "df = pd.read_csv('../data/sample_cms_data.csv')\n", "\n", "# Return the first 5 records\n", "df.head()"]}, {"cell_type": "code", "execution_count": 5, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:41.267489Z", "start_time": "2021-09-07T19:07:41.261506Z"}}, "outputs": [{"data": {"text/plain": ["(124, 10)"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check Shape\n", "df.shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The dataset contains 124 records and 10 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n", "\n", "- Name of the nursing home, its city and state\n", "- Details of resident Covid cases, deaths and number of beds\n", "- Location of nursing home as Latitude and Longitude"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Create a SeDF\n", "\n", "A Spatially enabled DataFrame can be created from any Pandas DataFrame with location information (Latitude and Longitude) using the [`from_xy()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.from_xy) method of the `spatial` namespace."]}, {"cell_type": "code", "execution_count": 6, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:42.367185Z", "start_time": "2021-09-07T19:07:42.346196Z"}}, "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", "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL00013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n", "
"], "text/plain": [" Provider Name Provider City Provider State \\\n", "0 GROSSE POINTE MANOR NILES IL \n", "1 MILLER'S MERRY MANOR DUNKIRK IN \n", "2 PARKWAY MANOR MARION IL \n", "3 AVANTARA LONG GROVE LONG GROVE IL \n", "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", "\n", " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", "0 5 56 \n", "1 0 0 \n", "2 0 0 \n", "3 6 141 \n", "4 19 75 \n", "\n", " Residents Total COVID-19 Deaths Number of All Beds \\\n", "0 12 99 \n", "1 0 46 \n", "2 0 131 \n", "3 0 195 \n", "4 16 180 \n", "\n", " Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", "0 61 -87.792973 42.012012 \n", "1 43 -85.197651 40.392722 \n", "2 84 -88.982944 37.750143 \n", "3 131 -87.986442 42.160843 \n", "4 116 -87.726353 41.975505 \n", "\n", " SHAPE \n", "0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", "1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", "2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n", "3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", "4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["# Read into a SeDF\n", "sedf = pd.DataFrame.spatial.from_xy(df=df, x_column='LONGITUDE', y_column='LATITUDE', sr=4326)\n", "\n", "# Check head\n", "sedf.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> We can see that a new `SHAPE` column has been added while creating a SeDF.\n", "\n", "Let's look at the detailed information of the DataFrame."]}, {"cell_type": "code", "execution_count": 7, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:43.517509Z", "start_time": "2021-09-07T19:07:43.502508Z"}}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["\n", "RangeIndex: 124 entries, 0 to 123\n", "Data columns (total 11 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Provider Name 124 non-null object \n", " 1 Provider City 124 non-null object \n", " 2 Provider State 124 non-null object \n", " 3 Residents Total Admissions COVID-19 124 non-null int64 \n", " 4 Residents Total COVID-19 Cases 124 non-null int64 \n", " 5 Residents Total COVID-19 Deaths 124 non-null int64 \n", " 6 Number of All Beds 124 non-null int64 \n", " 7 Total Number of Occupied Beds 124 non-null int64 \n", " 8 LONGITUDE 124 non-null float64 \n", " 9 LATITUDE 124 non-null float64 \n", " 10 SHAPE 124 non-null geometry\n", "dtypes: float64(2), geometry(1), int64(5), object(3)\n", "memory usage: 10.8+ KB\n"]}], "source": ["# Check info\n", "sedf.info()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> Here, we see that the `SHAPE` column is of _geometry_ data type."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Check Properties of a SeDF\n", "We just created a SeDF. Let's use the `spatial` namespace to check some properties of the SeDF."]}, {"cell_type": "code", "execution_count": 8, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:44.736306Z", "start_time": "2021-09-07T19:07:44.729304Z"}}, "outputs": [{"data": {"text/plain": ["['point']"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check geometry type\n", "sedf.spatial.geometry_type"]}, {"cell_type": "code", "execution_count": 9, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:45.898728Z", "start_time": "2021-09-07T19:07:45.876729Z"}}, "outputs": [{"data": {"image/svg+xml": [""], "text/plain": ["{'spatialReference': {'wkid': 4326}, 'x': -87.792973, 'y': 42.012012}"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["# Visualize geometry\n", "sedf.SHAPE[0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> The geometry_type tells us that our dataset is point data."]}, {"cell_type": "code", "execution_count": 10, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:47.708215Z", "start_time": "2021-09-07T19:07:47.391610Z"}}, "outputs": [{"data": {"text/plain": ["(-87.16989602419355, 40.383302290322575)"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["# Get true centroid\n", "sedf.spatial.true_centroid"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> Retrieves the true centroid of the DataFrame."]}, {"cell_type": "code", "execution_count": 11, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:48.729835Z", "start_time": "2021-09-07T19:07:48.718835Z"}}, "outputs": [{"data": {"text/plain": ["(-90.67644, 37.002806, -84.861849, 42.380225)"]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["# Get full extent\n", "sedf.spatial.full_extent"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> Retrieves the extent of the data in our DataFrame."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Apply spatial operations using `.geom`\n", "\n", "Let's use the `geom` namespace to apply spatial operations on the geometry column of the SeDF."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Add buffers\n", "We will use the [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method to create a 2 unit buffer around each nursing home and add the buffers as a new column to the data. "]}, {"cell_type": "code", "execution_count": 12, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:51.139225Z", "start_time": "2021-09-07T19:07:51.120226Z"}}, "outputs": [], "source": ["# Create buffer\n", "sedf['buffer_2'] = sedf.SHAPE.geom.buffer(distance=2)"]}, {"cell_type": "code", "execution_count": 13, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:52.080061Z", "start_time": "2021-09-07T19:07:52.071055Z"}}, "outputs": [{"data": {"text/plain": ["0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...\n", "1 {\"curveRings\": [[[-85.197651, 42.392722], {\"a\"...\n", "2 {\"curveRings\": [[[-88.982944, 39.750143], {\"a\"...\n", "3 {\"curveRings\": [[[-87.986442, 44.160843], {\"a\"...\n", "4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...\n", "Name: buffer_2, dtype: geometry"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check head\n", "sedf['buffer_2'].head()"]}, {"cell_type": "code", "execution_count": 14, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:53.216042Z", "start_time": "2021-09-07T19:07:53.203390Z"}}, "outputs": [{"data": {"image/svg+xml": [""], "text/plain": ["{'curveRings': [[[-87.792973, 44.012012],\n", " {'a': [[-87.792973, 44.012012], [-87.792973, 42.012012], 0, 1]}]],\n", " 'spatialReference': {'wkid': 4326, 'latestWkid': 4326}}"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["# Visualize a buffer geometry\n", "sedf['buffer_2'][0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> We can see that the buffers created are of _geometry_ data type."]}, {"cell_type": "code", "execution_count": 15, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:54.445501Z", "start_time": "2021-09-07T19:07:54.422842Z"}}, "outputs": [{"data": {"text/plain": ["0 12.566371\n", "1 12.566371\n", "2 12.566371\n", "3 12.566371\n", "4 12.566371\n", " ... \n", "119 12.566371\n", "120 12.566371\n", "121 12.566371\n", "122 12.566371\n", "123 12.566371\n", "Name: area, Length: 124, dtype: object"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["# Get area\n", "sedf.buffer_2.geom.area"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> The `area` property retrives the area of each buffer in the units of the DataFrame's spatial reference."]}, {"cell_type": "markdown", "metadata": {}, "source": ["Now that we have created a new `buffer_2` column, our data should have two columns of _geometry_ data type i.e. `SHAPE` and `buffer_2`. Let's check."]}, {"cell_type": "code", "execution_count": 16, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:56.256245Z", "start_time": "2021-09-07T19:07:56.239255Z"}}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["\n", "RangeIndex: 124 entries, 0 to 123\n", "Data columns (total 12 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Provider Name 124 non-null object \n", " 1 Provider City 124 non-null object \n", " 2 Provider State 124 non-null object \n", " 3 Residents Total Admissions COVID-19 124 non-null int64 \n", " 4 Residents Total COVID-19 Cases 124 non-null int64 \n", " 5 Residents Total COVID-19 Deaths 124 non-null int64 \n", " 6 Number of All Beds 124 non-null int64 \n", " 7 Total Number of Occupied Beds 124 non-null int64 \n", " 8 LONGITUDE 124 non-null float64 \n", " 9 LATITUDE 124 non-null float64 \n", " 10 SHAPE 124 non-null geometry\n", " 11 buffer_2 124 non-null geometry\n", "dtypes: float64(2), geometry(2), int64(5), object(3)\n", "memory usage: 11.8+ KB\n"]}], "source": ["# Check info\n", "sedf.info()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Calculate distance\n", "Let's calculate the distance from one nursing home to another. We will use the [`distance_to()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.distance_to) method to calculate distance to a given geometry."]}, {"cell_type": "code", "execution_count": 17, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:07:58.093584Z", "start_time": "2021-09-07T19:07:58.081582Z"}}, "outputs": [{"data": {"text/plain": ["0 0.0\n", "1 3.059052\n", "2 4.424879\n", "3 0.244092\n", "4 0.075967\n", " ... \n", "119 0.462069\n", "120 0.116743\n", "121 2.951358\n", "122 0.144996\n", "123 4.055468\n", "Name: distance_to, Length: 124, dtype: object"]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["# Calculate distance to the first nursing home\n", "sedf.SHAPE.geom.distance_to(sedf.SHAPE[0])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We just performed some spatial operations on a pandas Series (`SHAPE`) using the `geom` namespace. Now, let's perform some basic Pandas operations on SeDF."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Perform Pandas Operations on a SeDF\n", "\n", "Let's perform some basic Pandas operations on a SeDF. One of the benefits of the accessor pattern in SeDF is that the SeDF object is of type _DataFrame_. Thus, you can continue to perform regular Pandas DataFrame operations. We will:\n", "- Check the count of records for each state in our data\n", "- Remove records that have 0 cases and death values\n", "- Create a scatter plot of cases and deaths"]}, {"cell_type": "code", "execution_count": 18, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:08:00.706542Z", "start_time": "2021-09-07T19:08:00.699878Z"}}, "outputs": [{"data": {"text/plain": ["IN 67\n", "IL 57\n", "Name: Provider State, dtype: int64"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check record count for each state\n", "sedf['Provider State'].value_counts()"]}, {"cell_type": "code", "execution_count": 19, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:08:01.728120Z", "start_time": "2021-09-07T19:08:01.680463Z"}}, "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", "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEbuffer_2
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...
6HARCOURT TERRACE NURSING AND REHABILITATIONINDIANAPOLISIN21111066-86.19346939.904128{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.193469, 41.904128], {\"a\"...
7GREENCROFT HEALTHCAREGOSHENIN36513153155-85.81779841.561063{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....{\"curveRings\": [[[-85.817798, 43.561063], {\"a\"...
8WATERS OF MARTINSVILLE, THEMARTINSVILLEIN233810344-86.43259339.407438{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.432593, 41.407438], {\"a\"...
\n", "
"], "text/plain": [" Provider Name Provider City Provider State \\\n", "0 GROSSE POINTE MANOR NILES IL \n", "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", "6 HARCOURT TERRACE NURSING AND REHABILITATION INDIANAPOLIS IN \n", "7 GREENCROFT HEALTHCARE GOSHEN IN \n", "8 WATERS OF MARTINSVILLE, THE MARTINSVILLE IN \n", "\n", " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", "0 5 56 \n", "4 19 75 \n", "6 2 1 \n", "7 3 65 \n", "8 2 33 \n", "\n", " Residents Total COVID-19 Deaths Number of All Beds \\\n", "0 12 99 \n", "4 16 180 \n", "6 1 110 \n", "7 13 153 \n", "8 8 103 \n", "\n", " Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", "0 61 -87.792973 42.012012 \n", "4 116 -87.726353 41.975505 \n", "6 66 -86.193469 39.904128 \n", "7 155 -85.817798 41.561063 \n", "8 44 -86.432593 39.407438 \n", "\n", " SHAPE \\\n", "0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", "4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", "6 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n", "7 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", "8 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n", "\n", " buffer_2 \n", "0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"... \n", "4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"... \n", "6 {\"curveRings\": [[[-86.193469, 41.904128], {\"a\"... \n", "7 {\"curveRings\": [[[-85.817798, 43.561063], {\"a\"... \n", "8 {\"curveRings\": [[[-86.432593, 41.407438], {\"a\"... "]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["# Remove records with no cases and deaths\n", "new_df = sedf.query('`Residents Total COVID-19 Cases` != 0 & \\\n", " `Residents Total COVID-19 Deaths` != 0').copy()\n", "new_df.head()"]}, {"cell_type": "code", "execution_count": 20, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:08:02.595405Z", "start_time": "2021-09-07T19:08:02.590397Z"}}, "outputs": [{"data": {"text/plain": ["(37, 12)"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["# Check shape\n", "new_df.shape"]}, {"cell_type": "code", "execution_count": 21, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:08:03.045740Z", "start_time": "2021-09-07T19:08:02.800731Z"}}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["# Plot cases and deaths\n", "new_df.plot('Residents Total COVID-19 Cases',\n", " 'Residents Total COVID-19 Deaths', \n", " kind='scatter',\n", " title = \"Cases vs Deaths\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["We just saw how easy it was to perform some Pandas data selection and manipulation operations on a SeDF... piece of cake! Now, let's plot the complete data on a map. \n", "\n", "__Note__ - If you would like to learn more about Pandas and data engineering with Pandas, checkout our [Data Engineering primer guide part-3](https://developers.arcgis.com/python/guide/part3-introduction-to-pandas/)."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Plot on a Map\n", "\n", "We will use the [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method of the `spatial` namespace to plot the SeDF on a map."]}, {"cell_type": "code", "execution_count": 24, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:19:31.788026Z", "start_time": "2021-09-07T19:19:31.726032Z"}}, "outputs": [{"data": {"text/html": [""], "text/plain": [""]}, "execution_count": 24, "metadata": {}, "output_type": "execute_result"}], "source": ["# Create Map\n", "m1 = gis.map('IL, USA', 6)\n", "m1"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> Points displayed on the map show location of each nursing home in our data with at-least 1 case and 1 death. Clicking on a point displays attribute information for that nursing home."]}, {"cell_type": "code", "execution_count": 23, "metadata": {"ExecuteTime": {"end_time": "2021-09-07T19:08:15.463166Z", "start_time": "2021-09-07T19:08:15.377167Z"}}, "outputs": [{"data": {"text/plain": ["True"]}, "execution_count": 23, "metadata": {}, "output_type": "execute_result"}], "source": ["# Plot SeDF on a map\n", "new_df.spatial.plot(m1)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["With __Spatially enabled DataFrame__, you can now perform a variety of geospatial operations such as creating buffers, calculating the distance to another geometry or plotting your data on a map, and rendering it using various renderers. While you are at it, you can continue to perform various operations on the DataFrame using Pandas or other open-source libraries such as Seaborn, Scikit-learn, etc. Isn't that exciting!"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Conclusion"]}, {"cell_type": "markdown", "metadata": {}, "source": ["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure and a building block for performing various scientific computations in Python. In this part of the guide series, we introduced the concept of [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) and how it adds \"spatial\" abilities to a Pandas DataFrame or Series. We also discussed the custom namespaces and geometry engines that operate behind the scenes and allow us to perform spatial operations. You have also seen an end-to-end example of using SeDF to perform various spatial operations along with Pandas operations.\n", "\n", "In the next part of this guide series, you will learn about creating a SeDF using GIS data in various formats."]}, {"cell_type": "markdown", "metadata": {}, "source": ["
\n", " Note: Given the importance and popularity of Spatially enabled DataFrame, we are revisiting our documentation for this topic. Our goal is to enhance the existing documentation to showcase the various capabilities of Spatially enabled DataFrame in detail with even more examples this time.\n", "\n", "

\n", "\n", "Creating quality documentation is time-consuming and exhaustive but we are committed to providing you with the best experience possible. With that in mind, we will be rolling out the revamped guides on this topic as different parts of a guide series (like the Data Engineering or Geometry guide series). This is \"part-1\" of the guide series for Spatially enabled DataFrame. You will continue to see the existing documentation as we revamp it to add new parts. Stay tuned for more on this topic.\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.10"}, "toc": {"base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": true}}, "nbformat": 4, "nbformat_minor": 4} \ No newline at end of file +{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Part-1 Introduction to Spatially enabled DataFrame"]},{"cell_type":"markdown","metadata":{"toc":true},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","metadata":{},"source":["## Introduction"]},{"cell_type":"markdown","metadata":{},"source":["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure that represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or a SQL table where each column has a column name for reference and each row can be accessed by using row numbers. \n","\n","The [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) adds _\"spatial abilities\"_ into the popular Pandas DataFrame by inserting a custom namespace called `spatial`. This namespace (also known as accessor) allows us to use Pandas operations on both the non-spatial and spatial columns. With SeDF, you can now easily manipulate geometric and other attribute data.\n","\n","The SeDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspection of subsets of values which are fundamental to statistical and geographic manipulations."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the Introduction to Data Engineering guide series and then come here.\n","
"]},{"cell_type":"markdown","metadata":{},"source":["### What does \"adding spatial abilities\" mean?"]},{"attachments":{"image-2.png":{"image/png":"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RiHvWWl2Rl8vyquFrWwIyWXLltnvf/9769y5s58LdiFAY2JiXLQtX768gACjnRMnTvT2r1mzpsC1kF9H/RCIA+KAOCAOiAPigDggDogDZyYHToowQ5RlZ2fbmDFjXEy1adPGPv30Uxs5cmS+YEK8ILD69OljDRo0sO7du7s3CXECmRA77HjD+vXr52Jm+PDh7hUjHwJny5YtNmHCBPvFL37hZaxatcrTEfZYlvlbqKL33nvPrrnmGps3b561aNHCBg4c6CGGIT92bt261T7++GOvo0ePHpaUlOThhsHO1NRUb1/jxo2tdevW7tXCvnBTUAa2jhgxwoYNG+aC8Pzzzy8gzKiP9l577bXuFYwWdwFTvG2PPvpofv2hDh3PzBtQ/aZ+EwfEAXFAHBAHxAFxQByAAydFmCGu6tevb7/61a/szjvvdLHxpS99yf75z3+6YEN0rFy50s4991wPPSQMkWuEIc6YMcNFB/OvXnzxRfvRj35kf/3rX/3aOeecY//+979d0CGqunbtan/5y1/s61//uv3yl7+0f/zjH/af//zHQwGjhU1RhMcLhSj89re/bX//+989xPArX/mK1a1b1z1xlIF3izIJeaxRo4bXQcjk7Nmz3WtFW59//nn7wQ9+4O28+OKL7ac//anNnTs3//rUqVPtb3/7m/3mN7/xtvz3v//1diFG2bCNcmbOnOltQYiG85F2c65jx472ne98x/GLFH+R6fRZN7c4IA6IA+KAOCAOiAPigDhwZnHgpAgzvGWIqWeeecYFBn969uzpQguvEILihhtusAsvvNDwNrHt3bvXKlWqZJdccol7jvBMfetb37K+ffv6nDIEEqIMAYXHjNBAFvtYu3atizPmlaWkpFhCQoLhMSsLERFmiLCf/exn7uVCHD377LMuvjIyMlxYValSxQUbdbJxntDJK6+80lg8hLZs2LDBRRXzv5gfRpjiO++84+lZ5AMsbr75Ztu4caMvNoJo/fKXv2zvv/++p8FWNtqAwIuPj/dyo9uAfdQBLr17987PG51O38+sm1D9pf4SB8QBcUAcEAfEAXFAHDgpwgwBUa9ePfvhD3/ooum8886zBx54wEaNGuWeIRa2+N3vfucetapVq3ooYeXKle23v/2thyUS9oeQue6661x8hPlZiDu8VYikEOqICMTbFrxPCKUQhhgIzne2aC8awgwB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QqAQAhJmhSDRCSEgBISAEBACQkAICAEhIASEQPkiIGFWvnirNiEgBISAEBACQkAICAEhIASEQCEEJMwKQaITQkAICAEhIASEgBAQAkJACAiB8kVAwqx88VZtQkAICAEhIASEgBAQAkJACAiBQghImBWCRCeEgBAQAkJACAgBISAEhIAQEALli4CEWfnirdqEgBAQAkJACAgBISAEhIAQEAKFEJAwKwSJTggBISAEhIAQEAJCQAgIASEgBMoXAQmz8sVbtQkBISAEhIAQEAJCQAgIASEgBAohIGFWCBKdEAJCQAgIASEgBISAEBACQkAIlC8CEmbli7dqEwJCQAgIASEgBISAEBACQkAIFEJAwqwQJDohBISAEBACQkAICAEhIASEgBAoXwQkzMoXb9UmBISAEBACQkAICAEhIASEgBAohICEWSFIdEIICAEhIASEgBAQAkJACAgBIVC+CEiYlS/eqk0ICAEhIASEgBAQAkJACAgBIVAIAQmzQpDohBAQAkJACAgBIXC6IpCYmGg1a9a01157rcD+6quvWoMGDezgwYNFmn748GHbuHGjkf/IkSNFpgknSUd5gwYNCqd0FAJCQAicdAQkzE46xKpACAgBISAEhIAQOFEITJs2zb70pS8Vuf/sZz+z3NzcIqs6cOCAXXrppfavf/2ryOuRJ2fPnu3lP/bYY5Gn9VkICAEhcFIRkDA7qfCqcCEgBISAEBACQuBEIpCVlWXr1q2z9evXW40aNVxAtW7d2uLj4y0pKckyMjJswoQJ1qdPH1u4cKFXjbdsypQp9vOf/9x+8IMf2OTJk23fvn3uOUOE9erVy/r27evlkmHu3Lle7v/+978TabrKEgJCQAiUiICEWYnw6KIQEAJCQAgIASFwuiLwwAMPuIAaMGCAm7hp0ya7/PLL/RxetW984xv2wgsv2O7du+3CCy/081/+8pftd7/7nS1ZssSefPJJP/fTn/7UvvnNbxoet5kzZ/o18kuYna49L7uEwNmJgITZ2dmvapUQEAJCQAgIgbMegfvuu8+FVb9+/bytjz/+uH9v1aqVxcXF5XvUhg8f7vPL/vjHP7r4wrPGfu2119pTTz3lwq1Nmzae97333rOlS5f6Zwmzs55CaqAQOK0QkDA7rbpDxggBISAEhIAQEAJlRSAIs/79+xvhiuecc4795Cc/sezsbC9i3Lhx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/tFViK62HZPE7I477mhe8IIXNHPOOWfz+OOPT1L3rbbaqtzbd999y/XNN9+8CIF/EKwPfOADk8T3j5mGBRZYoDn11FOfd++8885rZphhhuboo48uQkEwvvKVrzSXX355EXrPydN1B1I222yzNbvssktJ6+STT26UQfjWt75VynzCCSc0N9xwQ/O5z32umWmmmUalkD0PiLyQCCQCiUAikAgkAolAIjBVEOhS3qMA9Mk3v/nNfRYzBgK65RprrNH84Q9/iGjDdr7xxhubxRdfvGG5Eg455JDm5ptv7kx/lVVWaRBGuvZ8881XDCGhMx988MHN7LPP3nzyk5/sTIMB5TWveU0xiiBBoy385Cc/adZcc81GffbZZ5/JFq+rbccsMUOI5p577uakk07qAwBJIzDzzjtvs99++5XrZhE22mij8vs973lPIVF9D/z3B2HR4Keffnr7VnP++ec3888/f58FrI7w5z//uVlooYUaDLkOO++8c7PsssuWS1/96lf7yOCWW25ZrGV13D333LMxg5AhEUgEEoFEIBFIBBKBRCARgECX8h4IIWHve9/74t+GRxcLFMvSU089Va4zBOy9995FL/7xj39crv3mN79pzjnnnGIkOPDAA8szjz32WF86SN2XvvSlZqeddiqeXX/605+aJ554oqHf0r15gknjsssuax588MHy3O9///tJnvnjH/9Yrr/97W9vjjzyyELMXvGKVzSXXHJJXz5+bLvtts0b3vCGvmvXXnttw7hCf5Yv7zT5zTXXXM0nPvGJJojZNddc0xePJU+46667Gtedkda//e1vzf33318IpDLEsyyNF198cXPrrbcWsnfMMcf04SUdnnlwhNsPfvCDvrIpy1lnnVWus0yGWyVipp48+fbaa68SXx4IaC+C3NW2Y5KY3X777YWA7bjjjsWEG8w9Zg7WX3/9PmCGSswuuOCC5qUvfWnz05/+tPnVr37VPPnkk+XgqojQIWannXZaaRzlIBzMs2El+9nPftYnhNwWWciQMTMMBE7ItWZ9Mp8/EoFEIBFIBBKBRCARmPAIdCnvAQ5Csckmm8S/xWXQEhzkAYm48sorm5e//OXF5ZBeyqOL1YsePd100xUd1lIeFrZFFlmkeeCBB4puu+KKKxZL3K677tosscQSzRZbbNH84he/aNZaa63mxS9+cTFyIDnLLbdc8Qaj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cMABzSc+8YlyT3rK4JlIN87RtknMkpg9TzhCSPI86YCYeCQeKQMpAykDKQMpAykD00oGQnnvImZI2MYbb1zICBKw5pprNoceemjz1re+tRAzBOPSSy9tPvzhDzc77rhjc8UVVxQy8uCDDzYnn3xyubfzzjs3++23X3PnnXeWe55x/zOf+UyzxRZbFFLFVfIXv/hFs8022zRzzjlnuSbOWWedVaxFyNAvf/nL5pBDDinPOD/yyCOF26y++uqlTIjZ/PPP35x77rnBecpZmssuu2ypAzJz4YUXNh/72MeaI488snn00UeL66L05phjjuYjH/lIc9ddd5W4dTx5IVA33nhjc8kllzSI0mGHHVYI3Y9//ONCllgTb7311kKafv7znzeI4fe///3m4x//eCF8Dz/8cCGByNrtt99eMIGb8iJgyoYgfvnLXy54nnbaac3TTz9d0rv22muLFZD1b/fddy+EjDXzqKOOKjjUpI88RdsmMUtilsQsZSBlIGUgZSBlIGUgZSBlYJTLQCjv/REzRIzF6d3vfncfoTrvvPOam2++uTn77LPL2q8LLrigeelLX9rsuuuuhVTNMssszZVXXlkIzAte8IJihUJM1l133eaVr3xlc9tttzW/+93vmte//vWF3O2zzz7N0ksv3bznPe9pkJl3vOMdzWyzzdZst9125X+E6tRTTy3r3MTjpuiZ173udc273vWunsSMux9yYr0YQsWixoomIFOvfvWrmz322KOQzDe/+c3FXXOnnXZqZp999ma99dZrbrrpplLvOt5KK61U3CGPPvroZoEFFmgWX3zx5oMf/GDz7W9/u3nVq17V7LDDDsXt0r2f/OQnhbzNPPPMpY6sda95zWtK2ggmC+DLX/7yUn71fPGLX1yIJXIGa3nttddezWtf+9qCKdKlHuecc0559oc//GEha/5nDUQMpVsT/GjbJGajvBPWjZa/c5YuZSBlIGUgZSBlIGUgZWBiykAo772IGZLgYC1j1QnFn9WIxcsZcWOxmWuuuYqliBwhUTfccEPDwjPDDDM0iJsgLVa27bffvrgK7r333s2vf/3rkhZrFeIi3auuuqq4MiJV0kPMrB9DTDzDKibeQQcd1Cy66KKlXNwqWfHc44642GKLNausskqDdM0777yFiD3wwAMNixVyKD0baLCWcZs89thjC1lEhJT7iSeeaBZc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wJQg0KW8T0l6+czoQaCrbccMMfvb3/7Wh+hzzz3X/OMf/+j7v/4hnvsR6ufimmf/85//xL99Z9f//e9/N77f5jlH+3dEdr0d5BvPxbPtOPF/r+fjXp4TgUQgEUgEEoFEIBFIBCYuAl3Ke43K008/3Tz++OPl0r/+9a+iA//zn/+so4zY79CbuzKIMokjfq0n1/p6Vxpx789//nN5Pv4fLWecAubqM5A6dSJhdPEAACAASURBVLXtmCBm3/3ud5sVV1yxufzyy0sb3H777c2qq67a3HvvvZO0yVVXXdWsu+66zW9/+9ty/dJLLy3Pfe9735sk3tZbb91stdVWBcS48eSTTzYbb7xxc+WVVzYbbbRRs/LKK09yvPnNb24++MEPNgTs5ptvbvz/jW98Ix4v5xNPPLFZaaWVmre85S3lEGfDDTdsrr322kni3XDDDeX5M844Y5Lr+U8ikAgkAolAIpAIJAKJQCLQpbwHOvfff3/zhje8odluu+3KpX322ac5++yzmz322KNBYoY7/O53v2vo5HRhhoz3v//9DV27K+y8887NN7/5zeb//u//mve9731F/6Un07Od99xzz+aPf/xjVxLFmPK5z32ueeMb39icdNJJnXGnxc377ruvYH766ac3X/nKVyZbhK62HfXEDAtdf/31m1lmmaV55zvfWRrnqaeeal7+8pc3n/3sZyep/Oabb96sttpqha167h3veEd5DjmqLWSE+AUveEGDSEX4xS9+0bz0pS9trr766kLOLr744ubggw9uZppppgLyRRdd1PzoRz8q0XfYYYeSLqGqLV+Eb7HFFmsuueSScpxzzjmlzMr6q1/9KrJqtt122/I8gTR7kCERSAQSgUQgEUgEEoFEIBEIBLqU94jzxS9+sVl99dX7rDTrrbde8/nPf75Zc801mz/84Q8RbdjODAsLLbRQIWYSpUf/7Gc/60yfIeXwww9v/vKXvzQve9nLmr322qvoyPRsJGauueZqPv7xj3emgdTJV91+/etfd8adFjdvueWWZq211moOOeSQBjmeXOhq21FPzO66667SGF/96leb+eefv/n5z39e6vuxj32sWMPCZIisLbDAAs3Xv/71cp+gaMR47p577unDifUN65beAw88UK7/8pe/bF7xilc0t956a188lq755puvYU2L8MQTTzSvfvWrS7oLLrhgc801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"}},"cell_type":"markdown","metadata":{},"source":["Well, it means adding capabilities that allow us to: \n","- take _spatial_ data as input\n","- visualize the spatial data\n","- perform various geospatial operations on it \n","- export, publish or save spatial data\n","\n","To add \"spatial abilities\", a SeDF must be created from the data, and to create a SeDF, the data must be spatial. In other words, the dataset must have location information (such as an address or latitude, longitude coordinates) or geometry information (such as point, line or polygon, etc.) to create a SeDF from it. There are various ways to create a SeDF from the data and we will go into those details in part-2 of the guide series.\n","\n","In the background, __SeDF__ uses the `spatial` namespace to add a `SHAPE` column to the data. The `SHAPE` column is of a special data type called __geometry__ and it holds the geometry for each record in the DataFrame. When a spatial method such as `plot()` is applied to a SeDF (or a spatial property such as `geometry_type` is called), this command will always act on the geometry column `SHAPE`.\n","\n","The image below shows a SeDF created from a Pandas DataFrame. A new `SHAPE` column, highlighted in red, gets added to the SeDF.\n","![image-2.png](attachment:image-2.png)"]},{"cell_type":"markdown","metadata":{},"source":["### Custom Namespaces"]},{"cell_type":"markdown","metadata":{},"source":["The [__GeoAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) and the [__GeoSeriesAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) classes, from the [`arcgis.features`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#module-arcgis.features) module, add two custom namespaces to a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) or a [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The _GeoAccessor_ class adds `spatial` namespace to the DataFrame and the _GeoSeriesAccessor_ class adds `geom` namespace to the Series.\n","\n","By adding custom namespaces, we [extend](https://pandas.pydata.org/pandas-docs/stable/development/extending.html) the capabilities of Pandas to allow for spatial operations using various geometry objects. The different geometry objects supported by these namespaces are:\n","\n"," - Point\n"," - Polyline\n"," - Polygon\n"," \n","You can learn more about these geometry objects in our [Working with Geometries](https://developers.arcgis.com/python/guide/part2-working-with-geometries/) guide series."]},{"cell_type":"markdown","metadata":{},"source":["#### The `spatial` namespace"]},{"cell_type":"markdown","metadata":{},"source":["The `spatial` namespace allows us to performs spatial operations on a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame). The namespace provides:\n","- Dataset level operations\n","- Dataset information\n","- Input/Output operations\n","\n","\n","The spatial namespace can be accessed using the `.spatial` _accessor_ pattern. E.g.: \n","\n","a. The centroid of a dataframe can be retrieved using the [`centroid`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.centroid) property. \n","\n","```python\n",">>> df.spatial.centroid\n","```\n"," \n","b. The [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method can be used to draw the data on a web map.\n","\n","```python\n",">>> df.spatial.plot()\n","```"]},{"cell_type":"markdown","metadata":{},"source":["#### The `geom` namespace"]},{"cell_type":"markdown","metadata":{},"source":["The `geom` namespace enables spatial operations on a given Pandas [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The namespace is accessible using the `.geom` _accessor_ pattern. E.g.:\n","\n","a. The [`area`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.area) method can be used to retrieve the Feature object’s area.\n","\n","```python\n",">>> df.SHAPE.geom.area\n","```\n"," \n","b. The [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method can be used to constructs a Polygon at a specified distance from the Geometry object.\n","\n","```python\n",">>> df.SHAPE.geom.buffer()\n","``` \n","\n","__Note__ that `geom` accessor operates on a series of data type \"_geometry_\". The `SHAPE` column of a SeDF is of _geometry_ data type. "]},{"cell_type":"markdown","metadata":{},"source":["#### Importing namespaces"]},{"cell_type":"markdown","metadata":{},"source":["_GeoSeriesAccessor_ and _GeoAccessor_ classes are similar to [pandas.Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series) and [pandas.DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) objects. However, you do not work with them directly. Instead, you import them right after you import Pandas as shown in the snippet below. Importing these classes registers the spatial functionality with Pandas and allows you to start performing spatial operations on your DataFrames.\n","\n","You may import the classes as follows:\n","\n","\n","```python\n","import pandas as pd\n","from arcgis.features import GeoAccessor, GeoSeriesAccessor\n","```"]},{"cell_type":"markdown","metadata":{},"source":["### Geometry Engines"]},{"cell_type":"markdown","metadata":{},"source":["The ArcGIS API for Python uses either [`shapely`](https://pypi.org/project/Shapely/) or [`arcpy`](https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy) as back-ends (engines) for processing geometries. The API is identical no matter which engine you use. However, at any point in time, only one engine will be used. \n","\n","[__ArcPy__]((https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy)) provides a useful and productive way to perform geographic data analysis, data conversion, data management, and map automation with Python. With `arcpy` as the geometry engine, you can read/write different file types, perform various geometric operations and do a lot more without needing multiple other third-party packages that perform such operations. \n","\n","\n","By default, the ArcGIS API for Python looks for `arcpy` as the geometry engine. In the absence of `arcpy`, it looks for `shapely`. The ArcGIS API for Python integrates the [Shapely](https://pypi.org/project/Shapely/), [Fiona](https://pypi.org/project/Fiona/), and [PyShp](https://pypi.org/project/pyshp/) packages so that spatial data from other sources can be accessed through the API. This makes it easier to use the ArcGIS API for Python and work with geospatial data regardless of the platform used. However, we recommend using `arcpy` for better accuracy and support for a wider gamut of data sources. Here is a one-line overview of each of these packages:\n","\n"," - [Shapely](https://pypi.org/project/Shapely/) is used for the manipulation and analysis of geometric objects. \n"," - [Fiona](https://pypi.org/project/Fiona/) can read and write real-world data using multi-layered GIS formats, including Esri File Geodatabase. It is often used in combination with Shapely so that Fiona is used for creating the input and output, while Shapely does the data wrangling part. \n"," - [PyShp](https://pypi.org/project/pyshp/) is used for reading and writing ESRI shapefiles."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: In the absence of arcpy, the ArcGIS API for Python looks for a shapely geometry engine. To allow for a seamless experience, both Shapely and Fiona packages must be present in your current conda environment. If these packages are not installed, you may install them using conda as follows:\n"," \n","conda install shapely\n","conda install fiona\n","
"]},{"cell_type":"markdown","metadata":{},"source":["It could be that both `arcpy` and `shapely` are __not__ present in your current environment. In such a scenario, the number of spatial operations you could perform using SeDF will be extremely limited. The cell below shows how to easily detect the current geometry engine in your environment."]},{"cell_type":"code","execution_count":1,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:04.173110Z","start_time":"2021-09-07T19:07:04.161107Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["Has arcpy\n"]}],"source":["import imp\n","try:\n"," if imp.find_module('arcpy'):\n"," print(\"Has arcpy\")\n"," elif imp.find_module('shapely'):\n"," print(\"Has shapely\")\n"," elif imp.find_module('arcpy') and imp.find_module('shapely'):\n"," print(\"Has both arcpy and shapely\")\n","except:\n"," print(\"Does not have either arcpy or shapely\")"]},{"cell_type":"markdown","metadata":{},"source":["So far, we have gone through some of the basics of __Spatially enabled DataFrame__. Now, it's time to see the `spatial` and `geom` namespaces in action. Let's look at a quick example."]},{"cell_type":"markdown","metadata":{},"source":["## Quick Example\n","\n","Let's look at a quick example showcasing the `spatial` and `geom` namespaces at work. We will start with a common use case of importing the data from a csv file. "]},{"cell_type":"markdown","metadata":{},"source":["In this example, we will:\n","\n","- read the data with location information from a csv file into a Pandas DataFrame\n","- create a SeDF from the Pandas DataFrame\n","- check some properties of the SeDF\n","- apply spatial operations on the geometry column using the `geom` accessor\n","- plot the SeDF on a map\n","\n","__Data:__ We will use the Covid-19 data for Nursing Homes in the U.S. to illustrate this example. The data has 124 records and 10 columns.\n","\n","__Note:__ the dataset used in this example is a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) and has been curated for illustration purposes. The complete dataset is available at the Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) website."]},{"cell_type":"code","execution_count":2,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:38.468200Z","start_time":"2021-09-07T19:07:21.842196Z"}},"outputs":[],"source":["# Import Libraries\n","\n","import pandas as pd\n","from arcgis.features import GeoAccessor, GeoSeriesAccessor\n","from arcgis.gis import GIS\n","from IPython.display import display"]},{"cell_type":"code","execution_count":3,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:38.933465Z","start_time":"2021-09-07T19:07:38.471207Z"}},"outputs":[],"source":["# Create an anonymous GIS Connection\n","gis = GIS()"]},{"cell_type":"markdown","metadata":{},"source":["### Get Data"]},{"cell_type":"code","execution_count":4,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:40.562179Z","start_time":"2021-09-07T19:07:40.539177Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722
2PARKWAY MANORMARIONIL00013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","1 0 0 \n","2 0 0 \n","3 6 141 \n","4 19 75 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","1 0 46 \n","2 0 131 \n","3 0 195 \n","4 16 180 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \n","0 61 -87.792973 42.012012 \n","1 43 -85.197651 40.392722 \n","2 84 -88.982944 37.750143 \n","3 131 -87.986442 42.160843 \n","4 116 -87.726353 41.975505 "]},"execution_count":4,"metadata":{},"output_type":"execute_result"}],"source":["# Read the data\n","df = pd.read_csv('../data/sample_cms_data.csv')\n","\n","# Return the first 5 records\n","df.head()"]},{"cell_type":"code","execution_count":5,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:41.267489Z","start_time":"2021-09-07T19:07:41.261506Z"}},"outputs":[{"data":{"text/plain":["(124, 10)"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["# Check Shape\n","df.shape"]},{"cell_type":"markdown","metadata":{},"source":["The dataset contains 124 records and 10 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n","\n","- Name of the nursing home, its city and state\n","- Details of resident Covid cases, deaths and number of beds\n","- Location of nursing home as Latitude and Longitude"]},{"cell_type":"markdown","metadata":{},"source":["### Create a SeDF\n","\n","A Spatially enabled DataFrame can be created from any Pandas DataFrame with location information (Latitude and Longitude) using the [`from_xy()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.from_xy) method of the `spatial` namespace."]},{"cell_type":"code","execution_count":6,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:42.367185Z","start_time":"2021-09-07T19:07:42.346196Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL00013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","1 0 0 \n","2 0 0 \n","3 6 141 \n","4 19 75 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","1 0 46 \n","2 0 131 \n","3 0 195 \n","4 16 180 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 61 -87.792973 42.012012 \n","1 43 -85.197651 40.392722 \n","2 84 -88.982944 37.750143 \n","3 131 -87.986442 42.160843 \n","4 116 -87.726353 41.975505 \n","\n"," SHAPE \n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n","3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["# Read into a SeDF\n","sedf = pd.DataFrame.spatial.from_xy(df=df, x_column='LONGITUDE', y_column='LATITUDE', sr=4326)\n","\n","# Check head\n","sedf.head()"]},{"cell_type":"markdown","metadata":{},"source":["> We can see that a new `SHAPE` column has been added while creating a SeDF.\n","\n","Let's look at the detailed information of the DataFrame."]},{"cell_type":"code","execution_count":7,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:43.517509Z","start_time":"2021-09-07T19:07:43.502508Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 11 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Total Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total COVID-19 Cases 124 non-null int64 \n"," 5 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 6 Number of All Beds 124 non-null int64 \n"," 7 Total Number of Occupied Beds 124 non-null int64 \n"," 8 LONGITUDE 124 non-null float64 \n"," 9 LATITUDE 124 non-null float64 \n"," 10 SHAPE 124 non-null geometry\n","dtypes: float64(2), geometry(1), int64(5), object(3)\n","memory usage: 10.8+ KB\n"]}],"source":["# Check info\n","sedf.info()"]},{"cell_type":"markdown","metadata":{},"source":["> Here, we see that the `SHAPE` column is of _geometry_ data type."]},{"cell_type":"markdown","metadata":{},"source":["### Check Properties of a SeDF\n","We just created a SeDF. Let's use the `spatial` namespace to check some properties of the SeDF."]},{"cell_type":"code","execution_count":8,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:44.736306Z","start_time":"2021-09-07T19:07:44.729304Z"}},"outputs":[{"data":{"text/plain":["['point']"]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["# Check geometry type\n","sedf.spatial.geometry_type"]},{"cell_type":"code","execution_count":9,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:45.898728Z","start_time":"2021-09-07T19:07:45.876729Z"}},"outputs":[{"data":{"image/svg+xml":[""],"text/plain":["{'spatialReference': {'wkid': 4326}, 'x': -87.792973, 'y': 42.012012}"]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["# Visualize geometry\n","sedf.SHAPE[0]"]},{"cell_type":"markdown","metadata":{},"source":["> The geometry_type tells us that our dataset is point data."]},{"cell_type":"code","execution_count":10,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:47.708215Z","start_time":"2021-09-07T19:07:47.391610Z"}},"outputs":[{"data":{"text/plain":["(-87.16989602419355, 40.383302290322575)"]},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"source":["# Get true centroid\n","sedf.spatial.true_centroid"]},{"cell_type":"markdown","metadata":{},"source":["> Retrieves the true centroid of the DataFrame."]},{"cell_type":"code","execution_count":11,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:48.729835Z","start_time":"2021-09-07T19:07:48.718835Z"}},"outputs":[{"data":{"text/plain":["(-90.67644, 37.002806, -84.861849, 42.380225)"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["# Get full extent\n","sedf.spatial.full_extent"]},{"cell_type":"markdown","metadata":{},"source":["> Retrieves the extent of the data in our DataFrame."]},{"cell_type":"markdown","metadata":{},"source":["### Apply spatial operations using `.geom`\n","\n","Let's use the `geom` namespace to apply spatial operations on the geometry column of the SeDF."]},{"cell_type":"markdown","metadata":{},"source":["#### Add buffers\n","We will use the [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method to create a 2 unit buffer around each nursing home and add the buffers as a new column to the data. "]},{"cell_type":"code","execution_count":12,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:51.139225Z","start_time":"2021-09-07T19:07:51.120226Z"}},"outputs":[],"source":["# Create buffer\n","sedf['buffer_2'] = sedf.SHAPE.geom.buffer(distance=2)"]},{"cell_type":"code","execution_count":13,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:52.080061Z","start_time":"2021-09-07T19:07:52.071055Z"}},"outputs":[{"data":{"text/plain":["0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...\n","1 {\"curveRings\": [[[-85.197651, 42.392722], {\"a\"...\n","2 {\"curveRings\": [[[-88.982944, 39.750143], {\"a\"...\n","3 {\"curveRings\": [[[-87.986442, 44.160843], {\"a\"...\n","4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...\n","Name: buffer_2, dtype: geometry"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["# Check head\n","sedf['buffer_2'].head()"]},{"cell_type":"code","execution_count":14,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:53.216042Z","start_time":"2021-09-07T19:07:53.203390Z"}},"outputs":[{"data":{"image/svg+xml":[""],"text/plain":["{'curveRings': [[[-87.792973, 44.012012],\n"," {'a': [[-87.792973, 44.012012], [-87.792973, 42.012012], 0, 1]}]],\n"," 'spatialReference': {'wkid': 4326, 'latestWkid': 4326}}"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["# Visualize a buffer geometry\n","sedf['buffer_2'][0]"]},{"cell_type":"markdown","metadata":{},"source":["> We can see that the buffers created are of _geometry_ data type."]},{"cell_type":"code","execution_count":15,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:54.445501Z","start_time":"2021-09-07T19:07:54.422842Z"}},"outputs":[{"data":{"text/plain":["0 12.566371\n","1 12.566371\n","2 12.566371\n","3 12.566371\n","4 12.566371\n"," ... \n","119 12.566371\n","120 12.566371\n","121 12.566371\n","122 12.566371\n","123 12.566371\n","Name: area, Length: 124, dtype: object"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["# Get area\n","sedf.buffer_2.geom.area"]},{"cell_type":"markdown","metadata":{},"source":["> The `area` property retrives the area of each buffer in the units of the DataFrame's spatial reference."]},{"cell_type":"markdown","metadata":{},"source":["Now that we have created a new `buffer_2` column, our data should have two columns of _geometry_ data type i.e. `SHAPE` and `buffer_2`. Let's check."]},{"cell_type":"code","execution_count":16,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:56.256245Z","start_time":"2021-09-07T19:07:56.239255Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 12 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Total Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total COVID-19 Cases 124 non-null int64 \n"," 5 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 6 Number of All Beds 124 non-null int64 \n"," 7 Total Number of Occupied Beds 124 non-null int64 \n"," 8 LONGITUDE 124 non-null float64 \n"," 9 LATITUDE 124 non-null float64 \n"," 10 SHAPE 124 non-null geometry\n"," 11 buffer_2 124 non-null geometry\n","dtypes: float64(2), geometry(2), int64(5), object(3)\n","memory usage: 11.8+ KB\n"]}],"source":["# Check info\n","sedf.info()"]},{"cell_type":"markdown","metadata":{},"source":["#### Calculate distance\n","Let's calculate the distance from one nursing home to another. We will use the [`distance_to()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.distance_to) method to calculate distance to a given geometry."]},{"cell_type":"code","execution_count":17,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:58.093584Z","start_time":"2021-09-07T19:07:58.081582Z"}},"outputs":[{"data":{"text/plain":["0 0.0\n","1 3.059052\n","2 4.424879\n","3 0.244092\n","4 0.075967\n"," ... \n","119 0.462069\n","120 0.116743\n","121 2.951358\n","122 0.144996\n","123 4.055468\n","Name: distance_to, Length: 124, dtype: object"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["# Calculate distance to the first nursing home\n","sedf.SHAPE.geom.distance_to(sedf.SHAPE[0])"]},{"cell_type":"markdown","metadata":{},"source":["We just performed some spatial operations on a pandas Series (`SHAPE`) using the `geom` namespace. Now, let's perform some basic Pandas operations on SeDF."]},{"cell_type":"markdown","metadata":{},"source":["### Perform Pandas Operations on a SeDF\n","\n","Let's perform some basic Pandas operations on a SeDF. One of the benefits of the accessor pattern in SeDF is that the SeDF object is of type _DataFrame_. Thus, you can continue to perform regular Pandas DataFrame operations. We will:\n","- Check the count of records for each state in our data\n","- Remove records that have 0 cases and death values\n","- Create a scatter plot of cases and deaths"]},{"cell_type":"code","execution_count":18,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:00.706542Z","start_time":"2021-09-07T19:08:00.699878Z"}},"outputs":[{"data":{"text/plain":["IN 67\n","IL 57\n","Name: Provider State, dtype: int64"]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["# Check record count for each state\n","sedf['Provider State'].value_counts()"]},{"cell_type":"code","execution_count":19,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:01.728120Z","start_time":"2021-09-07T19:08:01.680463Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEbuffer_2
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...
6HARCOURT TERRACE NURSING AND REHABILITATIONINDIANAPOLISIN21111066-86.19346939.904128{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.193469, 41.904128], {\"a\"...
7GREENCROFT HEALTHCAREGOSHENIN36513153155-85.81779841.561063{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....{\"curveRings\": [[[-85.817798, 43.561063], {\"a\"...
8WATERS OF MARTINSVILLE, THEMARTINSVILLEIN233810344-86.43259339.407438{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.432593, 41.407438], {\"a\"...
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","6 HARCOURT TERRACE NURSING AND REHABILITATION INDIANAPOLIS IN \n","7 GREENCROFT HEALTHCARE GOSHEN IN \n","8 WATERS OF MARTINSVILLE, THE MARTINSVILLE IN \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","4 19 75 \n","6 2 1 \n","7 3 65 \n","8 2 33 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","4 16 180 \n","6 1 110 \n","7 13 153 \n","8 8 103 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 61 -87.792973 42.012012 \n","4 116 -87.726353 41.975505 \n","6 66 -86.193469 39.904128 \n","7 155 -85.817798 41.561063 \n","8 44 -86.432593 39.407438 \n","\n"," SHAPE \\\n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","6 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","7 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","8 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","\n"," buffer_2 \n","0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"... \n","4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"... \n","6 {\"curveRings\": [[[-86.193469, 41.904128], {\"a\"... \n","7 {\"curveRings\": [[[-85.817798, 43.561063], {\"a\"... \n","8 {\"curveRings\": [[[-86.432593, 41.407438], {\"a\"... "]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["# Remove records with no cases and deaths\n","new_df = sedf.query('`Residents Total COVID-19 Cases` != 0 & \\\n"," `Residents Total COVID-19 Deaths` != 0').copy()\n","new_df.head()"]},{"cell_type":"code","execution_count":20,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:02.595405Z","start_time":"2021-09-07T19:08:02.590397Z"}},"outputs":[{"data":{"text/plain":["(37, 12)"]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["# Check shape\n","new_df.shape"]},{"cell_type":"code","execution_count":21,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:03.045740Z","start_time":"2021-09-07T19:08:02.800731Z"}},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["# Plot cases and deaths\n","new_df.plot('Residents Total COVID-19 Cases',\n"," 'Residents Total COVID-19 Deaths', \n"," kind='scatter',\n"," title = \"Cases vs Deaths\");"]},{"cell_type":"markdown","metadata":{},"source":["We just saw how easy it was to perform some Pandas data selection and manipulation operations on a SeDF... piece of cake! Now, let's plot the complete data on a map. \n","\n","__Note__ - If you would like to learn more about Pandas and data engineering with Pandas, checkout our [Data Engineering primer guide part-3](https://developers.arcgis.com/python/guide/part3-introduction-to-pandas/)."]},{"cell_type":"markdown","metadata":{},"source":["### Plot on a Map\n","\n","We will use the [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method of the `spatial` namespace to plot the SeDF on a map."]},{"cell_type":"code","execution_count":24,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:19:31.788026Z","start_time":"2021-09-07T19:19:31.726032Z"}},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["# Create Map\n","m1 = gis.map('IL, USA')\n","m1"]},{"cell_type":"markdown","metadata":{},"source":["> Points displayed on the map show location of each nursing home in our data with at-least 1 case and 1 death. Clicking on a point displays attribute information for that nursing home."]},{"cell_type":"code","execution_count":23,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:15.463166Z","start_time":"2021-09-07T19:08:15.377167Z"}},"outputs":[{"data":{"text/plain":["True"]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["# Plot SeDF on a map\n","new_df.spatial.plot(m1)"]},{"cell_type":"markdown","metadata":{},"source":["With __Spatially enabled DataFrame__, you can now perform a variety of geospatial operations such as creating buffers, calculating the distance to another geometry or plotting your data on a map, and rendering it using various renderers. While you are at it, you can continue to perform various operations on the DataFrame using Pandas or other open-source libraries such as Seaborn, Scikit-learn, etc. Isn't that exciting!"]},{"cell_type":"markdown","metadata":{},"source":["## Conclusion"]},{"cell_type":"markdown","metadata":{},"source":["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure and a building block for performing various scientific computations in Python. In this part of the guide series, we introduced the concept of [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) and how it adds \"spatial\" abilities to a Pandas DataFrame or Series. We also discussed the custom namespaces and geometry engines that operate behind the scenes and allow us to perform spatial operations. You have also seen an end-to-end example of using SeDF to perform various spatial operations along with Pandas operations.\n","\n","In the next part of this guide series, you will learn about creating a SeDF using GIS data in various formats."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: Given the importance and popularity of Spatially enabled DataFrame, we are revisiting our documentation for this topic. Our goal is to enhance the existing documentation to showcase the various capabilities of Spatially enabled DataFrame in detail with even more examples this time.\n","\n","

\n","\n","Creating quality documentation is time-consuming and exhaustive but we are committed to providing you with the best experience possible. With that in mind, we will be rolling out the revamped guides on this topic as different parts of a guide series (like the Data Engineering or Geometry guide series). This is \"part-1\" of the guide series for Spatially enabled DataFrame. You will continue to see the existing documentation as we revamp it to add new parts. Stay tuned for more on this topic.\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.10"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":true,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":4} From 00e4e65818226a8c75daf4dfe38e135c35c874df Mon Sep 17 00:00:00 2001 From: John Yaist Date: Fri, 13 Sep 2024 12:21:07 -0700 Subject: [PATCH 3/4] updated links to relative and updated endpoints --- ...n-to-the-spatially-enabled-dataframe.ipynb | 1430 ++++++++++++++- ...art1_introduction_to_dataengineering.ipynb | 1621 ++++++++++++++++- 2 files changed, 3049 insertions(+), 2 deletions(-) diff --git a/guide/05-working-with-the-spatially-enabled-dataframe/introduction-to-the-spatially-enabled-dataframe.ipynb b/guide/05-working-with-the-spatially-enabled-dataframe/introduction-to-the-spatially-enabled-dataframe.ipynb index 0e746cdbf0..16ae62997b 100644 --- a/guide/05-working-with-the-spatially-enabled-dataframe/introduction-to-the-spatially-enabled-dataframe.ipynb +++ b/guide/05-working-with-the-spatially-enabled-dataframe/introduction-to-the-spatially-enabled-dataframe.ipynb @@ -1 +1,1429 @@ -{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Introduction to the Spatially Enabled DataFrame\n", "\n", "The [`Spatially Enabled DataFrame`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#spatialdataframe) (SEDF) creates a simple, intutive object that can easily manipulate geometric and attribute data.\n", "\n", "
\n", " New at version 1.5, the Spatially Enabled DataFrame is an evolution of the SpatialDataFrame object that you may be familiar with. While the SDF object is still avialable for use, the team has stopped active development of it and is promoting the use of this new Spatially Enabled DataFrame pattern. The SEDF provides you better memory management, ability to handle larger datasets and is the pattern that Pandas advocates as the path forward.
\n", "\n", "The Spatially Enabled DataFrame inserts a custom namespace called `spatial` into the popular [Pandas](https://pandas.pydata.org/) [DataFrame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe) structure to give it spatial abilities. This allows you to use intutive, pandorable operations on both the attribute and spatial columns. Thus, the SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values which are fundamental to statistical and geographic manipulations.\n", "\n", "The dataframe reads from many **sources**, including shapefiles, [Pandas](https://pandas.pydata.org/) [DataFrames](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe), feature classes, GeoJSON, and Feature Layers."]}, {"cell_type": "markdown", "metadata": {}, "source": ["This document outlines some fundamentals of using the `Spatially Enabled DataFrame` object for working with GIS data."]}, {"cell_type": "markdown", "metadata": {"toc": true}, "source": ["

Table of Contents

\n", ""]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": ["import pandas as pd\n", "from arcgis.features import GeoAccessor, GeoSeriesAccessor"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Accessing GIS data\n", "GIS users need to work with both published layers on remote servers (web layers) and local data, but the ability to manipulate these datasets without permanently copying the data is lacking. The `Spatial Enabled DataFrame` solves this problem because it is an in-memory object that can read, write and manipulate geospatial data.\n", "\n", "The SEDF integrates with Esri's [`ArcPy` site-package](http://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as the open source [`pyshp`](https://github.com/GeospatialPython/pyshp/), [`shapely`](https://github.com/Toblerity/Shapely) and [`fiona`](https://github.com/Toblerity/Fiona) packages. This means the ArcGIS API for Python SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. The SEDF transforms data into the formats you desire so you can use Python functionality to analyze and visualize geographic information.\n", "\n", "Data can be read and scripted to automate workflows and just as easily visualized on maps in [`Jupyter notebooks`](../using-the-jupyter-notebook-environment/). The SEDF can export data as feature classes or publish them directly to servers for sharing according to your needs. Let's explore some of the different options available with the versatile `Spatial Enabled DataFrame` namespaces:"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Reading Web Layers\n", "\n", "[`Feature layers`](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm) hosted on [**ArcGIS Online**](https://www.arcgis.com) or [**ArcGIS Enterprise**](http://enterprise.arcgis.com/en/) can be easily read into a Spatially Enabled DataFrame using the [`from_layer`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html?highlight=from_layer#arcgis.features.GeoAccessor.from_layer) method. Once you read it into a SEDF object, you can create reports, manipulate the data, or convert it to a form that is comfortable and makes sense for its intended purpose.\n", "\n", "**Example: Retrieving an ArcGIS Online [`item`](https://developers.arcgis.com/rest/users-groups-and-items/publish-item.htm) and using the [`layers`](https://developers.arcgis.com/python/api-reference/arcgis.gis.toc.html#layer) property to inspect the first 5 records of the layer**"]}, {"cell_type": "code", "execution_count": 6, "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", "
AGE_10_14AGE_15_19AGE_20_24AGE_25_34AGE_35_44AGE_45_54AGE_55_64AGE_5_9AGE_65_74AGE_75_84...PLACEFIPSPOP2010POPULATIONPOP_CLASSRENTER_OCCSHAPESTSTFIPSVACANTWHITE
02144231420023531388756436353206757992850...0408220395404034666563{\"x\": -12751215.004681978, \"y\": 4180278.406256...AZ04670332367
187686757412471560212223427332157975...0424895143641484761397{\"x\": -12755627.731115643, \"y\": 4164465.572856...AZ04138912730
2100010038332311206323743631106861653776...0425030262652697761963{\"x\": -12734674.294574209, \"y\": 3850472.723091...AZ04963622995
32730285021944674524074388440249981454608...0439370525275504176765{\"x\": -12725332.21151233, \"y\": 4096532.0908223...AZ04915947335
427322965202431823512310916322497916467...0463470255052976761681{\"x\": -12770984.257542243, \"y\": 3826624.133935...AZ0457216120
\n", "

5 rows \u00d7 51 columns

\n", "
"], "text/plain": [" AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34 AGE_35_44 AGE_45_54 \\\n", "0 2144 2314 2002 3531 3887 5643 \n", "1 876 867 574 1247 1560 2122 \n", "2 1000 1003 833 2311 2063 2374 \n", "3 2730 2850 2194 4674 5240 7438 \n", "4 2732 2965 2024 3182 3512 3109 \n", "\n", " AGE_55_64 AGE_5_9 AGE_65_74 AGE_75_84 ... PLACEFIPS POP2010 \\\n", "0 6353 2067 5799 2850 ... 0408220 39540 \n", "1 2342 733 2157 975 ... 0424895 14364 \n", "2 3631 1068 6165 3776 ... 0425030 26265 \n", "3 8440 2499 8145 4608 ... 0439370 52527 \n", "4 1632 2497 916 467 ... 0463470 25505 \n", "\n", " POPULATION POP_CLASS RENTER_OCC \\\n", "0 40346 6 6563 \n", "1 14847 6 1397 \n", "2 26977 6 1963 \n", "3 55041 7 6765 \n", "4 29767 6 1681 \n", "\n", " SHAPE ST STFIPS VACANT WHITE \n", "0 {\"x\": -12751215.004681978, \"y\": 4180278.406256... AZ 04 6703 32367 \n", "1 {\"x\": -12755627.731115643, \"y\": 4164465.572856... AZ 04 1389 12730 \n", "2 {\"x\": -12734674.294574209, \"y\": 3850472.723091... AZ 04 9636 22995 \n", "3 {\"x\": -12725332.21151233, \"y\": 4096532.0908223... AZ 04 9159 47335 \n", "4 {\"x\": -12770984.257542243, \"y\": 3826624.133935... AZ 04 572 16120 \n", "\n", "[5 rows x 51 columns]"]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from arcgis import GIS\n", "gis = GIS()\n", "item = gis.content.get(\"85d0ca4ea1ca4b9abf0c51b9bd34de2e\")\n", "flayer = item.layers[0]\n", "\n", "# create a Spatially Enabled DataFrame object\n", "sdf = pd.DataFrame.spatial.from_layer(flayer)\n", "sdf.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["When you inspect the `type` of the object, you get back a standard pandas `DataFrame` object. However, this object now has an additional `SHAPE` column that allows you to perform geometric operations. In other words, this `DataFrame` is now geo-aware."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["pandas.core.frame.DataFrame"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["type(sdf)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Further, the `DataFrame` has a new `spatial` property that provides a list of geoprocessing operations that can be performed on the object. The rest of the guides in this section go into details of how to use these functionalities. So, sit tight."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Reading Feature Layer Data\n", "\n", "As seen above, the SEDF can consume a `Feature Layer` served from either ArcGIS Online or ArcGIS Enterprise orgs. Let's take a step-by-step approach to break down the notebook cell above and then extract a subset of records from the feature layer.\n", "\n", "#### Example: Examining Feature Layer content"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Use the `from_layer` method on the SEDF to instantiate a data frame from an item's `layer` and inspect the first 5 records."]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " USA Major Cities\n", " \n", "
This layer presents the locations of cities within the United States with populations of approximately 10,000 or greater, all state capitals, and the national capital.Feature Layer Collection by esri_dm\n", "
Last Modified: August 22, 2019\n", "
0 comments, 1,839,428 views\n", "
\n", "
\n", " "], "text/plain": [""]}, "execution_count": 17, "metadata": {}, "output_type": "execute_result"}], "source": ["# Retrieve an item from ArcGIS Online from a known ID value\n", "known_item = gis.content.get(\"85d0ca4ea1ca4b9abf0c51b9bd34de2e\")\n", "known_item"]}, {"cell_type": "code", "execution_count": 10, "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", "
AGE_10_14AGE_15_19AGE_20_24AGE_25_34AGE_35_44AGE_45_54AGE_55_64AGE_5_9AGE_65_74AGE_75_84...PLACEFIPSPOP2010POPULATIONPOP_CLASSRENTER_OCCSHAPESTSTFIPSVACANTWHITE
02144231420023531388756436353206757992850...0408220395404034666563{\"x\": -12751215.004681978, \"y\": 4180278.406256...AZ04670332367
187686757412471560212223427332157975...0424895143641484761397{\"x\": -12755627.731115643, \"y\": 4164465.572856...AZ04138912730
2100010038332311206323743631106861653776...0425030262652697761963{\"x\": -12734674.294574209, \"y\": 3850472.723091...AZ04963622995
32730285021944674524074388440249981454608...0439370525275504176765{\"x\": -12725332.21151233, \"y\": 4096532.0908223...AZ04915947335
427322965202431823512310916322497916467...0463470255052976761681{\"x\": -12770984.257542243, \"y\": 3826624.133935...AZ0457216120
\n", "

5 rows \u00d7 51 columns

\n", "
"], "text/plain": [" AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34 AGE_35_44 AGE_45_54 \\\n", "0 2144 2314 2002 3531 3887 5643 \n", "1 876 867 574 1247 1560 2122 \n", "2 1000 1003 833 2311 2063 2374 \n", "3 2730 2850 2194 4674 5240 7438 \n", "4 2732 2965 2024 3182 3512 3109 \n", "\n", " AGE_55_64 AGE_5_9 AGE_65_74 AGE_75_84 ... PLACEFIPS POP2010 \\\n", "0 6353 2067 5799 2850 ... 0408220 39540 \n", "1 2342 733 2157 975 ... 0424895 14364 \n", "2 3631 1068 6165 3776 ... 0425030 26265 \n", "3 8440 2499 8145 4608 ... 0439370 52527 \n", "4 1632 2497 916 467 ... 0463470 25505 \n", "\n", " POPULATION POP_CLASS RENTER_OCC \\\n", "0 40346 6 6563 \n", "1 14847 6 1397 \n", "2 26977 6 1963 \n", "3 55041 7 6765 \n", "4 29767 6 1681 \n", "\n", " SHAPE ST STFIPS VACANT WHITE \n", "0 {\"x\": -12751215.004681978, \"y\": 4180278.406256... AZ 04 6703 32367 \n", "1 {\"x\": -12755627.731115643, \"y\": 4164465.572856... AZ 04 1389 12730 \n", "2 {\"x\": -12734674.294574209, \"y\": 3850472.723091... AZ 04 9636 22995 \n", "3 {\"x\": -12725332.21151233, \"y\": 4096532.0908223... AZ 04 9159 47335 \n", "4 {\"x\": -12770984.257542243, \"y\": 3826624.133935... AZ 04 572 16120 \n", "\n", "[5 rows x 51 columns]"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["# Obtain the first feature layer from the item\n", "fl = known_item.layers[0]\n", "\n", "# Use the `from_layer` static method in the 'spatial' namespace on the Pandas' DataFrame\n", "sdf = pd.DataFrame.spatial.from_layer(fl)\n", "\n", "# Return the first 5 records. \n", "sdf.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> NOTE: See Pandas DataFrame [`head() method documentation`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html) for details."]}, {"cell_type": "markdown", "metadata": {}, "source": ["You can also use sql queries to return a subset of records by leveraging the ArcGIS API for Python's [`Feature Layer`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayer) object itself. When you run a [`query()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.FeatureLayer.query) on a `FeatureLayer`, you get back a `FeatureSet` object. Calling the `sdf` property of the `FeatureSet` returns a Spatially Enabled DataFrame object. We then use the data frame's [`head()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.head.html#pandas.core.groupby.GroupBy.head) method to return the first 5 records and a subset of columns from the DataFrame:"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Example: Feature Layer Query Results to a Spatially Enabled DataFrame\n", "We'll use the `AGE_45_54` column to query the data frame and return a new `DataFrame` with a subset of records. We can use the built-in [`zip()`](https://docs.python.org/3/library/functions.html#zip) function to print the data frame attribute field names, and then use data frame syntax to view specific attribute fields in the output:"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["# Filter feature layer records with a sql query. \n", "# See https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm\n", "\n", "df = fl.query(where=\"AGE_45_54 < 1500\").sdf"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34\n", "AGE_35_44 AGE_45_54 AGE_55_64 AGE_5_9\n", "AGE_65_74 AGE_75_84 AGE_85_UP AGE_UNDER5\n", "AMERI_ES ASIAN AVE_FAM_SZ AVE_HH_SZ\n", "BLACK CAPITAL CLASS FAMILIES\n", "FEMALES FHH_CHILD FID HAWN_PI\n", "HISPANIC HOUSEHOLDS HSEHLD_1_F HSEHLD_1_M\n", "HSE_UNITS MALES MARHH_CHD MARHH_NO_C\n", "MED_AGE MED_AGE_F MED_AGE_M MHH_CHILD\n", "MULT_RACE NAME OBJECTID OTHER\n", "OWNER_OCC PLACEFIPS POP2010 POPULATION\n", "POP_CLASS RENTER_OCC SHAPE ST\n"]}], "source": ["for a,b,c,d in zip(df.columns[::4], df.columns[1::4],df.columns[2::4], df.columns[3::4]):\n", " print(\"{:<30}{:<30}{:<30}{:<}\".format(a,b,c,d))"]}, {"cell_type": "code", "execution_count": 7, "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", "
NAMEAGE_45_54POP2010
0Somerton141114287
1Anderson13339932
2Camp Pendleton South12710616
3Citrus144310866
4Commerce147812823
\n", "
"], "text/plain": [" NAME AGE_45_54 POP2010\n", "0 Somerton 1411 14287\n", "1 Anderson 1333 9932\n", "2 Camp Pendleton South 127 10616\n", "3 Citrus 1443 10866\n", "4 Commerce 1478 12823"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["# Return a subset of columns on just the first 5 records\n", "df[['NAME', 'AGE_45_54', 'POP2010']].head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Accessing local GIS data\n", "\n", "The SEDF can also access local geospatial data. Depending upon what Python modules you have installed, you'll have access to a wide range of functionality: \n", "\n", "* If the **`ArcPy`** module is installed, meaning you have installed [`ArcGIS Pro`](http://pro.arcgis.com/en/pro-app/) and have installed the ArcGIS API for Python in that same environment, the `DataFrame` then has methods to read a subset of the ArcGIS Desktop [supported geographic formats](http://desktop.arcgis.com/en/arcmap/10.3/manage-data/datatypes/about-geographic-data-formats.htm#ESRI_SECTION1_4835793C55C0439593A46FD5BC9E64B9), most notably:\n", " * [`feature classes`](http://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n", " * [`shapefiles`](http://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/what-is-a-shapefile.htm), \n", " * [`ArcGIS Server Web Services`](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/what-types-of-services-can-you-publish.htm) and [`ArcGIS Online Hosted Feature Layers`](https://doc.arcgis.com/en/arcgis-online/share-maps/publish-features.htm) \n", " * [`OGC Services`](http://www.opengeospatial.org/standards) \n", "* If the **`ArcPy`** module is not installed, the SEDF [`from_featureclass`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html?arcgis.features.GeoAccessor.from_featureclass#arcgis.features.GeoAccessor.from_featureclass) method only supports consuming an Esri [`shapefile`](http://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/what-is-a-shapefile.htm)\n", "> Please note that you must install the `pyshp` package to read shapefiles in environments that don't have access to `ArcPy`.\n", " \n", "### Example: Reading a Shapefile\n", "> You must authenticate to `ArcGIS Online` or `ArcGIS Enterprise` to use the `from_featureclass()` method to read a shapefile with a Python interpreter that does not have access to `ArcPy`.\n", "\n", "> `g2 = GIS(\"https://www.arcgis.com\", \"username\", \"password\")`"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["g2 = GIS(\"https://pythonapi.playground.esri.com/portal\", \"arcgis_python\", \"amazing_arcgis_123\")"]}, {"cell_type": "code", "execution_count": 8, "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", "
FIDNAMECLASSSTSTFIPSPLACEFIPCAPITALAREALANDAREAWATERPOP_CLASS...MARHH_NO_CMHH_CHILDFHH_CHILDFAMILIESAVE_FAM_SZHSE_UNITSVACANTOWNER_OCCRENTER_OCCSHAPE
35523552East ProvidenceCityRI442296013.4053.2086...56583061414128502.9921309779120968434{'x': -71.3608270663031, 'y': 41.8015001782688...
35533553PawtucketCityRI44546408.7360.2597...67407543242185203.073181917721333116716{'x': -71.3759815680945, 'y': 41.8755001649055...
35543554Fall RiverCityMA252300031.0227.2027...90117594247235583.004185730981352125238{'x': -71.1469910908576, 'y': 41.6981001567767...
35553555SomersetCensus Designated PlaceMA25624658.1093.8676...27719128752602.98714315657231264{'x': -71.15319106847441, 'y': 41.748500174901...
35563556New BedfordCityMA254500020.1223.9047...88139104701240833.014151133331671121467{'x': -70.93370908847608, 'y': 41.651800155406...
\n", "

5 rows \u00d7 48 columns

\n", "
"], "text/plain": [" FID NAME CLASS ST STFIPS PLACEFIP \\\n", "3552 3552 East Providence City RI 44 22960 \n", "3553 3553 Pawtucket City RI 44 54640 \n", "3554 3554 Fall River City MA 25 23000 \n", "3555 3555 Somerset Census Designated Place MA 25 62465 \n", "3556 3556 New Bedford City MA 25 45000 \n", "\n", " CAPITAL AREALAND AREAWATER POP_CLASS ... MARHH_NO_C MHH_CHILD \\\n", "3552 13.405 3.208 6 ... 5658 306 \n", "3553 8.736 0.259 7 ... 6740 754 \n", "3554 31.022 7.202 7 ... 9011 759 \n", "3555 8.109 3.867 6 ... 2771 91 \n", "3556 20.122 3.904 7 ... 8813 910 \n", "\n", " FHH_CHILD FAMILIES AVE_FAM_SZ HSE_UNITS VACANT OWNER_OCC \\\n", "3552 1414 12850 2.99 21309 779 12096 \n", "3553 3242 18520 3.07 31819 1772 13331 \n", "3554 4247 23558 3.00 41857 3098 13521 \n", "3555 287 5260 2.98 7143 156 5723 \n", "3556 4701 24083 3.01 41511 3333 16711 \n", "\n", " RENTER_OCC SHAPE \n", "3552 8434 {'x': -71.3608270663031, 'y': 41.8015001782688... \n", "3553 16716 {'x': -71.3759815680945, 'y': 41.8755001649055... \n", "3554 25238 {'x': -71.1469910908576, 'y': 41.6981001567767... \n", "3555 1264 {'x': -71.15319106847441, 'y': 41.748500174901... \n", "3556 21467 {'x': -70.93370908847608, 'y': 41.651800155406... \n", "\n", "[5 rows x 48 columns]"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["sdf = pd.DataFrame.spatial.from_featureclass(\"path\\to\\your\\data\\census_example\\cities.shp\")\n", "sdf.tail()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Example: Reading a Featureclass from FileGDB\n", "\n", "> You must have `fiona` installed if you use the `from_featureclass()` method to read a feature class from FileGDB with a Python interpreter that does not have access to `ArcPy`.\n"]}, {"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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OBJECTIDFIDNAMECLASSSTSTFIPSPLACEFIPCAPITALAREALANDAREAWATER...MARHH_NO_CMHH_CHILDFHH_CHILDFAMILIESAVE_FAM_SZHSE_UNITSVACANTOWNER_OCCRENTER_OCCSHAPE
010CollegeCensus Designated PlaceAK021675018.6700.407...93615233926403.13450139723951709{'x': -147.82719115699996, 'y': 64.84830019400...
121FairbanksCityAK022423031.8570.815...2259395105871873.1512357128238637212{'x': -147.72638162999996, 'y': 64.83809069700...
232KalispellCityMT30400755.4580.004...143314748034942.92653239034582684{'x': -114.31606412399998, 'y': 48.19780017900...
343Post FallsCityID16648109.6560.045...185120546746703.13669732846111758{'x': -116.93792709799999, 'y': 47.71555468000...
454DishmanCensus Designated PlaceWA53179853.3780.000...109613134525642.96440825726351516{'x': -117.27780913799995, 'y': 47.65654568400...
\n", "

5 rows \u00d7 49 columns

\n", "
"], "text/plain": [" OBJECTID FID NAME CLASS ST STFIPS PLACEFIP \\\n", "0 1 0 College Census Designated Place AK 02 16750 \n", "1 2 1 Fairbanks City AK 02 24230 \n", "2 3 2 Kalispell City MT 30 40075 \n", "3 4 3 Post Falls City ID 16 64810 \n", "4 5 4 Dishman Census Designated Place WA 53 17985 \n", "\n", " CAPITAL AREALAND AREAWATER ... MARHH_NO_C MHH_CHILD FHH_CHILD \\\n", "0 18.670 0.407 ... 936 152 339 \n", "1 31.857 0.815 ... 2259 395 1058 \n", "2 5.458 0.004 ... 1433 147 480 \n", "3 9.656 0.045 ... 1851 205 467 \n", "4 3.378 0.000 ... 1096 131 345 \n", "\n", " FAMILIES AVE_FAM_SZ HSE_UNITS VACANT OWNER_OCC RENTER_OCC \\\n", "0 2640 3.13 4501 397 2395 1709 \n", "1 7187 3.15 12357 1282 3863 7212 \n", "2 3494 2.92 6532 390 3458 2684 \n", "3 4670 3.13 6697 328 4611 1758 \n", "4 2564 2.96 4408 257 2635 1516 \n", "\n", " SHAPE \n", "0 {'x': -147.82719115699996, 'y': 64.84830019400... \n", "1 {'x': -147.72638162999996, 'y': 64.83809069700... \n", "2 {'x': -114.31606412399998, 'y': 48.19780017900... \n", "3 {'x': -116.93792709799999, 'y': 47.71555468000... \n", "4 {'x': -117.27780913799995, 'y': 47.65654568400... \n", "\n", "[5 rows x 49 columns]"]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["sdf = pd.DataFrame.spatial.from_featureclass(\"path\\to\\your\\data\\census_example\\census.gdb\\cities\")\n", "sdf.head()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Saving Spatially Enabled DataFrames\n", "\n", "The SEDF can export data to various data formats for use in other applications.\n", "\n", "\n", "### Export Options\n", "\n", "- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n", "- [Feature Collections](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n", "- [Feature Set](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featureset)\n", "- [GeoJSON](http://geojson.org/)\n", "- [Feature Class](http://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n", "- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n", "- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)\n", "\n", "### Export to Feature Class\n", "\n", "The SEDF allows for the export of whole datasets or partial datasets. \n", "\n", "#### Example: Export a whole dataset to a shapefile:"]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["'c:\\\\output_examples\\\\census.shp'"]}, "execution_count": 18, "metadata": {}, "output_type": "execute_result"}], "source": ["sdf.spatial.to_featureclass(location=r\"c:\\output_examples\\census.shp\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["> The ArcGIS API for Python installs on all `macOS` and `Linux` machines, as well as those `Windows` machines not using Python interpreters that have access to `ArcPy` will only be able to write out to shapefile format with the `to_featureclass` method. Writing to file geodatabases requires the `ArcPy` site-package."]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Example: Export dataset with a subset of columns and top 5 records to a shapefile:"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["PLACENS GEOID NAMELSAD CLASSFP\n", "FUNCSTAT ALAND AWATER INTPTLAT\n"]}], "source": ["for a,b,c,d in zip(sdf.columns[::4], sdf.columns[1::4], sdf.columns[2::4], sdf.columns[3::4]):\n", " print(\"{:<30}{:<30}{:<30}{:<}\".format(a,b,c,d))"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["'/path/to/your/data/directory/sdf_head_output.shp'"]}, "execution_count": 15, "metadata": {}, "output_type": "execute_result"}], "source": ["columns = ['NAME', 'ST', 'CAPITAL', 'STFIPS', 'POP2000', 'POP2007', 'SHAPE']\n", "sdf[columns].head().spatial.to_featureclass(location=r\"/path/to/your/data/directory/sdf_head_output.shp\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Example: Export dataset to a featureclass in FileGDB:"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": ["sdf.spatial.to_featureclass(location=r\"c:\\output_examples\\census.gdb\\cities\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Publish as a Feature Layer\n", "\n", "The SEDF allows for the publishing of datasets as feature layers. \n", "\n", "#### Example: Publishing as a feature layer:"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " census_cities\n", " \n", "
Feature Layer Collection by api_data_owner\n", "
Last Modified: September 11, 2019\n", "
0 comments, 0 views\n", "
\n", "
\n", " "], "text/plain": [""]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["lyr = sdf.spatial.to_featurelayer('census_cities', folder='census')\n", "lyr"]}], "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.2"}, "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": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": true}}, "nbformat": 4, "nbformat_minor": 2} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction to the Spatially Enabled DataFrame\n", + "\n", + "The [`Spatially Enabled DataFrame`](/python/api-reference/arcgis.features.toc.html#geoaccessor) (SEDF) creates a simple, intutive object that can easily manipulate geometric and attribute data.\n", + "\n", + "\n", + "> _Note:_ The Spatially Enabled DataFrame is implemented as the [GeoAccessor](/python/api-reference/arcgis.features.toc.html#geoaccessor) class in the API and is based upon the [Pandas DataFrame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe) object. The SEDF provides you excellent memory management, ability to handle larger datasets and is coded with the recommended Pandas pattern.\n", + "\n", + "The Spatially Enabled DataFrame inserts a custom namespace called `spatial` into the popular [Pandas](https://pandas.pydata.org/) [DataFrame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe) structure to give it spatial abilities. This allows you to use intutive, pandorable operations on both the attribute and spatial columns. Thus, the SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values which are fundamental to statistical and geographic manipulations.\n", + "\n", + "The dataframe reads from many **sources**, including shapefiles, [Pandas](https://pandas.pydata.org/) [DataFrames](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe), feature classes, GeoJSON, and Feature Layers." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This document outlines some fundamentals of using the `Spatially Enabled DataFrame` object for working with GIS data." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from arcgis.features import GeoAccessor, GeoSeriesAccessor" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accessing GIS data\n", + "GIS users need to work with both published layers on remote servers (web layers) and local data, but the ability to manipulate these datasets without permanently copying the data is lacking. The `Spatial Enabled DataFrame` solves this problem because it is an in-memory object that can read, write and manipulate geospatial data.\n", + "\n", + "The SEDF integrates with Esri's [`ArcPy` site-package](http://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as the open source [`pyshp`](https://github.com/GeospatialPython/pyshp/), [`shapely`](https://github.com/Toblerity/Shapely) and [`fiona`](https://github.com/Toblerity/Fiona) packages. This means the ArcGIS API for Python SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. The SEDF transforms data into the formats you desire so you can use Python functionality to analyze and visualize geographic information.\n", + "\n", + "Data can be read and scripted to automate workflows and just as easily visualized on maps in [`Jupyter Lab notebooks`](../using-the-jupyter-notebook-environment/). The SEDF can export data as feature classes or publish them directly to servers for sharing according to your needs. Let's explore some of the different options available with the versatile `Spatial Enabled DataFrame` namespaces:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reading Web Layers\n", + "\n", + "[`Feature layers`](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm) hosted on [**ArcGIS Online**](https://www.arcgis.com) or [**ArcGIS Enterprise**](http://enterprise.arcgis.com/en/) can be easily read into a Spatially Enabled DataFrame using the [`from_layer`](/python/api-reference/arcgis.features.toc.html?highlight=from_layer#arcgis.features.GeoAccessor.from_layer) method. Once you read it into a SEDF object, you can create reports, manipulate the data, or convert it to a form that is comfortable and makes sense for its intended purpose.\n", + "\n", + "**Example: Retrieving an ArcGIS Online [`item`](https://developers.arcgis.com/rest/users-groups-and-items/publish-item.htm) and using the [`layers`](/python/api-reference/arcgis.gis.toc.html#layer) property to inspect the first 5 records of the layer**" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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", + "
AGE_10_14AGE_15_19AGE_20_24AGE_25_34AGE_35_44AGE_45_54AGE_55_64AGE_5_9AGE_65_74AGE_75_84...PLACEFIPSPOP2010POPULATIONPOP_CLASSRENTER_OCCSHAPESTSTFIPSVACANTWHITE
02144231420023531388756436353206757992850...0408220395404034666563{\"x\": -12751215.004681978, \"y\": 4180278.406256...AZ04670332367
187686757412471560212223427332157975...0424895143641484761397{\"x\": -12755627.731115643, \"y\": 4164465.572856...AZ04138912730
2100010038332311206323743631106861653776...0425030262652697761963{\"x\": -12734674.294574209, \"y\": 3850472.723091...AZ04963622995
32730285021944674524074388440249981454608...0439370525275504176765{\"x\": -12725332.21151233, \"y\": 4096532.0908223...AZ04915947335
427322965202431823512310916322497916467...0463470255052976761681{\"x\": -12770984.257542243, \"y\": 3826624.133935...AZ0457216120
\n", + "

5 rows × 51 columns

\n", + "
" + ], + "text/plain": [ + " AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34 AGE_35_44 AGE_45_54 \\\n", + "0 2144 2314 2002 3531 3887 5643 \n", + "1 876 867 574 1247 1560 2122 \n", + "2 1000 1003 833 2311 2063 2374 \n", + "3 2730 2850 2194 4674 5240 7438 \n", + "4 2732 2965 2024 3182 3512 3109 \n", + "\n", + " AGE_55_64 AGE_5_9 AGE_65_74 AGE_75_84 ... PLACEFIPS POP2010 \\\n", + "0 6353 2067 5799 2850 ... 0408220 39540 \n", + "1 2342 733 2157 975 ... 0424895 14364 \n", + "2 3631 1068 6165 3776 ... 0425030 26265 \n", + "3 8440 2499 8145 4608 ... 0439370 52527 \n", + "4 1632 2497 916 467 ... 0463470 25505 \n", + "\n", + " POPULATION POP_CLASS RENTER_OCC \\\n", + "0 40346 6 6563 \n", + "1 14847 6 1397 \n", + "2 26977 6 1963 \n", + "3 55041 7 6765 \n", + "4 29767 6 1681 \n", + "\n", + " SHAPE ST STFIPS VACANT WHITE \n", + "0 {\"x\": -12751215.004681978, \"y\": 4180278.406256... AZ 04 6703 32367 \n", + "1 {\"x\": -12755627.731115643, \"y\": 4164465.572856... AZ 04 1389 12730 \n", + "2 {\"x\": -12734674.294574209, \"y\": 3850472.723091... AZ 04 9636 22995 \n", + "3 {\"x\": -12725332.21151233, \"y\": 4096532.0908223... AZ 04 9159 47335 \n", + "4 {\"x\": -12770984.257542243, \"y\": 3826624.133935... AZ 04 572 16120 \n", + "\n", + "[5 rows x 51 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from arcgis import GIS\n", + "gis = GIS()\n", + "item = gis.content.get(\"85d0ca4ea1ca4b9abf0c51b9bd34de2e\")\n", + "flayer = item.layers[0]\n", + "\n", + "# create a Spatially Enabled DataFrame object\n", + "sdf = pd.DataFrame.spatial.from_layer(flayer)\n", + "sdf.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you inspect the `type` of the object, you get back a standard pandas `DataFrame` object. However, this object now has an additional `SHAPE` column that allows you to perform geometric operations. In other words, this `DataFrame` is now geo-aware." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(sdf)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Further, the `DataFrame` has a new `spatial` property that provides a list of geoprocessing operations that can be performed on the object. The rest of the guides in this section go into details of how to use these functionalities. So, sit tight." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Reading Feature Layer Data\n", + "\n", + "As seen above, the SEDF can consume a `Feature Layer` served from either ArcGIS Online or ArcGIS Enterprise orgs. Let's take a step-by-step approach to break down the notebook cell above and then extract a subset of records from the feature layer.\n", + "\n", + "#### Example: Examining Feature Layer content" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use the `from_layer` method on the SEDF to instantiate a data frame from an item's `layer` and inspect the first 5 records." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + " USA Major Cities\n", + " \n", + "
This layer presents the locations of cities within the United States with populations of approximately 10,000 or greater, all state capitals, and the national capital.Feature Layer Collection by esri_dm\n", + "
Last Modified: August 22, 2019\n", + "
0 comments, 1,839,428 views\n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Retrieve an item from ArcGIS Online from a known ID value\n", + "known_item = gis.content.get(\"85d0ca4ea1ca4b9abf0c51b9bd34de2e\")\n", + "known_item" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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", + "
AGE_10_14AGE_15_19AGE_20_24AGE_25_34AGE_35_44AGE_45_54AGE_55_64AGE_5_9AGE_65_74AGE_75_84...PLACEFIPSPOP2010POPULATIONPOP_CLASSRENTER_OCCSHAPESTSTFIPSVACANTWHITE
02144231420023531388756436353206757992850...0408220395404034666563{\"x\": -12751215.004681978, \"y\": 4180278.406256...AZ04670332367
187686757412471560212223427332157975...0424895143641484761397{\"x\": -12755627.731115643, \"y\": 4164465.572856...AZ04138912730
2100010038332311206323743631106861653776...0425030262652697761963{\"x\": -12734674.294574209, \"y\": 3850472.723091...AZ04963622995
32730285021944674524074388440249981454608...0439370525275504176765{\"x\": -12725332.21151233, \"y\": 4096532.0908223...AZ04915947335
427322965202431823512310916322497916467...0463470255052976761681{\"x\": -12770984.257542243, \"y\": 3826624.133935...AZ0457216120
\n", + "

5 rows × 51 columns

\n", + "
" + ], + "text/plain": [ + " AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34 AGE_35_44 AGE_45_54 \\\n", + "0 2144 2314 2002 3531 3887 5643 \n", + "1 876 867 574 1247 1560 2122 \n", + "2 1000 1003 833 2311 2063 2374 \n", + "3 2730 2850 2194 4674 5240 7438 \n", + "4 2732 2965 2024 3182 3512 3109 \n", + "\n", + " AGE_55_64 AGE_5_9 AGE_65_74 AGE_75_84 ... PLACEFIPS POP2010 \\\n", + "0 6353 2067 5799 2850 ... 0408220 39540 \n", + "1 2342 733 2157 975 ... 0424895 14364 \n", + "2 3631 1068 6165 3776 ... 0425030 26265 \n", + "3 8440 2499 8145 4608 ... 0439370 52527 \n", + "4 1632 2497 916 467 ... 0463470 25505 \n", + "\n", + " POPULATION POP_CLASS RENTER_OCC \\\n", + "0 40346 6 6563 \n", + "1 14847 6 1397 \n", + "2 26977 6 1963 \n", + "3 55041 7 6765 \n", + "4 29767 6 1681 \n", + "\n", + " SHAPE ST STFIPS VACANT WHITE \n", + "0 {\"x\": -12751215.004681978, \"y\": 4180278.406256... AZ 04 6703 32367 \n", + "1 {\"x\": -12755627.731115643, \"y\": 4164465.572856... AZ 04 1389 12730 \n", + "2 {\"x\": -12734674.294574209, \"y\": 3850472.723091... AZ 04 9636 22995 \n", + "3 {\"x\": -12725332.21151233, \"y\": 4096532.0908223... AZ 04 9159 47335 \n", + "4 {\"x\": -12770984.257542243, \"y\": 3826624.133935... AZ 04 572 16120 \n", + "\n", + "[5 rows x 51 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Obtain the first feature layer from the item\n", + "fl = known_item.layers[0]\n", + "\n", + "# Use the `from_layer` static method in the 'spatial' namespace on the Pandas' DataFrame\n", + "sdf = pd.DataFrame.spatial.from_layer(fl)\n", + "\n", + "# Return the first 5 records. \n", + "sdf.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> NOTE: See Pandas DataFrame [`head() method documentation`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html) for details." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also use sql queries to return a subset of records by leveraging the ArcGIS API for Python's [`Feature Layer`](/python/api-reference/arcgis.features.toc.html#featurelayer) object itself. When you run a [`query()`](/python/api-reference/arcgis.features.toc.html#arcgis.features.FeatureLayer.query) on a `FeatureLayer`, you get back a `FeatureSet` object. Calling the `sdf` property of the `FeatureSet` returns a Spatially Enabled DataFrame object. We then use the data frame's [`head()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.head.html#pandas.core.groupby.GroupBy.head) method to return the first 5 records and a subset of columns from the DataFrame:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example: Feature Layer Query Results to a Spatially Enabled DataFrame\n", + "We'll use the `AGE_45_54` column to query the data frame and return a new `DataFrame` with a subset of records. We can use the built-in [`zip()`](https://docs.python.org/3/library/functions.html#zip) function to print the data frame attribute field names, and then use data frame syntax to view specific attribute fields in the output:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Filter feature layer records with a sql query. \n", + "# See https://developers.arcgis.com/rest/services-reference/query-feature-service-layer-.htm\n", + "\n", + "df = fl.query(where=\"AGE_45_54 < 1500\").sdf" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AGE_10_14 AGE_15_19 AGE_20_24 AGE_25_34\n", + "AGE_35_44 AGE_45_54 AGE_55_64 AGE_5_9\n", + "AGE_65_74 AGE_75_84 AGE_85_UP AGE_UNDER5\n", + "AMERI_ES ASIAN AVE_FAM_SZ AVE_HH_SZ\n", + "BLACK CAPITAL CLASS FAMILIES\n", + "FEMALES FHH_CHILD FID HAWN_PI\n", + "HISPANIC HOUSEHOLDS HSEHLD_1_F HSEHLD_1_M\n", + "HSE_UNITS MALES MARHH_CHD MARHH_NO_C\n", + "MED_AGE MED_AGE_F MED_AGE_M MHH_CHILD\n", + "MULT_RACE NAME OBJECTID OTHER\n", + "OWNER_OCC PLACEFIPS POP2010 POPULATION\n", + "POP_CLASS RENTER_OCC SHAPE ST\n" + ] + } + ], + "source": [ + "for a,b,c,d in zip(df.columns[::4], df.columns[1::4],df.columns[2::4], df.columns[3::4]):\n", + " print(\"{:<30}{:<30}{:<30}{:<}\".format(a,b,c,d))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + "
NAMEAGE_45_54POP2010
0Somerton141114287
1Anderson13339932
2Camp Pendleton South12710616
3Citrus144310866
4Commerce147812823
\n", + "
" + ], + "text/plain": [ + " NAME AGE_45_54 POP2010\n", + "0 Somerton 1411 14287\n", + "1 Anderson 1333 9932\n", + "2 Camp Pendleton South 127 10616\n", + "3 Citrus 1443 10866\n", + "4 Commerce 1478 12823" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return a subset of columns on just the first 5 records\n", + "df[['NAME', 'AGE_45_54', 'POP2010']].head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accessing local GIS data\n", + "\n", + "The SEDF can also access local geospatial data. Depending upon what Python modules you have installed, you'll have access to a wide range of functionality: \n", + "\n", + "* If the **`ArcPy`** module is installed, meaning you have installed [`ArcGIS Pro`](http://pro.arcgis.com/en/pro-app/) and have installed the ArcGIS API for Python in that same environment, the `DataFrame` then has methods to read a subset of the ArcGIS Desktop [supported data types](https://pro.arcgis.com/en/pro-app/latest/help/data/introduction/data-types.htm), most notably:\n", + " * [`feature classes`](https://pro.arcgis.com/en/pro-app/latest/help/data/feature-classes/feature-classes.htm)\n", + " * [`shapefiles`](https://pro.arcgis.com/en/pro-app/latest/help/data/shapefiles/working-with-shapefiles-in-arcgis-pro.htm), \n", + " * [`Web layers`](https://pro.arcgis.com/en/pro-app/latest/help/data/services/use-map-image-layers.htm) and [`ArcGIS Online Hosted Feature Layers`](https://doc.arcgis.com/en/arcgis-online/share-maps/publish-features.htm) \n", + " * [`OGC Service layers`](https://pro.arcgis.com/en/pro-app/latest/help/data/services/ogc-services.htm) \n", + "* If the **`ArcPy`** module is not installed, the SEDF [`from_featureclass`](/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.from_featureclass) method only supports consuming an Esri `shapefile`.\n", + "\n", + "> _Note:_ You must install the `pyshp` package to read shapefiles in environments that don't have access to `ArcPy`.\n", + " \n", + "### Example: Reading a Shapefile\n", + "> _Note:_ You must authenticate to `ArcGIS Online` or `ArcGIS Enterprise` to use the `from_featureclass()` method to read a shapefile with a Python interpreter that does not have access to `ArcPy`:

g2 = GIS(\"https://www.arcgis.com\", \"username\", \"password\")

" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "g2 = GIS(profile=\"your_organization_profile\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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", + "
FIDNAMECLASSSTSTFIPSPLACEFIPCAPITALAREALANDAREAWATERPOP_CLASS...MARHH_NO_CMHH_CHILDFHH_CHILDFAMILIESAVE_FAM_SZHSE_UNITSVACANTOWNER_OCCRENTER_OCCSHAPE
35523552East ProvidenceCityRI442296013.4053.2086...56583061414128502.9921309779120968434{'x': -71.3608270663031, 'y': 41.8015001782688...
35533553PawtucketCityRI44546408.7360.2597...67407543242185203.073181917721333116716{'x': -71.3759815680945, 'y': 41.8755001649055...
35543554Fall RiverCityMA252300031.0227.2027...90117594247235583.004185730981352125238{'x': -71.1469910908576, 'y': 41.6981001567767...
35553555SomersetCensus Designated PlaceMA25624658.1093.8676...27719128752602.98714315657231264{'x': -71.15319106847441, 'y': 41.748500174901...
35563556New BedfordCityMA254500020.1223.9047...88139104701240833.014151133331671121467{'x': -70.93370908847608, 'y': 41.651800155406...
\n", + "

5 rows × 48 columns

\n", + "
" + ], + "text/plain": [ + " FID NAME CLASS ST STFIPS PLACEFIP \\\n", + "3552 3552 East Providence City RI 44 22960 \n", + "3553 3553 Pawtucket City RI 44 54640 \n", + "3554 3554 Fall River City MA 25 23000 \n", + "3555 3555 Somerset Census Designated Place MA 25 62465 \n", + "3556 3556 New Bedford City MA 25 45000 \n", + "\n", + " CAPITAL AREALAND AREAWATER POP_CLASS ... MARHH_NO_C MHH_CHILD \\\n", + "3552 13.405 3.208 6 ... 5658 306 \n", + "3553 8.736 0.259 7 ... 6740 754 \n", + "3554 31.022 7.202 7 ... 9011 759 \n", + "3555 8.109 3.867 6 ... 2771 91 \n", + "3556 20.122 3.904 7 ... 8813 910 \n", + "\n", + " FHH_CHILD FAMILIES AVE_FAM_SZ HSE_UNITS VACANT OWNER_OCC \\\n", + "3552 1414 12850 2.99 21309 779 12096 \n", + "3553 3242 18520 3.07 31819 1772 13331 \n", + "3554 4247 23558 3.00 41857 3098 13521 \n", + "3555 287 5260 2.98 7143 156 5723 \n", + "3556 4701 24083 3.01 41511 3333 16711 \n", + "\n", + " RENTER_OCC SHAPE \n", + "3552 8434 {'x': -71.3608270663031, 'y': 41.8015001782688... \n", + "3553 16716 {'x': -71.3759815680945, 'y': 41.8755001649055... \n", + "3554 25238 {'x': -71.1469910908576, 'y': 41.6981001567767... \n", + "3555 1264 {'x': -71.15319106847441, 'y': 41.748500174901... \n", + "3556 21467 {'x': -70.93370908847608, 'y': 41.651800155406... \n", + "\n", + "[5 rows x 48 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sdf = pd.DataFrame.spatial.from_featureclass(\"path\\to\\your\\data\\census_example\\cities.shp\")\n", + "sdf.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example: Reading a Featureclass from FileGDB\n", + "\n", + "> You must have `fiona` installed if you use the `from_featureclass()` method to read a feature class from FileGDB with a Python interpreter that does not have access to `ArcPy`.\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
OBJECTIDFIDNAMECLASSSTSTFIPSPLACEFIPCAPITALAREALANDAREAWATER...MARHH_NO_CMHH_CHILDFHH_CHILDFAMILIESAVE_FAM_SZHSE_UNITSVACANTOWNER_OCCRENTER_OCCSHAPE
010CollegeCensus Designated PlaceAK021675018.6700.407...93615233926403.13450139723951709{'x': -147.82719115699996, 'y': 64.84830019400...
121FairbanksCityAK022423031.8570.815...2259395105871873.1512357128238637212{'x': -147.72638162999996, 'y': 64.83809069700...
232KalispellCityMT30400755.4580.004...143314748034942.92653239034582684{'x': -114.31606412399998, 'y': 48.19780017900...
343Post FallsCityID16648109.6560.045...185120546746703.13669732846111758{'x': -116.93792709799999, 'y': 47.71555468000...
454DishmanCensus Designated PlaceWA53179853.3780.000...109613134525642.96440825726351516{'x': -117.27780913799995, 'y': 47.65654568400...
\n", + "

5 rows × 49 columns

\n", + "
" + ], + "text/plain": [ + " OBJECTID FID NAME CLASS ST STFIPS PLACEFIP \\\n", + "0 1 0 College Census Designated Place AK 02 16750 \n", + "1 2 1 Fairbanks City AK 02 24230 \n", + "2 3 2 Kalispell City MT 30 40075 \n", + "3 4 3 Post Falls City ID 16 64810 \n", + "4 5 4 Dishman Census Designated Place WA 53 17985 \n", + "\n", + " CAPITAL AREALAND AREAWATER ... MARHH_NO_C MHH_CHILD FHH_CHILD \\\n", + "0 18.670 0.407 ... 936 152 339 \n", + "1 31.857 0.815 ... 2259 395 1058 \n", + "2 5.458 0.004 ... 1433 147 480 \n", + "3 9.656 0.045 ... 1851 205 467 \n", + "4 3.378 0.000 ... 1096 131 345 \n", + "\n", + " FAMILIES AVE_FAM_SZ HSE_UNITS VACANT OWNER_OCC RENTER_OCC \\\n", + "0 2640 3.13 4501 397 2395 1709 \n", + "1 7187 3.15 12357 1282 3863 7212 \n", + "2 3494 2.92 6532 390 3458 2684 \n", + "3 4670 3.13 6697 328 4611 1758 \n", + "4 2564 2.96 4408 257 2635 1516 \n", + "\n", + " SHAPE \n", + "0 {'x': -147.82719115699996, 'y': 64.84830019400... \n", + "1 {'x': -147.72638162999996, 'y': 64.83809069700... \n", + "2 {'x': -114.31606412399998, 'y': 48.19780017900... \n", + "3 {'x': -116.93792709799999, 'y': 47.71555468000... \n", + "4 {'x': -117.27780913799995, 'y': 47.65654568400... \n", + "\n", + "[5 rows x 49 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sdf = pd.DataFrame.spatial.from_featureclass(\"path\\to\\your\\data\\census_example\\census.gdb\\cities\")\n", + "sdf.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving Spatially Enabled DataFrames\n", + "\n", + "The SEDF can export data to various data formats for use in other applications.\n", + "\n", + "\n", + "### Export Options\n", + "\n", + "- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n", + "- [Feature Collections](/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n", + "- [Feature Set](/python/api-reference/arcgis.features.toc.html#featureset)\n", + "- [GeoJSON](http://geojson.org/)\n", + "- [Feature Class](https://pro.arcgis.com/en/pro-app/latest/help/data/feature-classes/feature-classes.htm)\n", + "- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n", + "- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)\n", + "\n", + "### Export to Feature Class\n", + "\n", + "The SEDF allows for the export of whole datasets or partial datasets. \n", + "\n", + "#### Example: Export a whole dataset to a shapefile:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\output_examples\\\\census.shp'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sdf.spatial.to_featureclass(location=r\"c:\\output_examples\\census.shp\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> The ArcGIS API for Python installs on all `macOS` and `Linux` machines, as well as those `Windows` machines not using Python interpreters that have access to `ArcPy` will only be able to write out to shapefile format with the `to_featureclass` method. Writing to file geodatabases requires the `ArcPy` site-package." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example: Export dataset with a subset of columns and top 5 records to a shapefile:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PLACENS GEOID NAMELSAD CLASSFP\n", + "FUNCSTAT ALAND AWATER INTPTLAT\n" + ] + } + ], + "source": [ + "for a,b,c,d in zip(sdf.columns[::4], sdf.columns[1::4], sdf.columns[2::4], sdf.columns[3::4]):\n", + " print(\"{:<30}{:<30}{:<30}{:<}\".format(a,b,c,d))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/path/to/your/data/directory/sdf_head_output.shp'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "columns = ['NAME', 'ST', 'CAPITAL', 'STFIPS', 'POP2000', 'POP2007', 'SHAPE']\n", + "sdf[columns].head().spatial.to_featureclass(location=r\"/path/to/your/data/directory/sdf_head_output.shp\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Example: Export dataset to a featureclass in FileGDB:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "sdf.spatial.to_featureclass(location=r\"c:\\output_examples\\census.gdb\\cities\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Publish as a Feature Layer\n", + "\n", + "The SEDF allows for the publishing of datasets as feature layers. \n", + "\n", + "#### Example: Publishing as a feature layer:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + " census_cities\n", + " \n", + "
Feature Layer Collection by api_data_owner\n", + "
Last Modified: September 11, 2019\n", + "
0 comments, 0 views\n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lyr = sdf.spatial.to_featurelayer('census_cities', folder='census')\n", + "lyr" + ] + } + ], + "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.11.0" + }, + "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": true, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb b/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb index 27717eb582..9d097c6537 100644 --- a/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb +++ b/guide/16-introduction-to-data-engineering-in-python/part1_introduction_to_dataengineering.ipynb @@ -1 +1,1620 @@ -{"cells":[{"cell_type":"markdown","metadata":{"slideshow":{"slide_type":"slide"}},"source":["# Part 1 - Introduction to Data Engineering"]},{"cell_type":"markdown","metadata":{"toc":true},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","metadata":{},"source":["## Introduction"]},{"cell_type":"markdown","metadata":{},"source":["We live in the digital era of smart devices, Internet of things (IoT), and Mobile solutions, where data has become an essential aspect of any enterprise. It is now crucial to gather, process, and analyze large volumes of data as quickly and accurately as possible.\n","\n","\n","Python has become one of the most popular programming languages for data science, machine learning, and general software development in academia and industry. It boasts a relatively low learning curve, due to its simplicity, and a large ecosystem of data-oriented libraries that can speed up and simplify numerous tasks.\n","\n","\n","When you are getting started, the vastness of Python may seem overwhelming, but it is not as complex as it seems. Python has also developed a large and active data analysis and scientific computing community, making it one of the most popular choices for data science. Using Python within ArcGIS enables you to easily work with open-source python libraries as well as with ArcGIS Python libraries."]},{"cell_type":"markdown","metadata":{},"source":[""]},{"cell_type":"markdown","metadata":{},"source":["The image above shows some of the popular libraries in the Python ecosystem. This is by no means a full list, as the Python ecosystem is continuously evolving with numerous other libraries. Let's look at some of the popular libraries in the scientific Python ecosystem."]},{"cell_type":"markdown","metadata":{},"source":["## Libraries in Scientific Python Ecosystem"]},{"cell_type":"markdown","metadata":{},"source":["Data engineering is one of the most critical and foundational skills in any data scientist’s toolkit. A data scientist needs to get the data, clean and process it, visualize the results, and then model the data to analyze and interpret trends or patterns for making critical business decisions. The availability of various multi-purpose, ready-to-use libraries to perform these tasks makes Python a top choice for analysts, researchers, and scientists alike."]},{"cell_type":"markdown","metadata":{},"source":["### Data Processing\n","\n","Data Processing is a process of cleaning and transforming data. It enables users to explore and discover useful information for decision-making. Some of the key Python libraries used for Data Processing are:"]},{"cell_type":"markdown","metadata":{},"source":["\n","1. __[NumPy](https://numpy.org/)__, short for Numerical Python, has been designed specifically for mathematical operations. It is a perfect tool for scientific computing and performing basic and advanced array operations. It primarily supports multi-dimensional arrays and vectors for complex arithmetic operations. In addition to the data structures, the library has a rich set of functions to perform algebraic operations on the supported data types. NumPy arrays form the core of nearly the entire ecosystem of data science tools in Python and are more efficient for storing and manipulating data than the other built-in Python data structures. NumPy’s high level syntax makes it accessible and productive for programmers from any background or experience level.\n","\n","2. __[SciPy](https://scipy.org/)__ the Scientific Python library is a collection of numerical algorithms and domain-specific toolboxes. SciPy extends capabilities of NumPy by offering advanced modules for linear algebra, integration, optimization, and statistics. Together NumPy and SciPy form a reasonably complete and mature computational foundation for many scientific computing applications.\n","\n","3. __[Pandas](https://pandas.pydata.org/)__ provides high-level data structures and functions designed to make working with structured or tabular data fast, easy, and expressive. Pandas blends the high-performance, array-computing ideas of NumPy with the flexible data manipulation capabilities of relational databases (such as SQL). It is based on two main data structures: \"Series\" (one-dimensional such as a list of items) and \"DataFrames\" (two-dimensional, such as a table). Pandas provides sophisticated indexing functionality to reshape, slice and dice, perform aggregations, and select subsets of data. It provides capabilities for easily handling missing data, adding/deleting columns, imputing missing data, and creating plots on the go. Pandas is a must-have tool for data wrangling and manipulation."]},{"cell_type":"markdown","metadata":{},"source":["### Data Visualization\n","\n","An essential function of data analysis and exploration is to visualize data. Visualization makes it easier for the human brain to detect patterns, trends, and outliers in the data. Some of the key Python libraries used for Data Visualization are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Matplotlib](https://matplotlib.org/)__ is the most popular Python library for producing plots and other two-dimensional data visualizations. It can be used to generate various types of graphs such as histograms, pie-charts, or a simple bar chart. Matplotlib is highly flexible, offering the ability to customize almost every available feature. It provides an object oriented, MATLAB-like interface for users, and as such, has generally good integration with the rest of the ecosystem.\n","\n","2. __[Seaborn](http://seaborn.pydata.org/)__ is based on Matplotlib and serves as a useful tool for making attractive and informative statistical graphics in Python. It can be used for visualizing statistical models, summarizing data, and depicting the overall distributions. Seaborn works with the dataset as a whole and is much more intuitive than Matplotlib. It automates the creation of various plot types and creates beautiful graphics. Simply importing seaborn improves the visual aesthetics of Matplotlib plots.\n","\n","3. __[Bokeh](https://bokeh.org/)__ is a great tool for creating interactive and scalable visualizations inside browsers using JavaScript widgets. It is an advanced library that is fully independent of Matplotlib. Bokeh's emphasis on widgets allows users to represent the data in various formats such as graphs, plots, and labels. It empowers the user to generate elegant and concise graphics in the style of D3.js. Bokeh has the capability of high-performance interactivity over very large datasets."]},{"cell_type":"markdown","metadata":{},"source":["### Data Modeling\n","The process of modeling involves training a machine learning algorithm. The output from modeling is a trained model that can be used for inference and for making predictions. Some of the key Python libraries used for Data Modeling are:"]},{"cell_type":"markdown","metadata":{},"source":["1. __[Scikit-Learn](https://scikit-learn.org/stable/)__ has become the industry standard and is a premier general-purpose machine learning toolkit for Python programmers. Built on NumPy, SciPy and matplotlib, it features algorithms for various machine learning, statistical modeling and data mining tasks. Scikit-Learn contains submodules for tasks such as preprocessing, classification, regression, model selection, dimensionality reduction as well as clustering. The library comes with sample datasets for users to experiment.\n","\n","2. __[StatsModels](https://www.statsmodels.org/stable/)__ is a statistical analysis package that contains algorithms for classical statistics and econometrics. It provides a complement to scipy for statistical computations and is more focused on providing statistical inference, uncertainty estimates and p-values for parameters. StatsModels features submodules for various tasks such as Regression Analysis, Analysis of Variance (ANOVA), Time Series Analysis, Non-parametric methods and Visualization of model results."]},{"cell_type":"markdown","metadata":{},"source":["In this guide series, we will focus on two key libraries in the scientific Python ecosystem that are used for data processing, __NumPy__ and __Pandas__. Before we go into the details of these two topics, we will briefly discuss `Spatially Enabled DataFrame`."]},{"cell_type":"markdown","metadata":{},"source":["## Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["### What is a DataFrame?"]},{"cell_type":"markdown","metadata":{},"source":["A [`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html) represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or SQL table where each column has a column name for reference, and each row can be accessed by using row numbers. Column names and row numbers are known as column and row indexes.\n","\n","DataFrame is a fundamental __Pandas__ data structure in which each column can be of a different value type (numeric, string, boolean, etc.). A data set can be first read into a DataFrame, and then various operations (i.e. indexing, grouping, aggregation etc.) can be easily applied to it.\n","\n","Given some data, let's look at how a dataset can be read into a DataFrame to see what a DataFrame looks like."]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["# Data Creation\n","data = {'state':['CA','WA','CA','WA','CA','WA'],\n"," 'year':[2015,2015,2016,2016,2017,2017],\n"," 'population':[3.5,2.5,4.5,3.0,5.0,3.25]}"]},{"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","
stateyearpopulation
0CA20153.50
1WA20152.50
2CA20164.50
3WA20163.00
4CA20175.00
5WA20173.25
\n","
"],"text/plain":[" state year population\n","0 CA 2015 3.50\n","1 WA 2015 2.50\n","2 CA 2016 4.50\n","3 WA 2016 3.00\n","4 CA 2017 5.00\n","5 WA 2017 3.25"]},"execution_count":2,"metadata":{},"output_type":"execute_result"}],"source":["# Read data into a dataframe\n","import pandas as pd\n","\n","df = pd.DataFrame(data)\n","df"]},{"cell_type":"markdown","metadata":{},"source":["> You can see the tabular structure of data with indexed rows and columns. We will dive deeper into DataFrame in the `Introduction to Pandas` part of the guide series."]},{"cell_type":"markdown","metadata":{},"source":["### What is a Spatially Enabled DataFrame (SEDF)?"]},{"cell_type":"markdown","metadata":{},"source":["The [`Spatially Enabled DataFrame`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#spatialdataframe) (SEDF) inserts _\"spatial abilities\"_ into the popular [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html). This allows users to use intuitive Pandas operations on both the attribute and spatial columns. With SEDF, you can easily manipulate geometric and attribute data. SEDF is a capability that is added to the Pandas DataFrame structure, by the ArcGIS API for Python, to give it spatial abilities. \n","\n","SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values, which are fundamental to statistical and geographic manipulations.\n","\n","Let's quickly look at how data can be imported and exported using __Spatially Enabled DataFrame__. The details shown below are a high level overview and we will take a deeper dive into working with Spatially Enabled DataFrame in the later parts of this guide series."]},{"cell_type":"markdown","metadata":{},"source":["#### Reading Data into Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) can read data from many sources, including:\n","- [Shapefiles](https://doc.arcgis.com/en/arcgis-online/reference/shapefiles.htm)\n","- [Pandas DataFrames](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)\n","- [Feature classes](https://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [GeoJSON](https://geojson.org/)\n","- [Feature Layer](https://doc.arcgis.com/en/arcgis-online/manage-data/hosted-web-layers.htm)\n","\n","SEDF integrates with Esri's [`ArcPy` site-package](https://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as with the open source [pyshp](https://github.com/GeospatialPython/pyshp/), [shapely](https://github.com/Toblerity/Shapely) and [fiona](https://github.com/Toblerity/Fiona) packages. This means that SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. "]},{"cell_type":"markdown","metadata":{},"source":["#### Exporting Data from Spatially Enabled DataFrame"]},{"cell_type":"markdown","metadata":{},"source":["The SEDF can export data to various data formats for use in other applications. Export options are:\n","\n","- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n","- [Feature Collections](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n","- [Feature Set](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featureset)\n","- [GeoJSON](http://geojson.org/)\n","- [Feature Class](http://desktop.arcgis.com/en/arcmap/latest/manage-data/feature-classes/a-quick-tour-of-feature-classes.htm)\n","- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n","- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)"]},{"cell_type":"markdown","metadata":{},"source":["## Quick Example"]},{"cell_type":"markdown","metadata":{},"source":["Let's look at an example of utilizing `Spatially Enabled DataFrame` (SEDF) through the machine learning lifecycle. We will __focus on the usage of SEDF__ through the process and not so much on the intepretation or results of the model. The example shows how to:\n","- Read data from Pandas DataFrame into a SEDF.\n","- Use SEDF with other libraries in python ecosystem for modeling and predictions.\n","- Merge modeled results back into SEDF.\n","- Export data from a SEDF."]},{"cell_type":"markdown","metadata":{},"source":["We will use a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) from Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) to illustrate this example. __Note__ that the dataset used in this example has been curated for illustration purposes and does not reflect the complete dataset available at [CMS](https://www.cms.gov/) website.\n","\n","__Goal:__ Predict \"Total Number of Occupied Beds\" using other variables in the data. \n","\n","\n","\n","In this example, we will:\n","1. Read the data (with location attributes) into a SEDF and plot SEDF on a map.\n","2. Split SEDF into train and test sets.\n","3. Build a linear regression model on training data.\n","4. Get Predictions for the model using test data.\n","5. Add Predictions back to SEDF.\n","6. Plot SEDF with predicted data on a map.\n","7. Export SEDF."]},{"cell_type":"markdown","metadata":{},"source":["### Read the Data"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":["# Import Libraries\n","from IPython.display import display\n","\n","import pandas as pd\n","from arcgis.gis import GIS\n","import geopandas"]},{"cell_type":"code","execution_count":30,"metadata":{},"outputs":[],"source":["# Create a GIS Connection\n","gis = GIS(profile='your_online_profile')"]},{"cell_type":"code","execution_count":7,"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 "]},"execution_count":7,"metadata":{},"output_type":"execute_result"}],"source":["# Read the data\n","df = pd.read_csv('../data/sample_cms_data.csv')\n","\n","# Return the first 5 records\n","df.head()"]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 17 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Weekly Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total Admissions COVID-19 124 non-null int64 \n"," 5 Residents Weekly Confirmed COVID-19 124 non-null int64 \n"," 6 Residents Total Confirmed COVID-19 124 non-null int64 \n"," 7 Residents Weekly Suspected COVID-19 124 non-null int64 \n"," 8 Residents Total Suspected COVID-19 124 non-null int64 \n"," 9 Residents Weekly All Deaths 124 non-null int64 \n"," 10 Residents Total All Deaths 124 non-null int64 \n"," 11 Residents Weekly COVID-19 Deaths 124 non-null int64 \n"," 12 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 13 Number of All Beds 124 non-null int64 \n"," 14 Total Number of Occupied Beds 124 non-null int64 \n"," 15 LONGITUDE 124 non-null float64\n"," 16 LATITUDE 124 non-null float64\n","dtypes: float64(2), int64(12), object(3)\n","memory usage: 16.6+ KB\n"]}],"source":["# Get concise summary of the dataframe\n","df.info()"]},{"cell_type":"markdown","metadata":{},"source":["The dataset contains 124 records and 17 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n","- Name of the nursing home, its city and its state\n","- Details of resident Covid cases, deaths and number of beds\n","- Location of nursing home as Latitude and Longitude"]},{"cell_type":"markdown","metadata":{},"source":["#### Read into Spatially Enabled Dataframe\n","\n","Any Pandas DataFrame with location information (Latitude and Longitude) can be read into a Spatially Enabled DataFrame using the `from_xy()` method. "]},{"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","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n","0 3 5 \n","1 0 0 \n","2 0 0 \n","3 1 6 \n","4 2 19 \n","\n"," Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n","0 10 56 \n","1 0 0 \n","2 0 0 \n","3 0 141 \n","4 1 75 \n","\n"," Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n","0 0 10 \n","1 0 0 \n","2 0 0 \n","3 3 3 \n","4 0 0 \n","\n"," Residents Weekly All Deaths Residents Total All Deaths \\\n","0 6 15 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 43 \n","\n"," Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n","0 4 12 \n","1 0 0 \n","2 0 0 \n","3 0 0 \n","4 0 16 \n","\n"," Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 99 61 -87.792973 42.012012 \n","1 46 43 -85.197651 40.392722 \n","2 131 84 -88.982944 37.750143 \n","3 195 131 -87.986442 42.160843 \n","4 180 116 -87.726353 41.975505 \n","\n"," SHAPE \n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n","3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["sedf = pd.DataFrame.spatial.from_xy(df,'LONGITUDE','LATITUDE')\n","sedf.head()"]},{"cell_type":"markdown","metadata":{},"source":["`Spatially Enabled DataFrame` (SEDF) adds spatial abilities to the data. A `SHAPE` column gets added to the dataset as it is read into a SEDF. We can now plot this DataFrame on a map."]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":12,"metadata":{},"output_type":"execute_result"}],"source":["m1 = gis.map('IL, USA')\n","m1"]},{"cell_type":"markdown","metadata":{},"source":["> Points displayed on the map show the location of each nursing home in our data. Clicking on a point displays attribute information for that nursing home."]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["sedf.spatial.plot(m1)"]},{"cell_type":"markdown","metadata":{},"source":["### Split the Data\n","\n","We will split the `Spatially Enabled DataFrame` into training and test datasets and separate out the predictor and response variables in training and test data."]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[],"source":["# Split data into Train and Test Sets\n","from sklearn.model_selection import train_test_split\n","train_data, test_data = train_test_split(sedf, test_size=0.2, random_state=101)"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Shape of training data: (99, 18)\n","Shape of testing data: (25, 18)\n"]}],"source":["# Look at shape of training and test datasets\n","print(f'Shape of training data: {train_data.shape}')\n","print(f'Shape of testing data: {test_data.shape}')"]},{"cell_type":"markdown","metadata":{},"source":["__Response Variable__ \n","Any regression prediction task requires a variable of interest, a variable we would like to predict. This variable is called as a `Response` variable, also referred to as __y__ variable or __Dependent__ variable. Our __goal__ is to predict \"Total Number of Occupied Beds\", so our __y__ variable will be \"Total Number of Occupied Beds\". \n","\n","__Predictor Variables__ \n","All other variables the affect the Response variable are called `Predictor` variables. These predictor variables are also known as __x__ variables or __Independent__ variables. In this example, we will use only numerical variables related to Covid cases, deaths and number of beds as __x__ variables, and we will ignore provder details such as name, city, state or location information. \n","\n","Here, we use __Indexing__ to select specific columns from the DataFrame. We will talk about __Indexing__ in more detail in the later sections of this guide series."]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[],"source":["# Separate predictors and response variables for train and test data\n","train_x = train_data.iloc[:,3:-4]\n","train_y = train_data.iloc[:,-4]\n","test_x = test_data.iloc[:,3:-4]\n","test_y = test_data.iloc[:,-4]"]},{"cell_type":"markdown","metadata":{},"source":["### Build the Model\n","We will build and fit a Linear Regression model using the `LinearRegression()` method from the Scikit-learn library. Our goal is to predict the total number of occupied beds."]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[],"source":["# Build the model\n","from sklearn import linear_model\n","\n","# Create linear regression object\n","lr_model = linear_model.LinearRegression()"]},{"cell_type":"code","execution_count":17,"metadata":{},"outputs":[{"data":{"text/plain":["LinearRegression()"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["# Train the model using the training sets\n","lr_model.fit(train_x, train_y)"]},{"cell_type":"markdown","metadata":{},"source":["### Get Predictions\n","We will now use the model to make predictions on our test data."]},{"cell_type":"code","execution_count":18,"metadata":{},"outputs":[{"data":{"text/plain":["array([ 70.18799777, 79.35734213, 40.52267526, 112.32693137,\n"," 74.56730982, 92.59096106, 70.69189401, 29.84238321,\n"," 108.09537913, 81.10718742, 59.90388811, 67.44325594,\n"," 70.62977058, 96.44880679, 85.19537597, 39.10578923,\n"," 63.88519971, 76.36549693, 38.94543793, 41.96507956,\n"," 50.41997091, 66.00665849, 33.30750881, 75.17989671,\n"," 63.09585712])"]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["# Get predictions\n","bed_predictions = lr_model.predict(test_x)\n","bed_predictions"]},{"cell_type":"markdown","metadata":{},"source":["#### Add Predictions to Test Data\n","\n","Here, we add predictions back to the test data as a new column, `Predicted_Occupied_Beds`. Since the test dataset is a __Spatially Enabled DataFrame__, it continues to provide spatial abilities to our data."]},{"cell_type":"code","execution_count":19,"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","
Predicted_Occupied_Beds
7470.187998
12379.357342
7840.522675
41112.326931
7974.567310
\n","
"],"text/plain":[" Predicted_Occupied_Beds\n","74 70.187998\n","123 79.357342\n","78 40.522675\n","41 112.326931\n","79 74.567310"]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["# Convert predictions into a dataframe\n","pred_available_beds = pd.DataFrame(bed_predictions, index = test_data.index, \n"," columns=['Predicted_Occupied_Beds'])\n","pred_available_beds.head()"]},{"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"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEPredicted_Occupied_Beds
74GOLDEN YEARS HOMESTEADFORT WAYNEIN0500000000110104-85.03665141.107479{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....70.187998
123WATERS OF DILLSBORO-ROSS MANOR, THEDILLSBOROIN040000070012375-85.05664939.018794{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....79.357342
78TOWNE HOUSE RETIREMENT COMMUNITYFORT WAYNEIN00111101005846-85.11195241.133477{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....40.522675
41UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITYINDIANAPOLISIN0000000800174133-86.13544239.635530{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....112.326931
79SHARON HEALTH CARE PINESPEORIAIL000000010011696-89.64362940.731764{\"spatialReference\": {\"wkid\": 4326}, \"x\": -89....74.567310
\n","
"],"text/plain":[" Provider Name Provider City \\\n","74 GOLDEN YEARS HOMESTEAD FORT WAYNE \n","123 WATERS OF DILLSBORO-ROSS MANOR, THE DILLSBORO \n","78 TOWNE HOUSE RETIREMENT COMMUNITY FORT WAYNE \n","41 UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITY INDIANAPOLIS \n","79 SHARON HEALTH CARE PINES PEORIA \n","\n"," Provider State Residents Weekly Admissions COVID-19 \\\n","74 IN 0 \n","123 IN 0 \n","78 IN 0 \n","41 IN 0 \n","79 IL 0 \n","\n"," Residents Total Admissions COVID-19 Residents Weekly Confirmed COVID-19 \\\n","74 5 0 \n","123 4 0 \n","78 0 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Confirmed COVID-19 Residents Weekly Suspected COVID-19 \\\n","74 0 0 \n","123 0 0 \n","78 1 1 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total Suspected COVID-19 Residents Weekly All Deaths \\\n","74 0 0 \n","123 0 0 \n","78 1 0 \n","41 0 0 \n","79 0 0 \n","\n"," Residents Total All Deaths Residents Weekly COVID-19 Deaths \\\n","74 0 0 \n","123 7 0 \n","78 1 0 \n","41 8 0 \n","79 1 0 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","74 0 110 \n","123 0 123 \n","78 0 58 \n","41 0 174 \n","79 0 116 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","74 104 -85.036651 41.107479 \n","123 75 -85.056649 39.018794 \n","78 46 -85.111952 41.133477 \n","41 133 -86.135442 39.635530 \n","79 96 -89.643629 40.731764 \n","\n"," SHAPE \\\n","74 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","123 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","78 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","41 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","79 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -89.... \n","\n"," Predicted_Occupied_Beds \n","74 70.187998 \n","123 79.357342 \n","78 40.522675 \n","41 112.326931 \n","79 74.567310 "]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["# Add predictions back to test dataset\n","test_data = pd.concat([test_data, pred_available_beds], axis=1)\n","test_data.head()"]},{"cell_type":"markdown","metadata":{},"source":["#### Plot on a Map\n","\n","Here, we plot `test_data` on a map. The map shows the location of each nursing home in the test dataset, along with the attribute information. We can see model prediction results added as `Predicted_Occupied_Beds` column, along with the actual number of occupied beds, `Total_Number_of_Occupied_Beds` , in the test data."]},{"cell_type":"code","execution_count":23,"metadata":{},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["m2 = gis.map('IL, USA')\n","m2"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"data":{"text/plain":["True"]},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"source":["test_data.spatial.plot(m2)"]},{"cell_type":"markdown","metadata":{},"source":["### Export Data\n","\n","We will now export the Spatially Enabled DataFrame `test_data` to a feature layer. The `to_featurelayer()` method allows us to publish spatially enabled DataFrame as feature layers to the portal."]},{"cell_type":"code","execution_count":31,"metadata":{},"outputs":[{"data":{"text/html":["
\n","
\n"," \n"," \n"," \n","
\n","\n","
\n"," sedf_predictions\n"," \n","
Feature Layer Collection by arcgis_python\n","
Last Modified: November 25, 2020\n","
0 comments, 0 views\n","
\n","
\n"," "],"text/plain":[""]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["lyr = test_data.spatial.to_featurelayer('sedf_predictions')\n","lyr"]},{"cell_type":"markdown","metadata":{},"source":["## Conclusion"]},{"cell_type":"markdown","metadata":{},"source":["There are numerous libraries in the scientific python ecosystem. In this part of the guide series, we briefly discussed some of the key libraries used for data processing, visualization, and modeling. We introduced the concept of the __Spatially Enabled DataFrame__ (SEDF) and how it adds \"spatial\" abilities to the data. You have also seen an end-to-end example of using SEDF through the machine learning lifecycle, starting from reading data into SEDF, to exporting a SEDF.\n","\n","\n","In the next part of this guide series, you will learn more about [NumPy](https://numpy.org/) in the Introduction to NumPy section.."]},{"cell_type":"markdown","metadata":{},"source":["## References"]},{"cell_type":"markdown","metadata":{},"source":["[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython (2nd. ed.). O'Reilly Media, Inc. \n"," \n","[2] Jake VanderPlas. 2016. Python Data Science Handbook: Essential Tools for Working with Data (1st. ed.). O'Reilly Media, Inc."]}],"metadata":{"anaconda-cloud":{},"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.3"},"livereveal":{"scroll":true},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":true,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"calc(100% - 180px)","left":"10px","top":"150px","width":"244px"},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":2} +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Part 1 - Introduction to Data Engineering" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We live in the digital era of smart devices, Internet of things (IoT), and Mobile solutions, where data has become an essential aspect of any enterprise. It is now crucial to gather, process, and analyze large volumes of data as quickly and accurately as possible.\n", + "\n", + "\n", + "Python has become one of the most popular programming languages for data science, machine learning, and general software development in academia and industry. It boasts a relatively low learning curve, due to its simplicity, and a large ecosystem of data-oriented libraries that can speed up and simplify numerous tasks.\n", + "\n", + "\n", + "When you are getting started, the vastness of Python may seem overwhelming, but it is not as complex as it seems. Python has also developed a large and active data analysis and scientific computing community, making it one of the most popular choices for data science. Using Python within ArcGIS enables you to easily work with open-source python libraries as well as with ArcGIS Python libraries." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The image above shows some of the popular libraries in the Python ecosystem. This is by no means a full list, as the Python ecosystem is continuously evolving with numerous other libraries. Let's look at some of the popular libraries in the scientific Python ecosystem." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Libraries in Scientific Python Ecosystem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data engineering is one of the most critical and foundational skills in any data scientist’s toolkit. A data scientist needs to get the data, clean and process it, visualize the results, and then model the data to analyze and interpret trends or patterns for making critical business decisions. The availability of various multi-purpose, ready-to-use libraries to perform these tasks makes Python a top choice for analysts, researchers, and scientists alike." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data Processing\n", + "\n", + "Data Processing is a process of cleaning and transforming data. It enables users to explore and discover useful information for decision-making. Some of the key Python libraries used for Data Processing are:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "1. __[NumPy](https://numpy.org/)__, short for Numerical Python, has been designed specifically for mathematical operations. It is a perfect tool for scientific computing and performing basic and advanced array operations. It primarily supports multi-dimensional arrays and vectors for complex arithmetic operations. In addition to the data structures, the library has a rich set of functions to perform algebraic operations on the supported data types. NumPy arrays form the core of nearly the entire ecosystem of data science tools in Python and are more efficient for storing and manipulating data than the other built-in Python data structures. NumPy’s high level syntax makes it accessible and productive for programmers from any background or experience level.\n", + "\n", + "2. __[SciPy](https://scipy.org/)__ the Scientific Python library is a collection of numerical algorithms and domain-specific toolboxes. SciPy extends capabilities of NumPy by offering advanced modules for linear algebra, integration, optimization, and statistics. Together NumPy and SciPy form a reasonably complete and mature computational foundation for many scientific computing applications.\n", + "\n", + "3. __[Pandas](https://pandas.pydata.org/)__ provides high-level data structures and functions designed to make working with structured or tabular data fast, easy, and expressive. Pandas blends the high-performance, array-computing ideas of NumPy with the flexible data manipulation capabilities of relational databases (such as SQL). It is based on two main data structures: \"Series\" (one-dimensional such as a list of items) and \"DataFrames\" (two-dimensional, such as a table). Pandas provides sophisticated indexing functionality to reshape, slice and dice, perform aggregations, and select subsets of data. It provides capabilities for easily handling missing data, adding/deleting columns, imputing missing data, and creating plots on the go. Pandas is a must-have tool for data wrangling and manipulation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data Visualization\n", + "\n", + "An essential function of data analysis and exploration is to visualize data. Visualization makes it easier for the human brain to detect patterns, trends, and outliers in the data. Some of the key Python libraries used for Data Visualization are:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. __[Matplotlib](https://matplotlib.org/)__ is the most popular Python library for producing plots and other two-dimensional data visualizations. It can be used to generate various types of graphs such as histograms, pie-charts, or a simple bar chart. Matplotlib is highly flexible, offering the ability to customize almost every available feature. It provides an object oriented, MATLAB-like interface for users, and as such, has generally good integration with the rest of the ecosystem.\n", + "\n", + "2. __[Seaborn](http://seaborn.pydata.org/)__ is based on Matplotlib and serves as a useful tool for making attractive and informative statistical graphics in Python. It can be used for visualizing statistical models, summarizing data, and depicting the overall distributions. Seaborn works with the dataset as a whole and is much more intuitive than Matplotlib. It automates the creation of various plot types and creates beautiful graphics. Simply importing seaborn improves the visual aesthetics of Matplotlib plots.\n", + "\n", + "3. __[Bokeh](https://bokeh.org/)__ is a great tool for creating interactive and scalable visualizations inside browsers using JavaScript widgets. It is an advanced library that is fully independent of Matplotlib. Bokeh's emphasis on widgets allows users to represent the data in various formats such as graphs, plots, and labels. It empowers the user to generate elegant and concise graphics in the style of D3.js. Bokeh has the capability of high-performance interactivity over very large datasets." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data Modeling\n", + "The process of modeling involves training a machine learning algorithm. The output from modeling is a trained model that can be used for inference and for making predictions. Some of the key Python libraries used for Data Modeling are:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. __[Scikit-Learn](https://scikit-learn.org/stable/)__ has become the industry standard and is a premier general-purpose machine learning toolkit for Python programmers. Built on NumPy, SciPy and matplotlib, it features algorithms for various machine learning, statistical modeling and data mining tasks. Scikit-Learn contains submodules for tasks such as preprocessing, classification, regression, model selection, dimensionality reduction as well as clustering. The library comes with sample datasets for users to experiment.\n", + "\n", + "2. __[StatsModels](https://www.statsmodels.org/stable/)__ is a statistical analysis package that contains algorithms for classical statistics and econometrics. It provides a complement to scipy for statistical computations and is more focused on providing statistical inference, uncertainty estimates and p-values for parameters. StatsModels features submodules for various tasks such as Regression Analysis, Analysis of Variance (ANOVA), Time Series Analysis, Non-parametric methods and Visualization of model results." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this guide series, we will focus on two key libraries in the scientific Python ecosystem that are used for data processing, __NumPy__ and __Pandas__. Before we go into the details of these two topics, we will briefly discuss `Spatially Enabled DataFrame`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Spatially Enabled DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What is a DataFrame?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A [`DataFrame`](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html) represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or SQL table where each column has a column name for reference, and each row can be accessed by using row numbers. Column names and row numbers are known as column and row indexes.\n", + "\n", + "DataFrame is a fundamental __Pandas__ data structure in which each column can be of a different value type (numeric, string, boolean, etc.). A data set can be first read into a DataFrame, and then various operations (i.e. indexing, grouping, aggregation etc.) can be easily applied to it.\n", + "\n", + "Given some data, let's look at how a dataset can be read into a DataFrame to see what a DataFrame looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Data Creation\n", + "data = {'state':['CA','WA','CA','WA','CA','WA'],\n", + " 'year':[2015,2015,2016,2016,2017,2017],\n", + " 'population':[3.5,2.5,4.5,3.0,5.0,3.25]}" + ] + }, + { + "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", + "
stateyearpopulation
0CA20153.50
1WA20152.50
2CA20164.50
3WA20163.00
4CA20175.00
5WA20173.25
\n", + "
" + ], + "text/plain": [ + " state year population\n", + "0 CA 2015 3.50\n", + "1 WA 2015 2.50\n", + "2 CA 2016 4.50\n", + "3 WA 2016 3.00\n", + "4 CA 2017 5.00\n", + "5 WA 2017 3.25" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read data into a dataframe\n", + "import pandas as pd\n", + "\n", + "df = pd.DataFrame(data)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> You can see the tabular structure of data with indexed rows and columns. We will dive deeper into DataFrame in the `Introduction to Pandas` part of the guide series." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What is a Spatially Enabled DataFrame (SEDF)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [`Spatially Enabled DataFrame`](/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor) (SEDF) inserts _\"spatial abilities\"_ into the popular [Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe). This allows users to use intuitive Pandas operations on both the attribute and spatial columns. With SEDF, you can easily manipulate geometric and attribute data. SEDF is a capability that is added to the Pandas DataFrame structure, by the ArcGIS API for Python, to give it spatial abilities. \n", + "\n", + "SEDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspecting of subsets of values, which are fundamental to statistical and geographic manipulations.\n", + "\n", + "Let's quickly look at how data can be imported and exported using __Spatially Enabled DataFrame__. The details shown below are a high level overview and we will take a deeper dive into working with Spatially Enabled DataFrame in the later parts of this guide series." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Reading Data into Spatially Enabled DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Spatially Enabled DataFrame` (SEDF) can read data from many sources, including:\n", + "- [Shapefiles](https://doc.arcgis.com/en/arcgis-online/reference/shapefiles.htm)\n", + "- [Pandas DataFrames](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)\n", + "- [Feature classes](https://pro.arcgis.com/en/pro-app/latest/help/data/feature-classes/feature-classes.htm)\n", + "- [GeoJSON](https://geojson.org/)\n", + "- [Feature Layer](https://doc.arcgis.com/en/arcgis-online/manage-data/hosted-web-layers.htm)\n", + "\n", + "SEDF integrates with Esri's [`ArcPy` site-package](https://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as with the open source [pyshp](https://github.com/GeospatialPython/pyshp/), [shapely](https://github.com/Toblerity/Shapely) and [fiona](https://github.com/Toblerity/Fiona) packages. This means that SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Exporting Data from Spatially Enabled DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The SEDF can export data to various data formats for use in other applications. Export options are:\n", + "\n", + "- [Feature Layers](https://doc.arcgis.com/en/arcgis-online/share-maps/hosted-web-layers.htm)\n", + "- [Feature Collections](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featurelayercollection)\n", + "- [Feature Set](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#featureset)\n", + "- [GeoJSON](http://geojson.org/)\n", + "- [Feature Class](https://pro.arcgis.com/en/pro-app/latest/help/data/feature-classes/feature-classes.htm)\n", + "- [Pickle](https://pythontips.com/2013/08/02/what-is-pickle-in-python/)\n", + "- [HDF](https://support.hdfgroup.org/HDF5/Tutor/HDF5Intro.pdf)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quick Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at an example of utilizing `Spatially Enabled DataFrame` (SEDF) through the machine learning lifecycle. We will __focus on the usage of SEDF__ through the process and not so much on the intepretation or results of the model. The example shows how to:\n", + "- Read data from Pandas DataFrame into a SEDF.\n", + "- Use SEDF with other libraries in python ecosystem for modeling and predictions.\n", + "- Merge modeled results back into SEDF.\n", + "- Export data from a SEDF." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) from Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) to illustrate this example. __Note__ that the dataset used in this example has been curated for illustration purposes and does not reflect the complete dataset available at [CMS](https://www.cms.gov/) website.\n", + "\n", + "__Goal:__ Predict \"Total Number of Occupied Beds\" using other variables in the data. \n", + "\n", + "\n", + "\n", + "In this example, we will:\n", + "1. Read the data (with location attributes) into a SEDF and plot SEDF on a map.\n", + "2. Split SEDF into train and test sets.\n", + "3. Build a linear regression model on training data.\n", + "4. Get Predictions for the model using test data.\n", + "5. Add Predictions back to SEDF.\n", + "6. Plot SEDF with predicted data on a map.\n", + "7. Export SEDF." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Read the Data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Import Libraries\n", + "from IPython.display import display\n", + "\n", + "import pandas as pd\n", + "from arcgis.gis import GIS\n", + "import geopandas" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a GIS Connection\n", + "gis = GIS(profile='your_online_profile')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + "
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City Provider State \\\n", + "0 GROSSE POINTE MANOR NILES IL \n", + "1 MILLER'S MERRY MANOR DUNKIRK IN \n", + "2 PARKWAY MANOR MARION IL \n", + "3 AVANTARA LONG GROVE LONG GROVE IL \n", + "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", + "\n", + " Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n", + "0 3 5 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 1 6 \n", + "4 2 19 \n", + "\n", + " Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n", + "0 10 56 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 141 \n", + "4 1 75 \n", + "\n", + " Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n", + "0 0 10 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 3 3 \n", + "4 0 0 \n", + "\n", + " Residents Weekly All Deaths Residents Total All Deaths \\\n", + "0 6 15 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 43 \n", + "\n", + " Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n", + "0 4 12 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 16 \n", + "\n", + " Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \n", + "0 99 61 -87.792973 42.012012 \n", + "1 46 43 -85.197651 40.392722 \n", + "2 131 84 -88.982944 37.750143 \n", + "3 195 131 -87.986442 42.160843 \n", + "4 180 116 -87.726353 41.975505 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the data\n", + "df = pd.read_csv('../data/sample_cms_data.csv')\n", + "\n", + "# Return the first 5 records\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 124 entries, 0 to 123\n", + "Data columns (total 17 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Provider Name 124 non-null object \n", + " 1 Provider City 124 non-null object \n", + " 2 Provider State 124 non-null object \n", + " 3 Residents Weekly Admissions COVID-19 124 non-null int64 \n", + " 4 Residents Total Admissions COVID-19 124 non-null int64 \n", + " 5 Residents Weekly Confirmed COVID-19 124 non-null int64 \n", + " 6 Residents Total Confirmed COVID-19 124 non-null int64 \n", + " 7 Residents Weekly Suspected COVID-19 124 non-null int64 \n", + " 8 Residents Total Suspected COVID-19 124 non-null int64 \n", + " 9 Residents Weekly All Deaths 124 non-null int64 \n", + " 10 Residents Total All Deaths 124 non-null int64 \n", + " 11 Residents Weekly COVID-19 Deaths 124 non-null int64 \n", + " 12 Residents Total COVID-19 Deaths 124 non-null int64 \n", + " 13 Number of All Beds 124 non-null int64 \n", + " 14 Total Number of Occupied Beds 124 non-null int64 \n", + " 15 LONGITUDE 124 non-null float64\n", + " 16 LATITUDE 124 non-null float64\n", + "dtypes: float64(2), int64(12), object(3)\n", + "memory usage: 16.6+ KB\n" + ] + } + ], + "source": [ + "# Get concise summary of the dataframe\n", + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dataset contains 124 records and 17 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n", + "- Name of the nursing home, its city and its state\n", + "- Details of resident Covid cases, deaths and number of beds\n", + "- Location of nursing home as Latitude and Longitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Read into Spatially Enabled Dataframe\n", + "\n", + "Any Pandas DataFrame with location information (Latitude and Longitude) can be read into a Spatially Enabled DataFrame using the `from_xy()` method. " + ] + }, + { + "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", + "
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL3510560106154129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN00000000004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL000000000013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL160141330000195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL21917500043016180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City Provider State \\\n", + "0 GROSSE POINTE MANOR NILES IL \n", + "1 MILLER'S MERRY MANOR DUNKIRK IN \n", + "2 PARKWAY MANOR MARION IL \n", + "3 AVANTARA LONG GROVE LONG GROVE IL \n", + "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", + "\n", + " Residents Weekly Admissions COVID-19 Residents Total Admissions COVID-19 \\\n", + "0 3 5 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 1 6 \n", + "4 2 19 \n", + "\n", + " Residents Weekly Confirmed COVID-19 Residents Total Confirmed COVID-19 \\\n", + "0 10 56 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 141 \n", + "4 1 75 \n", + "\n", + " Residents Weekly Suspected COVID-19 Residents Total Suspected COVID-19 \\\n", + "0 0 10 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 3 3 \n", + "4 0 0 \n", + "\n", + " Residents Weekly All Deaths Residents Total All Deaths \\\n", + "0 6 15 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 43 \n", + "\n", + " Residents Weekly COVID-19 Deaths Residents Total COVID-19 Deaths \\\n", + "0 4 12 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 0 0 \n", + "4 0 16 \n", + "\n", + " Number of All Beds Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", + "0 99 61 -87.792973 42.012012 \n", + "1 46 43 -85.197651 40.392722 \n", + "2 131 84 -88.982944 37.750143 \n", + "3 195 131 -87.986442 42.160843 \n", + "4 180 116 -87.726353 41.975505 \n", + "\n", + " SHAPE \n", + "0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n", + "3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sedf = pd.DataFrame.spatial.from_xy(df,'LONGITUDE','LATITUDE')\n", + "sedf.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Spatially Enabled DataFrame` (SEDF) adds spatial abilities to the data. A `SHAPE` column gets added to the dataset as it is read into a SEDF. We can now plot this DataFrame on a map." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plot on a Map" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m1 = gis.map('IL, USA')\n", + "m1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Points displayed on the map show the location of each nursing home in our data. Clicking on a point displays attribute information for that nursing home." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sedf.spatial.plot(m1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Split the Data\n", + "\n", + "We will split the `Spatially Enabled DataFrame` into training and test datasets and separate out the predictor and response variables in training and test data." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Split data into Train and Test Sets\n", + "from sklearn.model_selection import train_test_split\n", + "train_data, test_data = train_test_split(sedf, test_size=0.2, random_state=101)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of training data: (99, 18)\n", + "Shape of testing data: (25, 18)\n" + ] + } + ], + "source": [ + "# Look at shape of training and test datasets\n", + "print(f'Shape of training data: {train_data.shape}')\n", + "print(f'Shape of testing data: {test_data.shape}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Response Variable__ \n", + "Any regression prediction task requires a variable of interest, a variable we would like to predict. This variable is called as a `Response` variable, also referred to as __y__ variable or __Dependent__ variable. Our __goal__ is to predict \"Total Number of Occupied Beds\", so our __y__ variable will be \"Total Number of Occupied Beds\". \n", + "\n", + "__Predictor Variables__ \n", + "All other variables the affect the Response variable are called `Predictor` variables. These predictor variables are also known as __x__ variables or __Independent__ variables. In this example, we will use only numerical variables related to Covid cases, deaths and number of beds as __x__ variables, and we will ignore provder details such as name, city, state or location information. \n", + "\n", + "Here, we use __Indexing__ to select specific columns from the DataFrame. We will talk about __Indexing__ in more detail in the later sections of this guide series." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Separate predictors and response variables for train and test data\n", + "train_x = train_data.iloc[:,3:-4]\n", + "train_y = train_data.iloc[:,-4]\n", + "test_x = test_data.iloc[:,3:-4]\n", + "test_y = test_data.iloc[:,-4]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Build the Model\n", + "We will build and fit a Linear Regression model using the `LinearRegression()` method from the Scikit-learn library. Our goal is to predict the total number of occupied beds." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Build the model\n", + "from sklearn import linear_model\n", + "\n", + "# Create linear regression object\n", + "lr_model = linear_model.LinearRegression()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Train the model using the training sets\n", + "lr_model.fit(train_x, train_y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get Predictions\n", + "We will now use the model to make predictions on our test data." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 70.18799777, 79.35734213, 40.52267526, 112.32693137,\n", + " 74.56730982, 92.59096106, 70.69189401, 29.84238321,\n", + " 108.09537913, 81.10718742, 59.90388811, 67.44325594,\n", + " 70.62977058, 96.44880679, 85.19537597, 39.10578923,\n", + " 63.88519971, 76.36549693, 38.94543793, 41.96507956,\n", + " 50.41997091, 66.00665849, 33.30750881, 75.17989671,\n", + " 63.09585712])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get predictions\n", + "bed_predictions = lr_model.predict(test_x)\n", + "bed_predictions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Add Predictions to Test Data\n", + "\n", + "Here, we add predictions back to the test data as a new column, `Predicted_Occupied_Beds`. Since the test dataset is a __Spatially Enabled DataFrame__, it continues to provide spatial abilities to our data." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "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", + "
Predicted_Occupied_Beds
7470.187998
12379.357342
7840.522675
41112.326931
7974.567310
\n", + "
" + ], + "text/plain": [ + " Predicted_Occupied_Beds\n", + "74 70.187998\n", + "123 79.357342\n", + "78 40.522675\n", + "41 112.326931\n", + "79 74.567310" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert predictions into a dataframe\n", + "pred_available_beds = pd.DataFrame(bed_predictions, index = test_data.index, \n", + " columns=['Predicted_Occupied_Beds'])\n", + "pred_available_beds.head()" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Provider NameProvider CityProvider StateResidents Weekly Admissions COVID-19Residents Total Admissions COVID-19Residents Weekly Confirmed COVID-19Residents Total Confirmed COVID-19Residents Weekly Suspected COVID-19Residents Total Suspected COVID-19Residents Weekly All DeathsResidents Total All DeathsResidents Weekly COVID-19 DeathsResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEPredicted_Occupied_Beds
74GOLDEN YEARS HOMESTEADFORT WAYNEIN0500000000110104-85.03665141.107479{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....70.187998
123WATERS OF DILLSBORO-ROSS MANOR, THEDILLSBOROIN040000070012375-85.05664939.018794{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....79.357342
78TOWNE HOUSE RETIREMENT COMMUNITYFORT WAYNEIN00111101005846-85.11195241.133477{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....40.522675
41UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITYINDIANAPOLISIN0000000800174133-86.13544239.635530{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....112.326931
79SHARON HEALTH CARE PINESPEORIAIL000000010011696-89.64362940.731764{\"spatialReference\": {\"wkid\": 4326}, \"x\": -89....74.567310
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City \\\n", + "74 GOLDEN YEARS HOMESTEAD FORT WAYNE \n", + "123 WATERS OF DILLSBORO-ROSS MANOR, THE DILLSBORO \n", + "78 TOWNE HOUSE RETIREMENT COMMUNITY FORT WAYNE \n", + "41 UNIVERSITY HEIGHTS HEALTH AND LIVING COMMUNITY INDIANAPOLIS \n", + "79 SHARON HEALTH CARE PINES PEORIA \n", + "\n", + " Provider State Residents Weekly Admissions COVID-19 \\\n", + "74 IN 0 \n", + "123 IN 0 \n", + "78 IN 0 \n", + "41 IN 0 \n", + "79 IL 0 \n", + "\n", + " Residents Total Admissions COVID-19 Residents Weekly Confirmed COVID-19 \\\n", + "74 5 0 \n", + "123 4 0 \n", + "78 0 1 \n", + "41 0 0 \n", + "79 0 0 \n", + "\n", + " Residents Total Confirmed COVID-19 Residents Weekly Suspected COVID-19 \\\n", + "74 0 0 \n", + "123 0 0 \n", + "78 1 1 \n", + "41 0 0 \n", + "79 0 0 \n", + "\n", + " Residents Total Suspected COVID-19 Residents Weekly All Deaths \\\n", + "74 0 0 \n", + "123 0 0 \n", + "78 1 0 \n", + "41 0 0 \n", + "79 0 0 \n", + "\n", + " Residents Total All Deaths Residents Weekly COVID-19 Deaths \\\n", + "74 0 0 \n", + "123 7 0 \n", + "78 1 0 \n", + "41 8 0 \n", + "79 1 0 \n", + "\n", + " Residents Total COVID-19 Deaths Number of All Beds \\\n", + "74 0 110 \n", + "123 0 123 \n", + "78 0 58 \n", + "41 0 174 \n", + "79 0 116 \n", + "\n", + " Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", + "74 104 -85.036651 41.107479 \n", + "123 75 -85.056649 39.018794 \n", + "78 46 -85.111952 41.133477 \n", + "41 133 -86.135442 39.635530 \n", + "79 96 -89.643629 40.731764 \n", + "\n", + " SHAPE \\\n", + "74 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "123 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "78 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "41 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n", + "79 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -89.... \n", + "\n", + " Predicted_Occupied_Beds \n", + "74 70.187998 \n", + "123 79.357342 \n", + "78 40.522675 \n", + "41 112.326931 \n", + "79 74.567310 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Add predictions back to test dataset\n", + "test_data = pd.concat([test_data, pred_available_beds], axis=1)\n", + "test_data.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plot on a Map\n", + "\n", + "Here, we plot `test_data` on a map. The map shows the location of each nursing home in the test dataset, along with the attribute information. We can see model prediction results added as `Predicted_Occupied_Beds` column, along with the actual number of occupied beds, `Total_Number_of_Occupied_Beds` , in the test data." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m2 = gis.map('IL, USA')\n", + "m2" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_data.spatial.plot(m2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Export Data\n", + "\n", + "We will now export the Spatially Enabled DataFrame `test_data` to a feature layer. The `to_featurelayer()` method allows us to publish spatially enabled DataFrame as feature layers to the portal." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + " sedf_predictions\n", + " \n", + "
Feature Layer Collection by arcgis_python\n", + "
Last Modified: November 25, 2020\n", + "
0 comments, 0 views\n", + "
\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lyr = test_data.spatial.to_featurelayer('sedf_predictions')\n", + "lyr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are numerous libraries in the scientific python ecosystem. In this part of the guide series, we briefly discussed some of the key libraries used for data processing, visualization, and modeling. We introduced the concept of the __Spatially Enabled DataFrame__ (SEDF) and how it adds \"spatial\" abilities to the data. You have also seen an end-to-end example of using SEDF through the machine learning lifecycle, starting from reading data into SEDF, to exporting a SEDF.\n", + "\n", + "\n", + "In the next part of this guide series, you will learn more about [NumPy](https://numpy.org/) in the Introduction to NumPy section.." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[1] Wes McKinney. 2017. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython (2nd. ed.). O'Reilly Media, Inc. \n", + " \n", + "[2] Jake VanderPlas. 2016. Python Data Science Handbook: Essential Tools for Working with Data (1st. ed.). O'Reilly Media, Inc." + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "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.11.0" + }, + "livereveal": { + "scroll": true + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": true, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": true, + "toc_position": { + "height": "calc(100% - 180px)", + "left": "10px", + "top": "150px", + "width": "244px" + }, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From cca92d3412e582a23b80c8db1b6de1725d49a117 Mon Sep 17 00:00:00 2001 From: John Yaist Date: Fri, 13 Sep 2024 12:36:03 -0700 Subject: [PATCH 4/4] update links to relative formatting --- .../part1_introduction_to_sedf.ipynb | 1565 ++++++++++++++++- 1 file changed, 1564 insertions(+), 1 deletion(-) diff --git a/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb b/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb index 5257a3f5a0..bbea13fd85 100644 --- a/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb +++ b/guide/05-working-with-the-spatially-enabled-dataframe/part1_introduction_to_sedf.ipynb @@ -1 +1,1564 @@ -{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Part-1 Introduction to Spatially enabled DataFrame"]},{"cell_type":"markdown","metadata":{"toc":true},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","metadata":{},"source":["## Introduction"]},{"cell_type":"markdown","metadata":{},"source":["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure that represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or a SQL table where each column has a column name for reference and each row can be accessed by using row numbers. \n","\n","The [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) adds _\"spatial abilities\"_ into the popular Pandas DataFrame by inserting a custom namespace called `spatial`. This namespace (also known as accessor) allows us to use Pandas operations on both the non-spatial and spatial columns. With SeDF, you can now easily manipulate geometric and other attribute data.\n","\n","The SeDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspection of subsets of values which are fundamental to statistical and geographic manipulations."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the Introduction to Data Engineering guide series and then come here.\n","
"]},{"cell_type":"markdown","metadata":{},"source":["### What does \"adding spatial abilities\" mean?"]},{"attachments":{"image-2.png":{"image/png":"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RiHvWWl2Rl8vyquFrWwIyWXLltnvf/9769y5s58LdiFAY2JiXLQtX768gACjnRMnTvT2r1mzpsC1kF9H/RCIA+KAOCAOiAPigDggDogDZyYHToowQ5RlZ2fbmDFjXEy1adPGPv30Uxs5cmS+YEK8ILD69OljDRo0sO7du7s3CXECmRA77HjD+vXr52Jm+PDh7hUjHwJny5YtNmHCBPvFL37hZaxatcrTEfZYlvlbqKL33nvPrrnmGps3b561aNHCBg4c6CGGIT92bt261T7++GOvo0ePHpaUlOThhsHO1NRUb1/jxo2tdevW7tXCvnBTUAa2jhgxwoYNG+aC8Pzzzy8gzKiP9l577bXuFYwWdwFTvG2PPvpofv2hDh3PzBtQ/aZ+EwfEAXFAHBAHxAFxQByAAydFmCGu6tevb7/61a/szjvvdLHxpS99yf75z3+6YEN0rFy50s4991wPPSQMkWuEIc6YMcNFB/OvXnzxRfvRj35kf/3rX/3aOeecY//+979d0CGqunbtan/5y1/s61//uv3yl7+0f/zjH/af//zHQwGjhU1RhMcLhSj89re/bX//+989xPArX/mK1a1b1z1xlIF3izIJeaxRo4bXQcjk7Nmz3WtFW59//nn7wQ9+4O28+OKL7ac//anNnTs3//rUqVPtb3/7m/3mN7/xtvz3v//1diFG2bCNcmbOnOltQYiG85F2c65jx472ne98x/GLFH+R6fRZN7c4IA6IA+KAOCAOiAPigDhwZnHgpAgzvGWIqWeeecYFBn969uzpQguvEILihhtusAsvvNDwNrHt3bvXKlWqZJdccol7jvBMfetb37K+ffv6nDIEEqIMAYXHjNBAFvtYu3atizPmlaWkpFhCQoLhMSsLERFmiLCf/exn7uVCHD377LMuvjIyMlxYValSxQUbdbJxntDJK6+80lg8hLZs2LDBRRXzv5gfRpjiO++84+lZ5AMsbr75Ztu4caMvNoJo/fKXv2zvv/++p8FWNtqAwIuPj/dyo9uAfdQBLr17987PG51O38+sm1D9pf4SB8QBcUAcEAfEAXFAHDgpwgwBUa9ePfvhD3/ooum8886zBx54wEaNGuWeIRa2+N3vfucetapVq3ooYeXKle23v/2thyUS9oeQue6661x8hPlZiDu8VYikEOqICMTbFrxPCKUQhhgIzne2aC8awgwB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QqAQAhJmhSDRCSEgBISAEBACQkAICAEhIASEQPkiIGFWvnirNiEgBISAEBACQkAICAEhIASEQCEEJMwKQaITQkAICAEhIASEgBAQAkJACAiB8kVAwqx88VZtQkAICAEhIASEgBAQAkJACAiBQghImBWCRCeEgBAQAkJACAgBISAEhIAQEALli4CEWfnirdqEgBAQAkJACAgBISAEhIAQEAKFEJAwKwSJTggBISAEhIAQEAJCQAgIASEgBMoXAQmz8sVbtQkBISAEhIAQEAJCQAgIASEgBAohIGFWCBKdEAJCQAgIASEgBISAEBACQkAIlC8CEmbli7dqEwJCQAgIASEgBISAEBACQkAIFEJAwqwQJDohBISAEBACQkAICAEhIASEgBAoXwQkzMoXb9UmBISAEBACQkAICAEhIASEgBAohICEWSFIdEIICAEhIASEgBAQAkJACAgBIVC+CEiYlS/eqk0ICAEhIASEgBAQAkJACAgBIVAIAQmzQpDohBAQAkJACAgBIXC6IpCYmGg1a9a01157rcD+6quvWoMGDezgwYNFmn748GHbuHGjkf/IkSNFpgknSUd5gwYNCqd0FAJCQAicdAQkzE46xKpACAgBISAEhIAQOFEITJs2zb70pS8Vuf/sZz+z3NzcIqs6cOCAXXrppfavf/2ryOuRJ2fPnu3lP/bYY5Gn9VkICAEhcFIRkDA7qfCqcCEgBISAEBACQuBEIpCVlWXr1q2z9evXW40aNVxAtW7d2uLj4y0pKckyMjJswoQJ1qdPH1u4cKFXjbdsypQp9vOf/9x+8IMf2OTJk23fvn3uOUOE9erVy/r27evlkmHu3Lle7v/+978TabrKEgJCQAiUiICEWYnw6KIQEAJCQAgIASFwuiLwwAMPuIAaMGCAm7hp0ya7/PLL/RxetW984xv2wgsv2O7du+3CCy/081/+8pftd7/7nS1ZssSefPJJP/fTn/7UvvnNbxoet5kzZ/o18kuYna49L7uEwNmJgITZ2dmvapUQEAJCQAgIgbMegfvuu8+FVb9+/bytjz/+uH9v1aqVxcXF5XvUhg8f7vPL/vjHP7r4wrPGfu2119pTTz3lwq1Nmzae97333rOlS5f6Zwmzs55CaqAQOK0QkDA7rbpDxggBISAEhIAQEAJlRSAIs/79+xvhiuecc4795Cc/sezsbC9i3Lhx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/tFViK62HZPE7I477mhe8IIXNHPOOWfz+OOPT1L3rbbaqtzbd999y/XNN9+8CIF/EKwPfOADk8T3j5mGBRZYoDn11FOfd++8885rZphhhuboo48uQkEwvvKVrzSXX355EXrPydN1B1I222yzNbvssktJ6+STT26UQfjWt75VynzCCSc0N9xwQ/O5z32umWmmmUalkD0PiLyQCCQCiUAikAgkAolAIjBVEOhS3qMA9Mk3v/nNfRYzBgK65RprrNH84Q9/iGjDdr7xxhubxRdfvGG5Eg455JDm5ptv7kx/lVVWaRBGuvZ8881XDCGhMx988MHN7LPP3nzyk5/sTIMB5TWveU0xiiBBoy385Cc/adZcc81GffbZZ5/JFq+rbccsMUOI5p577uakk07qAwBJIzDzzjtvs99++5XrZhE22mij8vs973lPIVF9D/z3B2HR4Keffnr7VnP++ec3888/f58FrI7w5z//uVlooYUaDLkOO++8c7PsssuWS1/96lf7yOCWW25ZrGV13D333LMxg5AhEUgEEoFEIBFIBBKBRCARgECX8h4IIWHve9/74t+GRxcLFMvSU089Va4zBOy9995FL/7xj39crv3mN79pzjnnnGIkOPDAA8szjz32WF86SN2XvvSlZqeddiqeXX/605+aJ554oqHf0r15gknjsssuax588MHy3O9///tJnvnjH/9Yrr/97W9vjjzyyELMXvGKVzSXXHJJXz5+bLvtts0b3vCGvmvXXnttw7hCf5Yv7zT5zTXXXM0nPvGJJojZNddc0xePJU+46667Gtedkda//e1vzf33318IpDLEsyyNF198cXPrrbcWsnfMMcf04SUdnnlwhNsPfvCDvrIpy1lnnVWus0yGWyVipp48+fbaa68SXx4IaC+C3NW2Y5KY3X777YWA7bjjjsWEG8w9Zg7WX3/9PmCGSswuuOCC5qUvfWnz05/+tPnVr37VPPnkk+XgqojQIWannXZaaRzlIBzMs2El+9nPftYnhNwWWciQMTMMBE7ItWZ9Mp8/EoFEIBFIBBKBRCARmPAIdCnvAQ5Csckmm8S/xWXQEhzkAYm48sorm5e//OXF5ZBeyqOL1YsePd100xUd1lIeFrZFFlmkeeCBB4puu+KKKxZL3K677tosscQSzRZbbNH84he/aNZaa63mxS9+cTFyIDnLLbdc8Qaj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cMABzSc+8YlyT3rK4JlIN87RtknMkpg9TzhCSPI86YCYeCQeKQMpAykDKQMpAykD00oGQnnvImZI2MYbb1zICBKw5pprNoceemjz1re+tRAzBOPSSy9tPvzhDzc77rhjc8UVVxQy8uCDDzYnn3xyubfzzjs3++23X3PnnXeWe55x/zOf+UyzxRZbFFLFVfIXv/hFs8022zRzzjlnuSbOWWedVaxFyNAvf/nL5pBDDinPOD/yyCOF26y++uqlTIjZ/PPP35x77rnBecpZmssuu2ypAzJz4YUXNh/72MeaI488snn00UeL66L05phjjuYjH/lIc9ddd5W4dTx5IVA33nhjc8kllzSI0mGHHVYI3Y9//ONCllgTb7311kKafv7znzeI4fe///3m4x//eCF8Dz/8cCGByNrtt99eMIGb8iJgyoYgfvnLXy54nnbaac3TTz9d0rv22muLFZD1b/fddy+EjDXzqKOOKjjUpI88RdsmMUtilsQsZSBlIGUgZSBlIGUgZSBlYJTLQCjv/REzRIzF6d3vfncfoTrvvPOam2++uTn77LPL2q8LLrigeelLX9rsuuuuhVTNMssszZVXXlkIzAte8IJihUJM1l133eaVr3xlc9tttzW/+93vmte//vWF3O2zzz7N0ksv3bznPe9pkJl3vOMdzWyzzdZst9125X+E6tRTTy3r3MTjpuiZ173udc273vWunsSMux9yYr0YQsWixoomIFOvfvWrmz322KOQzDe/+c3FXXOnnXZqZp999ma99dZrbrrpplLvOt5KK61U3CGPPvroZoEFFmgWX3zx5oMf/GDz7W9/u3nVq17V7LDDDsXt0r2f/OQnhbzNPPPMpY6sda95zWtK2ggmC+DLX/7yUn71fPGLX1yIJXIGa3nttddezWtf+9qCKdKlHuecc0559oc//GEha/5nDUQMpVsT/GjbJGajvBPWjZa/c5YuZSBlIGUgZSBlIGUgZWBiykAo772IGZLgYC1j1QnFn9WIxcsZcWOxmWuuuYqliBwhUTfccEPDwjPDDDM0iJsgLVa27bffvrgK7r333s2vf/3rkhZrFeIi3auuuqq4MiJV0kPMrB9DTDzDKibeQQcd1Cy66KKlXNwqWfHc44642GKLNausskqDdM0777yFiD3wwAMNixVyKD0baLCWcZs89thjC1lEhJT7iSeeaBZc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wJQg0KW8T0l6+czoQaCrbccMMfvb3/7Wh+hzzz3X/OMf/+j7v/4hnvsR6ufimmf/85//xL99Z9f//e9/N77f5jlH+3dEdr0d5BvPxbPtOPF/r+fjXp4TgUQgEUgEEoFEIBFIBCYuAl3Ke43K008/3Tz++OPl0r/+9a+iA//zn/+so4zY79CbuzKIMokjfq0n1/p6Vxpx789//nN5Pv4fLWecAubqM5A6dSJhdPEAACAASURBVLXtmCBm3/3ud5sVV1yxufzyy0sb3H777c2qq67a3HvvvZO0yVVXXdWsu+66zW9/+9ty/dJLLy3Pfe9735sk3tZbb91stdVWBcS48eSTTzYbb7xxc+WVVzYbbbRRs/LKK09yvPnNb24++MEPNgTs5ptvbvz/jW98Ix4v5xNPPLFZaaWVmre85S3lEGfDDTdsrr322kni3XDDDeX5M844Y5Lr+U8ikAgkAolAIpAIJAKJQCLQpbwHOvfff3/zhje8odluu+3KpX322ac5++yzmz322KNBYoY7/O53v2vo5HRhhoz3v//9DV27K+y8887NN7/5zeb//u//mve9731F/6Un07Od99xzz+aPf/xjVxLFmPK5z32ueeMb39icdNJJnXGnxc377ruvYH766ac3X/nKVyZbhK62HfXEDAtdf/31m1lmmaV55zvfWRrnqaeeal7+8pc3n/3sZyep/Oabb96sttpqha167h3veEd5DjmqLWSE+AUveEGDSEX4xS9+0bz0pS9trr766kLOLr744ubggw9uZppppgLyRRdd1PzoRz8q0XfYYYeSLqGqLV+Eb7HFFmsuueSScpxzzjmlzMr6q1/9KrJqtt122/I8gTR7kCERSAQSgUQgEUgEEoFEIBEIBLqU94jzxS9+sVl99dX7rDTrrbde8/nPf75Zc801mz/84Q8RbdjODAsLLbRQIWYSpUf/7Gc/60yfIeXwww9v/vKXvzQve9nLmr322qvoyPRsJGauueZqPv7xj3emgdTJV91+/etfd8adFjdvueWWZq211moOOeSQBjmeXOhq21FPzO66667SGF/96leb+eefv/n5z39e6vuxj32sWMPCZIisLbDAAs3Xv/71cp+gaMR47p577unDifUN65beAw88UK7/8pe/bF7xilc0t956a188lq755puvYU2L8MQTTzSvfvWrS7oLLrhgc801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"}},"cell_type":"markdown","metadata":{},"source":["Well, it means adding capabilities that allow us to: \n","- take _spatial_ data as input\n","- visualize the spatial data\n","- perform various geospatial operations on it \n","- export, publish or save spatial data\n","\n","To add \"spatial abilities\", a SeDF must be created from the data, and to create a SeDF, the data must be spatial. In other words, the dataset must have location information (such as an address or latitude, longitude coordinates) or geometry information (such as point, line or polygon, etc.) to create a SeDF from it. There are various ways to create a SeDF from the data and we will go into those details in part-2 of the guide series.\n","\n","In the background, __SeDF__ uses the `spatial` namespace to add a `SHAPE` column to the data. The `SHAPE` column is of a special data type called __geometry__ and it holds the geometry for each record in the DataFrame. When a spatial method such as `plot()` is applied to a SeDF (or a spatial property such as `geometry_type` is called), this command will always act on the geometry column `SHAPE`.\n","\n","The image below shows a SeDF created from a Pandas DataFrame. A new `SHAPE` column, highlighted in red, gets added to the SeDF.\n","![image-2.png](attachment:image-2.png)"]},{"cell_type":"markdown","metadata":{},"source":["### Custom Namespaces"]},{"cell_type":"markdown","metadata":{},"source":["The [__GeoAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) and the [__GeoSeriesAccessor__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) classes, from the [`arcgis.features`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#module-arcgis.features) module, add two custom namespaces to a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) or a [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The _GeoAccessor_ class adds `spatial` namespace to the DataFrame and the _GeoSeriesAccessor_ class adds `geom` namespace to the Series.\n","\n","By adding custom namespaces, we [extend](https://pandas.pydata.org/pandas-docs/stable/development/extending.html) the capabilities of Pandas to allow for spatial operations using various geometry objects. The different geometry objects supported by these namespaces are:\n","\n"," - Point\n"," - Polyline\n"," - Polygon\n"," \n","You can learn more about these geometry objects in our [Working with Geometries](https://developers.arcgis.com/python/guide/part2-working-with-geometries/) guide series."]},{"cell_type":"markdown","metadata":{},"source":["#### The `spatial` namespace"]},{"cell_type":"markdown","metadata":{},"source":["The `spatial` namespace allows us to performs spatial operations on a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame). The namespace provides:\n","- Dataset level operations\n","- Dataset information\n","- Input/Output operations\n","\n","\n","The spatial namespace can be accessed using the `.spatial` _accessor_ pattern. E.g.: \n","\n","a. The centroid of a dataframe can be retrieved using the [`centroid`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.centroid) property. \n","\n","```python\n",">>> df.spatial.centroid\n","```\n"," \n","b. The [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method can be used to draw the data on a web map.\n","\n","```python\n",">>> df.spatial.plot()\n","```"]},{"cell_type":"markdown","metadata":{},"source":["#### The `geom` namespace"]},{"cell_type":"markdown","metadata":{},"source":["The `geom` namespace enables spatial operations on a given Pandas [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The namespace is accessible using the `.geom` _accessor_ pattern. E.g.:\n","\n","a. The [`area`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.area) method can be used to retrieve the Feature object’s area.\n","\n","```python\n",">>> df.SHAPE.geom.area\n","```\n"," \n","b. The [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method can be used to constructs a Polygon at a specified distance from the Geometry object.\n","\n","```python\n",">>> df.SHAPE.geom.buffer()\n","``` \n","\n","__Note__ that `geom` accessor operates on a series of data type \"_geometry_\". The `SHAPE` column of a SeDF is of _geometry_ data type. "]},{"cell_type":"markdown","metadata":{},"source":["#### Importing namespaces"]},{"cell_type":"markdown","metadata":{},"source":["_GeoSeriesAccessor_ and _GeoAccessor_ classes are similar to [pandas.Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series) and [pandas.DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) objects. However, you do not work with them directly. Instead, you import them right after you import Pandas as shown in the snippet below. Importing these classes registers the spatial functionality with Pandas and allows you to start performing spatial operations on your DataFrames.\n","\n","You may import the classes as follows:\n","\n","\n","```python\n","import pandas as pd\n","from arcgis.features import GeoAccessor, GeoSeriesAccessor\n","```"]},{"cell_type":"markdown","metadata":{},"source":["### Geometry Engines"]},{"cell_type":"markdown","metadata":{},"source":["The ArcGIS API for Python uses either [`shapely`](https://pypi.org/project/Shapely/) or [`arcpy`](https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy) as back-ends (engines) for processing geometries. The API is identical no matter which engine you use. However, at any point in time, only one engine will be used. \n","\n","[__ArcPy__]((https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy)) provides a useful and productive way to perform geographic data analysis, data conversion, data management, and map automation with Python. With `arcpy` as the geometry engine, you can read/write different file types, perform various geometric operations and do a lot more without needing multiple other third-party packages that perform such operations. \n","\n","\n","By default, the ArcGIS API for Python looks for `arcpy` as the geometry engine. In the absence of `arcpy`, it looks for `shapely`. The ArcGIS API for Python integrates the [Shapely](https://pypi.org/project/Shapely/), [Fiona](https://pypi.org/project/Fiona/), and [PyShp](https://pypi.org/project/pyshp/) packages so that spatial data from other sources can be accessed through the API. This makes it easier to use the ArcGIS API for Python and work with geospatial data regardless of the platform used. However, we recommend using `arcpy` for better accuracy and support for a wider gamut of data sources. Here is a one-line overview of each of these packages:\n","\n"," - [Shapely](https://pypi.org/project/Shapely/) is used for the manipulation and analysis of geometric objects. \n"," - [Fiona](https://pypi.org/project/Fiona/) can read and write real-world data using multi-layered GIS formats, including Esri File Geodatabase. It is often used in combination with Shapely so that Fiona is used for creating the input and output, while Shapely does the data wrangling part. \n"," - [PyShp](https://pypi.org/project/pyshp/) is used for reading and writing ESRI shapefiles."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: In the absence of arcpy, the ArcGIS API for Python looks for a shapely geometry engine. To allow for a seamless experience, both Shapely and Fiona packages must be present in your current conda environment. If these packages are not installed, you may install them using conda as follows:\n"," \n","conda install shapely\n","conda install fiona\n","
"]},{"cell_type":"markdown","metadata":{},"source":["It could be that both `arcpy` and `shapely` are __not__ present in your current environment. In such a scenario, the number of spatial operations you could perform using SeDF will be extremely limited. The cell below shows how to easily detect the current geometry engine in your environment."]},{"cell_type":"code","execution_count":1,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:04.173110Z","start_time":"2021-09-07T19:07:04.161107Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["Has arcpy\n"]}],"source":["import imp\n","try:\n"," if imp.find_module('arcpy'):\n"," print(\"Has arcpy\")\n"," elif imp.find_module('shapely'):\n"," print(\"Has shapely\")\n"," elif imp.find_module('arcpy') and imp.find_module('shapely'):\n"," print(\"Has both arcpy and shapely\")\n","except:\n"," print(\"Does not have either arcpy or shapely\")"]},{"cell_type":"markdown","metadata":{},"source":["So far, we have gone through some of the basics of __Spatially enabled DataFrame__. Now, it's time to see the `spatial` and `geom` namespaces in action. Let's look at a quick example."]},{"cell_type":"markdown","metadata":{},"source":["## Quick Example\n","\n","Let's look at a quick example showcasing the `spatial` and `geom` namespaces at work. We will start with a common use case of importing the data from a csv file. "]},{"cell_type":"markdown","metadata":{},"source":["In this example, we will:\n","\n","- read the data with location information from a csv file into a Pandas DataFrame\n","- create a SeDF from the Pandas DataFrame\n","- check some properties of the SeDF\n","- apply spatial operations on the geometry column using the `geom` accessor\n","- plot the SeDF on a map\n","\n","__Data:__ We will use the Covid-19 data for Nursing Homes in the U.S. to illustrate this example. The data has 124 records and 10 columns.\n","\n","__Note:__ the dataset used in this example is a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) and has been curated for illustration purposes. The complete dataset is available at the Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) website."]},{"cell_type":"code","execution_count":2,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:38.468200Z","start_time":"2021-09-07T19:07:21.842196Z"}},"outputs":[],"source":["# Import Libraries\n","\n","import pandas as pd\n","from arcgis.features import GeoAccessor, GeoSeriesAccessor\n","from arcgis.gis import GIS\n","from IPython.display import display"]},{"cell_type":"code","execution_count":3,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:38.933465Z","start_time":"2021-09-07T19:07:38.471207Z"}},"outputs":[],"source":["# Create an anonymous GIS Connection\n","gis = GIS()"]},{"cell_type":"markdown","metadata":{},"source":["### Get Data"]},{"cell_type":"code","execution_count":4,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:40.562179Z","start_time":"2021-09-07T19:07:40.539177Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722
2PARKWAY MANORMARIONIL00013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","1 0 0 \n","2 0 0 \n","3 6 141 \n","4 19 75 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","1 0 46 \n","2 0 131 \n","3 0 195 \n","4 16 180 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \n","0 61 -87.792973 42.012012 \n","1 43 -85.197651 40.392722 \n","2 84 -88.982944 37.750143 \n","3 131 -87.986442 42.160843 \n","4 116 -87.726353 41.975505 "]},"execution_count":4,"metadata":{},"output_type":"execute_result"}],"source":["# Read the data\n","df = pd.read_csv('../data/sample_cms_data.csv')\n","\n","# Return the first 5 records\n","df.head()"]},{"cell_type":"code","execution_count":5,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:41.267489Z","start_time":"2021-09-07T19:07:41.261506Z"}},"outputs":[{"data":{"text/plain":["(124, 10)"]},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"source":["# Check Shape\n","df.shape"]},{"cell_type":"markdown","metadata":{},"source":["The dataset contains 124 records and 10 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n","\n","- Name of the nursing home, its city and state\n","- Details of resident Covid cases, deaths and number of beds\n","- Location of nursing home as Latitude and Longitude"]},{"cell_type":"markdown","metadata":{},"source":["### Create a SeDF\n","\n","A Spatially enabled DataFrame can be created from any Pandas DataFrame with location information (Latitude and Longitude) using the [`from_xy()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.from_xy) method of the `spatial` namespace."]},{"cell_type":"code","execution_count":6,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:42.367185Z","start_time":"2021-09-07T19:07:42.346196Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL00013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","1 MILLER'S MERRY MANOR DUNKIRK IN \n","2 PARKWAY MANOR MARION IL \n","3 AVANTARA LONG GROVE LONG GROVE IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","1 0 0 \n","2 0 0 \n","3 6 141 \n","4 19 75 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","1 0 46 \n","2 0 131 \n","3 0 195 \n","4 16 180 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 61 -87.792973 42.012012 \n","1 43 -85.197651 40.392722 \n","2 84 -88.982944 37.750143 \n","3 131 -87.986442 42.160843 \n","4 116 -87.726353 41.975505 \n","\n"," SHAPE \n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n","3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... "]},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"source":["# Read into a SeDF\n","sedf = pd.DataFrame.spatial.from_xy(df=df, x_column='LONGITUDE', y_column='LATITUDE', sr=4326)\n","\n","# Check head\n","sedf.head()"]},{"cell_type":"markdown","metadata":{},"source":["> We can see that a new `SHAPE` column has been added while creating a SeDF.\n","\n","Let's look at the detailed information of the DataFrame."]},{"cell_type":"code","execution_count":7,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:43.517509Z","start_time":"2021-09-07T19:07:43.502508Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 11 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Total Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total COVID-19 Cases 124 non-null int64 \n"," 5 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 6 Number of All Beds 124 non-null int64 \n"," 7 Total Number of Occupied Beds 124 non-null int64 \n"," 8 LONGITUDE 124 non-null float64 \n"," 9 LATITUDE 124 non-null float64 \n"," 10 SHAPE 124 non-null geometry\n","dtypes: float64(2), geometry(1), int64(5), object(3)\n","memory usage: 10.8+ KB\n"]}],"source":["# Check info\n","sedf.info()"]},{"cell_type":"markdown","metadata":{},"source":["> Here, we see that the `SHAPE` column is of _geometry_ data type."]},{"cell_type":"markdown","metadata":{},"source":["### Check Properties of a SeDF\n","We just created a SeDF. Let's use the `spatial` namespace to check some properties of the SeDF."]},{"cell_type":"code","execution_count":8,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:44.736306Z","start_time":"2021-09-07T19:07:44.729304Z"}},"outputs":[{"data":{"text/plain":["['point']"]},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"source":["# Check geometry type\n","sedf.spatial.geometry_type"]},{"cell_type":"code","execution_count":9,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:45.898728Z","start_time":"2021-09-07T19:07:45.876729Z"}},"outputs":[{"data":{"image/svg+xml":[""],"text/plain":["{'spatialReference': {'wkid': 4326}, 'x': -87.792973, 'y': 42.012012}"]},"execution_count":9,"metadata":{},"output_type":"execute_result"}],"source":["# Visualize geometry\n","sedf.SHAPE[0]"]},{"cell_type":"markdown","metadata":{},"source":["> The geometry_type tells us that our dataset is point data."]},{"cell_type":"code","execution_count":10,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:47.708215Z","start_time":"2021-09-07T19:07:47.391610Z"}},"outputs":[{"data":{"text/plain":["(-87.16989602419355, 40.383302290322575)"]},"execution_count":10,"metadata":{},"output_type":"execute_result"}],"source":["# Get true centroid\n","sedf.spatial.true_centroid"]},{"cell_type":"markdown","metadata":{},"source":["> Retrieves the true centroid of the DataFrame."]},{"cell_type":"code","execution_count":11,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:48.729835Z","start_time":"2021-09-07T19:07:48.718835Z"}},"outputs":[{"data":{"text/plain":["(-90.67644, 37.002806, -84.861849, 42.380225)"]},"execution_count":11,"metadata":{},"output_type":"execute_result"}],"source":["# Get full extent\n","sedf.spatial.full_extent"]},{"cell_type":"markdown","metadata":{},"source":["> Retrieves the extent of the data in our DataFrame."]},{"cell_type":"markdown","metadata":{},"source":["### Apply spatial operations using `.geom`\n","\n","Let's use the `geom` namespace to apply spatial operations on the geometry column of the SeDF."]},{"cell_type":"markdown","metadata":{},"source":["#### Add buffers\n","We will use the [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method to create a 2 unit buffer around each nursing home and add the buffers as a new column to the data. "]},{"cell_type":"code","execution_count":12,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:51.139225Z","start_time":"2021-09-07T19:07:51.120226Z"}},"outputs":[],"source":["# Create buffer\n","sedf['buffer_2'] = sedf.SHAPE.geom.buffer(distance=2)"]},{"cell_type":"code","execution_count":13,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:52.080061Z","start_time":"2021-09-07T19:07:52.071055Z"}},"outputs":[{"data":{"text/plain":["0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...\n","1 {\"curveRings\": [[[-85.197651, 42.392722], {\"a\"...\n","2 {\"curveRings\": [[[-88.982944, 39.750143], {\"a\"...\n","3 {\"curveRings\": [[[-87.986442, 44.160843], {\"a\"...\n","4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...\n","Name: buffer_2, dtype: geometry"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["# Check head\n","sedf['buffer_2'].head()"]},{"cell_type":"code","execution_count":14,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:53.216042Z","start_time":"2021-09-07T19:07:53.203390Z"}},"outputs":[{"data":{"image/svg+xml":[""],"text/plain":["{'curveRings': [[[-87.792973, 44.012012],\n"," {'a': [[-87.792973, 44.012012], [-87.792973, 42.012012], 0, 1]}]],\n"," 'spatialReference': {'wkid': 4326, 'latestWkid': 4326}}"]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["# Visualize a buffer geometry\n","sedf['buffer_2'][0]"]},{"cell_type":"markdown","metadata":{},"source":["> We can see that the buffers created are of _geometry_ data type."]},{"cell_type":"code","execution_count":15,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:54.445501Z","start_time":"2021-09-07T19:07:54.422842Z"}},"outputs":[{"data":{"text/plain":["0 12.566371\n","1 12.566371\n","2 12.566371\n","3 12.566371\n","4 12.566371\n"," ... \n","119 12.566371\n","120 12.566371\n","121 12.566371\n","122 12.566371\n","123 12.566371\n","Name: area, Length: 124, dtype: object"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["# Get area\n","sedf.buffer_2.geom.area"]},{"cell_type":"markdown","metadata":{},"source":["> The `area` property retrives the area of each buffer in the units of the DataFrame's spatial reference."]},{"cell_type":"markdown","metadata":{},"source":["Now that we have created a new `buffer_2` column, our data should have two columns of _geometry_ data type i.e. `SHAPE` and `buffer_2`. Let's check."]},{"cell_type":"code","execution_count":16,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:56.256245Z","start_time":"2021-09-07T19:07:56.239255Z"}},"outputs":[{"name":"stdout","output_type":"stream","text":["\n","RangeIndex: 124 entries, 0 to 123\n","Data columns (total 12 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 Provider Name 124 non-null object \n"," 1 Provider City 124 non-null object \n"," 2 Provider State 124 non-null object \n"," 3 Residents Total Admissions COVID-19 124 non-null int64 \n"," 4 Residents Total COVID-19 Cases 124 non-null int64 \n"," 5 Residents Total COVID-19 Deaths 124 non-null int64 \n"," 6 Number of All Beds 124 non-null int64 \n"," 7 Total Number of Occupied Beds 124 non-null int64 \n"," 8 LONGITUDE 124 non-null float64 \n"," 9 LATITUDE 124 non-null float64 \n"," 10 SHAPE 124 non-null geometry\n"," 11 buffer_2 124 non-null geometry\n","dtypes: float64(2), geometry(2), int64(5), object(3)\n","memory usage: 11.8+ KB\n"]}],"source":["# Check info\n","sedf.info()"]},{"cell_type":"markdown","metadata":{},"source":["#### Calculate distance\n","Let's calculate the distance from one nursing home to another. We will use the [`distance_to()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.distance_to) method to calculate distance to a given geometry."]},{"cell_type":"code","execution_count":17,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:07:58.093584Z","start_time":"2021-09-07T19:07:58.081582Z"}},"outputs":[{"data":{"text/plain":["0 0.0\n","1 3.059052\n","2 4.424879\n","3 0.244092\n","4 0.075967\n"," ... \n","119 0.462069\n","120 0.116743\n","121 2.951358\n","122 0.144996\n","123 4.055468\n","Name: distance_to, Length: 124, dtype: object"]},"execution_count":17,"metadata":{},"output_type":"execute_result"}],"source":["# Calculate distance to the first nursing home\n","sedf.SHAPE.geom.distance_to(sedf.SHAPE[0])"]},{"cell_type":"markdown","metadata":{},"source":["We just performed some spatial operations on a pandas Series (`SHAPE`) using the `geom` namespace. Now, let's perform some basic Pandas operations on SeDF."]},{"cell_type":"markdown","metadata":{},"source":["### Perform Pandas Operations on a SeDF\n","\n","Let's perform some basic Pandas operations on a SeDF. One of the benefits of the accessor pattern in SeDF is that the SeDF object is of type _DataFrame_. Thus, you can continue to perform regular Pandas DataFrame operations. We will:\n","- Check the count of records for each state in our data\n","- Remove records that have 0 cases and death values\n","- Create a scatter plot of cases and deaths"]},{"cell_type":"code","execution_count":18,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:00.706542Z","start_time":"2021-09-07T19:08:00.699878Z"}},"outputs":[{"data":{"text/plain":["IN 67\n","IL 57\n","Name: Provider State, dtype: int64"]},"execution_count":18,"metadata":{},"output_type":"execute_result"}],"source":["# Check record count for each state\n","sedf['Provider State'].value_counts()"]},{"cell_type":"code","execution_count":19,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:01.728120Z","start_time":"2021-09-07T19:08:01.680463Z"}},"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","
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEbuffer_2
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...
6HARCOURT TERRACE NURSING AND REHABILITATIONINDIANAPOLISIN21111066-86.19346939.904128{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.193469, 41.904128], {\"a\"...
7GREENCROFT HEALTHCAREGOSHENIN36513153155-85.81779841.561063{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....{\"curveRings\": [[[-85.817798, 43.561063], {\"a\"...
8WATERS OF MARTINSVILLE, THEMARTINSVILLEIN233810344-86.43259339.407438{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.432593, 41.407438], {\"a\"...
\n","
"],"text/plain":[" Provider Name Provider City Provider State \\\n","0 GROSSE POINTE MANOR NILES IL \n","4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n","6 HARCOURT TERRACE NURSING AND REHABILITATION INDIANAPOLIS IN \n","7 GREENCROFT HEALTHCARE GOSHEN IN \n","8 WATERS OF MARTINSVILLE, THE MARTINSVILLE IN \n","\n"," Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n","0 5 56 \n","4 19 75 \n","6 2 1 \n","7 3 65 \n","8 2 33 \n","\n"," Residents Total COVID-19 Deaths Number of All Beds \\\n","0 12 99 \n","4 16 180 \n","6 1 110 \n","7 13 153 \n","8 8 103 \n","\n"," Total Number of Occupied Beds LONGITUDE LATITUDE \\\n","0 61 -87.792973 42.012012 \n","4 116 -87.726353 41.975505 \n","6 66 -86.193469 39.904128 \n","7 155 -85.817798 41.561063 \n","8 44 -86.432593 39.407438 \n","\n"," SHAPE \\\n","0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n","6 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","7 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n","8 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n","\n"," buffer_2 \n","0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"... \n","4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"... \n","6 {\"curveRings\": [[[-86.193469, 41.904128], {\"a\"... \n","7 {\"curveRings\": [[[-85.817798, 43.561063], {\"a\"... \n","8 {\"curveRings\": [[[-86.432593, 41.407438], {\"a\"... "]},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"source":["# Remove records with no cases and deaths\n","new_df = sedf.query('`Residents Total COVID-19 Cases` != 0 & \\\n"," `Residents Total COVID-19 Deaths` != 0').copy()\n","new_df.head()"]},{"cell_type":"code","execution_count":20,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:02.595405Z","start_time":"2021-09-07T19:08:02.590397Z"}},"outputs":[{"data":{"text/plain":["(37, 12)"]},"execution_count":20,"metadata":{},"output_type":"execute_result"}],"source":["# Check shape\n","new_df.shape"]},{"cell_type":"code","execution_count":21,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:03.045740Z","start_time":"2021-09-07T19:08:02.800731Z"}},"outputs":[{"data":{"image/png":"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","text/plain":["
"]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["# Plot cases and deaths\n","new_df.plot('Residents Total COVID-19 Cases',\n"," 'Residents Total COVID-19 Deaths', \n"," kind='scatter',\n"," title = \"Cases vs Deaths\");"]},{"cell_type":"markdown","metadata":{},"source":["We just saw how easy it was to perform some Pandas data selection and manipulation operations on a SeDF... piece of cake! Now, let's plot the complete data on a map. \n","\n","__Note__ - If you would like to learn more about Pandas and data engineering with Pandas, checkout our [Data Engineering primer guide part-3](https://developers.arcgis.com/python/guide/part3-introduction-to-pandas/)."]},{"cell_type":"markdown","metadata":{},"source":["### Plot on a Map\n","\n","We will use the [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method of the `spatial` namespace to plot the SeDF on a map."]},{"cell_type":"code","execution_count":24,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:19:31.788026Z","start_time":"2021-09-07T19:19:31.726032Z"}},"outputs":[{"data":{"text/html":[""],"text/plain":[""]},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"source":["# Create Map\n","m1 = gis.map('IL, USA')\n","m1"]},{"cell_type":"markdown","metadata":{},"source":["> Points displayed on the map show location of each nursing home in our data with at-least 1 case and 1 death. Clicking on a point displays attribute information for that nursing home."]},{"cell_type":"code","execution_count":23,"metadata":{"ExecuteTime":{"end_time":"2021-09-07T19:08:15.463166Z","start_time":"2021-09-07T19:08:15.377167Z"}},"outputs":[{"data":{"text/plain":["True"]},"execution_count":23,"metadata":{},"output_type":"execute_result"}],"source":["# Plot SeDF on a map\n","new_df.spatial.plot(m1)"]},{"cell_type":"markdown","metadata":{},"source":["With __Spatially enabled DataFrame__, you can now perform a variety of geospatial operations such as creating buffers, calculating the distance to another geometry or plotting your data on a map, and rendering it using various renderers. While you are at it, you can continue to perform various operations on the DataFrame using Pandas or other open-source libraries such as Seaborn, Scikit-learn, etc. Isn't that exciting!"]},{"cell_type":"markdown","metadata":{},"source":["## Conclusion"]},{"cell_type":"markdown","metadata":{},"source":["A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure and a building block for performing various scientific computations in Python. In this part of the guide series, we introduced the concept of [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) and how it adds \"spatial\" abilities to a Pandas DataFrame or Series. We also discussed the custom namespaces and geometry engines that operate behind the scenes and allow us to perform spatial operations. You have also seen an end-to-end example of using SeDF to perform various spatial operations along with Pandas operations.\n","\n","In the next part of this guide series, you will learn about creating a SeDF using GIS data in various formats."]},{"cell_type":"markdown","metadata":{},"source":["
\n"," Note: Given the importance and popularity of Spatially enabled DataFrame, we are revisiting our documentation for this topic. Our goal is to enhance the existing documentation to showcase the various capabilities of Spatially enabled DataFrame in detail with even more examples this time.\n","\n","

\n","\n","Creating quality documentation is time-consuming and exhaustive but we are committed to providing you with the best experience possible. With that in mind, we will be rolling out the revamped guides on this topic as different parts of a guide series (like the Data Engineering or Geometry guide series). This is \"part-1\" of the guide series for Spatially enabled DataFrame. You will continue to see the existing documentation as we revamp it to add new parts. Stay tuned for more on this topic.\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.10"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":true,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{},"toc_section_display":true,"toc_window_display":true}},"nbformat":4,"nbformat_minor":4} +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part-1 Introduction to Spatially enabled DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure that represents a rectangular table of data and contains an ordered collection of columns. You can think of it as a spreadsheet or a SQL table where each column has a column name for reference and each row can be accessed by using row numbers. \n", + "\n", + "The [__Spatially enabled DataFrame__](/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) adds _\"spatial abilities\"_ into the popular Pandas DataFrame by inserting a custom namespace called `spatial`. This namespace (also known as accessor) allows us to use Pandas operations on both the non-spatial and spatial columns. With SeDF, you can now easily manipulate geometric and other attribute data.\n", + "\n", + "The SeDF is based on data structures inherently suited to data analysis, with natural operations for the filtering and inspection of subsets of values which are fundamental to statistical and geographic manipulations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> _Note:_ Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the [Introduction to Data Engineering](../part1-introduction-to-dataengineering) guide series and then come here.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What does \"adding spatial abilities\" mean?" + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "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RiHvWWl2Rl8vyquFrWwIyWXLltnvf/9769y5s58LdiFAY2JiXLQtX768gACjnRMnTvT2r1mzpsC1kF9H/RCIA+KAOCAOiAPigDggDogDZyYHToowQ5RlZ2fbmDFjXEy1adPGPv30Uxs5cmS+YEK8ILD69OljDRo0sO7du7s3CXECmRA77HjD+vXr52Jm+PDh7hUjHwJny5YtNmHCBPvFL37hZaxatcrTEfZYlvlbqKL33nvPrrnmGps3b561aNHCBg4c6CGGIT92bt261T7++GOvo0ePHpaUlOThhsHO1NRUb1/jxo2tdevW7tXCvnBTUAa2jhgxwoYNG+aC8Pzzzy8gzKiP9l577bXuFYwWdwFTvG2PPvpofv2hDh3PzBtQ/aZ+EwfEAXFAHBAHxAFxQByAAydFmCGu6tevb7/61a/szjvvdLHxpS99yf75z3+6YEN0rFy50s4991wPPSQMkWuEIc6YMcNFB/OvXnzxRfvRj35kf/3rX/3aOeecY//+979d0CGqunbtan/5y1/s61//uv3yl7+0f/zjH/af//zHQwGjhU1RhMcLhSj89re/bX//+989xPArX/mK1a1b1z1xlIF3izIJeaxRo4bXQcjk7Nmz3WtFW59//nn7wQ9+4O28+OKL7ac//anNnTs3//rUqVPtb3/7m/3mN7/xtvz3v//1diFG2bCNcmbOnOltQYiG85F2c65jx472ne98x/GLFH+R6fRZN7c4IA6IA+KAOCAOiAPigDhwZnHgpAgzvGWIqWeeecYFBn969uzpQguvEILihhtusAsvvNDwNrHt3bvXKlWqZJdccol7jvBMfetb37K+ffv6nDIEEqIMAYXHjNBAFvtYu3atizPmlaWkpFhCQoLhMSsLERFmiLCf/exn7uVCHD377LMuvjIyMlxYValSxQUbdbJxntDJK6+80lg8hLZs2LDBRRXzv5gfRpjiO++84+lZ5AMsbr75Ztu4caMvNoJo/fKXv2zvv/++p8FWNtqAwIuPj/dyo9uAfdQBLr17987PG51O38+sm1D9pf4SB8QBcUAcEAfEAXFAHDgpwgwBUa9ePfvhD3/ooum8886zBx54wEaNGuWeIRa2+N3vfucetapVq3ooYeXKle23v/2thyUS9oeQue6661x8hPlZiDu8VYikEOqICMTbFrxPCKUQhhgIzne2aC8awgwB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QqAQAhJmhSDRCSEgBISAEBACQkAICAEhIASEQPkiIGFWvnirNiEgBISAEBACQkAICAEhIASEQCEEJMwKQaITQkAICAEhIASEgBAQAkJACAiB8kVAwqx88VZtQkAICAEhIASEgBAQAkJACAiBQghImBWCRCeEgBAQAkJACAgBISAEhIAQEALli4CEWfnirdqEgBAQAkJACAgBISAEhIAQEAKFEJAwKwSJTggBISAEhIAQEAJCQAgIASEgBMoXAQmz8sVbtQkBISAEhIAQEAJCQAgIASEgBAohIGFWCBKdEAJCQAgIASEgBISAEBACQkAIlC8CEmbli7dqEwJCQAgIASEgBISAEBACQkAIFEJAwqwQJDohBISAEBACQkAICAEhIASEgBAoXwQkzMoXb9UmBISAEBACQkAICAEhIASEgBAohICEWSFIdEIICAEhIASEgBAQAkJACAgBIVC+CEiYlS/eqk0ICAEhIASEgBAQAkJACAgBIVAIAQmzQpDohBAQAkJACAgBIXC6IpCYmGg1a9a01157rcD+6quvWoMGDezgwYNFmn748GHbuHGjkf/IkSNFpgknSUd5gwYNCqd0FAJCQAicdAQkzE46xKpACAgBISAEhIAQOFEITJs2zb70pS8Vuf/sZz+z3NzcIqs6cOCAXXrppfavf/2ryOuRJ2fPnu3lP/bYY5Gn9VkICAEhcFIRkDA7qfCqcCEgBISAEBACQuBEIpCVlWXr1q2z9evXW40aNVxAtW7d2uLj4y0pKckyMjJswoQJ1qdPH1u4cKFXjbdsypQp9vOf/9x+8IMf2OTJk23fvn3uOUOE9erVy/r27evlkmHu3Lle7v/+978TabrKEgJCQAiUiICEWYnw6KIQEAJCQAgIASFwuiLwwAMPuIAaMGCAm7hp0ya7/PLL/RxetW984xv2wgsv2O7du+3CCy/081/+8pftd7/7nS1ZssSefPJJP/fTn/7UvvnNbxoet5kzZ/o18kuYna49L7uEwNmJgITZ2dmvapUQEAJCQAgIgbMegfvuu8+FVb9+/bytjz/+uH9v1aqVxcXF5XvUhg8f7vPL/vjHP7r4wrPGfu2119pTTz3lwq1Nmzae97333rOlS5f6Zwmzs55CaqAQOK0QkDA7rbpDxggBISAEhIAQEAJlRSAIs/79+xvhiuecc4795Cc/sezsbC9i3Lhx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/tFViK62HZPE7I477mhe8IIXNHPOOWfz+OOPT1L3rbbaqtzbd999y/XNN9+8CIF/EKwPfOADk8T3j5mGBRZYoDn11FOfd++8885rZphhhuboo48uQkEwvvKVrzSXX355EXrPydN1B1I222yzNbvssktJ6+STT26UQfjWt75VynzCCSc0N9xwQ/O5z32umWmmmUalkD0PiLyQCCQCiUAikAgkAolAIjBVEOhS3qMA9Mk3v/nNfRYzBgK65RprrNH84Q9/iGjDdr7xxhubxRdfvGG5Eg455JDm5ptv7kx/lVVWaRBGuvZ8881XDCGhMx988MHN7LPP3nzyk5/sTIMB5TWveU0xiiBBoy385Cc/adZcc81GffbZZ5/JFq+rbccsMUOI5p577uakk07qAwBJIzDzzjtvs99++5XrZhE22mij8vs973lPIVF9D/z3B2HR4Keffnr7VnP++ec3888/f58FrI7w5z//uVlooYUaDLkOO++8c7PsssuWS1/96lf7yOCWW25ZrGV13D333LMxg5AhEUgEEoFEIBFIBBKBRCARgECX8h4IIWHve9/74t+GRxcLFMvSU089Va4zBOy9995FL/7xj39crv3mN79pzjnnnGIkOPDAA8szjz32WF86SN2XvvSlZqeddiqeXX/605+aJ554oqHf0r15gknjsssuax588MHy3O9///tJnvnjH/9Yrr/97W9vjjzyyELMXvGKVzSXXHJJXz5+bLvtts0b3vCGvmvXXnttw7hCf5Yv7zT5zTXXXM0nPvGJJojZNddc0xePJU+46667Gtedkda//e1vzf33318IpDLEsyyNF198cXPrrbcWsnfMMcf04SUdnnlwhNsPfvCDvrIpy1lnnVWus0yGWyVipp48+fbaa68SXx4IaC+C3NW2Y5KY3X777YWA7bjjjsWEG8w9Zg7WX3/9PmCGSswuuOCC5qUvfWnz05/+tPnVr37VPPnkk+XgqojQIWannXZaaRzlIBzMs2El+9nPftYnhNwWWciQMTMMBE7ItWZ9Mp8/EoFEIBFIBBKBRCARmPAIdCnvAQ5Csckmm8S/xWXQEhzkAYm48sorm5e//OXF5ZBeyqOL1YsePd100xUd1lIeFrZFFlmkeeCBB4puu+KKKxZL3K677tosscQSzRZbbNH84he/aNZaa63mxS9+cTFyIDnLLbdc8Qaj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cMABzSc+8YlyT3rK4JlIN87RtknMkpg9TzhCSPI86YCYeCQeKQMpAykDKQMpAykD00oGQnnvImZI2MYbb1zICBKw5pprNoceemjz1re+tRAzBOPSSy9tPvzhDzc77rhjc8UVVxQy8uCDDzYnn3xyubfzzjs3++23X3PnnXeWe55x/zOf+UyzxRZbFFLFVfIXv/hFs8022zRzzjlnuSbOWWedVaxFyNAvf/nL5pBDDinPOD/yyCOF26y++uqlTIjZ/PPP35x77rnBecpZmssuu2ypAzJz4YUXNh/72MeaI488snn00UeL66L05phjjuYjH/lIc9ddd5W4dTx5IVA33nhjc8kllzSI0mGHHVYI3Y9//ONCllgTb7311kKafv7znzeI4fe///3m4x//eCF8Dz/8cCGByNrtt99eMIGb8iJgyoYgfvnLXy54nnbaac3TTz9d0rv22muLFZD1b/fddy+EjDXzqKOOKjjUpI88RdsmMUtilsQsZSBlIGUgZSBlIGUgZSBlYJTLQCjv/REzRIzF6d3vfncfoTrvvPOam2++uTn77LPL2q8LLrigeelLX9rsuuuuhVTNMssszZVXXlkIzAte8IJihUJM1l133eaVr3xlc9tttzW/+93vmte//vWF3O2zzz7N0ksv3bznPe9pkJl3vOMdzWyzzdZst9125X+E6tRTTy3r3MTjpuiZ173udc273vWunsSMux9yYr0YQsWixoomIFOvfvWrmz322KOQzDe/+c3FXXOnnXZqZp999ma99dZrbrrpplLvOt5KK61U3CGPPvroZoEFFmgWX3zx5oMf/GDz7W9/u3nVq17V7LDDDsXt0r2f/OQnhbzNPPPMpY6sda95zWtK2ggmC+DLX/7yUn71fPGLX1yIJXIGa3nttddezWtf+9qCKdKlHuecc0559oc//GEha/5nDUQMpVsT/GjbJGajvBPWjZa/c5YuZSBlIGUgZSBlIGUgZWBiykAo772IGZLgYC1j1QnFn9WIxcsZcWOxmWuuuYqliBwhUTfccEPDwjPDDDM0iJsgLVa27bffvrgK7r333s2vf/3rkhZrFeIi3auuuqq4MiJV0kPMrB9DTDzDKibeQQcd1Cy66KKlXNwqWfHc44642GKLNausskqDdM0777yFiD3wwAMNixVyKD0baLCWcZs89thjC1lEhJT7iSeeaBZc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wJQg0KW8T0l6+czoQaCrbccMMfvb3/7Wh+hzzz3X/OMf/+j7v/4hnvsR6ufimmf/85//xL99Z9f//e9/N77f5jlH+3dEdr0d5BvPxbPtOPF/r+fjXp4TgUQgEUgEEoFEIBFIBCYuAl3Ke43K008/3Tz++OPl0r/+9a+iA//zn/+so4zY79CbuzKIMokjfq0n1/p6Vxpx789//nN5Pv4fLWecAubqM5A6dSJhdPEAACAASURBVLXtmCBm3/3ud5sVV1yxufzyy0sb3H777c2qq67a3HvvvZO0yVVXXdWsu+66zW9/+9ty/dJLLy3Pfe9735sk3tZbb91stdVWBcS48eSTTzYbb7xxc+WVVzYbbbRRs/LKK09yvPnNb24++MEPNgTs5ptvbvz/jW98Ix4v5xNPPLFZaaWVmre85S3lEGfDDTdsrr322kni3XDDDeX5M844Y5Lr+U8ikAgkAolAIpAIJAKJQCLQpbwHOvfff3/zhje8odluu+3KpX322ac5++yzmz322KNBYoY7/O53v2vo5HRhhoz3v//9DV27K+y8887NN7/5zeb//u//mve9731F/6Un07Od99xzz+aPf/xjVxLFmPK5z32ueeMb39icdNJJnXGnxc377ruvYH766ac3X/nKVyZbhK62HfXEDAtdf/31m1lmmaV55zvfWRrnqaeeal7+8pc3n/3sZyep/Oabb96sttpqha167h3veEd5DjmqLWSE+AUveEGDSEX4xS9+0bz0pS9trr766kLOLr744ubggw9uZppppgLyRRdd1PzoRz8q0XfYYYeSLqGqLV+Eb7HFFmsuueSScpxzzjmlzMr6q1/9KrJqtt122/I8gTR7kCERSAQSgUQgEUgEEoFEIBEIBLqU94jzxS9+sVl99dX7rDTrrbde8/nPf75Zc801mz/84Q8RbdjODAsLLbRQIWYSpUf/7Gc/60yfIeXwww9v/vKXvzQve9nLmr322qvoyPRsJGauueZqPv7xj3emgdTJV91+/etfd8adFjdvueWWZq211moOOeSQBjmeXOhq21FPzO66667SGF/96leb+eefv/n5z39e6vuxj32sWMPCZIisLbDAAs3Xv/71cp+gaMR47p577unDifUN65beAw88UK7/8pe/bF7xilc0t956a188lq755puvYU2L8MQTTzSvfvWrS7oLLrhgc801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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Well, it means adding capabilities that allow us to: \n", + "- take _spatial_ data as input\n", + "- visualize the spatial data\n", + "- perform various geospatial operations on it \n", + "- export, publish or save spatial data\n", + "\n", + "To add \"spatial abilities\", a SeDF must be created from the data, and to create a SeDF, the data must be spatial. In other words, the dataset must have location information (such as an address or latitude, longitude coordinates) or geometry information (such as point, line or polygon, etc.) to create a SeDF from it. There are various ways to create a SeDF from the data and we will go into those details in part-2 of the guide series.\n", + "\n", + "In the background, __SeDF__ uses the `spatial` namespace to add a `SHAPE` column to the data. The `SHAPE` column is of a special data type called __geometry__ and it holds the geometry for each record in the DataFrame. When a spatial method such as `plot()` is applied to a SeDF (or a spatial property such as `geometry_type` is called), this command will always act on the geometry column `SHAPE`.\n", + "\n", + "The image below shows a SeDF created from a Pandas DataFrame. A new `SHAPE` column, highlighted in red, gets added to the SeDF.\n", + "![image-2.png](attachment:image-2.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Custom Namespaces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The [__GeoAccessor__](/python/api-reference/arcgis.features.toc.html#geoaccessor) and the [__GeoSeriesAccessor__](/python/api-reference/arcgis.features.toc.html#geoaccessor) classes, from the [`arcgis.features`](/python/api-reference/arcgis.features.toc.html#module-arcgis.features) module, add two custom namespaces to a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) or a [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The _GeoAccessor_ class adds `spatial` namespace to the DataFrame and the _GeoSeriesAccessor_ class adds `geom` namespace to the Series.\n", + "\n", + "By adding custom namespaces, we [extend](https://pandas.pydata.org/pandas-docs/stable/development/extending.html) the capabilities of Pandas to allow for spatial operations using various geometry objects. The different geometry objects supported by these namespaces are:\n", + "\n", + " - Point\n", + " - Polyline\n", + " - Polygon\n", + " \n", + "You can learn more about these geometry objects in our [Working with Geometries](https://developers.arcgis.com/python/guide/part2-working-with-geometries/) guide series." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The `spatial` namespace" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `spatial` namespace allows us to performs spatial operations on a given Pandas [DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame). The namespace provides:\n", + "- Dataset level operations\n", + "- Dataset information\n", + "- Input/Output operations\n", + "\n", + "\n", + "The spatial namespace can be accessed using the `.spatial` _accessor_ pattern. E.g.: \n", + "\n", + "a. The centroid of a dataframe can be retrieved using the [`centroid`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.centroid) property. \n", + "\n", + "```python\n", + ">>> df.spatial.centroid\n", + "```\n", + " \n", + "b. The [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method can be used to draw the data on a web map.\n", + "\n", + "```python\n", + ">>> df.spatial.plot()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The `geom` namespace" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `geom` namespace enables spatial operations on a given Pandas [Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series). The namespace is accessible using the `.geom` _accessor_ pattern. E.g.:\n", + "\n", + "a. The [`area`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.area) method can be used to retrieve the Feature object’s area.\n", + "\n", + "```python\n", + ">>> df.SHAPE.geom.area\n", + "```\n", + " \n", + "b. The [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method can be used to constructs a Polygon at a specified distance from the Geometry object.\n", + "\n", + "```python\n", + ">>> df.SHAPE.geom.buffer()\n", + "``` \n", + "\n", + "__Note__ that `geom` accessor operates on a series of data type \"_geometry_\". The `SHAPE` column of a SeDF is of _geometry_ data type. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Importing namespaces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_GeoSeriesAccessor_ and _GeoAccessor_ classes are similar to [pandas.Series](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html#pandas.Series) and [pandas.DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame) objects. However, you do not work with them directly. Instead, you import them right after you import Pandas as shown in the snippet below. Importing these classes registers the spatial functionality with Pandas and allows you to start performing spatial operations on your DataFrames.\n", + "\n", + "You may import the classes as follows:\n", + "\n", + "\n", + "```python\n", + "import pandas as pd\n", + "from arcgis.features import GeoAccessor, GeoSeriesAccessor\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Geometry Engines" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ArcGIS API for Python uses either [`shapely`](https://pypi.org/project/Shapely/) or [`arcpy`](https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy) as back-ends (engines) for processing geometries. The API is identical no matter which engine you use. However, at any point in time, only one engine will be used. \n", + "\n", + "[__ArcPy__]((https://www.esri.com/en-us/arcgis/products/arcgis-python-libraries/libraries/arcpy)) provides a useful and productive way to perform geographic data analysis, data conversion, data management, and map automation with Python. With `arcpy` as the geometry engine, you can read/write different file types, perform various geometric operations and do a lot more without needing multiple other third-party packages that perform such operations. \n", + "\n", + "\n", + "By default, the ArcGIS API for Python looks for `arcpy` as the geometry engine. In the absence of `arcpy`, it looks for `shapely`. The ArcGIS API for Python integrates the [Shapely](https://pypi.org/project/Shapely/), [Fiona](https://pypi.org/project/Fiona/), and [PyShp](https://pypi.org/project/pyshp/) packages so that spatial data from other sources can be accessed through the API. This makes it easier to use the ArcGIS API for Python and work with geospatial data regardless of the platform used. However, we recommend using `arcpy` for better accuracy and support for a wider gamut of data sources. Here is a one-line overview of each of these packages:\n", + "\n", + " - [Shapely](https://pypi.org/project/Shapely/) is used for the manipulation and analysis of geometric objects. \n", + " - [Fiona](https://pypi.org/project/Fiona/) can read and write real-world data using multi-layered GIS formats, including Esri File Geodatabase. It is often used in combination with Shapely so that Fiona is used for creating the input and output, while Shapely does the data wrangling part. \n", + " - [PyShp](https://pypi.org/project/pyshp/) is used for reading and writing ESRI shapefiles." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " Note: In the absence of arcpy, the ArcGIS API for Python looks for a shapely geometry engine. To allow for a seamless experience, both Shapely and Fiona packages must be present in your current conda environment. If these packages are not installed, you may install them using conda as follows:\n", + " \n", + "conda install shapely\n", + "conda install fiona\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It could be that both `arcpy` and `shapely` are __not__ present in your current environment. In such a scenario, the number of spatial operations you could perform using SeDF will be extremely limited. The cell below shows how to easily detect the current geometry engine in your environment." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:04.173110Z", + "start_time": "2021-09-07T19:07:04.161107Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Has arcpy\n" + ] + } + ], + "source": [ + "import imp\n", + "try:\n", + " if imp.find_module('arcpy'):\n", + " print(\"Has arcpy\")\n", + " elif imp.find_module('shapely'):\n", + " print(\"Has shapely\")\n", + " elif imp.find_module('arcpy') and imp.find_module('shapely'):\n", + " print(\"Has both arcpy and shapely\")\n", + "except:\n", + " print(\"Does not have either arcpy or shapely\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far, we have gone through some of the basics of __Spatially enabled DataFrame__. Now, it's time to see the `spatial` and `geom` namespaces in action. Let's look at a quick example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quick Example\n", + "\n", + "Let's look at a quick example showcasing the `spatial` and `geom` namespaces at work. We will start with a common use case of importing the data from a csv file. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we will:\n", + "\n", + "- read the data with location information from a csv file into a Pandas DataFrame\n", + "- create a SeDF from the Pandas DataFrame\n", + "- check some properties of the SeDF\n", + "- apply spatial operations on the geometry column using the `geom` accessor\n", + "- plot the SeDF on a map\n", + "\n", + "__Data:__ We will use the Covid-19 data for Nursing Homes in the U.S. to illustrate this example. The data has 124 records and 10 columns.\n", + "\n", + "__Note:__ the dataset used in this example is a subset of [Covid-19 Nursing Home data](https://data.cms.gov/Special-Programs-Initiatives-COVID-19-Nursing-Home/COVID-19-Nursing-Home-Dataset/s2uc-8wxp) and has been curated for illustration purposes. The complete dataset is available at the Centers for Medicare & Medicaid Services ([CMS](https://www.cms.gov/)) website." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:38.468200Z", + "start_time": "2021-09-07T19:07:21.842196Z" + } + }, + "outputs": [], + "source": [ + "# Import Libraries\n", + "\n", + "import pandas as pd\n", + "from arcgis.features import GeoAccessor, GeoSeriesAccessor\n", + "from arcgis.gis import GIS\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:38.933465Z", + "start_time": "2021-09-07T19:07:38.471207Z" + } + }, + "outputs": [], + "source": [ + "# Create an anonymous GIS Connection\n", + "gis = GIS()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get Data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:40.562179Z", + "start_time": "2021-09-07T19:07:40.539177Z" + } + }, + "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", + "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722
2PARKWAY MANORMARIONIL00013184-88.98294437.750143
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City Provider State \\\n", + "0 GROSSE POINTE MANOR NILES IL \n", + "1 MILLER'S MERRY MANOR DUNKIRK IN \n", + "2 PARKWAY MANOR MARION IL \n", + "3 AVANTARA LONG GROVE LONG GROVE IL \n", + "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", + "\n", + " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", + "0 5 56 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 6 141 \n", + "4 19 75 \n", + "\n", + " Residents Total COVID-19 Deaths Number of All Beds \\\n", + "0 12 99 \n", + "1 0 46 \n", + "2 0 131 \n", + "3 0 195 \n", + "4 16 180 \n", + "\n", + " Total Number of Occupied Beds LONGITUDE LATITUDE \n", + "0 61 -87.792973 42.012012 \n", + "1 43 -85.197651 40.392722 \n", + "2 84 -88.982944 37.750143 \n", + "3 131 -87.986442 42.160843 \n", + "4 116 -87.726353 41.975505 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the data\n", + "df = pd.read_csv('../data/sample_cms_data.csv')\n", + "\n", + "# Return the first 5 records\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:41.267489Z", + "start_time": "2021-09-07T19:07:41.261506Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(124, 10)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check Shape\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dataset contains 124 records and 10 columns. Each record represents a nursing home in the states of Indiana and Illinois. Each column contains information about the nursing home such as:\n", + "\n", + "- Name of the nursing home, its city and state\n", + "- Details of resident Covid cases, deaths and number of beds\n", + "- Location of nursing home as Latitude and Longitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a SeDF\n", + "\n", + "A Spatially enabled DataFrame can be created from any Pandas DataFrame with location information (Latitude and Longitude) using the [`from_xy()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.from_xy) method of the `spatial` namespace." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:42.367185Z", + "start_time": "2021-09-07T19:07:42.346196Z" + } + }, + "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", + "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPE
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
1MILLER'S MERRY MANORDUNKIRKIN0004643-85.19765140.392722{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....
2PARKWAY MANORMARIONIL00013184-88.98294437.750143{\"spatialReference\": {\"wkid\": 4326}, \"x\": -88....
3AVANTARA LONG GROVELONG GROVEIL61410195131-87.98644242.160843{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City Provider State \\\n", + "0 GROSSE POINTE MANOR NILES IL \n", + "1 MILLER'S MERRY MANOR DUNKIRK IN \n", + "2 PARKWAY MANOR MARION IL \n", + "3 AVANTARA LONG GROVE LONG GROVE IL \n", + "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", + "\n", + " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", + "0 5 56 \n", + "1 0 0 \n", + "2 0 0 \n", + "3 6 141 \n", + "4 19 75 \n", + "\n", + " Residents Total COVID-19 Deaths Number of All Beds \\\n", + "0 12 99 \n", + "1 0 46 \n", + "2 0 131 \n", + "3 0 195 \n", + "4 16 180 \n", + "\n", + " Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", + "0 61 -87.792973 42.012012 \n", + "1 43 -85.197651 40.392722 \n", + "2 84 -88.982944 37.750143 \n", + "3 131 -87.986442 42.160843 \n", + "4 116 -87.726353 41.975505 \n", + "\n", + " SHAPE \n", + "0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "1 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "2 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -88.... \n", + "3 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read into a SeDF\n", + "sedf = pd.DataFrame.spatial.from_xy(df=df, x_column='LONGITUDE', y_column='LATITUDE', sr=4326)\n", + "\n", + "# Check head\n", + "sedf.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> We can see that a new `SHAPE` column has been added while creating a SeDF.\n", + "\n", + "Let's look at the detailed information of the DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:43.517509Z", + "start_time": "2021-09-07T19:07:43.502508Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 124 entries, 0 to 123\n", + "Data columns (total 11 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Provider Name 124 non-null object \n", + " 1 Provider City 124 non-null object \n", + " 2 Provider State 124 non-null object \n", + " 3 Residents Total Admissions COVID-19 124 non-null int64 \n", + " 4 Residents Total COVID-19 Cases 124 non-null int64 \n", + " 5 Residents Total COVID-19 Deaths 124 non-null int64 \n", + " 6 Number of All Beds 124 non-null int64 \n", + " 7 Total Number of Occupied Beds 124 non-null int64 \n", + " 8 LONGITUDE 124 non-null float64 \n", + " 9 LATITUDE 124 non-null float64 \n", + " 10 SHAPE 124 non-null geometry\n", + "dtypes: float64(2), geometry(1), int64(5), object(3)\n", + "memory usage: 10.8+ KB\n" + ] + } + ], + "source": [ + "# Check info\n", + "sedf.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Here, we see that the `SHAPE` column is of _geometry_ data type." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Check Properties of a SeDF\n", + "We just created a SeDF. Let's use the `spatial` namespace to check some properties of the SeDF." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:44.736306Z", + "start_time": "2021-09-07T19:07:44.729304Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['point']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check geometry type\n", + "sedf.spatial.geometry_type" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:45.898728Z", + "start_time": "2021-09-07T19:07:45.876729Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "{'spatialReference': {'wkid': 4326}, 'x': -87.792973, 'y': 42.012012}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Visualize geometry\n", + "sedf.SHAPE[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> The geometry_type tells us that our dataset is point data." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:47.708215Z", + "start_time": "2021-09-07T19:07:47.391610Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(-87.16989602419355, 40.383302290322575)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get true centroid\n", + "sedf.spatial.true_centroid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Retrieves the true centroid of the DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:48.729835Z", + "start_time": "2021-09-07T19:07:48.718835Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(-90.67644, 37.002806, -84.861849, 42.380225)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get full extent\n", + "sedf.spatial.full_extent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Retrieves the extent of the data in our DataFrame." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Apply spatial operations using `.geom`\n", + "\n", + "Let's use the `geom` namespace to apply spatial operations on the geometry column of the SeDF." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Add buffers\n", + "We will use the [`buffer()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.buffer) method to create a 2 unit buffer around each nursing home and add the buffers as a new column to the data. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:51.139225Z", + "start_time": "2021-09-07T19:07:51.120226Z" + } + }, + "outputs": [], + "source": [ + "# Create buffer\n", + "sedf['buffer_2'] = sedf.SHAPE.geom.buffer(distance=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:52.080061Z", + "start_time": "2021-09-07T19:07:52.071055Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...\n", + "1 {\"curveRings\": [[[-85.197651, 42.392722], {\"a\"...\n", + "2 {\"curveRings\": [[[-88.982944, 39.750143], {\"a\"...\n", + "3 {\"curveRings\": [[[-87.986442, 44.160843], {\"a\"...\n", + "4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...\n", + "Name: buffer_2, dtype: geometry" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check head\n", + "sedf['buffer_2'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:53.216042Z", + "start_time": "2021-09-07T19:07:53.203390Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "{'curveRings': [[[-87.792973, 44.012012],\n", + " {'a': [[-87.792973, 44.012012], [-87.792973, 42.012012], 0, 1]}]],\n", + " 'spatialReference': {'wkid': 4326, 'latestWkid': 4326}}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Visualize a buffer geometry\n", + "sedf['buffer_2'][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> We can see that the buffers created are of _geometry_ data type." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:54.445501Z", + "start_time": "2021-09-07T19:07:54.422842Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 12.566371\n", + "1 12.566371\n", + "2 12.566371\n", + "3 12.566371\n", + "4 12.566371\n", + " ... \n", + "119 12.566371\n", + "120 12.566371\n", + "121 12.566371\n", + "122 12.566371\n", + "123 12.566371\n", + "Name: area, Length: 124, dtype: object" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get area\n", + "sedf.buffer_2.geom.area" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> The `area` property retrives the area of each buffer in the units of the DataFrame's spatial reference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have created a new `buffer_2` column, our data should have two columns of _geometry_ data type i.e. `SHAPE` and `buffer_2`. Let's check." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:56.256245Z", + "start_time": "2021-09-07T19:07:56.239255Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 124 entries, 0 to 123\n", + "Data columns (total 12 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Provider Name 124 non-null object \n", + " 1 Provider City 124 non-null object \n", + " 2 Provider State 124 non-null object \n", + " 3 Residents Total Admissions COVID-19 124 non-null int64 \n", + " 4 Residents Total COVID-19 Cases 124 non-null int64 \n", + " 5 Residents Total COVID-19 Deaths 124 non-null int64 \n", + " 6 Number of All Beds 124 non-null int64 \n", + " 7 Total Number of Occupied Beds 124 non-null int64 \n", + " 8 LONGITUDE 124 non-null float64 \n", + " 9 LATITUDE 124 non-null float64 \n", + " 10 SHAPE 124 non-null geometry\n", + " 11 buffer_2 124 non-null geometry\n", + "dtypes: float64(2), geometry(2), int64(5), object(3)\n", + "memory usage: 11.8+ KB\n" + ] + } + ], + "source": [ + "# Check info\n", + "sedf.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Calculate distance\n", + "Let's calculate the distance from one nursing home to another. We will use the [`distance_to()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoSeriesAccessor.distance_to) method to calculate distance to a given geometry." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:07:58.093584Z", + "start_time": "2021-09-07T19:07:58.081582Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.0\n", + "1 3.059052\n", + "2 4.424879\n", + "3 0.244092\n", + "4 0.075967\n", + " ... \n", + "119 0.462069\n", + "120 0.116743\n", + "121 2.951358\n", + "122 0.144996\n", + "123 4.055468\n", + "Name: distance_to, Length: 124, dtype: object" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Calculate distance to the first nursing home\n", + "sedf.SHAPE.geom.distance_to(sedf.SHAPE[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We just performed some spatial operations on a pandas Series (`SHAPE`) using the `geom` namespace. Now, let's perform some basic Pandas operations on SeDF." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Perform Pandas Operations on a SeDF\n", + "\n", + "Let's perform some basic Pandas operations on a SeDF. One of the benefits of the accessor pattern in SeDF is that the SeDF object is of type _DataFrame_. Thus, you can continue to perform regular Pandas DataFrame operations. We will:\n", + "- Check the count of records for each state in our data\n", + "- Remove records that have 0 cases and death values\n", + "- Create a scatter plot of cases and deaths" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:08:00.706542Z", + "start_time": "2021-09-07T19:08:00.699878Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "IN 67\n", + "IL 57\n", + "Name: Provider State, dtype: int64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check record count for each state\n", + "sedf['Provider State'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:08:01.728120Z", + "start_time": "2021-09-07T19:08:01.680463Z" + } + }, + "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", + "
Provider NameProvider CityProvider StateResidents Total Admissions COVID-19Residents Total COVID-19 CasesResidents Total COVID-19 DeathsNumber of All BedsTotal Number of Occupied BedsLONGITUDELATITUDESHAPEbuffer_2
0GROSSE POINTE MANORNILESIL556129961-87.79297342.012012{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.792973, 44.012012], {\"a\"...
4HARMONY NURSING & REHAB CENTERCHICAGOIL197516180116-87.72635341.975505{\"spatialReference\": {\"wkid\": 4326}, \"x\": -87....{\"curveRings\": [[[-87.726353, 43.975505], {\"a\"...
6HARCOURT TERRACE NURSING AND REHABILITATIONINDIANAPOLISIN21111066-86.19346939.904128{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.193469, 41.904128], {\"a\"...
7GREENCROFT HEALTHCAREGOSHENIN36513153155-85.81779841.561063{\"spatialReference\": {\"wkid\": 4326}, \"x\": -85....{\"curveRings\": [[[-85.817798, 43.561063], {\"a\"...
8WATERS OF MARTINSVILLE, THEMARTINSVILLEIN233810344-86.43259339.407438{\"spatialReference\": {\"wkid\": 4326}, \"x\": -86....{\"curveRings\": [[[-86.432593, 41.407438], {\"a\"...
\n", + "
" + ], + "text/plain": [ + " Provider Name Provider City Provider State \\\n", + "0 GROSSE POINTE MANOR NILES IL \n", + "4 HARMONY NURSING & REHAB CENTER CHICAGO IL \n", + "6 HARCOURT TERRACE NURSING AND REHABILITATION INDIANAPOLIS IN \n", + "7 GREENCROFT HEALTHCARE GOSHEN IN \n", + "8 WATERS OF MARTINSVILLE, THE MARTINSVILLE IN \n", + "\n", + " Residents Total Admissions COVID-19 Residents Total COVID-19 Cases \\\n", + "0 5 56 \n", + "4 19 75 \n", + "6 2 1 \n", + "7 3 65 \n", + "8 2 33 \n", + "\n", + " Residents Total COVID-19 Deaths Number of All Beds \\\n", + "0 12 99 \n", + "4 16 180 \n", + "6 1 110 \n", + "7 13 153 \n", + "8 8 103 \n", + "\n", + " Total Number of Occupied Beds LONGITUDE LATITUDE \\\n", + "0 61 -87.792973 42.012012 \n", + "4 116 -87.726353 41.975505 \n", + "6 66 -86.193469 39.904128 \n", + "7 155 -85.817798 41.561063 \n", + "8 44 -86.432593 39.407438 \n", + "\n", + " SHAPE \\\n", + "0 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "4 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -87.... \n", + "6 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n", + "7 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -85.... \n", + "8 {\"spatialReference\": {\"wkid\": 4326}, \"x\": -86.... \n", + "\n", + " buffer_2 \n", + "0 {\"curveRings\": [[[-87.792973, 44.012012], {\"a\"... \n", + "4 {\"curveRings\": [[[-87.726353, 43.975505], {\"a\"... \n", + "6 {\"curveRings\": [[[-86.193469, 41.904128], {\"a\"... \n", + "7 {\"curveRings\": [[[-85.817798, 43.561063], {\"a\"... \n", + "8 {\"curveRings\": [[[-86.432593, 41.407438], {\"a\"... " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Remove records with no cases and deaths\n", + "new_df = sedf.query('`Residents Total COVID-19 Cases` != 0 & \\\n", + " `Residents Total COVID-19 Deaths` != 0').copy()\n", + "new_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:08:02.595405Z", + "start_time": "2021-09-07T19:08:02.590397Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(37, 12)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check shape\n", + "new_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:08:03.045740Z", + "start_time": "2021-09-07T19:08:02.800731Z" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot cases and deaths\n", + "new_df.plot('Residents Total COVID-19 Cases',\n", + " 'Residents Total COVID-19 Deaths', \n", + " kind='scatter',\n", + " title = \"Cases vs Deaths\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We just saw how easy it was to perform some Pandas data selection and manipulation operations on a SeDF... piece of cake! Now, let's plot the complete data on a map. \n", + "\n", + "__Note__ - If you would like to learn more about Pandas and data engineering with Pandas, checkout our [Data Engineering primer guide part-3](https://developers.arcgis.com/python/guide/part3-introduction-to-pandas/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot on a Map\n", + "\n", + "We will use the [`plot()`](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.plot) method of the `spatial` namespace to plot the SeDF on a map." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:19:31.788026Z", + "start_time": "2021-09-07T19:19:31.726032Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create Map\n", + "m1 = gis.map('IL, USA')\n", + "m1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> Points displayed on the map show location of each nursing home in our data with at-least 1 case and 1 death. Clicking on a point displays attribute information for that nursing home." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2021-09-07T19:08:15.463166Z", + "start_time": "2021-09-07T19:08:15.377167Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Plot SeDF on a map\n", + "new_df.spatial.plot(m1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With __Spatially enabled DataFrame__, you can now perform a variety of geospatial operations such as creating buffers, calculating the distance to another geometry or plotting your data on a map, and rendering it using various renderers. While you are at it, you can continue to perform various operations on the DataFrame using Pandas or other open-source libraries such as Seaborn, Scikit-learn, etc. Isn't that exciting!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A [DataFrame](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html#dataframe) is a fundamental [Pandas](https://pandas.pydata.org/) data structure and a building block for performing various scientific computations in Python. In this part of the guide series, we introduced the concept of [__Spatially enabled DataFrame__](https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#geoaccessor) (__SeDF__) and how it adds \"spatial\" abilities to a Pandas DataFrame or Series. We also discussed the custom namespaces and geometry engines that operate behind the scenes and allow us to perform spatial operations. You have also seen an end-to-end example of using SeDF to perform various spatial operations along with Pandas operations.\n", + "\n", + "In the next part of this guide series, you will learn about creating a SeDF using GIS data in various formats." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " Note: Given the importance and popularity of Spatially enabled DataFrame, we are revisiting our documentation for this topic. Our goal is to enhance the existing documentation to showcase the various capabilities of Spatially enabled DataFrame in detail with even more examples this time.\n", + "\n", + "

\n", + "\n", + "Creating quality documentation is time-consuming and exhaustive but we are committed to providing you with the best experience possible. With that in mind, we will be rolling out the revamped guides on this topic as different parts of a guide series (like the Data Engineering or Geometry guide series). This is \"part-1\" of the guide series for Spatially enabled DataFrame. You will continue to see the existing documentation as we revamp it to add new parts. Stay tuned for more on this topic.\n", + "
" + ] + } + ], + "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.11.0" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": true, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": true, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}