DATA201_projects/capstone_project.ipynb

2414 lines
153 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"id": "58dfeab5",
"metadata": {},
"source": [
"# Working title: working subtitle\n",
"\n",
"## initial remarks"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "fe05b4a4",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "39a4ce3f",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('~/python_class/DOB_Sustainability_Compliance_Map__Local_Law_33.csv')"
]
},
{
"cell_type": "markdown",
"id": "e0e97c85",
"metadata": {},
"source": [
"## Part 1: Data Exploration"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "6b430c20",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(21681, 11)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "917a6779",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Building_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Building_Count</th>\n",
" <th>DOF_Gross_Square_Footage</th>\n",
" <th>Address</th>\n",
" <th>BoroughName</th>\n",
" <th>BBL</th>\n",
" <th>ENERGY STAR Score</th>\n",
" <th>LetterScore</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" <td>Y4</td>\n",
" <td>0</td>\n",
" <td>124</td>\n",
" <td>2598091</td>\n",
" <td>920 GRESHAM ROAD</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1000010010</td>\n",
" <td>1</td>\n",
" <td>D</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>23</td>\n",
" <td>T2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>24346</td>\n",
" <td>20 SOUTH STREET</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1000020023</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4</td>\n",
" <td>7501</td>\n",
" <td>R0</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>2542563</td>\n",
" <td>1 WATER STREET</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1000047501</td>\n",
" <td>61</td>\n",
" <td>C</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Building_Class Tax_Class Building_Count \\\n",
"0 1 10 Y4 0 124 \n",
"1 2 23 T2 0 1 \n",
"2 4 7501 R0 2 1 \n",
"\n",
" DOF_Gross_Square_Footage Address BoroughName BBL \\\n",
"0 2598091 920 GRESHAM ROAD MANHATTAN 1000010010 \n",
"1 24346 20 SOUTH STREET MANHATTAN 1000020023 \n",
"2 2542563 1 WATER STREET MANHATTAN 1000047501 \n",
"\n",
" ENERGY STAR Score LetterScore \n",
"0 1 D \n",
"1 0 F \n",
"2 61 C "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "38d0ac47",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Block', 'Lot', 'Building_Class', 'Tax_Class', 'Building_Count',\n",
" 'DOF_Gross_Square_Footage', 'Address', 'BoroughName', 'BBL',\n",
" 'ENERGY STAR Score', 'LetterScore'],\n",
" dtype='object')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "adf4092b",
"metadata": {},
"outputs": [],
"source": [
"# Columns seem to be self-explanatory, except BBL. According to NYC OpenData:\n",
"# \"Borough Block and Lot identifier as assigned by NYC Department of Finance\"."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "276d9619",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MANHATTAN 7858\n",
"BROOKLYN 5469\n",
"BRONX 4349\n",
"QUEENS 3659\n",
"STATEN ISLAND 346\n",
"Name: BoroughName, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Is this dataset citywide? or just Manhattan?\n",
"\n",
"df['BoroughName'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d3c8c305",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Block 0\n",
"Lot 0\n",
"Building_Class 2\n",
"Tax_Class 0\n",
"Building_Count 0\n",
"DOF_Gross_Square_Footage 0\n",
"Address 7\n",
"BoroughName 0\n",
"BBL 0\n",
"ENERGY STAR Score 0\n",
"LetterScore 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Missing data?\n",
"\n",
"df.isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "64eb852e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Building_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Building_Count</th>\n",
" <th>DOF_Gross_Square_Footage</th>\n",
" <th>Address</th>\n",
" <th>BoroughName</th>\n",
" <th>BBL</th>\n",
" <th>ENERGY STAR Score</th>\n",
" <th>LetterScore</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4254</th>\n",
" <td>1595</td>\n",
" <td>7501</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1330 5 AVENUE</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1015950031</td>\n",
" <td>64</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8124</th>\n",
" <td>3016</td>\n",
" <td>7502</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1926 LONGFELLOW AVENUE</td>\n",
" <td>BRONX</td>\n",
" <td>2030160038</td>\n",
" <td>100</td>\n",
" <td>A</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Building_Class Tax_Class Building_Count \\\n",
"4254 1595 7501 NaN 0 0 \n",
"8124 3016 7502 NaN 0 0 \n",
"\n",
" DOF_Gross_Square_Footage Address BoroughName \\\n",
"4254 0 1330 5 AVENUE MANHATTAN \n",
"8124 0 1926 LONGFELLOW AVENUE BRONX \n",
"\n",
" BBL ENERGY STAR Score LetterScore \n",
"4254 1015950031 64 C \n",
"8124 2030160038 100 A "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df['Building_Class'].isna()]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cdf678d2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Building_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Building_Count</th>\n",
" <th>DOF_Gross_Square_Footage</th>\n",
" <th>Address</th>\n",
" <th>BoroughName</th>\n",
" <th>BBL</th>\n",
" <th>ENERGY STAR Score</th>\n",
" <th>LetterScore</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1228</th>\n",
" <td>506</td>\n",
" <td>12</td>\n",
" <td>W3</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>49475</td>\n",
" <td>NaN</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1005060012</td>\n",
" <td>10</td>\n",
" <td>D</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7145</th>\n",
" <td>1734</td>\n",
" <td>1</td>\n",
" <td>I1</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>1017118</td>\n",
" <td>NaN</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1017340001</td>\n",
" <td>7</td>\n",
" <td>D</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9225</th>\n",
" <td>2758</td>\n",
" <td>6</td>\n",
" <td>N9</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>17200</td>\n",
" <td>NaN</td>\n",
" <td>BRONX</td>\n",
" <td>2027580006</td>\n",
" <td>89</td>\n",
" <td>A</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9226</th>\n",
" <td>2758</td>\n",
" <td>36</td>\n",
" <td>N9</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>37060</td>\n",
" <td>NaN</td>\n",
" <td>BRONX</td>\n",
" <td>2027580036</td>\n",
" <td>66</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13711</th>\n",
" <td>1769</td>\n",
" <td>72</td>\n",
" <td>C1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>30720</td>\n",
" <td>NaN</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15056</th>\n",
" <td>1602</td>\n",
" <td>13</td>\n",
" <td>C1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>14720</td>\n",
" <td>NaN</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16381</th>\n",
" <td>3755</td>\n",
" <td>22</td>\n",
" <td>C1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>25564</td>\n",
" <td>NaN</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Building_Class Tax_Class Building_Count \\\n",
"1228 506 12 W3 0 1 \n",
"7145 1734 1 I1 0 5 \n",
"9225 2758 6 N9 0 1 \n",
"9226 2758 36 N9 0 1 \n",
"13711 1769 72 C1 0 1 \n",
"15056 1602 13 C1 0 1 \n",
"16381 3755 22 C1 0 1 \n",
"\n",
" DOF_Gross_Square_Footage Address BoroughName BBL \\\n",
"1228 49475 NaN MANHATTAN 1005060012 \n",
"7145 1017118 NaN MANHATTAN 1017340001 \n",
"9225 17200 NaN BRONX 2027580006 \n",
"9226 37060 NaN BRONX 2027580036 \n",
"13711 30720 NaN BROOKLYN -2147483648 \n",
"15056 14720 NaN BROOKLYN -2147483648 \n",
"16381 25564 NaN BROOKLYN -2147483648 \n",
"\n",
" ENERGY STAR Score LetterScore \n",
"1228 10 D \n",
"7145 7 D \n",
"9225 89 A \n",
"9226 66 C \n",
"13711 0 F \n",
"15056 0 F \n",
"16381 0 F "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df['Address'].isna()]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "e205df03",
"metadata": {},
"outputs": [],
"source": [
"# Missing Address is not a big deal because the rest of the values are complete.\n",
"# But missing Building Class could be significant.\n",
"\n",
"# The two offending rows also have Building Count = 0.\n",
"# How is that possible, since they have Energy Star scores?\n",
"\n",
"# In the next secion we may decide to drop those two rows."
]
},
{
"cell_type": "markdown",
"id": "4d539a8c",
"metadata": {},
"source": [
"## Part 2: Data Cleaning"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "614dbd9f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Block int64\n",
"Lot int64\n",
"Building_Class object\n",
"Tax_Class int64\n",
"Building_Count int64\n",
"DOF_Gross_Square_Footage int64\n",
"Address object\n",
"BoroughName object\n",
"BBL int64\n",
"ENERGY STAR Score int64\n",
"LetterScore object\n",
"dtype: object"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Which columns are informative?\n",
"\n",
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "6c58a084",
"metadata": {},
"outputs": [],
"source": [
"# Interesting for analysis:\n",
"\n",
"# DOF_Gross_Square_Footage\n",
"# ENERGY STAR Score\n",
"# LetterScore\n",
"\n",
"# Other columns are less interesting:\n",
"\n",
"# Building_Count is the number of buildings in one Block.\n",
"# A Block can have more than one Lot, but a Lot only has one Block.\n",
"# Block, Lot and BBL are identifiers assigned by the city.\n",
"\n",
"# A good visual reference is the Digital Tax Map put out by the NYC Department of Finance:\n",
"# http://gis.nyc.gov/taxmap/map.htm"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "14213bd2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Can any identifiers be used as an index?\n",
"\n",
"df['Block'].is_unique"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1e1a5e9b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Lot'].is_unique"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "67b7f633",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['BBL'].is_unique"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "c4469ca8",
"metadata": {},
"outputs": [],
"source": [
"# Since their values are not unique, they cannot be used as an index."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "782190b5",
"metadata": {},
"outputs": [],
"source": [
"# Shall we rename or discard any columns from this dataset?\n",
"\n",
"# BBL and Tax Class could be eliminated. However, there are only 11 columns total, and since df.head() is easily readable on my monitor without scrolling horizontally (as you're doing now), I see no harm in keeping them."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "e085ba33",
"metadata": {},
"outputs": [],
"source": [
"# Rename columns containing whitespace or camelcase\n",
"\n",
"df.rename(columns = {\"BoroughName\": \"Borough_Name\",\n",
" \"ENERGY STAR Score\": \"Energy_Star_Score\",\n",
" \"LetterScore\": \"Letter_Score\"\n",
" }, inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "c4a8ebb7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Building_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Building_Count</th>\n",
" <th>DOF_Gross_Square_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough_Name</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Star_Score</th>\n",
" <th>Letter_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" <td>Y4</td>\n",
" <td>0</td>\n",
" <td>124</td>\n",
" <td>2598091</td>\n",
" <td>920 GRESHAM ROAD</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1000010010</td>\n",
" <td>1</td>\n",
" <td>D</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Building_Class Tax_Class Building_Count \\\n",
"0 1 10 Y4 0 124 \n",
"\n",
" DOF_Gross_Square_Footage Address Borough_Name BBL \\\n",
"0 2598091 920 GRESHAM ROAD MANHATTAN 1000010010 \n",
"\n",
" Energy_Star_Score Letter_Score \n",
"0 1 D "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(1)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "38de98e9",
"metadata": {},
"outputs": [],
"source": [
"# Unforseen consequence of renaming: now I have to scroll horizontally."
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "c0b5504f",
"metadata": {},
"outputs": [],
"source": [
"# Rename columns once more\n",
"\n",
"df.rename(columns = {\"DOF_Gross_Square_Footage\": \"Sq_Footage\",\n",
" \"Energy_Star_Score\": \"Energy_Score\",\n",
" \"Borough_Name\": \"Borough\",\n",
" \"Building_Class\": \"Bldg_Class\",\n",
" \"Building_Count\": \"Bldg_Count\"\n",
" }, inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "0d3cf300",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" <th>Letter_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" <td>Y4</td>\n",
" <td>0</td>\n",
" <td>124</td>\n",
" <td>2598091</td>\n",
" <td>920 GRESHAM ROAD</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1000010010</td>\n",
" <td>1</td>\n",
" <td>D</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage Address \\\n",
"0 1 10 Y4 0 124 2598091 920 GRESHAM ROAD \n",
"\n",
" Borough BBL Energy_Score Letter_Score \n",
"0 MANHATTAN 1000010010 1 D "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(1)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "c1c2e027",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Block 0\n",
"Lot 0\n",
"Bldg_Class 2\n",
"Tax_Class 0\n",
"Bldg_Count 0\n",
"Sq_Footage 0\n",
"Address 7\n",
"Borough 0\n",
"BBL 0\n",
"Energy_Score 0\n",
"Letter_Score 0\n",
"dtype: int64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Repeat the search for missing data\n",
"\n",
"df.isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "5debf1d6",
"metadata": {},
"outputs": [],
"source": [
"# Ignore the 7 missing addresses, but drop the 2 rows with missing Building Class.\n",
"# Building Class is a feature that will be used in the df.groupby() function.\n",
"\n",
"df.dropna(subset = ['Bldg_Class'], inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "5d2eb339",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Block 0\n",
"Lot 0\n",
"Bldg_Class 0\n",
"Tax_Class 0\n",
"Bldg_Count 0\n",
"Sq_Footage 0\n",
"Address 7\n",
"Borough 0\n",
"BBL 0\n",
"Energy_Score 0\n",
"Letter_Score 0\n",
"dtype: int64"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "632701c5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Search for unexpected data\n",
"\n",
"# df['Energy_Score'].min() # looks good\n",
"# df['Energy_Score'].max() # looks good\n",
"# df['Sq_Footage'].max() # looks good\n",
"df['Sq_Footage'].min()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "c1f3edc4",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Letter_Score</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>A</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>B</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>C</th>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>D</th>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"Letter_Score \n",
"A 3 3 3 3 3 3 \n",
"B 1 1 1 1 1 1 \n",
"C 5 5 5 5 5 5 \n",
"D 6 6 6 6 6 6 \n",
"F 14 14 14 14 14 14 \n",
"\n",
" Address Borough BBL Energy_Score \n",
"Letter_Score \n",
"A 3 3 3 3 \n",
"B 1 1 1 1 \n",
"C 5 5 5 5 \n",
"D 6 6 6 6 \n",
"F 14 14 14 14 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A building cannot have zero square feet of floorspace.\n",
"# What's going on?\n",
"\n",
"df[df['Sq_Footage'] == 0].groupby(['Letter_Score']).count()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "e27467ce",
"metadata": {},
"outputs": [],
"source": [
"# The ones with F can be explained:\n",
"# An F grade means that the building owner \"didnt submit required benchmarking information\",\n",
"# according to Local Law 95 of 2019. So it's not that the building has no square footage,\n",
"# but that the data was not submitted. Thus the failing grade.\n",
"\n",
"# We'll leave 0 square feet with F grade untouched.\n",
"\n",
"# For more information, see https://www1.nyc.gov/site/buildings/codes/benchmarking.page"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "b73e15d9",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Letter_Score</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>A</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>B</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>C</th>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>D</th>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"Letter_Score \n",
"A 3 3 3 3 3 3 \n",
"B 1 1 1 1 1 1 \n",
"C 5 5 5 5 5 5 \n",
"D 6 6 6 6 6 6 \n",
"\n",
" Address Borough BBL Energy_Score \n",
"Letter_Score \n",
"A 3 3 3 3 \n",
"B 1 1 1 1 \n",
"C 5 5 5 5 \n",
"D 6 6 6 6 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# What to do with the others?\n",
"\n",
"df[(df['Sq_Footage'] == 0) & (df['Letter_Score'] != 'F')].groupby(['Letter_Score']).count()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "47145374",
"metadata": {},
"outputs": [],
"source": [
"# 15 rows remain with 0 square feet of floorspace.\n",
"# Can we impute values from the mean square footage for each grade?\n",
"\n",
"# (There must be an elegant way to do this. What you see below is not.)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "2d643fd6",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Sq_Footage</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Letter_Score</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>A</th>\n",
" <td>111197.291071</td>\n",
" </tr>\n",
" <tr>\n",
" <th>B</th>\n",
" <td>133270.963702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>C</th>\n",
" <td>128833.575964</td>\n",
" </tr>\n",
" <tr>\n",
" <th>D</th>\n",
" <td>108170.778312</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Sq_Footage\n",
"Letter_Score \n",
"A 111197.291071\n",
"B 133270.963702\n",
"C 128833.575964\n",
"D 108170.778312"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# First, get averages\n",
"\n",
"subset0 = df[['Letter_Score', 'Sq_Footage']]\n",
"subset1 = subset0[(subset0['Letter_Score'] != 'F') & (subset0['Sq_Footage'] != 0)]\n",
"subset1.groupby(['Letter_Score']).mean()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "87c2ba5e",
"metadata": {},
"outputs": [],
"source": [
"# Assign variables, rounding to whole numbers\n",
"\n",
"mean_A = 111197\n",
"mean_B = 133271\n",
"mean_C = 128834\n",
"mean_D = 108171"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "27912675",
"metadata": {},
"outputs": [],
"source": [
"# Replace 0 values with mean_A, mean_B, etc.\n",
"\n",
"df.loc[(df['Letter_Score'] == 'A') & (df['Sq_Footage'] == 0), 'Sq_Footage'] = mean_A\n",
"df.loc[(df['Letter_Score'] == 'B') & (df['Sq_Footage'] == 0), 'Sq_Footage'] = mean_B\n",
"df.loc[(df['Letter_Score'] == 'C') & (df['Sq_Footage'] == 0), 'Sq_Footage'] = mean_C\n",
"df.loc[(df['Letter_Score'] == 'D') & (df['Sq_Footage'] == 0), 'Sq_Footage'] = mean_D"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "8124743f",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Letter_Score</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>F</th>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" <td>14</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"Letter_Score \n",
"F 14 14 14 14 14 14 \n",
"\n",
" Address Borough BBL Energy_Score \n",
"Letter_Score \n",
"F 14 14 14 14 "
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Now the only 0 values should be for F grades\n",
"\n",
"df[df['Sq_Footage'] == 0].groupby(['Letter_Score']).count()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "b83622b1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" <th>Letter_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>11319</th>\n",
" <td>149</td>\n",
" <td>7502</td>\n",
" <td>U7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>138 WILLOUGHBY STREET</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11611</th>\n",
" <td>165</td>\n",
" <td>7504</td>\n",
" <td>U7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>133271</td>\n",
" <td>35 HOYT STREET</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>75</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13351</th>\n",
" <td>5804</td>\n",
" <td>2</td>\n",
" <td>U6</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>COLONIAL ROAD</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14570</th>\n",
" <td>5322</td>\n",
" <td>4</td>\n",
" <td>V1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>111197</td>\n",
" <td>23 OCEAN PARKWAY</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>100</td>\n",
" <td>A</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14668</th>\n",
" <td>5799</td>\n",
" <td>59</td>\n",
" <td>D9</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>38315</td>\n",
" <td>3641 JOHNSON AVENUE</td>\n",
" <td>BRONX</td>\n",
" <td>2057990059</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15726</th>\n",
" <td>4282</td>\n",
" <td>100</td>\n",
" <td>V1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>25-70 REAR WHITESTONE EXPRESSWAY SR WEST</td>\n",
" <td>QUEENS</td>\n",
" <td>-2147483648</td>\n",
" <td>0</td>\n",
" <td>F</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"11319 149 7502 U7 0 0 0 \n",
"11611 165 7504 U7 0 0 133271 \n",
"13351 5804 2 U6 0 0 0 \n",
"14570 5322 4 V1 0 0 111197 \n",
"14668 5799 59 D9 0 0 38315 \n",
"15726 4282 100 V1 0 0 0 \n",
"\n",
" Address Borough BBL \\\n",
"11319 138 WILLOUGHBY STREET BROOKLYN -2147483648 \n",
"11611 35 HOYT STREET BROOKLYN -2147483648 \n",
"13351 COLONIAL ROAD BROOKLYN -2147483648 \n",
"14570 23 OCEAN PARKWAY BROOKLYN -2147483648 \n",
"14668 3641 JOHNSON AVENUE BRONX 2057990059 \n",
"15726 25-70 REAR WHITESTONE EXPRESSWAY SR WEST QUEENS -2147483648 \n",
"\n",
" Energy_Score Letter_Score \n",
"11319 0 F \n",
"11611 75 B \n",
"13351 0 F \n",
"14570 100 A \n",
"14668 0 F \n",
"15726 0 F "
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Unexpected values, continued\n",
"\n",
"df[df['Bldg_Count'] == 0]"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "01c231f3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" <th>Letter_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>11611</th>\n",
" <td>165</td>\n",
" <td>7504</td>\n",
" <td>U7</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>133271</td>\n",
" <td>35 HOYT STREET</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>75</td>\n",
" <td>B</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14570</th>\n",
" <td>5322</td>\n",
" <td>4</td>\n",
" <td>V1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>111197</td>\n",
" <td>23 OCEAN PARKWAY</td>\n",
" <td>BROOKLYN</td>\n",
" <td>-2147483648</td>\n",
" <td>100</td>\n",
" <td>A</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"11611 165 7504 U7 0 0 133271 \n",
"14570 5322 4 V1 0 0 111197 \n",
"\n",
" Address Borough BBL Energy_Score Letter_Score \n",
"11611 35 HOYT STREET BROOKLYN -2147483648 75 B \n",
"14570 23 OCEAN PARKWAY BROOKLYN -2147483648 100 A "
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# How can a block have zero buildings?\n",
"# Again, we'll leave the F grades as is.\n",
"\n",
"df[(df['Bldg_Count'] == 0) & (df['Letter_Score'] != 'F')]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "2bc61602",
"metadata": {},
"outputs": [],
"source": [
"# Have a peek at the Department of Finance Tax Map: http://gis.nyc.gov/taxmap/map.htm\n",
"\n",
"# Looks like Bldg_Count = 1 for both. However, rather than eyeballing it, let's just drop them."
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "396a0fdd",
"metadata": {},
"outputs": [],
"source": [
"# Drop two rows\n",
"\n",
"df.drop([11611, 14570], inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "4e874379",
"metadata": {},
"outputs": [],
"source": [
"# Finish cleaning\n",
"\n",
"# df['Tax_Class'].value_counts() # looks good\n",
"# df['Bldg_Class'].value_counts() # looks good"
]
},
{
"cell_type": "markdown",
"id": "d22ba85a",
"metadata": {},
"source": [
"## Part 3: Analysis"
]
},
{
"cell_type": "markdown",
"id": "1e5fdc73",
"metadata": {},
"source": [
"### What is the relationship between a building's size and its energy rating?"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "1f4d8878",
"metadata": {},
"outputs": [],
"source": [
"# Compare apples to apples\n",
"\n",
"# df.groupby(['Bldg_Class'])['Energy_Score'].describe().sort_values(by = 'mean', ascending = False)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "b0bba53f",
"metadata": {},
"outputs": [],
"source": [
"# df.groupby(['Bldg_Class'])['Energy_Score'].plot()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "9ae68067",
"metadata": {},
"outputs": [],
"source": [
"# Too many building types. Select major ones.\n",
"\n",
"# df['Bldg_Class'].value_counts().head(10)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "951c61d8",
"metadata": {},
"outputs": [],
"source": [
"# Look up D1 through W1\n",
"# see https://www1.nyc.gov/assets/finance/jump/hlpbldgcode.html\n",
"\n",
"# D1 ELEVATOR APARTMENTS: ELEVATOR APT; SEMI-FIREPROOF WITHOUT STORES\n",
"# D4 ELEVATOR APARTMENTS: ELEVATOR COOPERATIVE\n",
"# R0 CONDOMINIUMS: SPECIAL CONDOMINIUM BILLING LOT\n",
"# C1 WALK UP APARTMENTS: OVER SIX FAMILIES WITHOUT STORES\n",
"# D7 ELEVATOR APARTMENTS: ELEVATOR APT; SEMI-FIREPROOF WITH STORES\n",
"# W1 EDUCATIONAL FACILITIES: PUBLIC ELEMENTARY, JUNIOR OR SENIOR HIGH"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "376dadae",
"metadata": {},
"outputs": [],
"source": [
"# df[(df['Block'] == 702) & (df['Lot'] == 10)] # 10 Hudson Yards"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "e6d23093",
"metadata": {},
"outputs": [],
"source": [
"# df[(df['Block'] == ) & (df['Lot'] == )] # 30 Hudson Yards: 500 W 33rd St"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "169570ed",
"metadata": {},
"outputs": [],
"source": [
"# df[df['Address'].dropna().str.contains('WEST 33')].head()\n",
"\n",
"# temp = df.dropna()\n",
"# temp[temp['Address'].str.contains('WEST 33')]"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "73f50d5c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Y4', 'T2', 'R0', 'O4', 'W1', 'O6', 'D5', 'D9', 'D0', 'O3', 'H3',\n",
" 'H2', 'D7', 'V1', 'D6', 'K6', 'D8', 'W8', 'O2', 'H1', 'D3', 'K4',\n",
" 'H9', 'K3', 'HB', 'RM', 'H5', 'O5', 'D4', 'HS', 'E9', 'D2', 'O7',\n",
" 'W5', 'U7', 'M1', 'I1', 'K2', 'Z1', 'W6', 'K9', 'Z3', 'H8', 'S4',\n",
" 'E1', 'C7', 'W2', 'C9', 'D1', 'C1', 'HR', 'O9', 'I9', 'K1', 'I6',\n",
" 'G1', 'N2', 'Y2', 'I7', 'M9', 'G2', 'I5', 'C4', 'E7', 'P9', 'W9',\n",
" 'P5', 'N9', 'S3', 'W3', 'J4', 'C6', 'M2', 'P7', 'W7', 'J3', 'H6',\n",
" 'P8', 'F9', 'G9', 'Y8', 'J8', 'F5', 'C5', 'N4', 'I3', 'P3', 'J6',\n",
" 'P2', 'W4', 'RC', 'I2', 'K5', 'J5', 'I4', 'M4', 'G8', 'J7', 'HH',\n",
" 'O8', 'M3', 'U0', 'O1', 'F1', 'F2', 'F4', 'H4', 'E2', 'Y1', 'Y6',\n",
" 'Z9', 'R2', 'Q6', 'K7', 'U6', 'RD', 'Y9', 'Q1', 'T9', 'V9', 'U9',\n",
" 'K8', 'U5', 'R4', 'G7', 'F8', 'J9', 'N3', 'P6', 'J2', 'GW', 'T1',\n",
" 'R3', 'C8', 'RS', 'Q2', 'V7', 'Q4', 'Y7'], dtype=object)"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# There are many types of building\n",
"\n",
"df['Bldg_Class'].unique()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5449a9dd",
"metadata": {},
"outputs": [],
"source": [
"# It wouldn't make sense to compare, say, residential with commercial buildings.\n",
"# For an apple to apples comparison, let's look at office buildings.\n",
"\n",
"# O1\tOFFICE ONLY - 1 STORY\n",
"# O2\tOFFICE ONLY 2 - 6 STORIES\n",
"# O3\tOFFICE ONLY 7 - 19 STORIES\n",
"# O4\tOFFICE ONLY WITH OR WITHOUT COMM - 20 STORIES OR MORE\n",
"# O5\tOFFICE WITH COMM - 1 TO 6 STORIES\n",
"# O6\tOFFICE WITH COMM 7 - 19 STORIES\n",
"# O7\tPROFESSIONAL BUILDINGS/STAND ALONE FUNERAL HOMES\n",
"# O8\tOFFICE WITH APARTMENTS ONLY (NO COMM)\n",
"# O9\tMISCELLANEOUS AND OLD STYLE BANK BLDGS"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "bc229011",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Block</th>\n",
" <th>Lot</th>\n",
" <th>Bldg_Class</th>\n",
" <th>Tax_Class</th>\n",
" <th>Bldg_Count</th>\n",
" <th>Sq_Footage</th>\n",
" <th>Address</th>\n",
" <th>Borough</th>\n",
" <th>BBL</th>\n",
" <th>Energy_Score</th>\n",
" <th>Letter_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1473</th>\n",
" <td>702</td>\n",
" <td>10</td>\n",
" <td>O4</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1835464</td>\n",
" <td>501 WEST 30 STREET</td>\n",
" <td>MANHATTAN</td>\n",
" <td>1007020010</td>\n",
" <td>58</td>\n",
" <td>C</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Block Lot Bldg_Class Tax_Class Bldg_Count Sq_Footage \\\n",
"1473 702 10 O4 4 1 1835464 \n",
"\n",
" Address Borough BBL Energy_Score Letter_Score \n",
"1473 501 WEST 30 STREET MANHATTAN 1007020010 58 C "
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Context: 10 Hudson Yards. A new building with a poor energy rating.\n",
"\n",
"# It's one of the large glass and steel buildings that have recently cropped up in Manhattan (2016).\n",
"# Unfortunately, the dataset does not contain the newest behemoths to arise since then,\n",
"# like 30 Hudson Yards.\n",
"\n",
"df[(df['Block'] == 702) & (df['Lot'] == 10)]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "a344e1a3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:ylabel='Frequency'>"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# That building belongs to class O4.\n",
"# What's the distribution of scores?\n",
"\n",
"office = df[df['Bldg_Class'] == 'O4']\n",
"office['Energy_Score'].plot(kind = 'hist')"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "1dabd257",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Letter_Score\n",
"A 33\n",
"B 147\n",
"C 102\n",
"D 75\n",
"F 5\n",
"Name: Block, dtype: int64"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Distribution of grades\n",
"\n",
"office.groupby(['Letter_Score'])['Block'].count()"
]
},
{
"cell_type": "code",
"execution_count": 88,
"id": "9a9bcc23",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='Sq_Footage', ylabel='Energy_Score'>"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Square Footage versus Energy Score\n",
"\n",
"office.plot(kind = 'scatter', x = 'Sq_Footage', y = 'Energy_Score', figsize = (20, 10))"
]
},
{
"cell_type": "code",
"execution_count": 89,
"id": "3b33f87e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:ylabel='Frequency'>"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# The relationship certainly is not linear.\n",
"# How about smaller office buildings?\n",
"\n",
"office_small = df[df['Bldg_Class'] == 'O2']\n",
"office_small['Energy_Score'].plot(kind = 'hist')"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "41db8282",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Letter_Score\n",
"A 21\n",
"B 31\n",
"C 17\n",
"D 38\n",
"F 23\n",
"Name: Block, dtype: int64"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Distribution of grades\n",
"\n",
"office_small.groupby(['Letter_Score'])['Block'].count()"
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "490d052a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='Sq_Footage', ylabel='Energy_Score'>"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Square Footage versus Energy Score\n",
"\n",
"office_small.plot(kind = 'scatter', x = 'Sq_Footage', y = 'Energy_Score', figsize = (20, 10))"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "a75608c7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:ylabel='Frequency'>"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Something different: hotels\n",
"\n",
"hotels = df[df['Bldg_Class'] == 'H2']\n",
"hotels['Energy_Score'].plot(kind = 'hist')"
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "a6c9fbd4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Letter_Score\n",
"A 6\n",
"B 3\n",
"C 9\n",
"D 64\n",
"F 18\n",
"Name: Block, dtype: int64"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Distribution of grades\n",
"\n",
"hotels.groupby(['Letter_Score'])['Block'].count()"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "5d0ea74d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:xlabel='Sq_Footage', ylabel='Energy_Score'>"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Square Footage versus Energy Score\n",
"\n",
"hotels.plot(kind = 'scatter', x = 'Sq_Footage', y = 'Energy_Score', figsize = (20, 10))"
]
},
{
"cell_type": "code",
"execution_count": 95,
"id": "e12fed9d",
"metadata": {},
"outputs": [],
"source": [
"# Again, not linear.\n",
"# It's obvious that hotels score worse than office buildings."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}