From f80d8c1880dc0e383eec8a6000be3dab34d4ba6a Mon Sep 17 00:00:00 2001 From: Saran Ahluwalia Date: Sat, 11 Dec 2021 08:28:01 -0500 Subject: [PATCH] added revisions including ETL process for table 8 acquistion --- ...da_se_12_09_2021-revised-denominator.ipynb | 349 +++++++++++++++++- .../ipython/hud_eda_se_12_09_2021.ipynb | 78 +++- 2 files changed, 407 insertions(+), 20 deletions(-) diff --git a/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021-revised-denominator.ipynb b/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021-revised-denominator.ipynb index 3327ed80..fc53ac72 100644 --- a/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021-revised-denominator.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021-revised-denominator.ipynb @@ -26,13 +26,18 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import math\n", "import numpy as np\n", "import os\n", + "import requests\n", + "import sys\n", + "import zipfile\n", + "import shutil\n", + "from pathlib import Path\n", "import pandas as pd" ] }, @@ -70,6 +75,63 @@ " " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ETL - one needs to only run this cell block once to replicate the subsequent notebooks in this draft PR\n", + "\n", + "##### Once run, Table 8 will be in the notebook's current working directory" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Copy and adapt certain sections of code from data_pipeline.utils \n", + "\n", + "def download_hud_dataset():\n", + " DOWNLOAD_FILENAME = \"HUD_ZIPPED.csv\"\n", + " HOUSING_FTP_URL = \"https://www.huduser.gov/portal/datasets/cp/2014thru2018-140-csv.zip\" \n", + " response = requests.get(HOUSING_FTP_URL, verify=True)\n", + " if response.status_code == 200:\n", + " file_contents = response.content\n", + " else:\n", + " sys.exit(\n", + " f\"HTTP response {response.status_code} from url {file_url}. Info: {response.content}\"\n", + " )\n", + "\n", + " # Write the contents to disk.\n", + " file = open(DOWNLOAD_FILENAME, \"wb\")\n", + " file.write(file_contents)\n", + " file.close()\n", + " \n", + "def extract_zipped_download(zip_file_path, unzipped_path):\n", + " with zipfile.ZipFile(zip_file_path, \"r\") as zip_ref:\n", + " zip_ref.extractall(unzipped_path)\n", + " # cleanup temporary file\n", + " os.remove(zip_file_path)\n", + " \n", + "def up_one_directory(path):\n", + " try:\n", + " # from Python 3.6\n", + " parent_dir = Path(path).parents[1]\n", + " # for Python 3.4/3.5, use str to convert the path to string\n", + " # parent_dir = str(Path(path).parents[1])\n", + " shutil.move(path, parent_dir)\n", + " except IndexError:\n", + " # no upper directory\n", + " pass\n", + "\n", + "CURRENT_DIRECTORY = os.getcwd()\n", + "download_hud_dataset()\n", + "extract_zipped_download(CURRENT_DIRECTORY + \"/HUD_ZIPPED.csv\", CURRENT_DIRECTORY) \n", + "up_one_directory(CURRENT_DIRECTORY + \"/140/Table8.csv\")\n", + "shutil.rmtree(\"./140/\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -79,16 +141,15 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Read in the data from https://www.huduser.gov/portal/datasets/cp.html\n", "housing = pd.read_csv(\"Table8.csv\", \n", - " encoding = \"ISO-8859-1\", \n", + " encoding=\"latin-1\", \n", " dtype = {'Tract_ID': object, 'st': object, 'geoid': object})\n", "\n", - "\n", "# Remove data for states that aren't included in the census (e.g. American Samoa, Guam, etc.):\n", "housing.drop(housing.loc[housing['st'] == '72'].index, inplace = True)\n", "\n", @@ -285,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -325,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -396,7 +457,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -469,7 +530,7 @@ "4 885 4135 1090" ] }, - "execution_count": 6, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -487,7 +548,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -496,7 +557,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -506,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -523,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -652,7 +713,7 @@ "4 0.81 " ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -660,6 +721,268 @@ "source": [ "housing_df.head()" ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12, 8))\n", + "plt.title('Relative Housing Burden for Low-Income Hosuing Only')\n", + "# Set x-axis label\n", + "plt.xlabel('Ratio')\n", + "# Set y-axis label\n", + "plt.ylabel('Frequency')\n", + "\n", + "sns.histplot(housing_df[\"ratio_post\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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", + "
nameFIPS_tract_idratio_post
4203Census Tract 3923, Contra Costa County, Califo...14000US060133923001.01
4617Census Tract 38.06, Kern County, California14000US060290038061.03
5262Census Tract 2060.20, Los Angeles County, Cali...14000US060372060201.07
5565Census Tract 2626.01, Los Angeles County, Cali...14000US060372626011.06
12908Census Tract 303, Fairfield County, Connecticut14000US090010303001.04
14086Census Tract 102, District of Columbia, Distri...14000US110010102001.02
17668Census Tract 273.23, Pinellas County, Florida14000US121030273231.02
18102Census Tract 208.10, Seminole County, Florida14000US121170208101.03
19796Census Tract 101.02, Liberty County, Georgia14000US131790101021.06
21166Census Tract 507, Cook County, Illinois14000US170310507001.03
30658Census Tract 7053, Montgomery County, Maryland14000US240317053001.09
41123Census Tract 6075.04, Camden County, New Jersey14000US340076075041.05
42632Census Tract 363.02, Union County, New Jersey14000US340390363021.02
45335Census Tract 3033.01, Nassau County, New York14000US360593033011.02
51549Census Tract 69.10, Franklin County, Ohio14000US390490069101.10
62114Census Tract 1917.01, Bexar County, Texas14000US480291917011.10
66504Census Tract 22.12, Travis County, Texas14000US484530022121.02
67740Census Tract 1016.03, Arlington County, Virginia14000US510131016031.01
69094Census Tract 111, Hampton city, Virginia14000US516500111001.13
69486Census Tract 432, Virginia Beach city, Virginia14000US518100432001.04
\n", + "
" + ], + "text/plain": [ + " name FIPS_tract_id \\\n", + "4203 Census Tract 3923, Contra Costa County, Califo... 14000US06013392300 \n", + "4617 Census Tract 38.06, Kern County, California 14000US06029003806 \n", + "5262 Census Tract 2060.20, Los Angeles County, Cali... 14000US06037206020 \n", + "5565 Census Tract 2626.01, Los Angeles County, Cali... 14000US06037262601 \n", + "12908 Census Tract 303, Fairfield County, Connecticut 14000US09001030300 \n", + "14086 Census Tract 102, District of Columbia, Distri... 14000US11001010200 \n", + "17668 Census Tract 273.23, Pinellas County, Florida 14000US12103027323 \n", + "18102 Census Tract 208.10, Seminole County, Florida 14000US12117020810 \n", + "19796 Census Tract 101.02, Liberty County, Georgia 14000US13179010102 \n", + "21166 Census Tract 507, Cook County, Illinois 14000US17031050700 \n", + "30658 Census Tract 7053, Montgomery County, Maryland 14000US24031705300 \n", + "41123 Census Tract 6075.04, Camden County, New Jersey 14000US34007607504 \n", + "42632 Census Tract 363.02, Union County, New Jersey 14000US34039036302 \n", + "45335 Census Tract 3033.01, Nassau County, New York 14000US36059303301 \n", + "51549 Census Tract 69.10, Franklin County, Ohio 14000US39049006910 \n", + "62114 Census Tract 1917.01, Bexar County, Texas 14000US48029191701 \n", + "66504 Census Tract 22.12, Travis County, Texas 14000US48453002212 \n", + "67740 Census Tract 1016.03, Arlington County, Virginia 14000US51013101603 \n", + "69094 Census Tract 111, Hampton city, Virginia 14000US51650011100 \n", + "69486 Census Tract 432, Virginia Beach city, Virginia 14000US51810043200 \n", + "\n", + " ratio_post \n", + "4203 1.01 \n", + "4617 1.03 \n", + "5262 1.07 \n", + "5565 1.06 \n", + "12908 1.04 \n", + "14086 1.02 \n", + "17668 1.02 \n", + "18102 1.03 \n", + "19796 1.06 \n", + "21166 1.03 \n", + "30658 1.09 \n", + "41123 1.05 \n", + "42632 1.02 \n", + "45335 1.02 \n", + "51549 1.10 \n", + "62114 1.10 \n", + "66504 1.02 \n", + "67740 1.01 \n", + "69094 1.13 \n", + "69486 1.04 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "housing_df[housing_df[\"ratio_post\"] > 1][['name', \"FIPS_tract_id\", 'ratio_post']]" + ] } ], "metadata": { diff --git a/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021.ipynb b/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021.ipynb index 648f8bc5..edddcec9 100644 --- a/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/hud_eda_se_12_09_2021.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Methodology to address fundamental problem 1 tiemized in Issue 1024" + "## Methodology to address fundamental problem 1 itemized in Issue 1024" ] }, { @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -36,6 +36,68 @@ "import pandas as pd" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ETL process for acquiring relevant tables" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTE: If you ran the ETL Process to acquire Table 8 in the other notebook of this draft PR you do not need to run the ETL cell block again" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Copy and adapt certain sections of code from data_pipeline.utils \n", + "\n", + "def download_hud_dataset():\n", + " DOWNLOAD_FILENAME = \"HUD_ZIPPED.csv\"\n", + " HOUSING_FTP_URL = \"https://www.huduser.gov/portal/datasets/cp/2014thru2018-140-csv.zip\" \n", + " response = requests.get(HOUSING_FTP_URL, verify=True)\n", + " if response.status_code == 200:\n", + " file_contents = response.content\n", + " else:\n", + " sys.exit(\n", + " f\"HTTP response {response.status_code} from url {file_url}. Info: {response.content}\"\n", + " )\n", + "\n", + " # Write the contents to disk.\n", + " file = open(DOWNLOAD_FILENAME, \"wb\")\n", + " file.write(file_contents)\n", + " file.close()\n", + " \n", + "def extract_zipped_download(zip_file_path, unzipped_path):\n", + " with zipfile.ZipFile(zip_file_path, \"r\") as zip_ref:\n", + " zip_ref.extractall(unzipped_path)\n", + " # cleanup temporary file\n", + " os.remove(zip_file_path)\n", + " \n", + "def up_one_directory(path):\n", + " try:\n", + " # from Python 3.6\n", + " parent_dir = Path(path).parents[1]\n", + " # for Python 3.4/3.5, use str to convert the path to string\n", + " # parent_dir = str(Path(path).parents[1])\n", + " shutil.move(path, parent_dir)\n", + " except IndexError:\n", + " # no upper directory\n", + " pass\n", + "\n", + "CURRENT_DIRECTORY = os.getcwd()\n", + "download_hud_dataset()\n", + "extract_zipped_download(CURRENT_DIRECTORY + \"/HUD_ZIPPED.csv\", CURRENT_DIRECTORY) \n", + "up_one_directory(CURRENT_DIRECTORY + \"/140/Table8.csv\")\n", + "shutil.rmtree(\"./140/\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -93,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -205,7 +267,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -284,7 +346,7 @@ "4 01 01001020500 0.142515 68.221154" ] }, - "execution_count": 6, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -315,10 +377,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "housingburden.to_csv(\"housing_burden.csv\", index=False)" + ] } ], "metadata": {