{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# HW1: Datatypes and Wrangling\n",
"\n",
"Hector Corrada Bravo\n",
"\n",
"Feb 2, 2020"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Types\n",
"\n",
"_1) Provide a URL to the dataset._\n",
"\n",
"\n",
"I downloaded my dataset from http://www.hcbravo.org/IntroDataSci/misc/BPD_Arrests.csv\n",
"\n",
"_2) Explain why you chose this dataset._ \n",
"\n",
"I am interested in studying how rates of arrests in different parts of Baltimore are related to demographic statistics.\n",
"\n",
"_3) What are the entities in this dataset? How many are there?_\n",
"\n",
"Entities are specific arrests. There are 104528.\n",
"\n",
"_4) How many attributes are there in this dataset?_\n",
"\n",
"There are 15 attributes.\n",
"\n",
"_5) What is the datatype of each attribute (categorical -ordered or unordered-, numeric -discrete or continuous-, datetime, geolocation, other)? Write a short sentence stating how you determined the type of each attribute. Do this for at least 5 attributes, if your dataset contains more than 10 attributes, choose 10 of them to describe._\n",
"\n",
"| Num | Name | Type | Description |\n",
"|-----|------|------|-------------|\n",
"| 1 | `arrest` | categorical | Identifier of each arrest, takes values from finite set |\n",
"| 2 | `age` | numeric continuous | Ages are numeric values measured in time units |\n",
"| 3 | `race` | categorical unordered | Can take value from finite set of possible races |\n",
"| 4 | `sex` | categorical unordered | Can take value from finite set of possible sexes |\n",
"| 5 | `arrestDate` | datetime | Specifies date of arrest |\n",
"| 6 | `arrestTime` | datetime | Specifies time of arrest |\n",
"| 7 | `arrestLocation` | other - address | Street address of arrest |\n",
"| 8 | `incidentOffense` | categorical unordered | Can take value from finite set of possible offenses |\n",
"| 9 | `incidentLocation` | other - address | Stree address if incident |\n",
"| 10 | `charge` | categorical unordered | Can take value from finite set of possible charges |\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"_6) Write python code that loads the dataset using function `pd.read_csv`. Were you able to load the data successfully? If no, why not?_"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
arrest
\n",
"
age
\n",
"
race
\n",
"
sex
\n",
"
arrestDate
\n",
"
arrestTime
\n",
"
arrestLocation
\n",
"
incidentOffense
\n",
"
incidentLocation
\n",
"
charge
\n",
"
chargeDescription
\n",
"
district
\n",
"
post
\n",
"
neighborhood
\n",
"
Location 1
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
11126858.0
\n",
"
23
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:00:00
\n",
"
NaN
\n",
"
Unknown Offense
\n",
"
NaN
\n",
"
3 0233
\n",
"
Cds:P W/I Dist:Narc || Cds:Poss W/Intent Dist:...
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1
\n",
"
11127013.0
\n",
"
37
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:01:00
\n",
"
2000 Wilkens Ave
\n",
"
79-Other
\n",
"
Wilkens Av & S Payson St
\n",
"
1 1425
\n",
"
Reckless Endangerment || Hand Gun Violation
\n",
"
SOUTHERN
\n",
"
934.0
\n",
"
Carrollton Ridge
\n",
"
(39.2814026274, -76.6483635135)
\n",
"
\n",
"
\n",
"
2
\n",
"
11126887.0
\n",
"
46
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:01:00
\n",
"
2800 Mayfield Ave
\n",
"
Unknown Offense
\n",
"
NaN
\n",
"
NaN
\n",
"
Unknown Charge
\n",
"
NORTHEASTERN
\n",
"
415.0
\n",
"
Belair-Edison
\n",
"
(39.3227699160, -76.5735750473)
\n",
"
\n",
"
\n",
"
3
\n",
"
11126873.0
\n",
"
50
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:04:00
\n",
"
2100 Ashburton St
\n",
"
79-Other
\n",
"
2100 Ashburton St
\n",
"
1 1106
\n",
"
Reg Firearm:Illegal Possession || Hgv
\n",
"
WESTERN
\n",
"
735.0
\n",
"
Panway/Braddish Avenue
\n",
"
(39.3117196723, -76.6623546313)
\n",
"
\n",
"
\n",
"
4
\n",
"
11126968.0
\n",
"
33
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:05:00
\n",
"
4000 Wilsby Ave
\n",
"
Unknown Offense
\n",
"
1700 Aliceanna St
\n",
"
NaN
\n",
"
Unknown Charge
\n",
"
NORTHERN
\n",
"
525.0
\n",
"
Pen Lucy
\n",
"
(39.3382885254, -76.6045667070)
\n",
"
\n",
"
\n",
"
5
\n",
"
11127041.0
\n",
"
41
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:05:00
\n",
"
2900 Spellman Rd
\n",
"
81-Recovered Property
\n",
"
2900 Spelman Rd
\n",
"
1 1425
\n",
"
Reckless Endangerment || Handgun Violation
\n",
"
SOUTHERN
\n",
"
924.0
\n",
"
Cherry Hill
\n",
"
(39.2449886230, -76.6273582432)
\n",
"
\n",
"
\n",
"
6
\n",
"
11126932.0
\n",
"
29
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:05:00
\n",
"
800 N Monroe St
\n",
"
79-Other
\n",
"
800 N Monroe St
\n",
"
1 5212
\n",
"
Handgun On Person || Handgun Violation
\n",
"
WESTERN
\n",
"
724.0
\n",
"
Midtown-Edmondson
\n",
"
(39.2979815407, -76.6475113571)
\n",
"
\n",
"
\n",
"
7
\n",
"
11126940.0
\n",
"
20
\n",
"
W
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:05:00
\n",
"
5200 Moravia Rd
\n",
"
Unknown Offense
\n",
"
NaN
\n",
"
1 5200
\n",
"
Deadly Weapon-Int/Injure || Aggravated Assault
\n",
"
NORTHEASTERN
\n",
"
436.0
\n",
"
Frankford
\n",
"
(39.3235271620, -76.5496555072)
\n",
"
\n",
"
\n",
"
8
\n",
"
11127051.0
\n",
"
24
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:07:00
\n",
"
2400 Gainsdbourgh Ct
\n",
"
54-Armed Person
\n",
"
2400 Gainsborough Ct
\n",
"
1 1106
\n",
"
Reg Firearm:Illegal Possession || Firearms Vio...
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
9
\n",
"
11127018.0
\n",
"
53
\n",
"
B
\n",
"
M
\n",
"
01/01/2011
\n",
"
00:15:00
\n",
"
3300 Woodland Ave
\n",
"
54-Armed Person
\n",
"
3300 Woodland Av
\n",
"
1 1425
\n",
"
Reckless Endangerment || Hgv
\n",
"
NORTHWESTERN
\n",
"
614.0
\n",
"
Central Park Heights
\n",
"
(39.3436773374, -76.6727297618)
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" arrest age race sex arrestDate arrestTime arrestLocation \\\n",
"0 11126858.0 23 B M 01/01/2011 00:00:00 NaN \n",
"1 11127013.0 37 B M 01/01/2011 00:01:00 2000 Wilkens Ave \n",
"2 11126887.0 46 B M 01/01/2011 00:01:00 2800 Mayfield Ave \n",
"3 11126873.0 50 B M 01/01/2011 00:04:00 2100 Ashburton St \n",
"4 11126968.0 33 B M 01/01/2011 00:05:00 4000 Wilsby Ave \n",
"5 11127041.0 41 B M 01/01/2011 00:05:00 2900 Spellman Rd \n",
"6 11126932.0 29 B M 01/01/2011 00:05:00 800 N Monroe St \n",
"7 11126940.0 20 W M 01/01/2011 00:05:00 5200 Moravia Rd \n",
"8 11127051.0 24 B M 01/01/2011 00:07:00 2400 Gainsdbourgh Ct \n",
"9 11127018.0 53 B M 01/01/2011 00:15:00 3300 Woodland Ave \n",
"\n",
" incidentOffense incidentLocation charge \\\n",
"0 Unknown Offense NaN 3 0233 \n",
"1 79-Other Wilkens Av & S Payson St 1 1425 \n",
"2 Unknown Offense NaN NaN \n",
"3 79-Other 2100 Ashburton St 1 1106 \n",
"4 Unknown Offense 1700 Aliceanna St NaN \n",
"5 81-Recovered Property 2900 Spelman Rd 1 1425 \n",
"6 79-Other 800 N Monroe St 1 5212 \n",
"7 Unknown Offense NaN 1 5200 \n",
"8 54-Armed Person 2400 Gainsborough Ct 1 1106 \n",
"9 54-Armed Person 3300 Woodland Av 1 1425 \n",
"\n",
" chargeDescription district post \\\n",
"0 Cds:P W/I Dist:Narc || Cds:Poss W/Intent Dist:... NaN NaN \n",
"1 Reckless Endangerment || Hand Gun Violation SOUTHERN 934.0 \n",
"2 Unknown Charge NORTHEASTERN 415.0 \n",
"3 Reg Firearm:Illegal Possession || Hgv WESTERN 735.0 \n",
"4 Unknown Charge NORTHERN 525.0 \n",
"5 Reckless Endangerment || Handgun Violation SOUTHERN 924.0 \n",
"6 Handgun On Person || Handgun Violation WESTERN 724.0 \n",
"7 Deadly Weapon-Int/Injure || Aggravated Assault NORTHEASTERN 436.0 \n",
"8 Reg Firearm:Illegal Possession || Firearms Vio... NaN NaN \n",
"9 Reckless Endangerment || Hgv NORTHWESTERN 614.0 \n",
"\n",
" neighborhood Location 1 \n",
"0 NaN NaN \n",
"1 Carrollton Ridge (39.2814026274, -76.6483635135) \n",
"2 Belair-Edison (39.3227699160, -76.5735750473) \n",
"3 Panway/Braddish Avenue (39.3117196723, -76.6623546313) \n",
"4 Pen Lucy (39.3382885254, -76.6045667070) \n",
"5 Cherry Hill (39.2449886230, -76.6273582432) \n",
"6 Midtown-Edmondson (39.2979815407, -76.6475113571) \n",
"7 Frankford (39.3235271620, -76.5496555072) \n",
"8 NaN NaN \n",
"9 Central Park Heights (39.3436773374, -76.6727297618) "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"url = \"http://www.hcbravo.org/IntroDataSci/misc/BPD_Arrests.csv\"\n",
"arrest_tab = pd.read_csv(url)\n",
"arrest_tab.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wrangling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1) My pipeline computes average arrest age (ignoring ages <= 0), for each district and writes them in increasing order. It would be useful to see which districts tend to arrest younger individuals."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
district
\n",
"
age
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2
\n",
"
NORTHEASTERN
\n",
"
30.431111
\n",
"
\n",
"
\n",
"
6
\n",
"
SOUTHERN
\n",
"
32.346947
\n",
"
\n",
"
\n",
"
7
\n",
"
SOUTHWESTERN
\n",
"
32.454487
\n",
"
\n",
"
\n",
"
5
\n",
"
SOUTHEASTERN
\n",
"
32.515476
\n",
"
\n",
"
\n",
"
0
\n",
"
CENTRAL
\n",
"
33.056902
\n",
"
\n",
"
\n",
"
3
\n",
"
NORTHERN
\n",
"
33.128878
\n",
"
\n",
"
\n",
"
1
\n",
"
EASTERN
\n",
"
34.140232
\n",
"
\n",
"
\n",
"
8
\n",
"
WESTERN
\n",
"
34.364334
\n",
"
\n",
"
\n",
"
4
\n",
"
NORTHWESTERN
\n",
"
34.627681
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" district age\n",
"2 NORTHEASTERN 30.431111\n",
"6 SOUTHERN 32.346947\n",
"7 SOUTHWESTERN 32.454487\n",
"5 SOUTHEASTERN 32.515476\n",
"0 CENTRAL 33.056902\n",
"3 NORTHERN 33.128878\n",
"1 EASTERN 34.140232\n",
"8 WESTERN 34.364334\n",
"4 NORTHWESTERN 34.627681"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_ages = (arrest_tab[['district','age']]\n",
" .query('age > 0')\n",
" .groupby(['district'])\n",
" .agg({'age': 'mean'})\n",
" .reset_index()\n",
" .sort_values(['age'])\n",
")\n",
"mean_ages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1) This barplot shows the average arrest age per district (ignoring ages <= 0)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/hcorrada/opt/miniconda3/envs/cmsc320/lib/python3.6/site-packages/plotnine/utils.py:284: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
" ndistinct = ids.apply(len_unique, axis=0).as_matrix()\n",
"/Users/hcorrada/opt/miniconda3/envs/cmsc320/lib/python3.6/site-packages/pandas/core/generic.py:5191: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
" object.__getattribute__(self, name)\n",
"/Users/hcorrada/opt/miniconda3/envs/cmsc320/lib/python3.6/site-packages/pandas/core/generic.py:5192: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.\n",
" return object.__setattr__(self, name, value)\n",
"/Users/hcorrada/opt/miniconda3/envs/cmsc320/lib/python3.6/site-packages/plotnine/positions/position.py:188: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n",
" intervals = data[xminmax].drop_duplicates().as_matrix().flatten()\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from plotnine import *\n",
"\n",
"(ggplot(mean_ages, aes(x='district', y='age')) +\n",
" geom_bar(stat='identity') +\n",
" coord_flip())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}