{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T16:55:30.485359", "start_time": "2017-03-08T16:55:29.222947" }, "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pylab as plt\n", "import seaborn as sns\n", "\n", "\n", "# Pandas Printing Options\n", "pd.set_option('display.float_format', lambda x: '%.3f' % x)\n", "pd.set_option('display.max_rows', 500)\n", "pd.set_option('display.max_columns', 500)\n", "pd.set_option('display.width', 1000)\n", "\n", "sns.set_style('white')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CHECK DIRECTORY" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T16:55:30.608826", "start_time": "2017-03-08T16:55:30.486864" }, "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "README.md \u001b[34mcss\u001b[m\u001b[m/ \u001b[34mimages\u001b[m\u001b[m/ \u001b[34mjs\u001b[m\u001b[m/\r\n", "\u001b[34mbower_components\u001b[m\u001b[m/ \u001b[34mdata\u001b[m\u001b[m/ \u001b[31mindex.html\u001b[m\u001b[m* \u001b[34mnotebooks\u001b[m\u001b[m/\r\n" ] } ], "source": [ "ls .." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# DOWNLOAD DATA" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T16:57:15.253159", "start_time": "2017-03-08T16:55:30.610850" }, "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2017-03-08 16:55:30-- https://data.cityofnewyork.us/api/views/h9gi-nx95/rows.csv?accessType=DOWNLOAD\n", "Resolving data.cityofnewyork.us... 52.206.68.26\n", "Connecting to data.cityofnewyork.us|52.206.68.26|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [text/csv]\n", "Saving to: ‘STDOUT’\n", "\n", "- [ <=> ] 180.01M 1.54MB/s in 1m 44s \n", "\n", "Last-modified header invalid -- time-stamp ignored.\n", "2017-03-08 16:57:15 (1.73 MB/s) - written to stdout [188752256]\n", "\n" ] } ], "source": [ "!wget -O - 'https://data.cityofnewyork.us/api/views/h9gi-nx95/rows.csv?accessType=DOWNLOAD' > ../data/nypd_collision_data.csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# LOAD DATA" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T16:57:20.563720", "start_time": "2017-03-08T16:57:15.255038" }, "collapsed": false }, "outputs": [], "source": [ "data = pd.read_csv(\"../data/nypd_collision_data.csv\", low_memory=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CREATE DATETIME COLUMN" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:15.666438", "start_time": "2017-03-08T16:57:20.565272" }, "collapsed": false }, "outputs": [], "source": [ "data['DATE'] = pd.to_datetime(data['DATE'] + ' ' + data['TIME'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# SET DATETIME AS INDEX" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:15.905426", "start_time": "2017-03-08T17:00:15.667946" }, "collapsed": false }, "outputs": [], "source": [ "data = data.set_index('DATE')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# HIGHLEVEL INFORMATION" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:16.993932", "start_time": "2017-03-08T17:00:15.906847" }, "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DatetimeIndex: 990267 entries, 2017-02-09 17:15:00 to 2012-07-01 09:15:00\n", "Data columns (total 28 columns):\n", "TIME 990267 non-null object\n", "BOROUGH 729718 non-null object\n", "ZIP CODE 729617 non-null float64\n", "LATITUDE 788840 non-null float64\n", "LONGITUDE 788840 non-null float64\n", "LOCATION 788840 non-null object\n", "ON STREET NAME 802215 non-null object\n", "CROSS STREET NAME 772888 non-null object\n", "OFF STREET NAME 73911 non-null object\n", "NUMBER OF PERSONS INJURED 990267 non-null int64\n", "NUMBER OF PERSONS KILLED 990267 non-null int64\n", "NUMBER OF PEDESTRIANS INJURED 990267 non-null int64\n", "NUMBER OF PEDESTRIANS KILLED 990267 non-null int64\n", "NUMBER OF CYCLIST INJURED 990267 non-null int64\n", "NUMBER OF CYCLIST KILLED 990267 non-null int64\n", "NUMBER OF MOTORIST INJURED 990267 non-null int64\n", "NUMBER OF MOTORIST KILLED 990267 non-null int64\n", "CONTRIBUTING FACTOR VEHICLE 1 986277 non-null object\n", "CONTRIBUTING FACTOR VEHICLE 2 866649 non-null object\n", "CONTRIBUTING FACTOR VEHICLE 3 65059 non-null object\n", "CONTRIBUTING FACTOR VEHICLE 4 14073 non-null object\n", "CONTRIBUTING FACTOR VEHICLE 5 3438 non-null object\n", "UNIQUE KEY 990267 non-null int64\n", "VEHICLE TYPE CODE 1 985364 non-null object\n", "VEHICLE TYPE CODE 2 855422 non-null object\n", "VEHICLE TYPE CODE 3 63883 non-null object\n", "VEHICLE TYPE CODE 4 13707 non-null object\n", "VEHICLE TYPE CODE 5 3363 non-null object\n", "dtypes: float64(3), int64(9), object(16)\n", "memory usage: 219.1+ MB\n" ] } ], "source": [ "data.info()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:17.001808", "start_time": "2017-03-08T17:00:16.995307" }, "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2012-07-01 00:05:00\n", "2017-03-04 23:50:00\n" ] } ], "source": [ "# # NOTE: data starting 2013-01-01 and ending in 2017-02-28\n", "print(data.index.min())\n", "print(data.index.max())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# FILTER FOR COLLISIONS WITH PEDESTRIANS INJURED " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:17.088412", "start_time": "2017-03-08T17:00:17.003262" }, "collapsed": false }, "outputs": [], "source": [ "data = data[data['NUMBER OF PEDESTRIANS INJURED']!=0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### INJURIES 2012-07-01 TO 2017/02/28" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:17.852492", "start_time": "2017-03-08T17:00:17.090022" }, "collapsed": true }, "outputs": [], "source": [ "# SAVE FULL DATA FOR USE LATER\n", "injuries_till_2017 = data['2012-07-01':'2017/02/28']\n", "injuries_till_2017.to_csv(\"../data/injuries_till_2017.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### INJURIES 2013-01-01 to 2016/12/31" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.538839", "start_time": "2017-03-08T17:00:17.854163" }, "collapsed": true }, "outputs": [], "source": [ "injuries_2013_2016 = data['2013-01-01':'2016/12/31']\n", "injuries_2013_2016.to_csv(\"../data/injuries_2013_2016.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# FILTER DATA FOR THIS NOTEBOOK" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.570375", "start_time": "2017-03-08T17:00:18.540930" }, "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(43861, 28)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = data['2013/01/01':'2017/02/28']\n", "data.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# NUM PEDESTRIANS INJURED FROM AUTO COLLISIONS" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.629919", "start_time": "2017-03-08T17:00:18.571799" }, "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "DATE\n", "2013-01-31 1113\n", "2013-02-28 984\n", "2013-03-31 987\n", "2013-04-30 901\n", "2013-05-31 982\n", "2013-06-30 972\n", "2013-07-31 854\n", "2013-08-31 853\n", "2013-09-30 999\n", "2013-10-31 1066\n", "Freq: M, Name: NUMBER OF PEDESTRIANS INJURED, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "monthly_injured = data.resample('M')['NUMBER OF PEDESTRIANS INJURED'].sum()\n", "monthly_injured[:10]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.671045", "start_time": "2017-03-08T17:00:18.631368" }, "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "DATE\n", "2013-01-01 34\n", "2013-01-02 22\n", "2013-01-03 43\n", "2013-01-04 31\n", "2013-01-05 28\n", "2013-01-06 25\n", "2013-01-07 38\n", "2013-01-08 30\n", "2013-01-09 40\n", "2013-01-10 51\n", "Freq: D, Name: NUMBER OF PEDESTRIANS INJURED, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "daily_injured = data.resample('D')['NUMBER OF PEDESTRIANS INJURED'].sum()\n", "daily_injured[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# DAILY INJURED DESCRIPTIVE STATS" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.678941", "start_time": "2017-03-08T17:00:18.672474" }, "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 1520.000\n", "mean 31.585\n", "std 13.959\n", "min 3.000\n", "25% 23.000\n", "50% 29.500\n", "75% 37.000\n", "max 228.000\n", "Name: NUMBER OF PEDESTRIANS INJURED, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "daily_injured.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# FILTER BY BORO" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.709203", "start_time": "2017-03-08T17:00:18.680423" }, "collapsed": false }, "outputs": [], "source": [ "borough_injuries_month = data.groupby([data.index.month, data.BOROUGH])['NUMBER OF PEDESTRIANS INJURED'].sum().unstack()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# NUM PEDESTRIANS INJURED BY DAY FROM AUTO COLLISIONS" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.720899", "start_time": "2017-03-08T17:00:18.710576" }, "collapsed": false }, "outputs": [], "source": [ "# borough_injuries_year = data.groupby([data.index.year, data.BOROUGH])['NUMBER OF PEDESTRIANS INJURED'].sum().unstack()\n", "borough_injuries_daily = data.groupby([data.index.day, data.BOROUGH])['NUMBER OF PEDESTRIANS INJURED'].sum().unstack()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CLEANUP DATA" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.726196", "start_time": "2017-03-08T17:00:18.722230" }, "collapsed": false }, "outputs": [], "source": [ "borough_by_biggest_population = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'BRONX', 'STATEN ISLAND']\n", "borough_injuries_month = borough_injuries_month[borough_by_biggest_population]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:18.738848", "start_time": "2017-03-08T17:00:18.727777" }, "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BOROUGHMANHATTANBROOKLYNQUEENSBRONXSTATEN ISLAND
January116216771184699159
February10221168772575122
March841107371851183
April777100862950379
May798106466049485
June762102663746675
July69587555842972
August854113467252476
September753100973648869
October862122789456396
November8551254948564115
December940135899457183
\n", "
" ], "text/plain": [ "BOROUGH MANHATTAN BROOKLYN QUEENS BRONX STATEN ISLAND\n", "January 1162 1677 1184 699 159\n", "February 1022 1168 772 575 122\n", "March 841 1073 718 511 83\n", "April 777 1008 629 503 79\n", "May 798 1064 660 494 85\n", "June 762 1026 637 466 75\n", "July 695 875 558 429 72\n", "August 854 1134 672 524 76\n", "September 753 1009 736 488 69\n", "October 862 1227 894 563 96\n", "November 855 1254 948 564 115\n", "December 940 1358 994 571 83" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n", "months_abbr = [m[:3] for m in months]\n", "\n", "borough_injuries_month.index = months\n", "borough_injuries_month" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2017-03-05T18:42:17.190162", "start_time": "2017-03-05T18:42:17.181142" } }, "source": [ "# PLOT RESULTS" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:19.916339", "start_time": "2017-03-08T17:00:18.740162" }, "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.set(style=\"white\")\n", "\n", "# Set up the matplotlib figure\n", "f, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(5, 1, figsize=(8, 12), sharex=True, sharey=True)\n", "f.subplots_adjust(hspace=.3)\n", "\n", "for boro, ax in zip(borough_injuries_month, [ax1, ax2, ax3, ax4, ax5]):\n", " values = borough_injuries_month[boro].values\n", " colors = ['gray' if (x < max(values)) else 'red' for x in values]\n", " sns.barplot(months_abbr, borough_injuries_month[boro], palette=colors, ax=ax)\n", " ax.set_title(boro, loc='right', weight='bold', fontdict={'fontsize': 12})\n", " ax.set_ylabel('')\n", " ax.tick_params(direction='inout', length=4, width=1, colors='black')\n", " sns.despine(bottom=True)\n", "\n", "plt.ylim(0, 1500)\n", "plt.show();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# MONTHLY INJURIES BY BOROUGH" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:19.926811", "start_time": "2017-03-08T17:00:19.917761" }, "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BOROUGHMANHATTANBROOKLYNQUEENSBRONXSTATEN ISLAND
January116216771184699159
February10221168772575122
March841107371851183
April777100862950379
May798106466049485
June762102663746675
July69587555842972
August854113467252476
September753100973648869
October862122789456396
November8551254948564115
December940135899457183
\n", "
" ], "text/plain": [ "BOROUGH MANHATTAN BROOKLYN QUEENS BRONX STATEN ISLAND\n", "January 1162 1677 1184 699 159\n", "February 1022 1168 772 575 122\n", "March 841 1073 718 511 83\n", "April 777 1008 629 503 79\n", "May 798 1064 660 494 85\n", "June 762 1026 637 466 75\n", "July 695 875 558 429 72\n", "August 854 1134 672 524 76\n", "September 753 1009 736 488 69\n", "October 862 1227 894 563 96\n", "November 855 1254 948 564 115\n", "December 940 1358 994 571 83" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "borough_injuries_month" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# DAILY INJURIES BY BOROUGH" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:19.939980", "start_time": "2017-03-08T17:00:19.928153" }, "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BOROUGHBRONXBROOKLYNMANHATTANQUEENSSTATEN ISLAND
121745635231644
218747930727134
323448135135128
424447528432050
518148432328441
621149035133342
721343132934630
819445433330533
917643829927430
1018248638329846
1121947531631933
1219747736628828
1318944733031226
1421342736331145
1520147534930531
1619644942532844
1723448937331156
1822745934828133
1920345936928444
2021049035632354
2121840533529328
2220040932933943
2326455939035140
2424047433730732
2517638528223634
2624745330731715
2721243734928334
2820740431931025
2920439026231135
3017737732031038
3111425918418518
\n", "
" ], "text/plain": [ "BOROUGH BRONX BROOKLYN MANHATTAN QUEENS STATEN ISLAND\n", "1 217 456 352 316 44\n", "2 187 479 307 271 34\n", "3 234 481 351 351 28\n", "4 244 475 284 320 50\n", "5 181 484 323 284 41\n", "6 211 490 351 333 42\n", "7 213 431 329 346 30\n", "8 194 454 333 305 33\n", "9 176 438 299 274 30\n", "10 182 486 383 298 46\n", "11 219 475 316 319 33\n", "12 197 477 366 288 28\n", "13 189 447 330 312 26\n", "14 213 427 363 311 45\n", "15 201 475 349 305 31\n", "16 196 449 425 328 44\n", "17 234 489 373 311 56\n", "18 227 459 348 281 33\n", "19 203 459 369 284 44\n", "20 210 490 356 323 54\n", "21 218 405 335 293 28\n", "22 200 409 329 339 43\n", "23 264 559 390 351 40\n", "24 240 474 337 307 32\n", "25 176 385 282 236 34\n", "26 247 453 307 317 15\n", "27 212 437 349 283 34\n", "28 207 404 319 310 25\n", "29 204 390 262 311 35\n", "30 177 377 320 310 38\n", "31 114 259 184 185 18" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "borough_injuries_daily" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# SAVE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TO CSV" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.635092", "start_time": "2017-03-08T17:00:19.941377" }, "collapsed": false }, "outputs": [], "source": [ "# CSV verison\n", "data.to_csv(\"../data/injuries_2013_present.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TO JSON" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.640383", "start_time": "2017-03-08T17:00:20.636488" }, "collapsed": true }, "outputs": [], "source": [ "def serise_to_json(data):\n", " dates = np.array(data.index.values, dtype=np.datetime64)\n", " values = data.values\n", " dates_str = [str(i)[:10] for i in dates]\n", " return [{'date': d, 'value': int(v)} for d, v in zip(dates_str, values)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Monthly " ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.646992", "start_time": "2017-03-08T17:00:20.641781" }, "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'date': '2013-01-31', 'value': 1113},\n", " {'date': '2013-02-28', 'value': 984},\n", " {'date': '2013-03-31', 'value': 987},\n", " {'date': '2013-04-30', 'value': 901},\n", " {'date': '2013-05-31', 'value': 982}]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "monthly_json = serise_to_json(monthly_injured)\n", "monthly_json[:5]" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.651741", "start_time": "2017-03-08T17:00:20.648413" }, "collapsed": true }, "outputs": [], "source": [ "monthly_outname = '../data/monthly_injured_2013_present.json'\n", "with open(monthly_outname, 'w') as outfile:\n", " json.dump(monthly_json, outfile)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Daily" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.658194", "start_time": "2017-03-08T17:00:20.653076" }, "collapsed": false }, "outputs": [], "source": [ "daily_json = serise_to_json(daily_injured)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.673365", "start_time": "2017-03-08T17:00:20.659578" }, "collapsed": false }, "outputs": [], "source": [ "daily_outname = '../data/daily_injured_2013_present.json'\n", "with open(daily_outname, 'w') as outfile:\n", " json.dump(daily_json, outfile)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# MOST DANGEROUS DAY" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2017-03-08T17:00:20.685694", "start_time": "2017-03-08T17:00:20.674892" }, "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datevalue
14832017-01-23228
14842017-01-24133
14772017-01-17105
3292013-11-26103
10522015-11-19103
13952016-10-27101
14632017-01-0398
3392013-12-0690
14282016-11-2989
6942014-11-2686
\n", "
" ], "text/plain": [ " date value\n", "1483 2017-01-23 228\n", "1484 2017-01-24 133\n", "1477 2017-01-17 105\n", "329 2013-11-26 103\n", "1052 2015-11-19 103\n", "1395 2016-10-27 101\n", "1463 2017-01-03 98\n", "339 2013-12-06 90\n", "1428 2016-11-29 89\n", "694 2014-11-26 86" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2017-01-23 - 228 PEDESTRIANS INJURIES\n", "pd.DataFrame(daily_json).sort_values(by='value', ascending=False)[:10]" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.0" } }, "nbformat": 4, "nbformat_minor": 2 }