{ "cells": [ { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# The usual preamble\n", "%matplotlib inline\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "# Make the graphs a bit prettier, and bigger\n", "plt.style.use('ggplot')\n", "\n", "# This is necessary to show lots of columns in pandas 0.12. \n", "# Not necessary in pandas 0.13.\n", "pd.set_option('display.width', 5000) \n", "pd.set_option('display.max_columns', 60)\n", "\n", "plt.rcParams['figure.figsize'] = (15, 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We're going to use a new dataset here, to demonstrate how to deal with larger datasets. This is a subset of the of 311 service requests from [NYC Open Data](https://nycopendata.socrata.com/Social-Services/311-Service-Requests-from-2010-to-Present/erm2-nwe9). " ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# because of mixed types we specify dtype to prevent any errors\n", "complaints = pd.read_csv('../data/311-service-requests.csv', dtype='unicode')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Depending on your pandas version, you might see an error like \"DtypeWarning: Columns (8) have mixed types\". This means that it's encountered a problem reading in our data. In this case it almost certainly means that it has columns where some of the entries are strings and some are integers.\n", "\n", "For now we're going to ignore it and hope we don't run into a problem, but in the long run we'd need to investigate this warning." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2.1 What's even in it? (the summary)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you print a large dataframe, it will only show you the first few rows.\n", "\n", "If you don't see this, don't panic! The default behavior for large dataframes changed between pandas 0.12 and 0.13. Previous to 0.13 it would show you a summary of the dataframe. This includes all the columns, and how many non-null values there are in each column." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
02658965110/31/2013 02:08:41 AMNaNNYPDNew York City Police DepartmentNoise - Street/SidewalkLoud TalkingStreet/Sidewalk1143290-03 169 STREET169 STREET90 AVENUE91 AVENUENaNNaNADDRESSJAMAICANaNPrecinctAssigned10/31/2013 10:08:41 AM10/31/2013 02:35:17 AM12 QUEENSQUEENS1042027.0197389.0UnspecifiedQUEENSUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.708275-73.791604(40.70827532593202, -73.79160395779721)
12659369810/31/2013 02:01:04 AMNaNNYPDNew York City Police DepartmentIllegal ParkingCommercial Overnight ParkingStreet/Sidewalk1137858 AVENUE58 AVENUE58 PLACE59 STREETNaNNaNBLOCKFACEMASPETHNaNPrecinctOpen10/31/2013 10:01:04 AMNaN05 QUEENSQUEENS1009349.0201984.0UnspecifiedQUEENSUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.721041-73.909453(40.721040535628305, -73.90945306791765)
22659413910/31/2013 02:00:24 AM10/31/2013 02:40:32 AMNYPDNew York City Police DepartmentNoise - CommercialLoud Music/PartyClub/Bar/Restaurant100324060 BROADWAYBROADWAYWEST 171 STREETWEST 172 STREETNaNNaNADDRESSNEW YORKNaNPrecinctClosed10/31/2013 10:00:24 AM10/31/2013 02:39:42 AM12 MANHATTANMANHATTAN1001088.0246531.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.843330-73.939144(40.84332975466513, -73.93914371913482)
32659572110/31/2013 01:56:23 AM10/31/2013 02:21:48 AMNYPDNew York City Police DepartmentNoise - VehicleCar/Truck HornStreet/Sidewalk10023WEST 72 STREETWEST 72 STREETCOLUMBUS AVENUEAMSTERDAM AVENUENaNNaNBLOCKFACENEW YORKNaNPrecinctClosed10/31/2013 09:56:23 AM10/31/2013 02:21:10 AM07 MANHATTANMANHATTAN989730.0222727.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.778009-73.980213(40.7780087446372, -73.98021349023975)
42659093010/31/2013 01:53:44 AMNaNDOHMHDepartment of Health and Mental HygieneRodentCondition Attracting RodentsVacant Lot10027WEST 124 STREETWEST 124 STREETLENOX AVENUEADAM CLAYTON POWELL JR BOULEVARDNaNNaNBLOCKFACENEW YORKNaNNaNPending11/30/2013 01:53:44 AM10/31/2013 01:59:54 AM10 MANHATTANMANHATTAN998815.0233545.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.807691-73.947387(40.80769092704951, -73.94738703491433)
...............................................................................................................................................................
1110642642601310/04/2013 12:01:13 AM10/07/2013 04:07:16 PMDPRDepartment of Parks and RecreationMaintenance or FacilityStructure - OutdoorsPark11213NaNNaNNaNNaNNaNNaNNaNBROOKLYNNaNNaNClosed10/18/2013 12:01:13 AM10/07/2013 04:07:16 PM08 BROOKLYNBROOKLYNNaNNaNBrower ParkBROOKLYNBrower ParkB012NaNNaN7189658900Brooklyn, St. Marks, Kingston Avenues, Park PlaceBROOKLYNNY11213NNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1110652642808310/04/2013 12:01:05 AM10/04/2013 02:13:50 AMNYPDNew York City Police DepartmentIllegal ParkingPosted Parking Sign ViolationStreet/Sidewalk11434NaNNaNNaNNaNGUY R BREWER BOULEVARDROCKAWAY BOULEVARDINTERSECTIONJAMAICANaNPrecinctClosed10/04/2013 08:01:05 AM10/04/2013 02:13:50 AM13 QUEENSQUEENS1048801.0178419.0UnspecifiedQUEENSUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.656160-73.767353(40.656160351546845, -73.76735262738222)
1110662642898710/04/2013 12:00:45 AM10/04/2013 01:25:01 AMNYPDNew York City Police DepartmentNoise - Street/SidewalkLoud TalkingStreet/Sidewalk10016344 EAST 28 STREETEAST 28 STREETMOUNT CARMEL PLACE1 AVENUENaNNaNADDRESSNEW YORKNaNPrecinctClosed10/04/2013 08:00:45 AM10/04/2013 01:25:01 AM06 MANHATTANMANHATTAN990637.0208987.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.740295-73.976952(40.740295354643706, -73.97695165980414)
1110672642611510/04/2013 12:00:28 AM10/04/2013 04:17:32 AMNYPDNew York City Police DepartmentNoise - CommercialLoud TalkingClub/Bar/Restaurant112261233 FLATBUSH AVENUEFLATBUSH AVENUEAVENUE DNEWKIRK AVENUENaNNaNADDRESSBROOKLYNNaNPrecinctClosed10/04/2013 08:00:28 AM10/04/2013 04:17:32 AM14 BROOKLYNBROOKLYN996654.0172515.0UnspecifiedBROOKLYNUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.640182-73.955306(40.64018174662485, -73.95530566958138)
1110682642803310/04/2013 12:00:10 AM10/04/2013 01:20:52 AMNYPDNew York City Police DepartmentBlocked DrivewayPartial AccessStreet/Sidewalk112361259 EAST 94 STREETEAST 94 STREETAVENUE JAVENUE KNaNNaNADDRESSBROOKLYNNaNPrecinctClosed10/04/2013 08:00:10 AM10/04/2013 01:20:52 AM18 BROOKLYNBROOKLYN1011804.0172470.0UnspecifiedBROOKLYNUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.640024-73.900717(40.640024057399216, -73.90071711703163)
\n", "

111069 rows × 52 columns

\n", "
" ], "text/plain": [ " 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.0 197389.0 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.0 201984.0 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.0 246531.0 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.0 222727.0 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 NaN Pending 11/30/2013 01:53:44 AM 10/31/2013 01:59:54 AM 10 MANHATTAN MANHATTAN 998815.0 233545.0 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)\n", "... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...\n", "111064 26426013 10/04/2013 12:01:13 AM 10/07/2013 04:07:16 PM DPR Department of Parks and Recreation Maintenance or Facility Structure - Outdoors Park 11213 NaN NaN NaN NaN NaN NaN NaN BROOKLYN NaN NaN Closed 10/18/2013 12:01:13 AM 10/07/2013 04:07:16 PM 08 BROOKLYN BROOKLYN NaN NaN Brower Park BROOKLYN Brower Park B012 NaN NaN 7189658900 Brooklyn, St. Marks, Kingston Avenues, Park Place BROOKLYN NY 11213 N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN\n", "111065 26428083 10/04/2013 12:01:05 AM 10/04/2013 02:13:50 AM NYPD New York City Police Department Illegal Parking Posted Parking Sign Violation Street/Sidewalk 11434 NaN NaN NaN NaN GUY R BREWER BOULEVARD ROCKAWAY BOULEVARD INTERSECTION JAMAICA NaN Precinct Closed 10/04/2013 08:01:05 AM 10/04/2013 02:13:50 AM 13 QUEENS QUEENS 1048801.0 178419.0 Unspecified QUEENS Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.656160 -73.767353 (40.656160351546845, -73.76735262738222)\n", "111066 26428987 10/04/2013 12:00:45 AM 10/04/2013 01:25:01 AM NYPD New York City Police Department Noise - Street/Sidewalk Loud Talking Street/Sidewalk 10016 344 EAST 28 STREET EAST 28 STREET MOUNT CARMEL PLACE 1 AVENUE NaN NaN ADDRESS NEW YORK NaN Precinct Closed 10/04/2013 08:00:45 AM 10/04/2013 01:25:01 AM 06 MANHATTAN MANHATTAN 990637.0 208987.0 Unspecified MANHATTAN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.740295 -73.976952 (40.740295354643706, -73.97695165980414)\n", "111067 26426115 10/04/2013 12:00:28 AM 10/04/2013 04:17:32 AM NYPD New York City Police Department Noise - Commercial Loud Talking Club/Bar/Restaurant 11226 1233 FLATBUSH AVENUE FLATBUSH AVENUE AVENUE D NEWKIRK AVENUE NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/04/2013 08:00:28 AM 10/04/2013 04:17:32 AM 14 BROOKLYN BROOKLYN 996654.0 172515.0 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.640182 -73.955306 (40.64018174662485, -73.95530566958138)\n", "111068 26428033 10/04/2013 12:00:10 AM 10/04/2013 01:20:52 AM NYPD New York City Police Department Blocked Driveway Partial Access Street/Sidewalk 11236 1259 EAST 94 STREET EAST 94 STREET AVENUE J AVENUE K NaN NaN ADDRESS BROOKLYN NaN Precinct Closed 10/04/2013 08:00:10 AM 10/04/2013 01:20:52 AM 18 BROOKLYN BROOKLYN 1011804.0 172470.0 Unspecified BROOKLYN Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified Unspecified N NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 40.640024 -73.900717 (40.640024057399216, -73.90071711703163)\n", "\n", "[111069 rows x 52 columns]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2.2 Selecting columns and rows" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To select a column, we index with the name of the column, like this:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 Noise - Street/Sidewalk\n", "1 Illegal Parking\n", "2 Noise - Commercial\n", "3 Noise - Vehicle\n", "4 Rodent\n", " ... \n", "111064 Maintenance or Facility\n", "111065 Illegal Parking\n", "111066 Noise - Street/Sidewalk\n", "111067 Noise - Commercial\n", "111068 Blocked Driveway\n", "Name: Complaint Type, Length: 111069, dtype: object" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints['Complaint Type']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get the first 5 rows of a dataframe, we can use a slice: `df[:5]`.\n", "\n", "This is a great way to get a sense for what kind of information is in the dataframe -- take a minute to look at the contents and get a feel for this dataset." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
02658965110/31/2013 02:08:41 AMNaNNYPDNew York City Police DepartmentNoise - Street/SidewalkLoud TalkingStreet/Sidewalk1143290-03 169 STREET169 STREET90 AVENUE91 AVENUENaNNaNADDRESSJAMAICANaNPrecinctAssigned10/31/2013 10:08:41 AM10/31/2013 02:35:17 AM12 QUEENSQUEENS1042027.0197389.0UnspecifiedQUEENSUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.708275-73.791604(40.70827532593202, -73.79160395779721)
12659369810/31/2013 02:01:04 AMNaNNYPDNew York City Police DepartmentIllegal ParkingCommercial Overnight ParkingStreet/Sidewalk1137858 AVENUE58 AVENUE58 PLACE59 STREETNaNNaNBLOCKFACEMASPETHNaNPrecinctOpen10/31/2013 10:01:04 AMNaN05 QUEENSQUEENS1009349.0201984.0UnspecifiedQUEENSUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.721041-73.909453(40.721040535628305, -73.90945306791765)
22659413910/31/2013 02:00:24 AM10/31/2013 02:40:32 AMNYPDNew York City Police DepartmentNoise - CommercialLoud Music/PartyClub/Bar/Restaurant100324060 BROADWAYBROADWAYWEST 171 STREETWEST 172 STREETNaNNaNADDRESSNEW YORKNaNPrecinctClosed10/31/2013 10:00:24 AM10/31/2013 02:39:42 AM12 MANHATTANMANHATTAN1001088.0246531.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.843330-73.939144(40.84332975466513, -73.93914371913482)
32659572110/31/2013 01:56:23 AM10/31/2013 02:21:48 AMNYPDNew York City Police DepartmentNoise - VehicleCar/Truck HornStreet/Sidewalk10023WEST 72 STREETWEST 72 STREETCOLUMBUS AVENUEAMSTERDAM AVENUENaNNaNBLOCKFACENEW YORKNaNPrecinctClosed10/31/2013 09:56:23 AM10/31/2013 02:21:10 AM07 MANHATTANMANHATTAN989730.0222727.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.778009-73.980213(40.7780087446372, -73.98021349023975)
42659093010/31/2013 01:53:44 AMNaNDOHMHDepartment of Health and Mental HygieneRodentCondition Attracting RodentsVacant Lot10027WEST 124 STREETWEST 124 STREETLENOX AVENUEADAM CLAYTON POWELL JR BOULEVARDNaNNaNBLOCKFACENEW YORKNaNNaNPending11/30/2013 01:53:44 AM10/31/2013 01:59:54 AM10 MANHATTANMANHATTAN998815.0233545.0UnspecifiedMANHATTANUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedUnspecifiedNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN40.807691-73.947387(40.80769092704951, -73.94738703491433)
\n", "
" ], "text/plain": [ " 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.0 197389.0 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.0 201984.0 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.0 246531.0 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.0 222727.0 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 NaN Pending 11/30/2013 01:53:44 AM 10/31/2013 01:59:54 AM 10 MANHATTAN MANHATTAN 998815.0 233545.0 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)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can combine these to get the first 5 rows of a column:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 Noise - Street/Sidewalk\n", "1 Illegal Parking\n", "2 Noise - Commercial\n", "3 Noise - Vehicle\n", "4 Rodent\n", "Name: Complaint Type, dtype: object" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints['Complaint Type'][:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and it doesn't matter which direction we do it in:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 Noise - Street/Sidewalk\n", "1 Illegal Parking\n", "2 Noise - Commercial\n", "3 Noise - Vehicle\n", "4 Rodent\n", "Name: Complaint Type, dtype: object" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints[:5]['Complaint Type']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2.3 Selecting multiple columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What if we just want to know the complaint type and the borough, but not the rest of the information? Pandas makes it really easy to select a subset of the columns: just index with list of columns you want." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Complaint TypeBorough
0Noise - Street/SidewalkQUEENS
1Illegal ParkingQUEENS
2Noise - CommercialMANHATTAN
3Noise - VehicleMANHATTAN
4RodentMANHATTAN
.........
111064Maintenance or FacilityBROOKLYN
111065Illegal ParkingQUEENS
111066Noise - Street/SidewalkMANHATTAN
111067Noise - CommercialBROOKLYN
111068Blocked DrivewayBROOKLYN
\n", "

111069 rows × 2 columns

\n", "
" ], "text/plain": [ " Complaint Type Borough\n", "0 Noise - Street/Sidewalk QUEENS\n", "1 Illegal Parking QUEENS\n", "2 Noise - Commercial MANHATTAN\n", "3 Noise - Vehicle MANHATTAN\n", "4 Rodent MANHATTAN\n", "... ... ...\n", "111064 Maintenance or Facility BROOKLYN\n", "111065 Illegal Parking QUEENS\n", "111066 Noise - Street/Sidewalk MANHATTAN\n", "111067 Noise - Commercial BROOKLYN\n", "111068 Blocked Driveway BROOKLYN\n", "\n", "[111069 rows x 2 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints[['Complaint Type', 'Borough']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That showed us a summary, and then we can look at the first 10 rows:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Complaint TypeBorough
0Noise - Street/SidewalkQUEENS
1Illegal ParkingQUEENS
2Noise - CommercialMANHATTAN
3Noise - VehicleMANHATTAN
4RodentMANHATTAN
5Noise - CommercialQUEENS
6Blocked DrivewayQUEENS
7Noise - CommercialQUEENS
8Noise - CommercialMANHATTAN
9Noise - CommercialBROOKLYN
\n", "
" ], "text/plain": [ " Complaint Type Borough\n", "0 Noise - Street/Sidewalk QUEENS\n", "1 Illegal Parking QUEENS\n", "2 Noise - Commercial MANHATTAN\n", "3 Noise - Vehicle MANHATTAN\n", "4 Rodent MANHATTAN\n", "5 Noise - Commercial QUEENS\n", "6 Blocked Driveway QUEENS\n", "7 Noise - Commercial QUEENS\n", "8 Noise - Commercial MANHATTAN\n", "9 Noise - Commercial BROOKLYN" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints[['Complaint Type', 'Borough']][:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2.4 What's the most common complaint type?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a really easy question to answer! There's a `.value_counts()` method that we can use:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "HEATING 14200\n", "GENERAL CONSTRUCTION 7471\n", "Street Light Condition 7117\n", "DOF Literature Request 5797\n", "PLUMBING 5373\n", " ... \n", "Trans Fat 1\n", "X-Ray Machine/Equipment 1\n", "Ferry Permit 1\n", "DWD 1\n", "Snow 1\n", "Name: Complaint Type, Length: 165, dtype: int64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaints['Complaint Type'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we just wanted the top 10 most common complaints, we can do this:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "HEATING 14200\n", "GENERAL CONSTRUCTION 7471\n", "Street Light Condition 7117\n", "DOF Literature Request 5797\n", "PLUMBING 5373\n", "PAINT - PLASTER 5149\n", "Blocked Driveway 4590\n", "NONCONST 3998\n", "Street Condition 3473\n", "Illegal Parking 3343\n", "Name: Complaint Type, dtype: int64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complaint_counts = complaints['Complaint Type'].value_counts()\n", "complaint_counts[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But it gets better! We can plot them!" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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jVsMsm/fPr300ks6ceKEXnzxRR04cEAZGRmNbpSLn7ds2TJt2bJFW7Zskd1uV2xsrIYNG8Z1aE0UEhKi4uJilZaWqqysTN26deN3kAG6dOmi3/zmN/rNb36jQ4cOac2aNVq9ejXX8PrA7XbL6XTq//2//1dvvLS0VG63m5u0+aBt27a66aabLL3VwLly8vuvXbt2crlc6tixowoLC02uyjg2D6dUDeXxePTll196l3hWVlZq6tSpuvzyy5kNaKJjx47po48+0rfffiup7mzgddddp06dOplcmX/atm2bVq9erdLSUkl136s2m02vv/66yZX5pzlz5igpKUnPPfecd6uWhx56SAsXLjS5Mv/mcrn0ySefaP369brjjjs0cuRIs0vyKxUVFdq6das2b96sw4cPq6KiQnPnzrXUEiUzFBYWasuWLd6TurGxsRo7dqzZZfmdl19+WVFRUQ1OPm7atImbtPlo7969evvtt1VUVKSamhrvONsGNd0777yj66+/Xrt27dKKFStks9k0ZswY3X777WaXZghm+gxms9k0ePBgDR48WNXV1crNzdXmzZu1YsUK7pTYRJ07d9Ztt91mdhmW8eabb2rWrFm64IILzC7FMn66vIu9u5onPz9fmzdv1ueff66oqCjL7I10LgUFBWn06NEaPXq0SktLlZ2drddee03FxcV68cUXzS7PL82ZM0c1NTUaPny4kpKS1LVrV7NL8lvcpM14L730ku6++2717t2b30HNdPKGLcOHD9cVV1yhqqoqS23PQugzUEVFRb1vjsDAQMXExCgmJkYFBQUmVuZ/HnrooXrLkmw2mzp27KhBgwZp7NixLAHxQefOnQl8BgoNDdW+fftks9lUXV2t999/n4vnffTWW29px44d6t69u375y1/qj3/8I3fyM0CnTp10/fXX6/rrr7fUdSnn2v3338//7XOAhWe+CQoKUnR0tNll+LVDhw5p1apVOnLkiHr06KG77rpLTqdTbdq0Mbs0Q7G800CzZs3Ss88+K0n6r//6Lz3++OONPoczO3r0aIOx8vJybdy4USdOnNDUqVNNqMq/ndy0eejQofV+kHGNn2/Kysr02muvadeuXfJ4PLr00kuVmJjItg0+uP322xUeHu49mXPyhM/JJcgElua79957melroqysLI0cOVLr1q1r9HmuoWq6v/zlL0pISGj0Jm2rVq3Sk08+aVJl/mv16tWqra3VsGHD6m0lwkqJs/f4449r5MiRGjhwoLZv3668vDw9/PDDZpdlOGb6DHRqfi4vLz/tczizLl26NDp20UUX6ZFHHjGhIv9XWVmpdu3a6fPPP683TujzTUhIiB544IF6YydOnDCpGv/GtSc4H/3444+S6n52whjcpM14+/fvl1TXx1NZfaNxI1VWVio+Pl6SdPPNN2vWrFkmV9QyCH0G+ulyxNM9h+YhQPvmvvvuM7sEy3C5XCopKdGFF16owMBAlZaWav369dq4caNefvlls8vzO42d5EHT/fRk40kej4efmz741a9+pdraWrVv355ZPYP07dtXTz31lD766CNt2LBBUt1N2p5++mlu0uYjwl3zVVVV6euvv/b+nHS73fUeW2XWlNBnoNLSUq1bt04ej8f7tVT3C7esrMzk6vzLT89YSdIPP/ygTZs26ZJLLjGhIv9XXFysV1991Xsd2sUXX6zExESFhoaaXZpfWb9+vd59911FRESourpa119/vd544w2NHDlS8+fPN7s8v3TXXXc1ODEWEhKiQYMG6Y477mDJ7FmaNWuWbDZbowHv1GVfOHt2u107duwg9BmIm7QZq6KiQm+//bZ3D96BAwfqd7/7naVuQNLSHA6H3njjDe/jzp0713tslWDNNX0Gevvtt3/2+VtvvfUcVeL/GlvX37FjRw0cOFDx8fH8AeODefPm6aqrrvLeAn/Tpk3atGmT/vznP5tcmX+ZMWOG5s2bp+DgYBUVFWnatGl68skn1b9/f7NLs5Ty8nJt2LBBeXl5SkpKMrsctGL//d//7d30vl27dt5xq5z9P5d+7po9m81W714IODsLFixQz549NWrUKEl116J+8803lrwmDc3DX84GItQZxypnVc4nZWVluuaaa7yP4+LitH79ehMr8k9t27b1bhoeFhamyMhIAl8LCA4O1k033WTZaytaQmlpqdLS0nT48GH17NlT48aN42y/AfLy8iTV3WX2VPyearqEhIQGY3l5eVq7di3LO3105MiRegHv1ltv1cyZM02sCOcrQp+BXn311Z99fsKECeeoEmuora1VeXm5QkJCJEnV1dXasGGD1q9fr+TkZJOr8z8hISHKysrSVVddJUn65JNPWDbng5PLZE8qLS2t95j/58aprq6ut9kwft6SJUvUu3dvXXfdddq5c6dWrlyp+++/3+yy/B7hzjinzo7u3r1ba9asUVVVlSZPnsy2Az5q27at9u7dqwEDBkiq2wuRba3QGEKfgU79Yfb2228z89cMmzdv1rJly/SLX/xCERERuvXWW7VkyRL16dNH06ZNM7s8v3TvvfdqxYoVev3112Wz2dS/f3/de++9Zpfld+688856j1ni1Xzbtm1rMPbDDz8oOztbw4cPN6Ei/3Ts2DH94Q9/kCRFRUUxS2qAgwcPKiMjQ99//70kqXv37oqPj1dkZKTJlfmv3NxcrVmzRm3bttX48eM1ePBgs0vya5MnT1ZqaqoqKiokSR06dODGbWgUoc9AcXFx3q/ff//9eo/RNO+++66effZZRUREKD8/X4899pimT5+uK6+80uzS/FZYWBh/BBqA/9fG27FjR4Oxjh076oYbbtDll19uQkX+69Q7eJ5cLXHSyWXJODt5eXlasGCB4uPjFR8fL4/HowMHDujJJ5/UQw89xLJuHzz66KMqKyvT2LFjvf079cZtnERrul69eun555/3hj6WdDddYzcPPJVVvi8JfS2ELRqaJzAwUBEREZLq/rOFh4cT+Hz05ptvKjw8XL/+9a/rja9bt07Hjh1rMHMFnGs/d1Z6/fr1uvHGG89hNf6roqJCs2fPrnf3zpMnemw2G/shNtE777yjBx98UIMGDfKOXXnllRo8eLDeeecdzZkzx8Tq/FO7du0UHh6ubdu2NTrDz1Las7du3ToFBQVp9OjRkv4v7H3wwQeqra3l52YTrFq16meft8r3JaEP56VTt7yQ6ja9PvUxt88+ezt27NDChQsbjN9www2aOXMmoQ/ntXXr1vHHy1lKTU01uwRLOXLkSL3Ad9LAgQPZj9NHTzzxhNklWMbHH3+sZ599tsF4fHy8Hn30UX5uNoFVQt2ZEPoMdOpeUz/++KPuvvtuSXX79NlsNr3++utmludXxowZo8rKytM+xtmz2Wyy2+0Nxu12Oxs2A8Bp/OIXv/DpOfy80tJSffjhh/ruu+9ks9l0wQUX6Nprr+XunT5obPuqNm3a8Lu9Gb799lsVFBSoqqrKO3ZyOwx/R+gz0KkbOaJ5OnbsqOuuu87sMiyhXbt2OnTokLp161Zv/NChQ9zhqxkOHjyoV155RaWlpVq4cKG++eYbbd++Xb/97W/NLg2AAX56p95TuVyuc1yNNezdu1cpKSmKi4vTqFGj5PF49PXXX2vOnDmaNm2a9w6UODvHjh1T586dG4zBN2+//bZ2796tgoICRUdH69NPP9WAAQMIfUBL+vjjjwl9Brntttv09NNP67e//a33YuSvvvpK6enp3tloNN3LL7+shIQELVu2TJJ04YUXKiUlhdDng5OrJE6enT65YsLj8cjtdv//9u40KKozfRv41d2C2IJbACMKuEccBHcJjqKgM2ppZtwzE5fRxNFotBwRNJbbXycqrqWjMaLGKKKlZtwCMiij5SAICepMQizFDQIiIMpq0zbS5/1AcV4IKILIc05z/T51P+fLFStN932e59y3yGjUgL3q6LulNHaobyEhIQgICECHDh3ktX79+qF///4IDg7GunXrBKZTlw8++AAbNmzAtGnT5H/P+/fv4/DhwxgzZozgdOoUFxeHTZs2YcmSJZg7dy5yc3Px1b0Hsb4AABtzSURBVFdfiY5VZ1j0EVm4Xr16ISAgAGfPnkVERAQAwNnZGf7+/nBxcRGcTr1MJhM6d+5cYa2qY7RUPZ6SeHuioqIwbNgw0TFUiZ16657BYKhQ8JVp3749H+GoIR8fHzRr1gzHjh2rcFR20qRJnHlYS9bW1tBqtdBqtTAYDGjevDmysrJEx6ozLPpIkVJSUqrcheLzkbXj4uKCzz77THQMi2JnZ4eMjAx5VyouLg4tW7YUnEqdTCYTLly4gIyMDLi6umLo0KHQ6XSiY1mECxcusOgjRSksLKw0PqSwsJDPodVCr169WODVoU6dOuHZs2fw8/PD0qVLYWNjU+nmrpppJH7KSIECAwOxceNG0TGIXiozMxPBwcG4ffs2mjZtCkdHRyxYsAAODg6io6nOtm3boNPp4Obmhhs3bsDBwQEzZswQHcsi8G8pKUlUVBT+/e9/Y+rUqRWOJIaGhmLo0KEYPny44IREpbKyslBUVARXV1fRUeoMd/qIiGrIbDbj3r17WLFiBYxGIyRJQpMmTUTHUq20tDR5rIivry/nn9Whsjl9REowbNgwtGzZUj6SCJQ+bjBu3Dj07dtXcDpq6Koa0p6RkQEHBweLOH3Coo8UycvLS3QEi3Pr1q1KndGqWqPqabVaREZGwtvbm63b60D5tuOW8MWqJO+8847oCKr1ss6dZWbOnFlPSSxLnz590KdPH9ExLEZWVhYcHR2rXaPq7d+/H/fv34erqyskSUJqaipcXV1RUFCAWbNmwdPTU3TEN8KijxSpWbNm8pgBSZKwe/duxMfHw8HBAXPnzmXntFo4cOBApUGuVa3R6+nRowfOnj1bqfD79bMqVL3k5OQKc01NJhOmT5/OZ3hJqLLvmdu3byMtLQ3e3t4ASp/fraoZCVXv22+/feX1CRMm1FMSy7Fly5ZK3+NVrVH1HBwcMGfOHDg7OwMoPYVy9uxZjB8/Hps3b2bRR/Q2REREyJ3TYmJikJKSgp07d+LBgwf45ptvsGbNGrEBVSQpKQm3b99Gfn4+wsLC5HWDwQCz2SwwmbpdunQJABAZGSmvaTQa7Ny5U1Qk1Tp27JjoCBYhKSkJXbt2FR3DYpR9B12+fBmrVq2Sd6SHDx+OL774QmAy9WrcuHGltefPn+PixYsoKChg0VcDDx8+RGpqKgwGA+Lj4+X1oqKiCoPF6fU9fPhQLvgAoF27dnjw4AFat24tMFXdYdFHiqTVauUv2GvXrsHHxwd2dnbw8PBAaGio4HTq8uLFCxiNRpSUlFRoia3X67Fo0SKBydRt165doiMQVbB//37e3X8Lnj59CqPRKO/iG41GDmevpfLz44qKinDu3DlcunQJ3t7enC1XQ+np6bh+/TqePXuGa9euyes2NjaYPXu2wGTq5eTkhL1792LgwIEAgNjYWLRp0wbFxcUVHkNQK/X/F5BF0mq1yMnJQdOmTZGYmIhx48bJ1zisuWa6d++O7t27Y8iQIewsWYcuX75c5bqPj089JyGit+mPf/wjAgMD8Zvf/AYAcPPmTUycOFFwKvUqLCxEWFgYoqOj4ePjg6CgIB6Lr4V+/fqhX79+3OGvQ/PmzUNkZCTCw8MhSRK6deuGqVOnQqfTYdWqVaLjvTGObCBFunbtGoKDg2E2m9GnTx/MmTMHQOmX7ZkzZ/D5558LTqg+6enp+O677/D48WOUlJTI65bwh0yE8k0eTCYTEhMT0aFDB/j7+wtMRQ3ZX/7yF7i5ub30Ojt51l5ubi7u3LkDAOjSpQtatGghOJE6hYSE4Pvvv4efnx9GjBjBRlh1ID09Hfv27UNeXh62bNmClJQUJCQkYPz48aKjqZLJZEJ2djacnJxER6lzLPpIscqOI5a/A2g0GgGAXxS1EBAQgOHDh6Njx47QarXyOpvi1A2DwYB//OMf/GFNwixYsEC+QVaV7t2712MayyFJEqKjo5GVlYUJEyYgOzsbubm5FjW0ub5MnjwZjRo1gk6ng0ajkdfZtKn2Vq1ahalTpyI4OFieyenv7y+PwaHXl5CQgJCQELx48QK7du1CcnIyjh07ZjHf6zzeSYp08+bNV17nj5ea02q1+N3vfic6hsWytrZGRkaG6BjUgNnY2PBv41uwb98+aDQa/Pzzz5gwYQJsbGywf/9+rF+/XnQ01WHTprpnMpkq3YAof2OXXt+JEyewfv16rF69GgDQvn17PH78WGyoOsSijxTp7NmzldY0Gg1SUlLw5MkTfnHUQGFhIYDS2UiRkZHo378/rKys5Ot8lqJ2NmzYIN+pliQJaWlpnC9JQnEu19tx9+5dBAUFITAwEEDp38wXL14ITkVUys7ODhkZGfL3UVxcHFq2bCk4lTrpdDro9XrRMd4aFn2kSEuXLq3w/tatWzh58iRatmzJgbg1tGTJEmg0GpSd5C5fUHPEQO198MEH8mutVgsHBwcOwiahRo0a9cpTEtwFrB2dTgez2Sz/qM7Pz69wNJFIpI8//hjBwcF4+PAhZs+eDUdHR8yfP190LFVydnbGlStXYDab8ejRI0RERFhUkxw+00eK9tNPP+Gf//wnNBoNxo4dCw8PD9GRiAAAhw8fxpQpU6pdI6ovGzZsqLTGExJvLjo6GrGxsXjw4AF8fHwQFxeHyZMny8PaiZTAaDRCkiQ0adJEdBTVev78OU6ePIkff/wRkiTB09MT48ePh7W1tehodYJFHynS9evXcfLkSej1eowbNw7dunUTHUn1yg9vLaPX6+Hi4oLmzZsLSKRuS5YsqTQTbfHixdi8ebOgREQVlZ2QePbsGcaOHYu+ffuKjqRaDx8+xE8//QQAcHd3R7t27QQnIiqVm5uLo0ePIicnB8uWLUNaWhqSkpLg6+srOhopDI93kiIFBQWhVatWsLW1xZkzZ3DmzJkK1y2lk1J9unjxIpKSkirMmurSpQsePXqECRMmYPDgwYITqsP58+cRGRmJrKwsLF68WF4vKirCe++9JzAZUSmekKhbFy9ehK+vL9q2bSuvhYaG4qOPPhKYiqjUl19+iSFDhuDUqVMAgDZt2mDbtm0s+mqg/DP6VbGU35ws+kiRODuu7mk0Gmzbtk2eL5Wbm4t9+/Zh3bp1WLVqFYu+1/Tb3/4WPXv2xJEjRyr86GvSpAmb4pBQ5U9IfPjhhzwhUUfi4uJgZWWFQYMGASjt5llcXCw4FVGpgoICeHt74/Tp0wBKn0Fl986aKf+MviVj0UeKVNZwwGQyyV2pWrdubTHnqkV4/PhxhYHCzZs3x6NHj2BrawudTicwmbro9Xro9XosXLgQAJCXl4fi4mIYjUYYjUbY29sLTkgNFU9IvB2LFy9GUFAQNBoN/vvf/8LW1haffPKJ6FhEAIDGjRujoKBA3qlKSkqy6A6Ub0NDaXLFZ/pIkUpKSnD06FFcunQJ9vb2kCQJT548wdChQ/Hhhx+iUSPer6ipffv2ITs7Wx4rEB8fj3feeQdTpkxBUFAQd1drKCEhAYcOHUJOTg6aNWuG7OxstG3bFlu3bhUdjRoozjetW2XjboDS49ubNm3Ce++9h8mTJwPguBtShvv37+PAgQP45Zdf4OLigvz8fCxatAiurq6io6mGv7//K493Wsqz+iz6SJG++eYbGI1GTJ8+Xe5EZTAYEBISAmtra8yYMUNwQvWRJAnx8fG4desWAKBbt24YMGAAW4/XUkBAAFauXIm1a9di48aNSExMRExMDGbPni06GhHVgXnz5snjbsqPvQE47oaUwWw2486dO+jcuTPS09MhSRKcnJx4Y7yGqhvA7uDgUE9J3i7+X0GKdP36dWzfvr1CQaLX6zFr1iwsXLiQRV8taDQaeHl5cYB4HdHpdLCzs4MkSTCbzXB3d0doaKjoWNSAvexudVnRYil3q+vLrl27REcgeiWtVotDhw7hiy++gLOzs+g4qmUpRV11WPSRImk0mip/vGi1Wu5M1dCKFSuwdu1aTJs2rcK/XdkPwYMHDwpMp15NmzaF0WiEm5sbduzYgebNm/PZSBJq6dKloiNYpH/9618YNGgQmjZtCqD02GdMTAx+//vfC05GBHh6eiIuLo4nd97Ar38flbG030k83kmKtHHjRgwYMAA+Pj4V1v/zn//g6tWrbEhAwhmNRlhbW0OSJERHR8NgMGDQoEGws7MTHY2oglu3buHKlStsPlJLAQEB2LRpU4W1wMBAbNy4UVAiov9v2rRpeP78ObRarfydZEmFCtUd7vSRIn3yySfYvHkzLl26hI4dOwIA7t27B5PJhICAAMHpLMenn36K3bt3i46hOmazGZs2bcKKFSsAAEOGDBEbiOhXkpOTceXKFVy9ehWOjo7o37+/6EiqJUmS/EMaKP38v3jxQnAqolKHDh0SHYFUgkUfKVKrVq2wbt06JCYmIjU1FZIkoVevXujRo4foaETyHVWDwcDW2KQY6enpiI2NRUxMDGxtbeHt7Q1JktiZ9w15enpi27ZtGD58ODQaDc6fP4+ePXuKjkUEAFizZg1WrlxZ7RoRiz5SpLt376KgoAC9evWCu7u7vJ6QkIBWrVrJu39EolhZWcHf3x8eHh5o3LixvD5z5kyBqagh+9vf/oZu3bphyZIlePfddwEA4eHhglOp30cffYSoqCicP38ekiTB09MTfn5+omNRA2cymWAymVBQUFBhvIjBYEBOTo7AZKRULPpIkQ4fPoy5c+dWWm/Xrh327NnDO9c1EBYWVuW6JEkwGo31nMZy9O7dG7179xYdg0jm7++PmJgY/N///R88PT0xcOBA8LH9N6fVauHr64tu3boBAJycnKDVagWnooYuKioK4eHhyMnJwdKlS+XPul6vZ5MhqhKLPlKkgoICODo6Vlp/9913K9zRouoVFRW99NqoUaPqMYllGTJkCEwmE7Kzs+Hk5CQ6DhH69++P/v37w2g04ocffkB4eDjy8vKwd+9e9O/fH56enqIjqtLPP/+MXbt2yW3ds7OzMW/ePA67J6FGjRqFUaNGISIiAiNHjhQdh1SARR8pkslkeuk17k7VzMSJE0VHsEgJCQkICQnBixcvsGvXLiQnJ+PYsWPsLEvC2djYYNCgQRg0aBAKCwtx9epVnD59mkVfLR06dAjLly+Xb+6kp6dj+/btCAoKEpyMGrK7d+/C3t5eLvguX76M+Ph42NvbY9KkSbC1tRWckJSG5xNIkXr06IGjR49WOpp0/PjxCs/4EYly4sQJrF+/Xp7d1b59e2RlZQlORQ2ZyWRCeHg49u/fjwsXLqCkpAS2trYYPnw4j8S/gZKSkgq7+U5OTigpKRGYiAjYu3cvGjUq3bu5efMmjhw5gsGDB0Ov12PPnj2C05EScaePFGnatGn46quvsGDBAri6ugIAUlJS0KlTJ8yZM0dwOiJAp9NV6tzJwbgk0q5du6DT6eDm5oYbN24gLS0NM2bMEB1L9Tp27Ijdu3dj8ODBAIDo6Gg2EyPhzGazvJsXGxsLPz8/eHl5wcvLi6OtqEos+kiRbGxssHDhQmRmZiI1NRUA4OzsjNatWwtOpl5ZWVmVnpOsao1ej7OzM65cuQKz2YxHjx4hIiICXbt2FR2LGrC0tDRs2bIFAODr64tly5YJTmQZZs2ahcjISERERECSJLi5ubFRBglnNptRUlICnU6HxMRE/PWvf61wjejXWPSRorVu3ZqFXh3ZsmVLpWdQqlqj1zNz5kycPHkSVlZW2LFjBzw9PTF+/HjRsagBKzvqBZTuRFPdsLKywujRozF69GjRUYhkAwcOxOrVq2FnZwdra2u4ubkBADIyMjg/lqqkkdjPmciiPXz4EKmpqQgNDcWUKVPk9aKiIpw9exZbt24VmE69rl69ivfff7/aNaL6MnnyZNjY2AAoHcliMpnQuHFjSJIEjUaDgwcPCk6oLv7+/q88sr158+Z6TENUWVJSEnJzc+Hh4SF/9tPT02E0GnkEmSrhTh+RhUtPT8f169fx7NkzXLt2TV63sbHB7NmzBSZTt9OnT1cq8KpaI6ovx44dEx3BoixdulR0BKJXquqRAo4Qopdh0Ueq8+mnn2L37t2iY6hGv3790K9fPyQlJfGZszpw48YN3LhxA0+fPsXXX38trxcVFXFgM5EFKZvLV15+fj7s7OzYtImIVIdFH1EDYWtrizVr1iAvLw9btmxBSkoKEhIS+BxaDbVs2RIdO3ZEQkJCheMzTZo0wfTp0wUmI6K6lJSUhCNHjsDW1hbjx4/Hzp07kZ+fD0mS8Nlnn6Fnz56iIxIRvTYWfUQNxJ49ezB16lQEBwcDAFxdXbFjxw4WfTXUvn17tG/fHoMGDWKzDCIL9vXXX+NPf/oTDAYD1qxZg88//xxdu3bFw4cPsX37dhZ9RKQqLPpIkcLCwqpclyQJRqOxntNYBpPJhM6dO1dY43HEmtu6dSsWLVqEwMDAKo94sbkDkWUoKSmBp6cnAOD48ePy8fi2bduKjEVEVCss+kiRioqKXnpt1KhR9ZjEctjZ2SEjI0MuVOLi4tCyZUvBqdSnbNg1mzwQWbbyN8Wsra0rXOMzfUSkNhzZQKpz9+7dSjtWVL3MzEwEBwfj9u3baNq0KRwdHTF//nwOZ69DK1aswNq1a0XHIKI6UDYCo/z4C6D0xElxcTGOHj0qOCER0etj0UeqkJaWhpiYGMTExECv12PDhg2iI6mW0WiEJElo0qSJ6CgWh51liYiISIl4vJMU6/Hjx3Khp9VqkZ2djfXr13NnqpZyc3Nx9OhR5OTkYNmyZUhLS0NSUhJ8fX1FRyMiIiKit4hFHynS8uXLYTAY4O3tjUWLFqFNmzaYN28eC7438OWXX2LIkCE4deoUAKBNmzbYtm0bi74aio+Pr3K97AgYERERkdKw6CNFatasGZ48eYK8vDzk5+ejTZs2fHD+DRUUFMDb2xunT58GAOh0OnbvrIVr16699FqfPn3qMQkRERHR62HRR4oUGBgIg8GAuLg4HD9+HBkZGTAYDGzi8gYaN26MgoICuXhOSkqCXq8XnEp95s6dKzoCERERUY2wkQupQl5eHmJjYxETE4MnT56wWUYt3L9/HwcOHMAvv/wCFxcX5OfnY9GiRXB1dRUdjYiIiIjeIhZ9pDpZWVl8tq+GzGYz7ty5g86dOyM9PR2SJMHJyQmNGnGzn4iIiMjS8YEeUqykpCTExcUhLy8PAJCSkoLt27dj1apVgpOpj1arxaFDh6DT6eDs7AwXFxcWfEREREQNBHf6SJFCQkJw/fp1uLq6IjMzE71798b58+cxduxYDBs2DNbW1qIjqs7x48fh4uKCAQMGsCnOGzhy5Aj+/Oc/AwB+/PFHeHh4CE5ERERE9Gq81U+KdP36dQQFBcHa2hqFhYWYPXs2Nm/ejDZt2oiOplphYWF4/vw5tFotrK2tIUkSNBoNDh48KDqaqvzvf/+Ti77Q0FAWfURERKR4LPpIkaytreXdPFtbWzg5ObHge0OHDh0SHYGIiIiIBGDRR4qUmZmJoKAg+f3jx48rvF+yZImIWKq2Zs0arFy5sto1erW8vDyEhYVBkiT5dXmjR48WlIyIiIioaiz6SJECAwMrvB8zZoygJOpnMplgMplQUFCAwsJCed1gMCAnJ0dgMnXy8/NDUVFRpddERERESsVGLqRIBoPhpYPDs7OzYW9vX8+J1OvcuXMIDw9HTk4OWrVqhbKPvF6vh5+fH0aMGCE4IRERERG9TSz6SJGWLFkiH+f89RHE8tfo9UVERGDkyJGiY1iEGzdu4PTp00hLSwMAtGvXDn/4wx/Qu3dvwcmIiIiIKuPxTlKk8vciyh9J/PU1qt7du3dhb28vF3yXL19GfHw87O3tMWnSJNja2gpOqC5RUVGIiorClClT0LFjRwDA/fv3ERoaiqdPn2LYsGGCExIRERFVxOHspEjl58j9eqYcZ8zVzN69e+VB7Ddv3sSRI0cwePBg6PV67NmzR3A69QkPD8fy5cvh7u4OvV4PvV4Pd3d3LFu2DOHh4aLjEREREVXCnT5SpJd1SJQkCfn5+YLTqYvZbJZ382JjY+Hn5wcvLy94eXkhICBAcDp1qmp31M7OTkASIiIioupxp48UqawrotFolF+Xvff19RUdT1XMZjNKSkoAAImJiXB3d69wjWqmSZMmSE5OrrSenJwMGxub+g9EREREVA3u9JEiTZw4UXQEizFw4ECsXr0adnZ2sLa2hpubGwAgIyPjpR1S6eWmTZuGjRs3YsiQIejYsSM0Gg3u3buHy5cvY/78+aLjEREREVXC7p2kSN9+++0rr0+YMKGekliGpKQk5ObmwsPDQ96NSk9Ph9FolJuR0OvLzc1FZGQkUlNTAZR27xwxYgRatGghOBkRERFRZSz6SJG+++67SmvPnz/HxYsXUVBQgJCQEAGpiCoqe760WbNmgpMQERERvRyLPlK8oqIinDt3DhcvXsT777+PMWPGoHnz5qJjUQMlSRJOnDiByMhISJIESZKg1WoxcuRI7kATERGRIrHoI8UqLCxEWFgYoqOj4ePjg1GjRnGmHAkXFhaGGzduYPbs2XB0dAQAZGZmYt++ffD09MTo0aMFJyQiIiKqiEUfKVJISAi+//57+Pn5YcSIEeyKSIoRGBiI5cuXVzrSmZ+fj7///e/YuHGjoGREREREVWP3TlKksLAwNGrUCCdPnsSpU6fkdUmSoNFocPDgQYHpqCErKSmp8hm+Zs2ayaMxiIiIiJSERR8p0rFjx0RHIKpSo0Yv/7P5qmtEREREovAXCilS+SHiWVlZ8rNTABAfH48BAwaIikYNXHJyMqZPn15pXZIkFBcXC0hERERE9Gos+kiRQkJCEBQUBADYsmWL/BoATp48yaKPhOEuNBEREamNVnQAoqqU7y/0615D7D1ERERERPT6WPSRImk0mipfV/WeiIiIiIhejsc7SZEyMzMRFBQESZLk10DpLl9WVpbgdERERERE6sE5faRIN2/efOX17t2711MSIiIiIiJ1Y9FHRERERERkwXi8kxTphx9+wJMnTzBixAgAwLJly5Cfnw8AmDJlCry8vETGIyIiIiJSDTZyIUU6e/Ys+vbtK78vLi7G+vXrsXr1apw/f15gMiIiIiIideFOHynSixcvYG9vL7/v1q0b7OzsYGdnh+fPnwtMRkRERESkLtzpI0UqLCys8P7jjz+WX5cd8yQiIiIiouqx6CNF6tKlC6KioiqtX7hwAZ06dRKQiIiIiIhIndi9kxQpLy8PmzZtgpWVFTp06AAAuH//PoqLixEQEIAWLVoITkhEREREpA4s+kjREhMTkZqaCgBwdnaGu7u74EREREREROrCoo+IiIiIiMiC8Zk+IiIiIiIiC8aij4iIiIiIyIKx6CMiIiIiIrJgLPqIiIiIiIgsGIs+IiIiIiIiC/b/ABd8eBsgTiHyAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "complaint_counts[:10].plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "