{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# The usual preamble\n", "import pandas as pd\n", "\n", "# Make the graphs a bit prettier, and bigger\n", "pd.set_option('display.mpl_style', 'default')\n", "figsize(15, 5)\n", "\n", "\n", "# Always display all the columns\n", "pd.set_option('display.line_width', 5000) \n", "pd.set_option('display.max_columns', 60) " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's continue with our NYC 311 service requests example." ] }, { "cell_type": "code", "collapsed": false, "input": [ "complaints = pd.read_csv('../data/311-service-requests.csv')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3.1 Selecting only noise complaints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'd like to know which borough has the most noise complaints. First, we'll take a look at the data to see what it looks like:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "complaints[:5]" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unique KeyCreated DateClosed DateAgencyAgency NameComplaint TypeDescriptorLocation TypeIncident ZipIncident AddressStreet NameCross Street 1Cross Street 2Intersection Street 1Intersection Street 2Address TypeCityLandmarkFacility TypeStatusDue DateResolution Action Updated DateCommunity BoardBoroughX Coordinate (State Plane)Y Coordinate (State Plane)Park Facility NamePark BoroughSchool NameSchool NumberSchool RegionSchool CodeSchool Phone NumberSchool AddressSchool CitySchool StateSchool ZipSchool Not FoundSchool or Citywide ComplaintVehicle TypeTaxi Company BoroughTaxi Pick Up LocationBridge Highway NameBridge Highway DirectionRoad RampBridge Highway SegmentGarage Lot NameFerry DirectionFerry Terminal NameLatitudeLongitudeLocation
0 26589651 10/31/2013 02:08:41 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11432 90-03 169 STREET 169 STREET 90 AVENUE 91 AVENUE NaN NaN ADDRESS JAMAICA NaN Precinct Assigned 10/31/2013 10:08:41 AM 10/31/2013 02:35:17 AM 12 QUEENS QUEENS 1042027 197389 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.708275-73.791604 (40.70827532593202, -73.79160395779721)
1 26593698 10/31/2013 02:01:04 AM NaN NYPD New York City Police Department Illegal Parking Commercial Overnight Parking Street/Sidewalk 11378 58 AVENUE 58 AVENUE 58 PLACE 59 STREET NaN NaN BLOCKFACE MASPETH NaN Precinct Open 10/31/2013 10:01:04 AM NaN 05 QUEENS QUEENS 1009349 201984 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.721041-73.909453 (40.721040535628305, -73.90945306791765)
2 26594139 10/31/2013 02:00:24 AM 10/31/2013 02:40:32 AM NYPD New York City Police Department Noise - Commercial Loud Music/Party Club/Bar/Restaurant 10032 4060 BROADWAY BROADWAY WEST 171 STREET WEST 172 STREET NaN NaN ADDRESS NEW YORK NaN Precinct Closed 10/31/2013 10:00:24 AM 10/31/2013 02:39:42 AM 12 MANHATTAN MANHATTAN 1001088 246531 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.843330-73.939144 (40.84332975466513, -73.93914371913482)
3 26595721 10/31/2013 01:56:23 AM 10/31/2013 02:21:48 AM NYPD New York City Police Department Noise - Vehicle Car/Truck Horn Street/Sidewalk 10023 WEST 72 STREET WEST 72 STREET COLUMBUS AVENUE AMSTERDAM AVENUE NaN NaN BLOCKFACE NEW YORK NaN Precinct Closed 10/31/2013 09:56:23 AM 10/31/2013 02:21:10 AM 07 MANHATTAN MANHATTAN 989730 222727 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.778009-73.980213 (40.7780087446372, -73.98021349023975)
4 26590930 10/31/2013 01:53:44 AM NaN DOHMH Department of Health and Mental Hygiene Rodent Condition Attracting Rodents Vacant Lot 10027 WEST 124 STREET WEST 124 STREET LENOX AVENUE ADAM CLAYTON POWELL JR BOULEVARD NaN NaN BLOCKFACE NEW YORK NaN N/A Pending 11/30/2013 01:53:44 AM 10/31/2013 01:59:54 AM 10 MANHATTAN MANHATTAN 998815 233545 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.807691-73.947387 (40.80769092704951, -73.94738703491433)
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ " Unique Key Created Date Closed Date Agency Agency Name Complaint Type Descriptor Location Type Incident Zip Incident Address Street Name Cross Street 1 Cross Street 2 Intersection Street 1 Intersection Street 2 Address Type City Landmark Facility Type Status Due Date Resolution Action Updated Date Community Board Borough X Coordinate (State Plane) Y Coordinate (State Plane) Park Facility Name Park Borough School Name School Number School Region School Code School Phone Number School Address School City School State School Zip School Not Found School or Citywide Complaint Vehicle Type Taxi Company Borough Taxi Pick Up Location Bridge Highway Name Bridge Highway Direction Road Ramp Bridge Highway Segment Garage Lot Name Ferry Direction Ferry Terminal Name Latitude Longitude Location\n", "0 26589651 10/31/2013 02:08:41 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11432 90-03 169 STREET 169 STREET 90 AVENUE 91 AVENUE NaN NaN ADDRESS JAMAICA NaN Precinct Assigned 10/31/2013 10:08:41 AM 10/31/2013 02:35:17 AM 12 QUEENS QUEENS 1042027 197389 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.708275 -73.791604 (40.70827532593202, -73.79160395779721)\n", "1 26593698 10/31/2013 02:01:04 AM NaN NYPD New York City Police Department Illegal Parking Commercial Overnight Parking Street/Sidewalk 11378 58 AVENUE 58 AVENUE 58 PLACE 59 STREET NaN NaN BLOCKFACE MASPETH NaN Precinct Open 10/31/2013 10:01:04 AM NaN 05 QUEENS QUEENS 1009349 201984 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.721041 -73.909453 (40.721040535628305, -73.90945306791765)\n", "2 26594139 10/31/2013 02:00:24 AM 10/31/2013 02:40:32 AM NYPD New York City Police Department Noise - Commercial Loud Music/Party Club/Bar/Restaurant 10032 4060 BROADWAY BROADWAY WEST 171 STREET WEST 172 STREET NaN NaN ADDRESS NEW YORK NaN Precinct Closed 10/31/2013 10:00:24 AM 10/31/2013 02:39:42 AM 12 MANHATTAN MANHATTAN 1001088 246531 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.843330 -73.939144 (40.84332975466513, -73.93914371913482)\n", "3 26595721 10/31/2013 01:56:23 AM 10/31/2013 02:21:48 AM NYPD New York City Police Department Noise - Vehicle Car/Truck Horn Street/Sidewalk 10023 WEST 72 STREET WEST 72 STREET COLUMBUS AVENUE AMSTERDAM AVENUE NaN NaN BLOCKFACE NEW YORK NaN Precinct Closed 10/31/2013 09:56:23 AM 10/31/2013 02:21:10 AM 07 MANHATTAN MANHATTAN 989730 222727 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.778009 -73.980213 (40.7780087446372, -73.98021349023975)\n", "4 26590930 10/31/2013 01:53:44 AM NaN DOHMH Department of Health and Mental Hygiene Rodent Condition Attracting Rodents Vacant Lot 10027 WEST 124 STREET WEST 124 STREET LENOX AVENUE ADAM CLAYTON POWELL JR BOULEVARD NaN NaN BLOCKFACE NEW YORK NaN N/A Pending 11/30/2013 01:53:44 AM 10/31/2013 01:59:54 AM 10 MANHATTAN MANHATTAN 998815 233545 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.807691 -73.947387 (40.80769092704951, -73.94738703491433)" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get the noise complaints, we need to find the rows where the \"Complaint Type\" column is \"Noise - Street/Sidewalk\". I'll show you how to do that, and then explain what's going on." ] }, { "cell_type": "code", "collapsed": false, "input": [ "noise_complaints = complaints[complaints['Complaint Type'] == \"Noise - Street/Sidewalk\"]\n", "noise_complaints[:3]" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unique KeyCreated DateClosed DateAgencyAgency NameComplaint TypeDescriptorLocation TypeIncident ZipIncident AddressStreet NameCross Street 1Cross Street 2Intersection Street 1Intersection Street 2Address TypeCityLandmarkFacility TypeStatusDue DateResolution Action Updated DateCommunity BoardBoroughX Coordinate (State Plane)Y Coordinate (State Plane)Park Facility NamePark BoroughSchool NameSchool NumberSchool RegionSchool CodeSchool Phone NumberSchool AddressSchool CitySchool StateSchool ZipSchool Not FoundSchool or Citywide ComplaintVehicle TypeTaxi Company BoroughTaxi Pick Up LocationBridge Highway NameBridge Highway DirectionRoad RampBridge Highway SegmentGarage Lot NameFerry DirectionFerry Terminal NameLatitudeLongitudeLocation
0 26589651 10/31/2013 02:08:41 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11432 90-03 169 STREET 169 STREET 90 AVENUE 91 AVENUE NaN NaN ADDRESS JAMAICA NaN Precinct Assigned 10/31/2013 10:08:41 AM 10/31/2013 02:35:17 AM 12 QUEENS QUEENS 1042027 197389 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.708275-73.791604 (40.70827532593202, -73.79160395779721)
16 26594086 10/31/2013 12:54:03 AM 10/31/2013 02:16:39 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 10310 173 CAMPBELL AVENUE CAMPBELL AVENUE HENDERSON AVENUE WINEGAR LANE NaN NaN ADDRESS STATEN ISLAND NaN Precinct Closed 10/31/2013 08:54:03 AM 10/31/2013 02:07:14 AM 01 STATEN ISLAND STATEN ISLAND 952013 171076 Unspecified STATEN ISLAND Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.636182-74.116150 (40.63618202176914, -74.1161500428337)
25 26591573 10/31/2013 12:35:18 AM 10/31/2013 02:41:35 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 10312 24 PRINCETON LANE PRINCETON LANE HAMPTON GREEN DEAD END NaN NaN ADDRESS STATEN ISLAND NaN Precinct Closed 10/31/2013 08:35:18 AM 10/31/2013 01:45:17 AM 03 STATEN ISLAND STATEN ISLAND 929577 140964 Unspecified STATEN ISLAND Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.553421-74.196743 (40.55342078716953, -74.19674315017886)
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ " Unique Key Created Date Closed Date Agency Agency Name Complaint Type Descriptor Location Type Incident Zip Incident Address Street Name Cross Street 1 Cross Street 2 Intersection Street 1 Intersection Street 2 Address Type City Landmark Facility Type Status Due Date Resolution Action Updated Date Community Board Borough X Coordinate (State Plane) Y Coordinate (State Plane) Park Facility Name Park Borough School Name School Number School Region School Code School Phone Number School Address School City School State School Zip School Not Found School or Citywide Complaint Vehicle Type Taxi Company Borough Taxi Pick Up Location Bridge Highway Name Bridge Highway Direction Road Ramp Bridge Highway Segment Garage Lot Name Ferry Direction Ferry Terminal Name Latitude Longitude Location\n", "0 26589651 10/31/2013 02:08:41 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11432 90-03 169 STREET 169 STREET 90 AVENUE 91 AVENUE NaN NaN ADDRESS JAMAICA NaN Precinct Assigned 10/31/2013 10:08:41 AM 10/31/2013 02:35:17 AM 12 QUEENS QUEENS 1042027 197389 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.708275 -73.791604 (40.70827532593202, -73.79160395779721)\n", "16 26594086 10/31/2013 12:54:03 AM 10/31/2013 02:16:39 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 10310 173 CAMPBELL AVENUE CAMPBELL AVENUE HENDERSON AVENUE WINEGAR LANE NaN NaN ADDRESS STATEN ISLAND NaN Precinct Closed 10/31/2013 08:54:03 AM 10/31/2013 02:07:14 AM 01 STATEN ISLAND STATEN ISLAND 952013 171076 Unspecified STATEN ISLAND Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.636182 -74.116150 (40.63618202176914, -74.1161500428337)\n", "25 26591573 10/31/2013 12:35:18 AM 10/31/2013 02:41:35 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 10312 24 PRINCETON LANE PRINCETON LANE HAMPTON GREEN DEAD END NaN NaN ADDRESS STATEN ISLAND NaN Precinct Closed 10/31/2013 08:35:18 AM 10/31/2013 01:45:17 AM 03 STATEN ISLAND STATEN ISLAND 929577 140964 Unspecified STATEN ISLAND Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.553421 -74.196743 (40.55342078716953, -74.19674315017886)" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you look at `noise_complaints`, you'll see that this worked, and it only contains complaints with the right complaint type. But how does this work? Let's deconstruct it into two pieces" ] }, { "cell_type": "code", "collapsed": false, "input": [ "complaints['Complaint Type'] == \"Noise - Street/Sidewalk\"" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "0 True\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "5 False\n", "6 False\n", "7 False\n", "8 False\n", "9 False\n", "10 False\n", "11 False\n", "12 False\n", "13 False\n", "14 False\n", "...\n", "111054 True\n", "111055 False\n", "111056 False\n", "111057 False\n", "111058 False\n", "111059 True\n", "111060 False\n", "111061 False\n", "111062 False\n", "111063 False\n", "111064 False\n", "111065 False\n", "111066 True\n", "111067 False\n", "111068 False\n", "Name: Complaint Type, Length: 111069, dtype: bool" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a big array of `True`s and `False`s, one for each row in our dataframe. When we index our dataframe with this array, we get just the rows where.\n", "\n", "You can also combine more than one condition with the `&` operator like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "is_noise = complaints['Complaint Type'] == \"Noise - Street/Sidewalk\"\n", "in_brooklyn = complaints['Borough'] == \"BROOKLYN\"\n", "complaints[is_noise & in_brooklyn][:5]" ], "language": "python", "metadata": {}, "outputs": [ { "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unique KeyCreated DateClosed DateAgencyAgency NameComplaint TypeDescriptorLocation TypeIncident ZipIncident AddressStreet NameCross Street 1Cross Street 2Intersection Street 1Intersection Street 2Address TypeCityLandmarkFacility TypeStatusDue DateResolution Action Updated DateCommunity BoardBoroughX Coordinate (State Plane)Y Coordinate (State Plane)Park Facility NamePark BoroughSchool NameSchool NumberSchool RegionSchool CodeSchool Phone NumberSchool AddressSchool CitySchool StateSchool ZipSchool Not FoundSchool or Citywide ComplaintVehicle TypeTaxi Company BoroughTaxi Pick Up LocationBridge Highway NameBridge Highway DirectionRoad RampBridge Highway SegmentGarage Lot NameFerry DirectionFerry Terminal NameLatitudeLongitudeLocation
31 26595564 10/31/2013 12:30:36 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11236 AVENUE J AVENUE J EAST 80 STREET EAST 81 STREET NaN NaN BLOCKFACE BROOKLYN NaN Precinct Open 10/31/2013 08:30:36 AM NaN 18 BROOKLYN BROOKLYN 1008937 170310 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.634104-73.911055 (40.634103775951736, -73.91105541883589)
49 26595553 10/31/2013 12:05:10 AM 10/31/2013 02:43:43 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11225 25 LEFFERTS AVENUE LEFFERTS AVENUE WASHINGTON AVENUE BEDFORD AVENUE NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/31/2013 08:05:10 AM 10/31/2013 01:29:29 AM 09 BROOKLYN BROOKLYN 995366 180388 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.661793-73.959934 (40.6617931276793, -73.95993363978067)
109 26594653 10/30/2013 11:26:32 PM 10/31/2013 12:18:54 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11222 NaN NaN NaN NaN DOBBIN STREET NORMAN STREET INTERSECTION BROOKLYN NaN Precinct Closed 10/31/2013 07:26:32 AM 10/31/2013 12:18:54 AM 01 BROOKLYN BROOKLYN 996925 203271 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.724600-73.954271 (40.724599563793525, -73.95427134534344)
236 26591992 10/30/2013 10:02:58 PM 10/30/2013 10:23:20 PM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11218 DITMAS AVENUE DITMAS AVENUE NaN NaN NaN NaN LATLONG BROOKLYN NaN Precinct Closed 10/31/2013 06:02:58 AM 10/30/2013 10:23:20 PM 01 BROOKLYN BROOKLYN 991895 171051 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.636169-73.972455 (40.63616876563881, -73.97245504682485)
370 26594167 10/30/2013 08:38:25 PM 10/30/2013 10:26:28 PM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11218 126 BEVERLY ROAD BEVERLY ROAD CHURCH AVENUE EAST 2 STREET NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/31/2013 04:38:25 AM 10/30/2013 10:26:28 PM 12 BROOKLYN BROOKLYN 990144 173511 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified NNaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.642922-73.978762 (40.6429222774404, -73.97876175474585)
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ " Unique Key Created Date Closed Date Agency Agency Name Complaint Type Descriptor Location Type Incident Zip Incident Address Street Name Cross Street 1 Cross Street 2 Intersection Street 1 Intersection Street 2 Address Type City Landmark Facility Type Status Due Date Resolution Action Updated Date Community Board Borough X Coordinate (State Plane) Y Coordinate (State Plane) Park Facility Name Park Borough School Name School Number School Region School Code School Phone Number School Address School City School State School Zip School Not Found School or Citywide Complaint Vehicle Type Taxi Company Borough Taxi Pick Up Location Bridge Highway Name Bridge Highway Direction Road Ramp Bridge Highway Segment Garage Lot Name Ferry Direction Ferry Terminal Name Latitude Longitude Location\n", "31 26595564 10/31/2013 12:30:36 AM NaN NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11236 AVENUE J AVENUE J EAST 80 STREET EAST 81 STREET NaN NaN BLOCKFACE BROOKLYN NaN Precinct Open 10/31/2013 08:30:36 AM NaN 18 BROOKLYN BROOKLYN 1008937 170310 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.634104 -73.911055 (40.634103775951736, -73.91105541883589)\n", "49 26595553 10/31/2013 12:05:10 AM 10/31/2013 02:43:43 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11225 25 LEFFERTS AVENUE LEFFERTS AVENUE WASHINGTON AVENUE BEDFORD AVENUE NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/31/2013 08:05:10 AM 10/31/2013 01:29:29 AM 09 BROOKLYN BROOKLYN 995366 180388 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.661793 -73.959934 (40.6617931276793, -73.95993363978067)\n", "109 26594653 10/30/2013 11:26:32 PM 10/31/2013 12:18:54 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11222 NaN NaN NaN NaN DOBBIN STREET NORMAN STREET INTERSECTION BROOKLYN NaN Precinct Closed 10/31/2013 07:26:32 AM 10/31/2013 12:18:54 AM 01 BROOKLYN BROOKLYN 996925 203271 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.724600 -73.954271 (40.724599563793525, -73.95427134534344)\n", "236 26591992 10/30/2013 10:02:58 PM 10/30/2013 10:23:20 PM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 11218 DITMAS AVENUE DITMAS AVENUE NaN NaN NaN NaN LATLONG BROOKLYN NaN Precinct Closed 10/31/2013 06:02:58 AM 10/30/2013 10:23:20 PM 01 BROOKLYN BROOKLYN 991895 171051 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.636169 -73.972455 (40.63616876563881, -73.97245504682485)\n", "370 26594167 10/30/2013 08:38:25 PM 10/30/2013 10:26:28 PM NYPD New York City Police Department Noise - Street/Sidewalk Loud Music/Party Street/Sidewalk 11218 126 BEVERLY ROAD BEVERLY ROAD CHURCH AVENUE EAST 2 STREET NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/31/2013 04:38:25 AM 10/30/2013 10:26:28 PM 12 BROOKLYN BROOKLYN 990144 173511 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.642922 -73.978762 (40.6429222774404, -73.97876175474585)" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or if we just wanted a few columns:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "complaints[is_noise & in_brooklyn][['Complaint Type', 'Borough', 'Created Date', 'Descriptor']][:10]" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
Complaint TypeBoroughCreated DateDescriptor
31 Noise - Street/Sidewalk BROOKLYN 10/31/2013 12:30:36 AM Loud Music/Party
49 Noise - Street/Sidewalk BROOKLYN 10/31/2013 12:05:10 AM Loud Talking
109 Noise - Street/Sidewalk BROOKLYN 10/30/2013 11:26:32 PM Loud Music/Party
236 Noise - Street/Sidewalk BROOKLYN 10/30/2013 10:02:58 PM Loud Talking
370 Noise - Street/Sidewalk BROOKLYN 10/30/2013 08:38:25 PM Loud Music/Party
378 Noise - Street/Sidewalk BROOKLYN 10/30/2013 08:32:13 PM Loud Talking
656 Noise - Street/Sidewalk BROOKLYN 10/30/2013 06:07:39 PM Loud Music/Party
1251 Noise - Street/Sidewalk BROOKLYN 10/30/2013 03:04:51 PM Loud Talking
5416 Noise - Street/Sidewalk BROOKLYN 10/29/2013 10:07:02 PM Loud Talking
5584 Noise - Street/Sidewalk BROOKLYN 10/29/2013 08:15:59 PM Loud Music/Party
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ " Complaint Type Borough Created Date Descriptor\n", "31 Noise - Street/Sidewalk BROOKLYN 10/31/2013 12:30:36 AM Loud Music/Party\n", "49 Noise - Street/Sidewalk BROOKLYN 10/31/2013 12:05:10 AM Loud Talking\n", "109 Noise - Street/Sidewalk BROOKLYN 10/30/2013 11:26:32 PM Loud Music/Party\n", "236 Noise - Street/Sidewalk BROOKLYN 10/30/2013 10:02:58 PM Loud Talking\n", "370 Noise - Street/Sidewalk BROOKLYN 10/30/2013 08:38:25 PM Loud Music/Party\n", "378 Noise - Street/Sidewalk BROOKLYN 10/30/2013 08:32:13 PM Loud Talking\n", "656 Noise - Street/Sidewalk BROOKLYN 10/30/2013 06:07:39 PM Loud Music/Party\n", "1251 Noise - Street/Sidewalk BROOKLYN 10/30/2013 03:04:51 PM Loud Talking\n", "5416 Noise - Street/Sidewalk BROOKLYN 10/29/2013 10:07:02 PM Loud Talking\n", "5584 Noise - Street/Sidewalk BROOKLYN 10/29/2013 08:15:59 PM Loud Music/Party" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3.2 A digression about numpy arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On the inside, the type of a column is `pd.Series`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "pd.Series([1,2,3])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "0 1\n", "1 2\n", "2 3\n", "dtype: int64" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "and pandas Series are internally numpy arrays. If you add `.values` to the end of any `Series`, you'll get its internal numpy array" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.array([1,2,3])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "array([1, 2, 3])" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "pd.Series([1,2,3]).values" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "array([1, 2, 3])" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So this binary-array-selection business is actually something that works with any numpy array:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "arr = np.array([1,2,3])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "arr != 2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "array([ True, False, True], dtype=bool)" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "arr[arr != 2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "array([1, 3])" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3.3 So, which borough has the most noise complaints?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "is_noise = complaints['Complaint Type'] == \"Noise - Street/Sidewalk\"\n", "noise_complaints = complaints[is_noise]\n", "noise_complaints['Borough'].value_counts()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "MANHATTAN 917\n", "BROOKLYN 456\n", "BRONX 292\n", "QUEENS 226\n", "STATEN ISLAND 36\n", "Unspecified 1\n", "dtype: int64" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's Manhattan! But what if we wanted to divide by the total number of complaints, to make it make a bit more sense? That would be easy too:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "noise_complaint_counts = noise_complaints['Borough'].value_counts()\n", "complaint_counts = complaints['Borough'].value_counts()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "noise_complaint_counts / complaint_counts" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "BRONX 0\n", "BROOKLYN 0\n", "MANHATTAN 0\n", "QUEENS 0\n", "STATEN ISLAND 0\n", "Unspecified 0\n", "dtype: int64" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Oops, why was that zero? That's no good. This is because of integer division in Python 2. Let's fix it, by converting `complaint_counts` into an array of floats." ] }, { "cell_type": "code", "collapsed": false, "input": [ "noise_complaint_counts / complaint_counts.astype(float)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "BRONX 0.014833\n", "BROOKLYN 0.013864\n", "MANHATTAN 0.037755\n", "QUEENS 0.010143\n", "STATEN ISLAND 0.007474\n", "Unspecified 0.000141\n", "dtype: float64" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "(noise_complaint_counts / complaint_counts.astype(float)).plot(kind='bar')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA3UAAAF8CAYAAABonpLBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X9w1PWdx/HXLmFDNiFGiyYLluMqnhVyLpPxelDowJQ5\ncWB60hKotipafjjiXU/q0ateY0DgAPGUopmbDsz0YuvYGtqj3gBCJ+KMGeJFmgsBChSk3p1NFuRX\nsknkx/Ld+0OzDeSTzW5+fL/7zff5mGEmn28+7Lx3fPkh73w/38/64vF4XAAAAAAAV/I7XQAAAAAA\noO9o6gAAAADAxWjqAAAAAMDFaOoAAAAAwMVo6gAAAADAxWjqAAAAAMDFsnqb0NjYqG3btkmSFixY\noOLi4j7NvXLliv7hH/5Bf/u3f6t777037dcGAAAAAHSXtKmzLEtVVVUqKyuTJK1du1YTJ06Uz+dL\ne+5vfvMbfeELX+jTawMAAAAAzJJuv4xEIgqFQgoEAgoEAiosLFQkEkl77qVLl9TY2Ki77767T68N\nAAAAADBLeqeura1Nubm5qqyslCQFg0FFo1GFQqG05u7atUv33nuvLly40KfXBgAAAACYJW3q8vLy\n1N7ersWLFysej2vr1q3Kz89Pa25HR4eOHj2quXPn6p133unTa0tSdXV1394hAAAAAAwRM2fO7HYt\naVNXVFSk5ubmxDgSiaioqCitufX19bpy5Yp+9KMf6fTp07p69aqKi4s1evTolF+7U0lJSdLvAwAA\nAMBQVV9fb7yetKnz+/0qLS3V6tWrJUnz589PfK+2tlbZ2dmJRqunuSUlJYk577zzji5duqRbb71V\nknp8bQyumpoaTZs2zekykGHIBUzIBUzIBUzIBUzIhT16/UiDcDiscDjc7fqUKVNSnttpxowZac0H\nAAAAACTni8fjcaeLSEV1dTXbLwEAAAB4Vn19vfGZuqQfaQAAAAAAyGw0dR5UU1PjdAnIQOQCJuQC\nJuQCJuQCJuTCHjR1AAAAAOBiPFMHAAAAAC7AM3UAAAAAMATR1HkQe5thQi5gQi5gQi5gQi5gQi7s\nQVMHAAAAAC7GM3UAAAAA4AI8UwcAAAAAQxBNnQextxkm5AIm5AIm5AIm5AIm5MIeWU4XAABDUXPr\nJZ1uv+x0Gf1mjRqnA81Rp8vot1tyAwrlZztdBgAAg4Jn6gBgEBxojmrFjhNOl4HPbJwzXuHQSKfL\nAACgX3imDgAAAACGIJo6D2JvM0zIBYBUsV7AhFzAhFzYg6YOAAAAAFyMps6Dpk2b5nQJyEDkAkCq\nWC9gQi5gQi7sQVMHAAAAAC5GU+dB7G2GCbkAkCrWC5iQC5iQC3vQ1AEAAACAi9HUeRB7m2FCLgCk\nivUCJuQCJuTCHjR1AAAAAOBiNHUexN5mmJALAKlivYAJuYAJubAHTR0AAAAAuBhNnQextxkm5AJA\nqlgvYEIuYEIu7EFTBwAAAAAuRlPnQexthgm5AJAq1guYkAuYkAt7ZKUyqbGxUdu2bZMkLViwQMXF\nxWnP/fnPf65jx47J7/dr6dKlKiwslCRVVFSoqalJgUBA06dP14wZM/rzfgAAAADAU3pt6izLUlVV\nlcrKyiRJa9eu1cSJE+Xz+dKae//990uSjh49ql//+tdaunSpJMnn82n58uUaNWrUgL0pJMfeZpiQ\nCwCpYr2ACbmACbmwR6/bLyORiEKhkAKBgAKBgAoLCxWJRPo89/jx4xozZsw11+LxeD/eAgAAAAB4\nV6936tra2pSbm6vKykpJUjAYVDQaVSgUSntueXm5Wltb9dxzzyX+Tk5OjjZv3qy8vDwtXLhQRUVF\nPdZSU1OT6PY79+cyTn/cdW9zJtTDODPGBw8e1OOPP54x9bh9bI0aJ2SOlpYWKTRSUmbkw+1j1gvG\n/HzBONUx68XAjoPBoEx88V5ukzU1NWn79u1avHix4vG4tm7dqnnz5hmbr1TmnjhxQlVVVXr66aev\n+bsffvihqqqqtGLFCmMd1dXVKikpSVYqUlRT86fmGOhELgbWgeaoVuw44XQZ+MzGOeMV/qypQ/+x\nXsCEXMCEXAys+vp6zZw5s9v1XrdfFhUVqbm5OTGORCI93k1LZW5BQYEsy+r2d4cPH66srKzeysEA\n4H8smJALAKlivYAJuYAJubBHr12U3+9XaWmpVq9eLUmaP39+4nu1tbXKzs5O3EFLNvell15SNBpV\nVlaWvvOd7ySub9q0SefPn1dOTo4WLVo0MO8KAAAAADyi1+2XmYLtlwOH2+AwIRcDi+2XmYXtlwOL\n9QIm5AIm5GJg9Xn7JQAAAAAgc9HUeRC/LYEJuQCQKtYLmJALmJALe9DUAQAAAICL0dR5UNfPkQE6\nkQsAqWK9gAm5gAm5sAdNHQAAAAC4GE2dB7G3GSbkAkCqWC9gQi5gQi7sQVMHAAAAAC5GU+dB7G2G\nCbkAkCrWC5iQC5iQC3vQ1AEAAACAi9HUeRB7m2FCLgCkivUCJuQCJuTCHjR1AAAAAOBiNHUexN5m\nmJALAKlivYAJuYAJubAHTR0AAAAAuBhNnQextxkm5AJAqlgvYEIuYEIu7EFTBwAAAAAuRlPnQext\nhgm5AJAq1guYkAuYkAt70NQBAAAAgIvR1HkQe5thQi4ApIr1AibkAibkwh40dQAAAADgYjR1HsTe\nZpiQCwCpYr2ACbmACbmwB00dAAAAALgYTZ0HsbcZJuQCQKpYL2BCLmBCLuxBUwcAAAAALkZT50Hs\nbYYJuQCQKtYLmJALmJALe9DUAQAAAICL0dR5EHubYUIuAKSK9QIm5AIm5MIeNHUAAAAA4GJZvU1o\nbGzUtm3bJEkLFixQcXFx2nN//vOf69ixY/L7/Vq6dKkKCwvTfm0MnJqaGn5rgm7IBYBUsV7AhFzA\nhFzYI2lTZ1mWqqqqVFZWJklau3atJk6cKJ/Pl9bc+++/X5J09OhR/frXv9bSpUvTem0AAAAAgFnS\n7ZeRSEShUEiBQECBQECFhYWKRCJ9nnv8+HGNGTMm7dfGwOK3JTAhFwBSxXoBE3IBE3Jhj6R36tra\n2pSbm6vKykpJUjAYVDQaVSgUSntueXm5Wltb9dxzz6X92p263r7tPB6VMWPGjDNxbI0aJ2SOlpYW\nKTRSUmbkgzFjxowZM+7LOBgMysQXj8fjxu9Iampq0vbt27V48WLF43Ft3bpV8+bNU1FRUZ/mnjhx\nQlVVVXr66afTem1Jqq6uVklJSU+lIg01NextRnfkYmAdaI5qxY4TTpeBz2ycM17hz5o69B/rBUzI\nBUzIxcCqr6/XzJkzu11Puv2yqKhIzc3NiXEkEumx6UplbkFBga5evZr2awMAAAAAzLKSfdPv96u0\ntFSrV6+WJM2fPz/xvdraWmVnZyfuniWb+9JLLykajSorK0uLFi3qdT4GF78tgQm5AJAq1guYkAuY\nkAt7JN1+mUnYfgnATdh+mVnYfgkAGAr6tP0SQ1PnQ5dAV+QCQKpYL2BCLmBCLuxBUwcAAAAALkZT\n50HsbYYJuQCQKtYLmJALmJALe9DUAQAAAICL0dR5EHubYUIuAKSK9QIm5AIm5MIeNHUAAAAA4GI0\ndR7E3maYkAsAqWK9gAm5gAm5sAdNHQAAAAC4GE2dB7G3GSbkAkCqWC9gQi5gQi7sQVMHAAAAAC5G\nU+dB7G2GCbkAkCrWC5iQC5iQC3vQ1AEAAACAi9HUeRB7m2FCLgCkivUCJuQCJuTCHjR1AAAAAOBi\nNHUexN5mmJALAKlivYAJuYAJubAHTR0AAAAAuBhNnQextxkm5AJAqlgvYEIuYEIu7EFTBwAAAAAu\nRlPnQexthgm5AJAq1guYkAuYkAt70NQBAAAAgIvR1HkQe5thQi4ApIr1AibkAibkwh40dQAAAADg\nYjR1HsTeZpiQCwCpYr2ACbmACbmwB00dAAAAALgYTZ0HsbcZJuQCQKpYL2BCLmBCLuxBUwcAAAAA\nLkZT50HsbYYJuQCQKtYLmJALmJALe2SlMqmxsVHbtm2TJC1YsEDFxcVpz92yZYuamppkWZaWLVum\nwsJCSVJFRYWampoUCAQ0ffp0zZgxoz/vBwAAAAA8pdemzrIsVVVVqaysTJK0du1aTZw4UT6fL625\nS5YskSQdOnRIb775ZmLs8/m0fPlyjRo1asDeFJKrqanhtybohlwASBXrBUzIBUzIhT163X4ZiUQU\nCoUUCAQUCARUWFioSCTS57kjRoxQVta1vWQ8Hu/HWwAAAAAA7+r1Tl1bW5tyc3NVWVkpSQoGg4pG\nowqFQn2au3fvXs2ePTsxzsnJ0ebNm5WXl6eFCxeqqKiox1q6dvqdJ+kwTn88bdq0jKqHceaMO2VK\nPW4eW6PGCZmjpaVFCo2UlBn5GArjTplSD2Pnx/x8wZj1YvDHwWBQJr54L7fJmpqatH37di1evFjx\neFxbt27VvHnzjM1Xb3P379+vU6dOac6cOd3+7ocffqiqqiqtWLHCWEd1dbVKSkqSlQoAGeNAc1Qr\ndpxwugx8ZuOc8Qp/1tQBAOBW9fX1mjlzZrfrvW6/LCoqUnNzc2IciUR6vJuWbO7Jkyd15MgRY0Mn\nScOHD++2LROD4/rfmgASuQCQOtYLmJALmJALe/TaRfn9fpWWlmr16tWSpPnz5ye+V1tbq+zs7MQd\ntGRzX3zxRX3uc5/TqlWrNHbsWD366KOSpE2bNun8+fPKycnRokWLBu6dAQAAAIAH9Lr9MlOw/RKA\nm7D9MrOw/RIAMBT0efslAAAAACBz0dR5EHubYUIuAKSK9QIm5AIm5MIeNHUAAAAA4GI0dR7U+VkX\nQFfkAkCqWC9gQi5gQi7sQVMHAAAAAC5GU+dB7G2GCbkAkCrWC5iQC5iQC3vQ1AEAAACAi9HUeRB7\nm2FCLgCkivUCJuQCJuTCHjR1AAAAAOBiNHUexN5mmJALAKlivYAJuYAJubAHTR0AAAAAuBhNnQex\ntxkm5AJAqlgvYEIuYEIu7EFTBwAAAAAuRlPnQexthgm5AJAq1guYkAuYkAt70NQBAAAAgIvR1HkQ\ne5thQi4ApIr1AibkAibkwh40dQAAAADgYjR1HsTeZpiQCwCpYr2ACbmACbmwB00dAAAAALgYTZ0H\nsbcZJuQCQKpYL2BCLmBCLuxBUwcAAAAALkZT50HsbYYJuQCQKtYLmJALmJALe9DUAQAAAICL0dR5\nEHubYUIuAKSK9QIm5AIm5MIeNHUAAAAA4GI0dR7E3maYkAsAqWK9gAm5gAm5sAdNHQAAAAC4WFZv\nExobG7Vt2zZJ0oIFC1RcXJz23C1btqipqUmWZWnZsmUqLCxM+7UxcNjbDBNyASBVrBcwIRcwIRf2\nSNrUWZalqqoqlZWVSZLWrl2riRMnyufzpTV3yZIlkqRDhw7pzTff1JIlS9J6bQAAAACAWdLtl5FI\nRKFQSIFAQIFAQIWFhYpEIn2eO2LECGVlZaX92hhY7G2GCbkAkCrWC5iQC5iQC3skbera2tqUm5ur\nyspKVVZWKhgMKhqN9nnu3r17dc8996T92p26hqKmpoYxY8YDOD548GBG1eP2cUtLi5A5uv73yIR8\nuH3MesGYMeNUx6wXAzvuiS8ej8d7+mZTU5O2b9+uxYsXKx6Pa+vWrZo3b56KiorSnrt//36dOnVK\nc+bMSfu1Jam6ulolJSU9vhEAyCQHmqNaseOE02XgMxvnjFc4NNLpMgAA6Jf6+nrNnDmz2/Wkd+qK\niorU3NycGEcikR6brmRzT548qSNHjiQaunRfGwAAAABglpXsm36/X6WlpVq9erUkaf78+Ynv1dbW\nKjs7O3H3LNncF198UZ/73Oe0atUqjR07Vo8++mjS+RhcNTU1nESEbsgFgFSxXsCEXMCEXNgjaVMn\nSeFwWOFwuNv1KVOmpDz3lVdeSeu1AQAAAACp4cPHPYjflsCEXABIFesFTMgFTMiFPWjqAAAAAMDF\naOo8KNlxqPAucgEgVawXMCEXMCEX9qCpAwAAAAAXo6nzIPY2w4RcAEgV6wVMyAVMyIU9aOoAAAAA\nwMVo6jyIvc0wIRcAUsV6ARNyARNyYQ+aOgAAAABwMZo6D2JvM0zIBYBUsV7AhFzAhFzYg6YOAAAA\nAFyMps6D2NsME3IBIFWsFzAhFzAhF/agqQMAAAAAF6Op8yD2NsOEXABIFesFTMgFTMiFPWjqAAAA\nAMDFaOo8iL3NMCEXAFLFegETcgETcmEPmjoAAAAAcDGaOg9ibzNMyAWAVLFewIRcwIRc2IOmDgAA\nAABcjKbOg9jbDBNyASBVrBcwIRcwIRf2oKkDAAAAABejqfMg9jbDhFwASBXrBUzIBUzIhT1o6gAA\nAADAxWjqPIi9zTAhFwBSxXoBE3IBE3JhD5o6AAAAAHAxmjoPYm8zTMgFgFSxXsCEXMCEXNiDpg4A\nAAAAXIymzoPY2wwTcgEgVawXMCEXMCEX9shKZVJjY6O2bdsmSVqwYIGKi4vTnnvkyBG9+uqrmjBh\ngh566KHE/IqKCjU1NSkQCGj69OmaMWNGX98LAAAAAHhOr02dZVmqqqpSWVmZJGnt2rWaOHGifD5f\nSnM7m7orV67o61//uo4dO3bN3/H5fFq+fLlGjRrV7zeD1LC3GSbkAkCqWC9gQi5gQi7s0ev2y0gk\nolAopEAgoEAgoMLCQkUikZTnNjc3S5Luuusu5eXlGf9ePB7vx1sAAAAAAO/q9U5dW1ubcnNzVVlZ\nKUkKBoOKRqMKhUL9mtspJydHmzdvVl5enhYuXKiioqIe59bU1CS6/c79uYzTH3fd25wJ9TDOjPHB\ngwf1+OOPZ0w9bh9bo8YJmaOlpUUKjZSUGflw+5j1gjE/XzBOdcx6MbDjYDAoE1+8l9tkTU1N2r59\nuxYvXqx4PK6tW7dq3rx5xuart7m/+93v9Nvf/vaaZ+o6ffjhh6qqqtKKFSuMdVRXV6ukpCRZqYOu\nufWSTrdfdrSGgdDS0qIbbrjB6TIGxC25AYXys50uY0ioqfnTL03Qfweao1qx44TTZeAzG+eMV/iz\npg79x3oBE3IBE3IxsOrr6zVz5sxu17N6+4tFRUWJLZTSp1sse7qb1tvcZP3j8OHDlZXVazmOOt1+\neQj9kPax0wUMiI1zxtPUDRAWXACpYr2ACbmACbmwR69dlN/vV2lpqVavXi1Jmj9/fuJ7tbW1ys7O\nTtxBSzZ3+/btamho0IULF/TJJ59o6dKlkqRNmzbp/PnzysnJ0aJFiwbunQEAAACAB6R0aywcDisc\nDne7PmXKlJTnzp07V3Pnzu12/cknn0ylBACDjO0RAFLFegETcgETcmEPPnwcAAAAAFyMpg6AJPa8\nA0gd6wVMyAVMyIU9aOoAAAAAwMUy+7hJwAX4qIvMw0ddAIOLZ2RgQi5gQi7sQVMH9BMfdZF5+KgL\nAADgJWy/BAAAaeG37jAhFzAhF/agqQMAAAAAF6OpAwAAaampqXG6BGQgcgETcmEPmjoAAAAAcDGa\nOgAAkBaekYEJuYAJubAHTR0AAAAAuBhNHQAASAvPyMCEXMCEXNiDpg4AAAAAXIymDgAApIVnZGBC\nLmBCLuxBUwcAAAAALkZTBwAA0sIzMjAhFzAhF/agqQMAAAAAF6OpAwAAaeEZGZiQC5iQC3vQ1AEA\nAACAi9HUAQCAtPCMDEzIBUzIhT1o6gAAAADAxWjqAABAWnhGBibkAibkwh40dQAAAADgYjR1AAAg\nLTwjAxNyARNyYQ+aOgAAAABwMZo6AACQFp6RgQm5gAm5sEdWbxMaGxu1bds2SdKCBQtUXFyc9twj\nR47o1Vdf1YQJE/TQQw/16bUBAAAAAN0lvVNnWZaqqqr0wx/+UD/84Q9VVVWleDye8txOV65c0de/\n/vU+vzYAAMgcPCMDE3IBE3Jhj6RNXSQSUSgUUiAQUCAQUGFhoSKRSMpzm5ubJUl33XWX8vLy+vza\nAAAAAACzpNsv29ralJubq8rKSklSMBhUNBpVKBTq19y+zAcAwO2aWy/pdPtlp8vot5G3hXWgOep0\nGf12S25Aofxsp8sYMnh2Cibkwh5Jm7q8vDy1t7dr8eLFisfj2rp1q/Lz8/s9ty/zpU9v33YGo/NW\nrp1ja9S4pPXBOU7koesYmaWlpUU1HxxgvUBCS0uLFBopydn14nT7Za3YcWLg3yD6ZOOc8fqg8X1J\nzv37wZgxY8bpjIPBoEx88SQPslmWpfLycpWVlSkej2vNmjVavXp1n+YePnxY9fX1iYNS0nltSaqu\nrlZJSUmP37fDgeYo/xhnmI1zxiv82Q9qTiEXmYdc4HqZkAmJXGSaTMnFUNH1l+9AJ3IxsOrr6zVz\n5sxu15PeqfP7/SotLU00W/Pnz098r7a2VtnZ2YlGK9nc7du3q6GhQRcuXNAnn3yipUuXJp0PAAAA\nAEhNrx9pEA6HFQ6Hu12fMmVKynPnzp2ruXPnpjwfAAAA7sLdGJiQC3vw4eMAAAAA4GI0dQAAAOg3\nPo8MJuTCHjR1AAAAAOBiNHUAAADoN56dggm5sAdNHQAAAAC4GE0dAAAA+o1np2BCLuxBUwcAAAAA\nLkZTBwAAgH7j2SmYkAt70NQBAAAAgIvR1AEAAKDfeHYKJuTCHjR1AAAAAOBiNHUAAADoN56dggm5\nsAdNHQAAAAC4WJbTBQAAAHhZc+slnW6/7HQZ/dbS0qIbbrjB6TL67ZbcgEL52U6XMWTU1NRwt84G\nNHUAAAAOOt1+WSt2nHC6jAHysdMF9NvGOeNp6uA6bL8EAAAAMCi4S2cPmjoAAAAAcDGaOgAAAACD\ngs+pswdNHQAAAAC4GE0dAAAAgEHBM3X2oKkDAAAAABejqQMAAAAwKHimzh40dQAAAADgYjR1AAAA\nAAYFz9TZg6YOAAAAAFyMpg4AAADAoOCZOnvQ1AEAAACAi2WlMqmxsVHbtm2TJC1YsEDFxcVpz+3p\nekVFhZqamhQIBDR9+nTNmDGjz28GAAAAQObgmTp79NrUWZalqqoqlZWVSZLWrl2riRMnyufzpTS3\nuLi4x+uS5PP5tHz5co0aNWrA3hQAAAAAeEWv2y8jkYhCoZACgYACgYAKCwsViURSntvc3Nzj9U7x\neHzg3hEAAACAjMAzdfbo9U5dW1ubcnNzVVlZKUkKBoOKRqMKhUIpz5XU42vk5ORo8+bNysvL08KF\nC1VUVDRgbw4AAAAAhrpe79Tl5eWpvb1dDzzwgO6//361t7crPz8/rbnJXuPRRx/V6tWr9c1vflM/\n/elPk9bStdOvqamxfdzS0pK0PjjHiTzwm6fM1dLSwnqBa3T978F6ga6czgPrRebJpPViKIy7yoR6\n3D7uiS/ey95Hy7JUXl6usrIyxeNxrVmzRqtXr05rbiqv8cc//lFvvPGGli9fbnzt6upqlZSUJCt1\n0B1ojmrFjhOO1oBrbZwzXuHQSEdrIBeZh1zgepmQCYlcZBpyAZNMyQVgUl9fr5kzZ3a73uv2S7/f\nr9LS0kQTNn/+/MT3amtrlZ2dnWi2epqb7DU2bdqk8+fPKycnR4sWLerr+wMAAACQYWpqajgB0wYp\nfaRBOBxWOBzudn3KlCkpz+3p+pNPPplKCQAAAAAAAz58HAAAAMCg4C6dPWjqAAAAAMDFaOoAAAAA\nDApO/7UHTR0AAAAAuBhNHQAAAIBBwTN19qCpAwAAAAAXo6kDAAAAMCh4ps4eNHUAAAAA4GI0dQAA\nAAAGBc/U2YOmDgAAAABcjKYOAAAAwKDgmTp70NQBAAAAgIvR1AEAAAAYFDxTZw+aOgAAAABwMZo6\nAAAAAIOCZ+rsQVMHAAAAAC5GUwcAAABgUPBMnT1o6gAAAADAxWjqAAAAAAwKnqmzB00dAAAAALgY\nTR0AAACAQcEzdfagqQMAAAAAF6OpAwAAADAoeKbOHjR1AAAAAOBiNHUAAAAABgXP1NmDpg4AAAAA\nXIymDgAAAMCg4Jk6e2T1NqGxsVHbtm2TJC1YsEDFxcVpz033OgAAAAAgNUmbOsuyVFVVpbKyMknS\n2rVrNXHiRPl8vpTmFhcXp3W9p9cGAAAA4D48U2ePpE1dJBJRKBRSIBCQJBUWFiaupTK3ublZ8Xg8\n5es9vTYAAAAAwCxpU9fW1qbc3FxVVlZKkoLBoKLRqLHx6mmupLSu09QBAADA65pbL+l0+2Wny+i3\nlpYW3XDDDU6X0W+35AYUys92uoweJW3q8vLy1N7ersWLFysej2vr1q3Kz89Pa65lWWldT6a+vr7v\n73SArC9xugJ0dbX5uOqbna6CXGQacoHrZUomJHKRScgFTDIpF0NBnqSrHaedLqPfmj/7k6mSNnVF\nRUVqbv5T+ZFIREVFRWnNtSwrres9mTlzZu/vBgAAAAA8xhePx+PJJhw4cCBxQuX8+fN11113SZJq\na2uVnZ2tkpKSXuemex0AAAAAkJpemzoAAAAAQObiw8cBAAAAwMVo6gAAAADAxWjqPGD//v3G6++8\n8469hSCjXLp06Zo/Fy9eTHwN7yIXANLV1NSkQ4cOqampyelSAM9KevolhobDhw/r3Xff1SOPPKIb\nb7xRTU1N+vd//3eNHz/e6dLgoPXr13e7dvLkScViMb322msOVIRMQC5gsnv3bs2aNUuSdPz4cf3k\nJz+RZVl68MEHVVxc7HB1cMqZM2f08ssv66abbtLNN9+ss2fP6syZM/r7v/97jRo1yuny4ICnn35a\nknTx4kVdvnxZ+fn5On/+vHJzc/Wv//qvDlc3tHFQikd8+OGH+tnPfqabbrpJbW1tevjhh5N+hAS8\nw7Is7du3T3v37tVtt92me++9VzfddJPTZcFh5AJdrVq1SuXl5YrH43r++ef15JNPKh6Pa926dVq1\napXT5cEhGzduVGlpqf78z/88ce1//ud/9MYbb2jFihUOVganVVRU6Dvf+Y5ycnLU2tqqn/3sZ1q2\nbJnTZQ1p3KnziGg0qitXruiGG27Qxx9/rLa2NqdLgsMuXryo6upq1dfX60tf+pK+//3vKzs72+my\n4DByAZNYLKaOjg7t27dPkydPTmTC7+cpDi/r6Oi4pqGTpD/7sz9TR0eHQxUhU3z00UeJdSIvL0//\n93//53AOxucwAAARMklEQVRFQx936jzg5ZdfViAQ0IMPPqjc3FxduHBBr776qrKzs/XYY485XR4c\n8sgjj8jn86m4uFg+ny9x3efzafny5Q5WBif1lAtJ+t73vudQVXDagQMH9MYbb2js2LFasmSJ/H6/\nLMvST3/6Uy1cuNDp8uCQhx9+WGPGjOl2vampSZWVlQ5UhEzxH//xH9q/f79uu+02/eEPf9Ddd9+t\n++67z+myhjSaOg84fPiwJk6c2O16Y2MjH/juYadPn5akxA/unUuBz+fTzTff7FhdcFbXXHTNhCRy\nAQBI2fnz53X27Fndcsstys/Pd7qcIY+mzgMuXrxo/MFdEtuqPGz//v26++67nS4DGc6yLB0+fFh1\ndXVatGiR0+XAIV1PP+XfEXRKdiouuUAsFtPZs2dVWFjodCmewDN1HrBhw4Zu1zjNDv/93/+tHTt2\n6IEHHtBf/MVfOF0OMkgsFtOBAwdUV1enhoYGhcNhTZs2zemy4CBORYXJunXrum3TJheQpPfee0+7\ndu1Se3u7XnjhBW3evFnf/e53nS5rSONOnYdwmh2uF4lEVFVVpcuXLye26Pp8vsTR5fCeTZs26dSp\nU7rjjjsUDof19ttv66mnnnK6LGQI/h2BCbnA9crKyrRy5UqtWbNG5eXliRN0MXi4U+cBnGaHnsRi\nMcViMWVnZ2vEiBFOl4MMMHz4cF29elWxWEyWZTldDjIE/47AhFygJ/F4XFeuXJH06Smp3EMafNyp\n8wBOOYRJRUWFWltb9cADD2jcuHFOl4MMEovFEs/RNTQ0aMKECZo6daomTZrkdGlwCP+OwITTctGT\nhoYGvfbaazp37pzGjBmjb33rW/riF7/odFlDGk2dB1x/yqH0pwfdb7nlFkdqgvMOHTqk4uJip8tA\nhrMsS8eOHVNdXR1H13uY6VTUTvw74l2clotkLMtSNBpVfn5+t6YfA4+mziM6Ojp04sQJRaNRjRw5\nUrfffrtycnKcLgtAhtmzZ4/uuecep8sA4EKclgs4x+90ARh8+/bt07/8y7/oyJEjunDhgo4cOaI1\na9Zo3759TpeGDPTiiy86XQIcVFtb63QJyEA//vGPE1+//vrria8rKiqcKAcZJBaL6be//a3+7d/+\nTY8//rjeffdd/dVf/ZXTZQGew0EpHrBr1y6tXLlSWVl/+s/9jW98Q88995y+/OUvO1gZgExz7tw5\n7d69u9sWO05F9bZIJJL4+ve//33i6zNnzjhRDjJE19NyJ0+erI6ODi1btszpsuCgX/7yl5o3b56e\nfvrpbt9bt26dAxV5B02dB8TjceMPaOy89TbTh8bG43FOPPQ4v9/P6XXoxrIsXbp0KbFGdP0a3sVp\nubjenDlzJEkjRozgIwxsRlPnAbNnz9azzz6rcDiskSNHqq2tTY2NjZo9e7bTpcFBpg+NBQoKCjRj\nxgyny0CG8fl8iQ8g9/v913wN73riiSeuOS335MmTqqio4LRcD+v8eKTp06c7XIn3cFCKR3R0dOj4\n8eNqa2tTXl6ebr/9dgWDQafLApBh3n77bX31q191ugwALsRpuYBz+BWbRwSDQYXDYU2dOlXhcFjB\nYFA1NTVOlwUHvffee92uXb16Vb/4xS8cqAaZIhaLOV0CAJfy+/268847aegAB9DUeUB1dbVWrFih\nZ555Rh999JHOnTunDRs26ODBg06XBgcdOnRIe/bsSYz/93//V88++6yGDx/uYFVwGqdfwoTTL5GO\nl156yekS4JCNGzdKkn70ox85XIn38EydB1RXV2vDhg1qbW3V+vXrFY/H9e1vf1t33XWX06XBQYsX\nL9YvfvELVVVVKRAIqK6uTo899pjGjh3rdGlwEKdfwoTTL5EOnuzxrjNnzujEiROKRCL66KOPrvlQ\n+ltvvdXh6oY2mjoPyM7Olt/vV0FBgYYNG6by8nIFAgGny0IG+OY3v6m33npLe/bs0fPPP3/Nx17A\nmzj9EiacfgkTTlHG9R544AHt3btXZ8+e1ZtvvnnN9/i4i8HFT3Ae8MEHHyQ+L6SpqemaI2b5zBDv\n6voZMmfOnNE//uM/KicnRxK58DJOv4QJp1/CpDMHQKdJkyZp0qRJamlpoYmzGadfAgASOP0SAAD3\noanzoAsXLqijo0OjR492uhQ47JNPPtHx48cVjUY1cuRI3X777Ym7dYD06ba7zs+gWrRokdPlAAAA\nA5o6D3j33Xf15ptvKhgM6r777tPOnTs1bNgwTZgwQffdd5/T5cEh+/bt086dO/WXf/mXysvLUzQa\n1cGDBzVnzhx9+ctfdro8OCgWi+nAgQOqq6tTQ0ODwuGwpk2bxuFKHtZ1u3anYcOGae7cubr77rsd\nqAiZYPfu3YkDlI4fP66f/OQnsixLDz74oIqLix2uDvAWnqnzgJ07d2rdunXq6OjQU089pVdeeUWB\nQEDPPPMMTZ2H7dq1SytXrrzmcJR58+bpueeeo6nzsE2bNunUqVO64447NHnyZHV0dPBcBIzP2V66\ndEnPP/88TZ2Hvffee5o1a5bi8bh+9atfqby8XPF4XOvWraOp86hf/vKXmjdvnvEXQTyvP7ho6jxg\nxIgRysrKUn5+vkaPHp042W7EiBEOVwYnxeNx47H13Lz3tuHDh+vq1auKxWKcYIekOC0XsVhMHR0d\n2rdvnyZPnpz4+YIDdLxrzpw5kj79GbPrwXwYfKzIHnD96Zddv4Z3zZ49W88++6zC4bBGjhyptrY2\nNTY2avbs2U6XBgc98cQTisViiefoTp48qYqKCk2dOlWTJk1yujw45Ac/+IF8Pt811yzL0te+9jWH\nKkImKC0t1dq1azV27FgtWbJE0qe5GDdunLOFwTGdNwymT5/ucCXewzN1gId1dHToxIkTikajysvL\n0+23365gMOh0WcgglmXp2LFjqqur08KFC50uBw7qXC9aW1uVm5ur22+/XXl5efqv//ov/fVf/7XT\n5QGAp3GnDvCwrr959/l83X4TD/j9ft1555268847nS4FDrr+YKU//vGPqqqq0rRp0/T+++/T1AGA\nw7hTB3jU9T+kdW6/5PRLb+v6cPuFCxdUUFCQGPOQu3eVlZWpvLz8muforly5oieffFKPPfYYJ6N6\nVNfTL1O5Du+oqKjQE088kRi/9NJLWr58uYMVDX3cqQM8ynT65Te+8Q1Ov/S4ro3bqlWreNAdkno+\nWOnGG2+kofOwnTt3SlK3bOzatYumzuM+/vjja8YXLlxwqBLvoKkDPIrTLwGkioOVYOL3+xMnXl5/\nHd7m9/sTuz3Onj1LJmzA9kvAo/bt26f//M//NP6QNnXqVKfLg0O6br9samrS6NGjE2O2X3pbR0eH\njh8/rra2Ng5WgiTprbfe0r333pvydXjHiRMntGXLFhUUFOj8+fNaunSpxo8f73RZQxpNHeBh/JAG\nAAAGQzweVzQa1ciRIzmIzQY0dQCuUVNTo2nTpjldBhxy6dKlHr9n2mYFAIBJLBbTuXPndMsttzhd\niifwTB3gUdXV1Xrrrbc0fPhwLVu2TMFgUFu2bFF+fj5NnYetW7eu229UT548qVgsptdee82hqgAA\nbvLee+9p165dam9v1wsvvKDNmzfru9/9rtNlDWk0dYBHVVdXa8OGDWptbdX69esVj8f17W9/m5Ps\nPG7lypWSPv3Q8X379mnv3r2aNWsWz8cAAFK2Y8cOrVy5UmvWrJEknT9/3uGKhj6aOsCjsrOz5ff7\nVVBQoGHDhqm8vFyBQMDpsuCwixcvqrq6WvX19frSl76k73//+2y7BACkJR6P68qVK5I+fX6fp70G\nH8/UAR718MMPa8yYMZI45RB/8sgjj8jn86m4uLjbNszvfe97DlUFAHCThoYGvfbaazp37pzGjBmj\nb33rW/riF7/odFlDGk0dACDh9OnTkq79zMLO5u7mm292rC4AgLtYlqVoNKr8/HxOv7QB2y8BSJIu\nXLigjo6Oa+7YwXuuP6XMsiwdPnxYdXV1WrRokUNVAchE15+WG4/HEz+8s20bra2tOnPmjIYNG6a8\nvDynyxnyaOoAj3r33Xf15ptvKhgM6r777tPOnTs1bNgwTZgwQffdd5/T5cFBsVhMBw4cUF1dnRoa\nGhQOhzkRFUA369ev73aN03IhSdu2bVNDQ4O+8IUv6A9/+IOmTJmi2bNnO13WkEZTB3jUzp07tW7d\nOnV0dOipp57SK6+8okAgoGeeeYamzsM2bdqkU6dO6Y477tDkyZPV0dGhZcuWOV0WgAxUXl4uidNy\n0V19fb3WrFkjv98vy7L0z//8zzR1g4ymDvCoESNGKCsrS/n5+Ro9enRiq8yIESMcrgxOGj58uK5e\nvapYLCbLspwuB0AG47Rc9OTzn/+8Ll++rBEjRqijo0O33nqr0yUNeRyUAnhUT6dfNjU1qbKy0snS\n4LBYLJZ4jq6hoUETJkzQ1KlTNWnSJKdLA5BBejot1+fzafny5Q5WBqc9+eSTunLlivLz83Xu3Dnl\n5uYmGn5O2B4cNHUAgITf/e5314wty9LRo0f1/vvva8OGDQ5VBSATmU7L7XT9oUsABhfbLwEACevX\nr1dhYaGKi4vl9/sT14uLix2sCkAmonEDMoe/9ykAAK/YsmWL5s6dq4sXL2rEiBF66KGHEn8AoKsf\n//jHia9ff/31xNcVFRVOlIMM8vbbb0uSjh49qn/6p39KjDF4aOoAAAltbW06e/asLMvSjTfe6HQ5\nADJYJBJJfP373/8+8fWZM2ecKAcZ5J133pEkvf/++1q9erV2797tbEEewPZLAEDCsmXL9PnPf16j\nR49WY2OjGhsbJXHwAYDuLMvSpUuXFI/Hu30Nb7MsS+3t7Ro5cqQCgYCCwaDTJQ15NHUAgISXX35Z\nkhIn2XUeftD1ZDsAkD5dFzo/gNzv91/zNbztK1/5il544QX93d/9nSRp3LhxzhbkAZx+CQAAAAAu\nxq9SAAAAkLbf/OY3TpcA4DNsvwQAAEDa9u3bp7/5m79xugxkoNdff1379+9XIBBIXONDxwcXTR0A\nAADSdu7cOe3evbvbB4/7fD7NmjXLoaqQCQ4dOqSNGzfyfKWNaOoAAACQNr/fr+zsbKfLQAa64447\n1NraqoKCAqdL8QyaOgAAAKStoKBAM2bMcLoMZKDGxkbV1tZe09Sx/XJwcfolAAAA0vb222/rq1/9\nqtNlABBNHQAAAAaAZVk6fPiw6urqtGjRIqfLATyF7ZcAAADok1gspgMHDqiurk4NDQ0Kh8OaNm2a\n02XBIU8//XS3a8OGDdPcuXN19913O1CRd9DUAQAAIG2bNm3SqVOndMcdd2jy5Mnq6OjQsmXLnC4L\nDjI9N3fp0iU9//zzNHWDjHNGAQAAkLbhw4fr6tWrisVisizL6XKQobKyuIdkB56pAwAAQJ/EYrHE\nc3QNDQ2aMGGCpk6dqkmTJjldGhxg2n5pWZa+9rWvsS13kNHUAQAAoN8sy9KxY8dUV1enhQsXOl0O\n4Ck0dQAAAEjbnj17dM899zhdBgDxTB0AAAD6oLa21ukSAHyGJxcBAACQtnPnzmn37t26ftOXz+fT\nrFmzHKoK8CaaOgAAAKTN7/crOzvb6TIAiKYOAAAAfVBQUKAZM2Y4XQYA8UwdAAAA+uArX/mK0yUA\n+AynXwIAAACAi3GnDgAAAGnbs2dP4uvjx4/rmWee0Q9+8AMdOnTIwaoAb6KpAwAAQNo6P9IgHo/r\nV7/6lcrLy7Vy5UpVVVU5XBngPRyUAgAAgLTFYjF1dHRo3759mjx5cuIkTL+fewaA3fi/DgAAAGkr\nLS3V2rVr9cEHHyQOTbEsS+PGjXO2MMCDOCgFAAAAAFyMO3UAAAAA4GI0dQAAAADgYjR1AAAAAOBi\nNHUAAAAA4GI0dQAAAADgYjR1AAAAAOBi/w8f9knvGy289QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So Manhattan really does complain more about noise than the other boroughs! Neat." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "