{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Crime mapping, visualization and predictive analysis" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Data Preparation" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The Hoston Police department shares historical crime statistics at http://www.houstontx.gov/police/cs/crime-stats-archives.htm that we'll be using for our analysis.\n", "" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Fetch data" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true, "scrolled": true }, "outputs": [], "source": [ "import pandas as pd\n", "import calendar\n", "\n", "combined_df = pd.DataFrame()\n", "\n", "for year in range(10, 17):\n", " for month in range(1, 13):\n", " url = 'http://www.houstontx.gov/police/cs/xls/{0}{1}.xls'.format(calendar.month_name[month].lower()[:3], year)\n", " df = pd.read_excel(url)\n", " combined_df = combined_df.append(df, ignore_index=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "code_folding": [], "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "# archive the data so we don't need to re-fetch it:\n", "combined_df.to_csv(r'C:\\xc\\Presentations\\Demos\\Houston\\crime_df.csv', index=False)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Data cleanup" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import pandas as pd\n", "\n", "crimes_df = pd.read_csv(r'C:\\xc\\Presentations\\Demos\\Houston\\crime_df.csv', parse_dates=[7], low_memory=False)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "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", "
# Of# Of Offenses# Offenses# offensesBeatBlock RangeBlockRangeDateField11HourOffense TypePremiseStreet NameStreetNameSuffixTypeUnnamed: 1
0NaN1.0NaNNaN11H303000-3099NaN2010-01-08NaN22.0Murder20RBROADWAYNaN-STNaN
1NaN1.0NaNNaN10H502800-2899NaN2010-01-17NaN18.0Murder18CMCGOWENNaN-STNaN
2NaN1.0NaNNaN15E309600-9699NaN2010-01-01NaN0.0Murder18AMARLIVENaN-LNNaN
\n", "
" ], "text/plain": [ " # Of # Of Offenses # Offenses # offenses Beat Block Range BlockRange \\\n", "0 NaN 1.0 NaN NaN 11H30 3000-3099 NaN \n", "1 NaN 1.0 NaN NaN 10H50 2800-2899 NaN \n", "2 NaN 1.0 NaN NaN 15E30 9600-9699 NaN \n", "\n", " Date Field11 Hour Offense Type Premise Street Name StreetName \\\n", "0 2010-01-08 NaN 22.0 Murder 20R BROADWAY NaN \n", "1 2010-01-17 NaN 18.0 Murder 18C MCGOWEN NaN \n", "2 2010-01-01 NaN 0.0 Murder 18A MARLIVE NaN \n", "\n", " Suffix Type Unnamed: 1 \n", "0 - ST NaN \n", "1 - ST NaN \n", "2 - LN NaN " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crimes_df.head(3)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Data wrangling" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "# drop empty rows and replace '-' with ''\n", "crimes_df.dropna(axis=0, how='all', inplace=True)\n", "crimes_df = crimes_df.replace('-', '')\n", "\n", "# offenses are spread across four columns with different name. Similar for BlockRange and StreetName. Combine the columns:\n", "crimes_df['Offenses'] = (crimes_df['# Of'].combine_first( \\\n", " crimes_df['# Of Offenses']).combine_first( \\\n", " crimes_df['# Offenses']).combine_first( \\\n", " crimes_df['# offenses'])).astype(int)\n", "\n", "crimes_df['BlockRange'] = crimes_df['BlockRange'].combine_first( \\\n", " crimes_df['Block Range'])\n", "\n", "crimes_df['StreetName'] = crimes_df['StreetName'].combine_first( \\\n", " crimes_df['Street Name'])\n", "\n", "# extract the approximate (mid) address from the block range \n", "# and construct an address column using it and the street suffix, name and type:\n", "houseno = crimes_df.BlockRange.str.extract('(?P\\d+)-(?P\\d+)', expand=False)\n", "crimes_df['HouseNo'] = (houseno.start_addr.astype(float) + houseno.end_addr.astype(float) + 1.0) / 2\n", "crimes_df['HouseNo'] = crimes_df['HouseNo'].fillna(50.0)\n", "\n", "crimes_df['Address'] = crimes_df.HouseNo.astype(int).map(str) + ' ' + \\\n", " crimes_df.Suffix.map(str) + ' ' + \\\n", " crimes_df.StreetName.map(str) + ' ' + \\\n", " crimes_df.Type.map(str) + ', Houston, TX'\n", " \n", "# the hour column contains strings (with leading quotes), floats and int as well as empty strings. Convert them all to ints:\n", "crimes_df['Hour'] = crimes_df['Hour'].apply(lambda x : int(float(x.replace(\"'\", \"\"))) if type(x) == str else int(float(x)))\n", "\n", "# create a new column for Day of the week, useful for analysis:\n", "crimes_df['DayOfWeek'] = crimes_df.Date.dt.weekday_name\n", "\n", "# rename Offense Type to Category\n", "crimes_df = crimes_df.rename(columns={'Offense Type' : 'Category'})" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Cleaned up data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "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", "
DateHourDayOfWeekCategoryOffensesBeatAddress
02010-01-0822FridayMurder111H303050 BROADWAY ST, Houston, TX
12010-01-1718SundayMurder110H502850 MCGOWEN ST, Houston, TX
22010-01-010FridayMurder115E309650 MARLIVE LN, Houston, TX
32010-01-0914SaturdayMurder15F209050 LONG POINT RD, Houston, TX
42010-01-1814MondayMurder110H404350 GARROTT ST, Houston, TX
\n", "
" ], "text/plain": [ " Date Hour DayOfWeek Category Offenses Beat \\\n", "0 2010-01-08 22 Friday Murder 1 11H30 \n", "1 2010-01-17 18 Sunday Murder 1 10H50 \n", "2 2010-01-01 0 Friday Murder 1 15E30 \n", "3 2010-01-09 14 Saturday Murder 1 5F20 \n", "4 2010-01-18 14 Monday Murder 1 10H40 \n", "\n", " Address \n", "0 3050 BROADWAY ST, Houston, TX \n", "1 2850 MCGOWEN ST, Houston, TX \n", "2 9650 MARLIVE LN, Houston, TX \n", "3 9050 LONG POINT RD, Houston, TX \n", "4 4350 GARROTT ST, Houston, TX " ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "analysis_df = crimes_df[['Date', 'Hour', 'DayOfWeek', 'Category', 'Offenses', 'Beat', 'Address']]\n", "analysis_df.head()" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "houston_processed = r'C:\\xc\\Presentations\\Demos\\Houston\\houston_processed.csv'\n", "analysis_df.to_csv(houston_processed, index_label='id')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Convert to Spatial dataframe with geocoded addresses" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Spatial Dataframes let you work with spatial data as if it were a Pandas dataframe. It adds geospatial operations to Pandas as well as the ability to read and write shapefiles and file geodatabases." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from arcgis.gis import GIS\n", "from arcgis import SpatialDataFrame\n", "\n", "gis = GIS('https://dev003246.esri.com/portal', USERNAME, PASSWORD, verify_cert=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "spdf = SpatialDataFrame.from_df(houston_processed, 'Address')\n", "spdf.sr = arcgis.geometry.SpatialReference(4326)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Pandas Dataframe to shapefiles or file geodatabase" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import os\n", "\n", "for year in range(2010, 2017):\n", " start_date = str(year) + '-01-01'\n", " end_date = str(year) + '-12-31'\n", " \n", " mask = (spdf['Date'] > start_date) & (spdf['Date'] <= end_date)\n", " spdf_year = spdf.loc[mask]\n", " \n", " directory = r'C:\\xc\\Presentations\\Demos\\Houston\\houstoncrime' + str(year) \n", " if not os.path.exists(directory):\n", " os.makedirs(directory)\n", " \n", " spdf_year.to_featureclass(out_location=directory,\n", " out_name='Houston' + str(year) + '.shp')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true, "scrolled": true }, "outputs": [], "source": [ "spdf.to_featureclass(out_location=r\"C:\\xc\\Presentations\\Demos\\Houston\\houston.gdb\", out_name=\"crime\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Connect the data to your GIS" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "#### Publish as hosted feature layer" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = r'C:\\xc\\Presentations\\Demos\\Houston\\shp\\houston2016.zip' \n", "shpfile = gis.content.add({}, data)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "crime2016 = shpfile.publish()" ] }, { "cell_type": "code", "execution_count": 199, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " houston2016\n", " \n", "
Feature Layer Collection by admin\n", "
Last Modified: March 02, 2017\n", "
0 comments, 2 views\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 199, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crime2016 = gis.content.search('houston2016', 'feature layer')[0]\n", "crime2016" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "#### Attach to geoanalytics datastore as bigdata file share" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "datastores = arcgis.geoanalytics.get_datastores()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "houston_bigdata = datastores.add_bigdata('Houston_crime', r'\\\\teton\\atma_shared\\datasets\\Houstonshp')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "houston_yearly_bigdata = datastores.add_bigdata('Houston_crime_yearly', r'\\\\teton\\atma_shared\\datasets\\HoustonCrime')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The datasets within the attached bigdata fileshare show up as Items and Layers and are available for analysis:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " bigDataFileShares_Houston_crime\n", " \n", "
Big Data File Share by admin\n", "
Last Modified: February 25, 2017\n", "
0 comments, 0 views\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " bigDataFileShares_Houston_crime_yearly\n", " \n", "
Big Data File Share by admin\n", "
Last Modified: March 03, 2017\n", "
0 comments, 0 views\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "items = gis.content.search(\"houston\", \"big data file share\")\n", "for item in items:\n", " display(item)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "houston_crime = items[0]\n", "houston_yearly = items[1]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "houston_yearly.layers" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Mapping, Visualization and Analysis" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Visualize crime layer using the Map widget and Smart Mapping:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "houston = arcgis.geocoding.geocode('Houston, TX')[0]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "18eb52eb1e8849f0afcdf3e01511ffc0" } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "crime2016 = gis.content.search('houston2016', 'feature layer')[0]\n", "\n", "map1 = gis.map(houston, 12)\n", "map1.add_layer(crime2016)\n", "\n", "map2 = gis.map(houston, 12)\n", "map2.add_layer(crime2016, {\"renderer\":\"HeatmapRenderer\", \"opacity\":0.75})\n", "\n", "from ipywidgets import *\n", "\n", "map1.layout=Layout(flex='1 1', padding='10px')\n", "map2.layout=Layout(flex='1 1', padding='10px')\n", "\n", "crimebox = HBox([map1, map2])\n", "crimebox" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Exploratory data analysis" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from arcgis import SpatialDataFrame\n", "\n", "df = SpatialDataFrame.from_featureclass(filename = r\"C:\\xc\\Presentations\\Demos\\Houston\\houston.gdb\\crime\")" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Index(['OBJECTID', 'Date', 'Hour', 'DayOfWeek', 'Category', 'Offenses', 'Beat',\n", " 'Address', 'X', 'Y', 'SHAPE'],\n", " dtype='object')" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "What are the most comon crimes?" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nqEkwREREzf8H5UdpjOL9gDYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# crimes by category\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "groups = df.groupby(\"Category\")[\"Category\"].count()\n", "groups = groups.sort_values(ascending=False)\n", "plt.figure()\n", "groups.plot(kind='bar', title=\"Crimes by Category\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Does crime distribution change by the day of the week?" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "collapsed": false, "deletable": true, "editable": true, "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1,2)\n", "\n", "weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n", "\n", "df_murder = df[df.Category == \"Murder\"]\n", "gr_murder = df_murder.groupby(\"DayOfWeek\")[\"Offenses\"].sum()\n", "gr_murder = gr_murder[weekdays]\n", "\n", "df_burglary = df[df.Category == \"Burglary\"]\n", "gr_burglary = df_burglary.groupby(\"DayOfWeek\")[\"Offenses\"].sum()\n", "gr_burglary = gr_burglary[weekdays]\n", "\n", "gr_murder.plot(kind=\"bar\", title=\"Murder per weekday\", ax=axs[0])\n", "gr_burglary.plot(kind=\"bar\", title=\"Burglary per weekday\", ax=axs[1], figsize=(12, 5))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Which crimes occur during which part of the day?" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# thefts and burglaries by hour\n", "fig, axs = plt.subplots(1,2)\n", "hours = [x for x in range(24)]\n", "df_theft = df[df.Category == \"Murder\"]\n", "gr_theft = df_theft.groupby(\"Hour\")[\"Category\"].count()\n", "gr_theft = gr_theft[hours]\n", "\n", "df_burglary = df[df.Category == \"Burglary\"]\n", "gr_burglary = df_burglary.groupby(\"Hour\")[\"Category\"].count()\n", "gr_burglary = gr_burglary[hours]\n", "\n", "gr_theft.plot(kind=\"bar\", title=\"Murder per hour\", ax=axs[0])\n", "gr_burglary.plot(kind=\"bar\", title=\"Burglary per hour\", ax=axs[1], figsize=(20, 5))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Big data analytics" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "GeoAnalytics provides a set of powerful tools for performing spatial analysis on big data. GeoAnalytics Tools are powered by your ArcGIS GeoAnalytics Server. ArcGIS GeoAnalytics Server distributes the analysis between multiple server nodes. By using distributed processing, you can process large datasets in less time." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Find hot spots of crime" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The “Find Hot Spots” tool can be used to identify statistically significant clusters of crime.\n", "\n", "We can automate the creation of hotspots for all crime categories, across the years and create persisted information products in the form of web layers:" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "from arcgis.geoanalytics.analyze_patterns import find_hot_spots\n", "arcgis.env.process_spatial_reference=32611\n", "arcgis.env.verbose = False" ] }, { "cell_type": "code", "execution_count": 260, "metadata": { "collapsed": false, "deletable": true, "editable": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generating Houston_Aggravated_Assault_Hotspot_2010\n", "Generating Houston_Aggravated_Assault_Hotspot_2011\n", "Generating Houston_Aggravated_Assault_Hotspot_2012\n", "Generating Houston_Aggravated_Assault_Hotspot_2013\n", "Generating Houston_Aggravated_Assault_Hotspot_2014\n", "Generating Houston_Aggravated_Assault_Hotspot_2015\n", "Generating Houston_Aggravated_Assault_Hotspot_2016\n", "Generating Houston_Burglary_Hotspot_2010\n", "Generating Houston_Burglary_Hotspot_2011\n", "Generating Houston_Burglary_Hotspot_2012\n", "Generating Houston_Burglary_Hotspot_2013\n", "Generating Houston_Burglary_Hotspot_2014\n", "Generating Houston_Burglary_Hotspot_2015\n", "Generating Houston_Burglary_Hotspot_2016\n", "Generating Houston_Murder_Hotspot_2010\n", "Generating Houston_Murder_Hotspot_2011\n", "Generating Houston_Murder_Hotspot_2012\n", "Generating Houston_Murder_Hotspot_2013\n", "Generating Houston_Murder_Hotspot_2014\n", "Generating Houston_Murder_Hotspot_2015\n", "Generating Houston_Murder_Hotspot_2016\n", "Generating Houston_Rape_Hotspot_2010\n", "Generating Houston_Rape_Hotspot_2011\n", "Generating Houston_Rape_Hotspot_2012\n", "Generating Houston_Rape_Hotspot_2013\n", "Generating Houston_Rape_Hotspot_2014\n", "Generating Houston_Rape_Hotspot_2015\n", "Generating Houston_Rape_Hotspot_2016\n", "Generating Houston_Robbery_Hotspot_2010\n", "Generating Houston_Robbery_Hotspot_2011\n", "Generating Houston_Robbery_Hotspot_2012\n", "Generating Houston_Robbery_Hotspot_2013\n", "Generating Houston_Robbery_Hotspot_2014\n", "Generating Houston_Robbery_Hotspot_2015\n", "Generating Houston_Robbery_Hotspot_2016\n", "Generating Houston_Auto_Theft_Hotspot_2010\n", "Generating Houston_Auto_Theft_Hotspot_2011\n", "Generating Houston_Auto_Theft_Hotspot_2012\n", "Generating Houston_Auto_Theft_Hotspot_2013\n", "Generating Houston_Auto_Theft_Hotspot_2014\n", "Generating Houston_Auto_Theft_Hotspot_2015\n", "Generating Houston_Auto_Theft_Hotspot_2016\n", "Generating Houston_Theft_Hotspot_2010\n", "Generating Houston_Theft_Hotspot_2011\n", "Generating Houston_Theft_Hotspot_2012\n", "Generating Houston_Theft_Hotspot_2013\n", "Generating Houston_Theft_Hotspot_2014\n", "Generating Houston_Theft_Hotspot_2015\n", "Generating Houston_Theft_Hotspot_2016\n" ] } ], "source": [ "for category in df.Category.unique()[:-1]:\n", " lyrid = 0\n", " for year in range(2010, 2017):\n", " output_name='Houston_' + category.replace(' ', '_') + '_Hotspot_' + str(year)\n", " print('Generating ' + output_name)\n", " layer = houston_yearly.layers[lyrid]\n", " layer.filter = \"Category='{}'\".format(category)\n", " \n", " find_hot_spots(layer, bin_size=0.5, bin_size_unit='Miles', \n", " neighborhood_distance=1, neighborhood_distance_unit='Miles', output_name=output_name)\n", " \n", " lyrid = lyrid + 1" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "##### Compare Burglary hot spots with auto-theft hot spots" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8edc948b61c440e893a82e5d3884dca1" } }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dc1caa0aeb4548738cb2bf26b36ac786" } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hotmap1 = gis.map(houston, 10)\n", "hotmap1.add_layer(gis.content.search('Houston_Burglary_Hotspot_2016')[0])\n", "hotmap2 = gis.map(houston, 10)\n", "hotmap2.add_layer(gis.content.search('Houston_Auto_Theft_Hotspot_2016')[0])\n", "\n", "hotmap1.layout=Layout(flex='1 1', padding='3px')\n", "hotmap2.layout=Layout(flex='1 1', padding='3px')\n", "\n", "items_layout = Layout(flex='1 1 auto', width='auto')\n", "\n", "display(HBox([hotmap1, hotmap2]))\n", "display(HBox(children=[Button(description='Burglary hot spots in 2016', layout=items_layout, button_style='danger'),\n", " Button(description='Auto theft hot spots in 2016', layout=items_layout, button_style='danger')],\n", " layout=Layout(width='100%')))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "##### Compare hot spots over time" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ef64b81833b742979c9645d0dfd088a5" } }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "783f4226cf9b49f388588ea510b963c4" } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "maps = []\n", "labels = []\n", "items_layout = Layout(flex='1 1 auto', width='auto')\n", "for year in range(2014, 2017):\n", " layer = gis.content.search('Houston_Auto_Theft_Hotspot_'+str(year))[0]\n", " hotspotmap = gis.map(houston)\n", " hotspotmap.add_layer(layer)\n", " hotspotmap.layout=Layout(flex='1 1', padding='3px')\n", " maps.append(hotspotmap)\n", " hotspotmap.basemap='gray'\n", " labels.append(Button(description='Auto theft hot spots in ' + str(year), layout=items_layout, button_style='danger'))\n", " \n", "layout=Layout(height='300px')\n", "display(HBox([maps[0], maps[1], maps[2]], layout=layout))\n", "display(HBox(children=labels, layout=Layout(width='100%')))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The hot spots in each category are strikingly similar across years. The hot spots of yesterday are the hotspots of tomorrow, and this information can be used to deploy officers and to identify areas in need of intervention." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aggregate crimes into police beats" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " Houston Police Beats\n", " \n", "
Feature Layer Collection by admin\n", "
Last Modified: February 25, 2017\n", "
0 comments, 2 views\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "items = gis.content.search('Houston Police Beats', 'feature layer')\n", "for item in items:\n", " display(item)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "police_beats = items[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from arcgis.geoanalytics.summarize_data import aggregate_points\n", "arcgis.env.verbose = True\n", "\n", "aggregate_points(houston_crime.layers[0]._lyr_dict, polygon_layer=police_beats, output_name='Houston Aggregated Crimes')" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", " \n", " \n", " \n", "
\n", "\n", "
\n", " Houston Aggregated Crimes\n", " \n", "
Houston Aggregated CrimesFeature Layer Collection by admin\n", "
Last Modified: September 02, 2017\n", "
0 comments, 2 views\n", "
\n", "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aggr_lyr = gis.content.search('Houston Aggregated Crimes')[0]\n", "aggr_lyr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize crime aggregated by police beat" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "29149b9b3c01492e995f91d7c27fdd9e" } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "beats_map = gis.map(houston, 11)\n", "beats_map" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [], "source": [ "beats_map.basemap = 'gray'" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": true }, "outputs": [], "source": [ "beats_map.add_layer(aggr_lyr, {\n", " \"renderer\":\"ClassedColorRenderer\",\n", " \"field_name\":\"SUM_Offenses\", \n", " \"classificationMethod\":'natural-breaks',\n", " \"numClasses\":10,\n", " \"opacity\":0.75\n", " })" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize aggregation results using plots" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": true }, "outputs": [], "source": [ "aggr_df = aggr_lyr.layers[0].query().df" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "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", "
SUM_Offenses
beats_0
01A1028528.0
12D1018820.0
19G1016688.0
13D2016609.0
06B6016322.0
01A2016294.0
\n", "
" ], "text/plain": [ " SUM_Offenses\n", "beats_0 \n", "01A10 28528.0\n", "12D10 18820.0\n", "19G10 16688.0\n", "13D20 16609.0\n", "06B60 16322.0\n", "01A20 16294.0" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aggr_df = aggr_df[['beats_0', 'SUM_Offenses']]\n", "aggr_df.set_index('beats_0', inplace=True)\n", "aggr_df.sort_values('SUM_Offenses', ascending=False).head(6)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEnCAYAAACg3pTpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcFtWV97+nQXCDBhVBQcERIS5R1KhozBu3KGQmQkw0\nxoxgool5XWLMRMVxFDCZRJxonLiEiUuEuEYdlzFEiUFMjMEdUVQao6CAEBJA0MyrEM77x70N1dX1\ndFd190N3U7/v51Ofp55Tp26de+vWPVV3NXdHCCFE+ahpbwOEEEK0D3IAQghRUuQAhBCipMgBCCFE\nSZEDEEKIkiIHIIQQJaVZB2Bm3c3saTN70cxeNrPxUT7IzGaZ2Twzu9PMukZ5NzO7y8zmm9kfzWzX\nRFgXR/lrZnZsQj7CzF43szozu6gaERVCCNGQZh2Au38IHOnu+wPDgJFmdggwCbjK3YcCq4DT4ymn\nAyvcfQ/gGuBKADPbCzgJ2BMYCdxggRrgOuA4YG/gy2b2sTaMoxBCiAxyVQG5+9/ibnegK+DAkcB9\nUT4FGB33R8X/APcCR8X944G73H2duy8A5gMHx22+uy9097XAXTEMIYQQVSSXAzCzGjN7EVgK/Ab4\nE7DK3ddHlUVA/7jfH3gHwN3/DrxnZtsl5ZHFUZaWJ8MSQghRJfJ+AayPVUADCG/se2apxV+rcKyo\nXAghRBXpWkTZ3Veb2RPAcKCXmdXEr4ABwJKotgjYBVhiZl2AWndfaWb18nrqzzFg1wx5I8xMjkEI\nIVqAuzd62c7TC2gHM6uN+1sBxwCvAo8DJ0a1scCDcf+h+J94fEZCfnLsJbQbMBh4BngWGGxmA82s\nG3By1K0UiQbb+PHjG8kqbUV0qxl2Z9PtKHZ0BN2OYkdn0+0odnQE3fawoxJ5vgB2AqbE3jo1wN3u\nPs3MXgPuMrPvAS8CN0f9m4FfmNl84K+xQMfdXzWzX0bnsRY4y4Nlfzezc4DpMfyb3f21HHYJIYRo\nBc06AHd/GTggQ/4WcEiG/ENCd8+ssH4I/DBD/ggwNIe9Qggh2oguEyZMaG8bcjNx4sQJWfYOGjQo\ndxhFdKsZdmfT7Sh2dATdjmJHZ9PtKHZ0BN1NbcfEiROZMGHCxLTcmqof6miYmXcme4UQoiNgZnhG\nI3ChXkBCiI7LoEGDWLhwYXubIdqRgQMHsmDBgtz6+gIQYjMhvuW1txmiHamUByp9AWg2UCGEKCly\nAEIIUVLkAIQQoqR0SgfQr98gzKzR1q/foPY2TQghOg2d0gEsW7aQMF9cwy3IhRD1VHpZaqttc3vp\nuv/++9l1113p2bMnL730EnV1dRxwwAHU1tZy3XXXtbd5bU6ndABCiHxUellqq63IS9eTTz7JJz/5\nSXr16sUOO+zApz71KZ5//nkmTpzIqaee2ki/pqaGN998E4AjjjiCmpoaXn755QY6o0ePpqamht/9\n7nfNXv/VV19l1KhR9OrVi9raWo4++mj++Mc/NtC54IILuOGGG1i9ejX77bcfV155JUceeSTvvfce\n55xzTu64dhbkAIQQVWfNmjV87nOf47zzzmPlypUsXryY8ePH0717dyB0U0yTlJkZQ4cOZerUqRtk\nK1as4Omnn2bHHXds9vp/+tOfOPzww9lvv/1YsGABS5YsYfTo0Rx77LE8/fTTG/QWLlzIXnvt1eD/\n3nvv3aI4dwbkAIQQVaeurg4z46STTsLM6N69O8cccwz77LNPxXPS/dm/8pWvcPfdd2+Q33nnnZxw\nwgl069at2etPmDCBww47jMsvv5xevXqxzTbbcO6553Lqqady0UUX8dFHH9GjRw/Wr1/Pfvvtxx57\n7MHRRx/N448/ztlnn03Pnj154403+Oijj/jud7/LwIED2WmnnTjrrLP48MMPAXjiiSfYZZdduPrq\nq+nbty/9+/fn1ltv3WDDtGnT2HvvvenZs+cGvXoefvhh9t9/f3r37s3hhx/e4Etn0qRJDBgwgJ49\ne7Lnnnvy+OOP50rzPMgBCCGqzpAhQ+jSpQunnXYajzzyCKtWrSocxs4778xee+3F9OnTAZg6dSpj\nxozJNfjtscce48QTT2wkP+mkk/jDH/7A+vXrWbNmDe7OnDlzmD9/Pr/97W/51Kc+xfXXX8/q1asZ\nPHgwF154IW+88QZz5szhjTfeYPHixVx++eUbwlu6dClr1qxhyZIl3HTTTZx99tm89957AJxxxhnc\neOONrF69mldeeYWjjgqr5b7wwgucfvrp3HjjjaxYsYIzzzyT448/nrVr11JXV8f111/P888/z+rV\nq3n00UcLzznUFHIAQoiq06NHD5588klqamr4xje+QZ8+fRg9ejR//vOfC4UzZswYpkyZQl1dHe+9\n9x6HHNJoQuJM/vKXv7DTTjs1ku+0006sX7+elStXbpA15VBuuukmfvzjH1NbW8s222zDuHHjuPPO\nOzcc79atG5deeildunRh5MiRbLvttsybN2/Dsblz57JmzRpqa2sZNmzYhjC/+c1v8olPfAIz49RT\nT6V79+7MmjWLLl268NFHH/HKK6+wbt06dt11V3bbbbdccc6DHIAQYpMwdOhQbrnlFt5++23mzp3L\nkiVL+Pa3v03Xrl1Zu3ZtA91169YBsMUWWzSQf/7zn2fGjBlce+21mQ3Hldhhhx149913G8nfffdd\nampq6N27d7NhLF++nL/97W8ceOCBbLfddmy33XaMHDmSv/71rxt0tt9+e2pqNharW2+9Ne+//z4A\n9913H7/61a8YOHAgRx55JLNmzQJCO8NVV121IczevXuzaNEilixZwu67784111zDhAkT6Nu3L6ec\nckpmPFqKHIAQYpMzZMgQxo4dy9y5cxk4cCBvvfVWg+NvvvkmXbt2pX///g3kW221FSNHjmTy5MmM\nGTMm9/WOOeYY7rnnnkbyu+++m0MPPZQtt9yy2TB22GEHtt56a+bOncuKFStYsWIFq1at2lDF0xwH\nHnggDzzwAMuXL2fUqFGcdFJYNmWXXXbhkksu2RDmypUref/99/nSl74EwMknn8zvf//7DRP9jRs3\nLm+0m0UOQIjNmL59BxKW3a7OFsJvnnnz5nH11VezePFiAN555x3uvPNODj30UI477jjq6uq4/fbb\nWbduHStWrOCSSy7hxBNPbPA2Xc8Pf/jDDQ2ueRk/fjxPPfUUl1566YYC9tprr+W2227jyiuvzBWG\nmfH1r3+db3/72yxfvhyAxYsXb2iTaIq1a9dyxx13sHr1arp06UKPHj3o2jVMxvz1r3+dyZMn88wz\nzwDwwQcfMG3aND744APq6up4/PHH+eijj+jWrRtbbbUVXbp0yR3v5pADEGIzZunSBYXWqi26LV26\nIJcdPXr04Omnn+aQQw6hR48eHHbYYey777786Ec/ok+fPkybNo3Jkyez4447su+++9K7d29uuOGG\nDecnu4T269ePww47LPNYJQYPHsyTTz7J7NmzGTRoEDvvvDP3338/06dPZ/jw4RXDSv+fNGkSgwcP\nZvjw4fTq1Ytjjz2Wurq6itdNnv+LX/yC3XbbjV69evGzn/2M22+/HQhfBjfeeCPnnHMO2223HUOG\nDGHKlCkAfPjhh4wbN44+ffqw8847s3z5cn7wgx80G9+8dMrpoEOiZtmt6XBFedF00ELTQQshhMiF\n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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "aggr_df.sort_values('SUM_Offenses', ascending=False).head(30).plot(kind='bar')" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "aggr_df['SUM_Offenses'].hist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Predictive analysis using Machine Learning\n", "\n", "But that’s still looking into the past and telling us what happened. Can we look into the future and predict or prevent crimes or be better equipped to handle them? \n", "\n", "Crime is a function of many complex variables that’s hard for humans to make sense of… but by using machine learning and artificial intelligence, computers can sift through this data and gain insights into what may be going on. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature engineering using data enrichment" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from arcgis.features import enrich_data" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Submitted.\n", "Executing...\n" ] } ], "source": [ "enriched_houston = enrich_data.enrich_layer(police_beats, data_collections = [\"KeyUSFacts\"], \n", " analysis_variables=[\"AtRisk.AVGHINC_CY\",\"KeyUSFacts.DIVINDX_CY\"])" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": true }, "outputs": [], "source": [ "analysis_variables = [\n", " 'TOTPOP_CY', # 2016 Population: Total Population (Esri)\n", " 'HHPOP_CY', # 2016 Household Population (Esri)\n", " 'FAMPOP_CY', # 2016 Family Population (Esri)\n", " 'DIVINDX_CY', # 2016 Diversity Index (Esri)\n", " 'TOTHH_CY', # 2016 Total Households (Esri)\n", " 'AVGHHSZ_CY', # 2016 Average Household Size (Esri)\n", "\n", " 'MALES_CY', # 2016 Gender: Male Population (Esri)\n", " 'FEMALES_CY', # 2016 Gender: Female Population (Esri)\n", " \n", " 'MEDAGE_CY', # 2016 Age: Median Age (Esri)\n", " \n", " 'AVGFMSZ_CY', # 2016 Income: Average Family Size (Esri)\n", " 'MEDHINC_CY', # 2016 Income: Median Household Income (Esri)\n", " 'AVGHINC_CY', # 2016 Income: Average Household Income (Esri)\n", " \n", " 'EDUCBASECY', # 2016 Educational Attainment Base (Esri)\n", " 'NOHS_CY', # 2016 Education: Less than 9th Grade (Esri)\n", " 'SOMEHS_CY', # 2016 Education: 9-12th Grade/No Diploma (Esri)\n", " 'HSGRAD_CY', # 2016 Education: High School Diploma (Esri)\n", " 'GED_CY', # 2016 Education: GED/Alternative Credential (Esri)\n", " 'SMCOLL_CY', # 2016 Education: Some College/No Degree (Esri)\n", " 'ASSCDEG_CY', # 2016 Education: Associate's Degree (Esri)\n", " 'BACHDEG_CY', # 2016 Education: Bachelor's Degree (Esri)\n", "]" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Submitted.\n", "Executing...\n" ] } ], "source": [ "enriched_crime = enrich_data.enrich_layer(police_beats,\n", " analysis_variables=analysis_variables)" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "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", "
ASSCDEG_CYAVGFMSZ_CYAVGHHSZ_CYAVGHINC_CYBACHDEG_CYDIVINDX_CYEDUCBASECYENRICH_FIDFAMPOP_CYFEMALES_CY...objectid_1objectid_12perimet_mishape_lengshape_st_1shape_st_2shape_starshape_stlesourceCountrySHAPE
00.00.000.000.00.00.00.01.00.00.0...119.25498448866.3137428.473145e+0748866.3137428.473145e+0748866.313742US{'rings': [[[-10591016.05175769, 3454151.57706...
10.03.572.2993321.016.079.630.02.025.014.0...227.15363937771.2134415.921056e+0737771.2134415.921056e+0737771.213441US{'rings': [[[-10605043.981271267, 3459581.0059...
2545.02.341.3599836.01142.072.812007.03.0818.02482.0...336.23670932929.8239994.868851e+0732929.8239964.868851e+0732929.823996US{'rings': [[[-10614376.898870792, 3473632.3481...
3869.02.551.64112053.08333.063.820489.04.010231.011424.0...447.95132941993.6986826.803877e+0741983.0184676.803877e+0741983.018467US{'rings': [[[-10617740.97474497, 3473028.47709...
4709.02.551.66123895.07777.060.621564.05.012226.012827.0...558.01640542379.1519257.406897e+0742326.6210537.406897e+0742326.621053US{'rings': [[[-10619905.80550302, 3471864.28871...
\n", "

5 rows × 39 columns

\n", "
" ], "text/plain": [ " ASSCDEG_CY AVGFMSZ_CY AVGHHSZ_CY AVGHINC_CY BACHDEG_CY DIVINDX_CY \\\n", "0 0.0 0.00 0.00 0.0 0.0 0.0 \n", "1 0.0 3.57 2.29 93321.0 16.0 79.6 \n", "2 545.0 2.34 1.35 99836.0 1142.0 72.8 \n", "3 869.0 2.55 1.64 112053.0 8333.0 63.8 \n", "4 709.0 2.55 1.66 123895.0 7777.0 60.6 \n", "\n", " EDUCBASECY ENRICH_FID FAMPOP_CY FEMALES_CY \\\n", "0 0.0 1.0 0.0 0.0 \n", "1 30.0 2.0 25.0 14.0 \n", "2 12007.0 3.0 818.0 2482.0 \n", "3 20489.0 4.0 10231.0 11424.0 \n", "4 21564.0 5.0 12226.0 12827.0 \n", "\n", " ... objectid_1 objectid_12 \\\n", "0 ... 1 1 \n", "1 ... 2 2 \n", "2 ... 3 3 \n", "3 ... 4 4 \n", "4 ... 5 5 \n", "\n", " perimet_mi shape_leng shape_st_1 shape_st_2 shape_star \\\n", "0 9.254984 48866.313742 8.473145e+07 48866.313742 8.473145e+07 \n", "1 7.153639 37771.213441 5.921056e+07 37771.213441 5.921056e+07 \n", "2 6.236709 32929.823999 4.868851e+07 32929.823996 4.868851e+07 \n", "3 7.951329 41993.698682 6.803877e+07 41983.018467 6.803877e+07 \n", "4 8.016405 42379.151925 7.406897e+07 42326.621053 7.406897e+07 \n", "\n", " shape_stle sourceCountry \\\n", "0 48866.313742 US \n", "1 37771.213441 US \n", "2 32929.823996 US \n", "3 41983.018467 US \n", "4 42326.621053 US \n", "\n", " SHAPE \n", "0 {'rings': [[[-10591016.05175769, 3454151.57706... \n", "1 {'rings': [[[-10605043.981271267, 3459581.0059... \n", "2 {'rings': [[[-10614376.898870792, 3473632.3481... \n", "3 {'rings': [[[-10617740.97474497, 3473028.47709... \n", "4 {'rings': [[[-10619905.80550302, 3471864.28871... \n", "\n", "[5 rows x 39 columns]" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "enriched_df = enriched_crime.query().df\n", "enriched_df.head()" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Index(['ASSCDEG_CY', 'AVGFMSZ_CY', 'AVGHHSZ_CY', 'AVGHINC_CY', 'BACHDEG_CY',\n", " 'DIVINDX_CY', 'EDUCBASECY', 'ENRICH_FID', 'FAMPOP_CY', 'FEMALES_CY',\n", " 'GED_CY', 'HHPOP_CY', 'HSGRAD_CY', 'HasData', 'ID', 'MALES_CY',\n", " 'MEDAGE_CY', 'MEDHINC_CY', 'NOHS_CY', 'SMCOLL_CY', 'SOMEHS_CY',\n", " 'TOTHH_CY', 'TOTPOP_CY', 'aggregationMethod', 'area_sq_mi', 'beats',\n", " 'beats_0', 'district', 'objectid', 'objectid_1', 'objectid_12',\n", " 'perimet_mi', 'shape_leng', 'shape_st_1', 'shape_st_2', 'shape_star',\n", " 'shape_stle', 'sourceCountry', 'SHAPE'],\n", " dtype='object')" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "enriched_df.columns" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": true }, "outputs": [], "source": [ "edf = enriched_df[['beats_0'] + analysis_variables]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Merge with original crime dataframe" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Index(['OBJECTID', 'Date', 'Hour', 'DayOfWeek', 'Category', 'Offenses', 'Beat',\n", " 'Address', 'X', 'Y', 'SHAPE', 'beats_0', 'TOTPOP_CY', 'HHPOP_CY',\n", " 'FAMPOP_CY', 'DIVINDX_CY', 'TOTHH_CY', 'AVGHHSZ_CY', 'MALES_CY',\n", " 'FEMALES_CY', 'MEDAGE_CY', 'AVGFMSZ_CY', 'MEDHINC_CY', 'AVGHINC_CY',\n", " 'EDUCBASECY', 'NOHS_CY', 'SOMEHS_CY', 'HSGRAD_CY', 'GED_CY',\n", " 'SMCOLL_CY', 'ASSCDEG_CY', 'BACHDEG_CY'],\n", " dtype='object')" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged_df = df.merge(edf, left_on='Beat', right_on='beats_0')\n", "merged_df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Apply machine learning using Scikit-learn" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn import preprocessing\n", "from sklearn.metrics import log_loss\n", "from sklearn.naive_bayes import BernoulliNB\n", "from sklearn.linear_model import LogisticRegression\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['Aggravated Assault', 'Burglary', 'Robbery', 'Auto Theft', 'Theft',\n", " 'Rape', 'Murder', '1'], dtype=object)" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = merged_df\n", "df.Category.unique()" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = df[df.Category != '1']\n", "df = df[df.DayOfWeek != '']\n", "\n", "offence_encoder = preprocessing.LabelEncoder()\n", "offences = offence_encoder.fit_transform(df['Category'])\n", "\n", "hour = pd.get_dummies(df.Hour, prefix=\"hour\")\n", "day = pd.get_dummies(df.DayOfWeek, prefix=\"day\")\n", "beats = pd.get_dummies(df.Beat, prefix=\"beats\")" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": true }, "outputs": [], "source": [ "offence_encoder = preprocessing.LabelEncoder()\n", "offences = offence_encoder.fit_transform(df['Category'])" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = pd.concat([hour, day, beats], axis=1)" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": false }, "outputs": [], "source": [ "data['Violent'] = df['Category'].apply(lambda x : 1 if x in ['Murder', 'Rape', 'Aggravated Assault'] else 0)" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": false }, "outputs": [], "source": [ "data = data[:1000]" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": true }, "outputs": [], "source": [ "training, validation = train_test_split(data, train_size=.75)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": true }, "outputs": [], "source": [ "features = list(training.columns)[:-1]" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)" ] }, "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.svm import SVC\n", "\n", "svc = SVC()\n", "svc.fit(training[features], training.Violent)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check accuracy of SVC classifier" ] }, { "cell_type": "code", "execution_count": 189, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.79600000000000004" ] }, "execution_count": 189, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svc.score(training[features], training.Violent)" ] }, { "cell_type": "code", "execution_count": 190, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.78800000000000003" ] }, "execution_count": 190, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svc.score(validation[features], validation.Violent)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Once again, using entire data" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = pd.concat([hour, day, beats], axis=1)\n", "data['Violent'] = df['Category'].apply(lambda x : 1 if x in ['Murder', 'Rape', 'Aggravated Assault'] else 0)" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "training, validation = train_test_split(data, train_size=.75)" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "features = list(training.columns)[:-1]" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)" ] }, "execution_count": 215, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.svm import SVC\n", "\n", "svc = SVC()\n", "svc.fit(training[features], training.Violent)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "### Check accuracy of SVC classifier" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.91283468584793992" ] }, "execution_count": 216, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svc.score(training[features], training.Violent)" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.91278333372186093" ] }, "execution_count": 217, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svc.score(validation[features], validation.Violent)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda env:arcgispro-py3]", "language": "python", "name": "conda-env-arcgispro-py3-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.3" } }, "nbformat": 4, "nbformat_minor": 1 }