diff --git a/data_processing_pca.ipynb b/data_processing_pca.ipynb
new file mode 100644
index 0000000..8a9c01f
--- /dev/null
+++ b/data_processing_pca.ipynb
@@ -0,0 +1,3837 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": []
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "nIcCB-m7gSXW"
+ },
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "census = pd.read_csv(\"/content/drive/MyDrive/pythoncode/441_data/census.csv\")\n",
+ "housing_information = pd.read_csv(\"/content/drive/MyDrive/pythoncode/441_data/housing_information.csv\")\n",
+ "realtor_housing = pd.read_csv(\"/content/drive/MyDrive/pythoncode/441_data/realtor_housing.csv\")"
+ ],
+ "metadata": {
+ "id": "4hX95c6FhNgd"
+ },
+ "execution_count": 2,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "census['zip_code'] = census['NAME'].str.split(' ').str[1]"
+ ],
+ "metadata": {
+ "id": "2UYTaoDliEH1"
+ },
+ "execution_count": 3,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "census['zip_code'].tail(20)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 711
+ },
+ "id": "ysILjEuYmo3a",
+ "outputId": "cc6c0ba6-8921-423a-dbaf-5e02123cc583"
+ },
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "33755 99829\n",
+ "33756 99830\n",
+ "33757 99832\n",
+ "33758 99833\n",
+ "33759 99835\n",
+ "33760 99836\n",
+ "33761 99840\n",
+ "33762 99841\n",
+ "33763 99850\n",
+ "33764 99901\n",
+ "33765 99903\n",
+ "33766 99918\n",
+ "33767 99919\n",
+ "33768 99921\n",
+ "33769 99922\n",
+ "33770 99923\n",
+ "33771 99925\n",
+ "33772 99926\n",
+ "33773 99927\n",
+ "33774 99929\n",
+ "Name: zip_code, dtype: object"
+ ],
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " zip_code | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 33755 | \n",
+ " 99829 | \n",
+ "
\n",
+ " \n",
+ " 33756 | \n",
+ " 99830 | \n",
+ "
\n",
+ " \n",
+ " 33757 | \n",
+ " 99832 | \n",
+ "
\n",
+ " \n",
+ " 33758 | \n",
+ " 99833 | \n",
+ "
\n",
+ " \n",
+ " 33759 | \n",
+ " 99835 | \n",
+ "
\n",
+ " \n",
+ " 33760 | \n",
+ " 99836 | \n",
+ "
\n",
+ " \n",
+ " 33761 | \n",
+ " 99840 | \n",
+ "
\n",
+ " \n",
+ " 33762 | \n",
+ " 99841 | \n",
+ "
\n",
+ " \n",
+ " 33763 | \n",
+ " 99850 | \n",
+ "
\n",
+ " \n",
+ " 33764 | \n",
+ " 99901 | \n",
+ "
\n",
+ " \n",
+ " 33765 | \n",
+ " 99903 | \n",
+ "
\n",
+ " \n",
+ " 33766 | \n",
+ " 99918 | \n",
+ "
\n",
+ " \n",
+ " 33767 | \n",
+ " 99919 | \n",
+ "
\n",
+ " \n",
+ " 33768 | \n",
+ " 99921 | \n",
+ "
\n",
+ " \n",
+ " 33769 | \n",
+ " 99922 | \n",
+ "
\n",
+ " \n",
+ " 33770 | \n",
+ " 99923 | \n",
+ "
\n",
+ " \n",
+ " 33771 | \n",
+ " 99925 | \n",
+ "
\n",
+ " \n",
+ " 33772 | \n",
+ " 99926 | \n",
+ "
\n",
+ " \n",
+ " 33773 | \n",
+ " 99927 | \n",
+ "
\n",
+ " \n",
+ " 33774 | \n",
+ " 99929 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "housing_information.head()\n",
+ "housing_information['zip_code'] = housing_information['postal_code']\n",
+ "housing_information"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 565
+ },
+ "id": "3OX2_tlfiwqE",
+ "outputId": "26dbb080-aaa3-4243-941a-10ccabb5f904"
+ },
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " month_date_yyyymm postal_code zip_name \\\n",
+ "0 202508 21530 flintstone, md \n",
+ "1 202508 83876 worley, id \n",
+ "2 202508 56142 ivanhoe, mn \n",
+ "3 202508 71857 prescott, ar \n",
+ "4 202508 67207 wichita, ks \n",
+ "... ... ... ... \n",
+ "3114032 201607 16740 mount jewett, pa \n",
+ "3114033 201607 47591 vincennes, in \n",
+ "3114034 201607 48464 otter lake, mi \n",
+ "3114035 201607 99006 deer park, wa \n",
+ "3114036 201607 54220 manitowoc, wi \n",
+ "\n",
+ " median_listing_price median_listing_price_mm \\\n",
+ "0 683250.0 -0.4481 \n",
+ "1 837450.0 -0.0870 \n",
+ "2 160500.0 -0.1145 \n",
+ "3 79900.0 -0.0589 \n",
+ "4 283450.0 -0.0071 \n",
+ "... ... ... \n",
+ "3114032 114450.0 NaN \n",
+ "3114033 99400.0 NaN \n",
+ "3114034 114900.0 NaN \n",
+ "3114035 235000.0 NaN \n",
+ "3114036 99900.0 NaN \n",
+ "\n",
+ " median_listing_price_yy active_listing_count \\\n",
+ "0 1.8588 4.0 \n",
+ "1 -0.0643 23.0 \n",
+ "2 3.8198 2.0 \n",
+ "3 -0.0600 15.0 \n",
+ "4 0.0128 71.0 \n",
+ "... ... ... \n",
+ "3114032 NaN 6.0 \n",
+ "3114033 NaN 105.0 \n",
+ "3114034 NaN 14.0 \n",
+ "3114035 NaN 62.0 \n",
+ "3114036 NaN 294.0 \n",
+ "\n",
+ " active_listing_count_mm active_listing_count_yy \\\n",
+ "0 1.0000 0.3333 \n",
+ "1 0.2105 0.2778 \n",
+ "2 0.3333 1.0000 \n",
+ "3 -0.1429 0.3636 \n",
+ "4 0.4343 0.8205 \n",
+ "... ... ... \n",
+ "3114032 NaN NaN \n",
+ "3114033 NaN NaN \n",
+ "3114034 NaN NaN \n",
+ "3114035 NaN NaN \n",
+ "3114036 NaN NaN \n",
+ "\n",
+ " median_days_on_market ... average_listing_price_mm \\\n",
+ "0 27.0 ... -0.3241 \n",
+ "1 71.0 ... -0.1156 \n",
+ "2 40.0 ... -0.1145 \n",
+ "3 136.0 ... 0.0151 \n",
+ "4 30.0 ... -0.0370 \n",
+ "... ... ... ... \n",
+ "3114032 115.0 ... NaN \n",
+ "3114033 66.0 ... NaN \n",
+ "3114034 52.0 ... NaN \n",
+ "3114035 37.0 ... NaN \n",
+ "3114036 79.0 ... NaN \n",
+ "\n",
+ " average_listing_price_yy total_listing_count \\\n",
+ "0 -0.1821 6.0 \n",
+ "1 0.1602 27.0 \n",
+ "2 3.8198 3.0 \n",
+ "3 -0.3684 20.0 \n",
+ "4 0.0077 103.0 \n",
+ "... ... ... \n",
+ "3114032 NaN 6.0 \n",
+ "3114033 NaN 105.0 \n",
+ "3114034 NaN 14.0 \n",
+ "3114035 NaN 106.0 \n",
+ "3114036 NaN 300.0 \n",
+ "\n",
+ " total_listing_count_mm total_listing_count_yy pending_ratio \\\n",
+ "0 1.0000 0.2000 0.5000 \n",
+ "1 0.2273 0.2273 0.1304 \n",
+ "2 0.2000 2.0000 1.0000 \n",
+ "3 -0.1304 0.3333 0.3333 \n",
+ "4 0.3733 0.5147 0.4225 \n",
+ "... ... ... ... \n",
+ "3114032 NaN NaN NaN \n",
+ "3114033 NaN NaN NaN \n",
+ "3114034 NaN NaN NaN \n",
+ "3114035 NaN NaN 0.7258 \n",
+ "3114036 NaN NaN 0.0170 \n",
+ "\n",
+ " pending_ratio_mm pending_ratio_yy quality_flag zip_code \n",
+ "0 0.0000 -0.5000 1.0 21530 \n",
+ "1 -0.0538 -0.1196 0.0 83876 \n",
+ "2 0.3333 NaN 1.0 56142 \n",
+ "3 0.0476 -0.1212 1.0 71857 \n",
+ "4 -0.1330 -0.3980 0.0 67207 \n",
+ "... ... ... ... ... \n",
+ "3114032 NaN NaN NaN 16740 \n",
+ "3114033 NaN NaN NaN 47591 \n",
+ "3114034 NaN NaN NaN 48464 \n",
+ "3114035 NaN NaN NaN 99006 \n",
+ "3114036 NaN NaN NaN 54220 \n",
+ "\n",
+ "[3114037 rows x 47 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " month_date_yyyymm | \n",
+ " postal_code | \n",
+ " zip_name | \n",
+ " median_listing_price | \n",
+ " median_listing_price_mm | \n",
+ " median_listing_price_yy | \n",
+ " active_listing_count | \n",
+ " active_listing_count_mm | \n",
+ " active_listing_count_yy | \n",
+ " median_days_on_market | \n",
+ " ... | \n",
+ " average_listing_price_mm | \n",
+ " average_listing_price_yy | \n",
+ " total_listing_count | \n",
+ " total_listing_count_mm | \n",
+ " total_listing_count_yy | \n",
+ " pending_ratio | \n",
+ " pending_ratio_mm | \n",
+ " pending_ratio_yy | \n",
+ " quality_flag | \n",
+ " zip_code | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 202508 | \n",
+ " 21530 | \n",
+ " flintstone, md | \n",
+ " 683250.0 | \n",
+ " -0.4481 | \n",
+ " 1.8588 | \n",
+ " 4.0 | \n",
+ " 1.0000 | \n",
+ " 0.3333 | \n",
+ " 27.0 | \n",
+ " ... | \n",
+ " -0.3241 | \n",
+ " -0.1821 | \n",
+ " 6.0 | \n",
+ " 1.0000 | \n",
+ " 0.2000 | \n",
+ " 0.5000 | \n",
+ " 0.0000 | \n",
+ " -0.5000 | \n",
+ " 1.0 | \n",
+ " 21530 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 202508 | \n",
+ " 83876 | \n",
+ " worley, id | \n",
+ " 837450.0 | \n",
+ " -0.0870 | \n",
+ " -0.0643 | \n",
+ " 23.0 | \n",
+ " 0.2105 | \n",
+ " 0.2778 | \n",
+ " 71.0 | \n",
+ " ... | \n",
+ " -0.1156 | \n",
+ " 0.1602 | \n",
+ " 27.0 | \n",
+ " 0.2273 | \n",
+ " 0.2273 | \n",
+ " 0.1304 | \n",
+ " -0.0538 | \n",
+ " -0.1196 | \n",
+ " 0.0 | \n",
+ " 83876 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 202508 | \n",
+ " 56142 | \n",
+ " ivanhoe, mn | \n",
+ " 160500.0 | \n",
+ " -0.1145 | \n",
+ " 3.8198 | \n",
+ " 2.0 | \n",
+ " 0.3333 | \n",
+ " 1.0000 | \n",
+ " 40.0 | \n",
+ " ... | \n",
+ " -0.1145 | \n",
+ " 3.8198 | \n",
+ " 3.0 | \n",
+ " 0.2000 | \n",
+ " 2.0000 | \n",
+ " 1.0000 | \n",
+ " 0.3333 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " 56142 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 202508 | \n",
+ " 71857 | \n",
+ " prescott, ar | \n",
+ " 79900.0 | \n",
+ " -0.0589 | \n",
+ " -0.0600 | \n",
+ " 15.0 | \n",
+ " -0.1429 | \n",
+ " 0.3636 | \n",
+ " 136.0 | \n",
+ " ... | \n",
+ " 0.0151 | \n",
+ " -0.3684 | \n",
+ " 20.0 | \n",
+ " -0.1304 | \n",
+ " 0.3333 | \n",
+ " 0.3333 | \n",
+ " 0.0476 | \n",
+ " -0.1212 | \n",
+ " 1.0 | \n",
+ " 71857 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 202508 | \n",
+ " 67207 | \n",
+ " wichita, ks | \n",
+ " 283450.0 | \n",
+ " -0.0071 | \n",
+ " 0.0128 | \n",
+ " 71.0 | \n",
+ " 0.4343 | \n",
+ " 0.8205 | \n",
+ " 30.0 | \n",
+ " ... | \n",
+ " -0.0370 | \n",
+ " 0.0077 | \n",
+ " 103.0 | \n",
+ " 0.3733 | \n",
+ " 0.5147 | \n",
+ " 0.4225 | \n",
+ " -0.1330 | \n",
+ " -0.3980 | \n",
+ " 0.0 | \n",
+ " 67207 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 3114032 | \n",
+ " 201607 | \n",
+ " 16740 | \n",
+ " mount jewett, pa | \n",
+ " 114450.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 115.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 6.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 16740 | \n",
+ "
\n",
+ " \n",
+ " 3114033 | \n",
+ " 201607 | \n",
+ " 47591 | \n",
+ " vincennes, in | \n",
+ " 99400.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 105.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 66.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 105.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 47591 | \n",
+ "
\n",
+ " \n",
+ " 3114034 | \n",
+ " 201607 | \n",
+ " 48464 | \n",
+ " otter lake, mi | \n",
+ " 114900.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 14.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 52.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 14.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 48464 | \n",
+ "
\n",
+ " \n",
+ " 3114035 | \n",
+ " 201607 | \n",
+ " 99006 | \n",
+ " deer park, wa | \n",
+ " 235000.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 62.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 37.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 106.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.7258 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 99006 | \n",
+ "
\n",
+ " \n",
+ " 3114036 | \n",
+ " 201607 | \n",
+ " 54220 | \n",
+ " manitowoc, wi | \n",
+ " 99900.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 294.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 79.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 300.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0170 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 54220 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
3114037 rows × 47 columns
\n",
+ "
\n",
+ "
\n",
+ "
\n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "housing_information"
+ }
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "realtor_housing = pd.read_csv(\"/content/drive/MyDrive/pythoncode/441_data/realtor_housing.csv\")\n",
+ "realtor_housing['zip_code']"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 458
+ },
+ "id": "ZKjl-EXilypG",
+ "outputId": "2d6aabbd-9d34-4ea0-b86b-c4011044aeb2"
+ },
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0 601.0\n",
+ "1 601.0\n",
+ "2 795.0\n",
+ "3 731.0\n",
+ "4 680.0\n",
+ " ... \n",
+ "2226377 99354.0\n",
+ "2226378 99354.0\n",
+ "2226379 99354.0\n",
+ "2226380 99354.0\n",
+ "2226381 99354.0\n",
+ "Name: zip_code, Length: 2226382, dtype: float64"
+ ],
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " zip_code | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 601.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 601.0 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 795.0 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 731.0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 680.0 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2226377 | \n",
+ " 99354.0 | \n",
+ "
\n",
+ " \n",
+ " 2226378 | \n",
+ " 99354.0 | \n",
+ "
\n",
+ " \n",
+ " 2226379 | \n",
+ " 99354.0 | \n",
+ "
\n",
+ " \n",
+ " 2226380 | \n",
+ " 99354.0 | \n",
+ "
\n",
+ " \n",
+ " 2226381 | \n",
+ " 99354.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
2226382 rows × 1 columns
\n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "realtor_housing['zip_code'].dropna(inplace=True)\n",
+ "realtor_housing['zip_code']=realtor_housing['zip_code'].apply(pd.to_numeric, errors='coerce').dropna().astype(int).astype(str).str.zfill(5)"
+ ],
+ "metadata": {
+ "id": "Z5MxfWznizYu"
+ },
+ "execution_count": 7,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "housing_information['zip_code'] = housing_information['zip_code'].astype(str)\n",
+ "\n",
+ "\n",
+ "census = census.drop_duplicates(subset='zip_code')\n",
+ "housing_information = housing_information.drop_duplicates(subset='zip_code')\n",
+ "\n",
+ "merged_df1 = pd.merge(realtor_housing, census, on='zip_code', how='left')\n",
+ "merged_df1\n"
+ ],
+ "metadata": {
+ "id": "ZoUbFQYUi3DM",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 634
+ },
+ "outputId": "5c05254e-924a-44ca-8829-87f76ec16249"
+ },
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " brokered_by status price bed bath acre_lot street \\\n",
+ "0 103378.0 for_sale 105000.0 3.0 2.0 0.12 1962661.0 \n",
+ "1 52707.0 for_sale 80000.0 4.0 2.0 0.08 1902874.0 \n",
+ "2 103379.0 for_sale 67000.0 2.0 1.0 0.15 1404990.0 \n",
+ "3 31239.0 for_sale 145000.0 4.0 2.0 0.10 1947675.0 \n",
+ "4 34632.0 for_sale 65000.0 6.0 2.0 0.05 331151.0 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "2226377 23009.0 sold 359900.0 4.0 2.0 0.33 353094.0 \n",
+ "2226378 18208.0 sold 350000.0 3.0 2.0 0.10 1062149.0 \n",
+ "2226379 76856.0 sold 440000.0 6.0 3.0 0.50 405677.0 \n",
+ "2226380 53618.0 sold 179900.0 2.0 1.0 0.09 761379.0 \n",
+ "2226381 108243.0 sold 580000.0 5.0 3.0 0.31 307704.0 \n",
+ "\n",
+ " city state zip_code house_size prev_sold_date \\\n",
+ "0 Adjuntas Puerto Rico 00601 920.0 NaN \n",
+ "1 Adjuntas Puerto Rico 00601 1527.0 NaN \n",
+ "2 Juana Diaz Puerto Rico 00795 748.0 NaN \n",
+ "3 Ponce Puerto Rico 00731 1800.0 NaN \n",
+ "4 Mayaguez Puerto Rico 00680 NaN NaN \n",
+ "... ... ... ... ... ... \n",
+ "2226377 Richland Washington 99354 3600.0 2022-03-25 \n",
+ "2226378 Richland Washington 99354 1616.0 2022-03-25 \n",
+ "2226379 Richland Washington 99354 3200.0 2022-03-24 \n",
+ "2226380 Richland Washington 99354 933.0 2022-03-24 \n",
+ "2226381 Richland Washington 99354 3615.0 2022-03-23 \n",
+ "\n",
+ " GEO_ID NAME H1_001N Unnamed: 3 \n",
+ "0 860Z200US00601 ZCTA5 00601 7605 NaN \n",
+ "1 860Z200US00601 ZCTA5 00601 7605 NaN \n",
+ "2 860Z200US00795 ZCTA5 00795 18935 NaN \n",
+ "3 860Z200US00731 ZCTA5 00731 5556 NaN \n",
+ "4 860Z200US00680 ZCTA5 00680 26075 NaN \n",
+ "... ... ... ... ... \n",
+ "2226377 860Z200US99354 ZCTA5 99354 10666 NaN \n",
+ "2226378 860Z200US99354 ZCTA5 99354 10666 NaN \n",
+ "2226379 860Z200US99354 ZCTA5 99354 10666 NaN \n",
+ "2226380 860Z200US99354 ZCTA5 99354 10666 NaN \n",
+ "2226381 860Z200US99354 ZCTA5 99354 10666 NaN \n",
+ "\n",
+ "[2226382 rows x 16 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " brokered_by | \n",
+ " status | \n",
+ " price | \n",
+ " bed | \n",
+ " bath | \n",
+ " acre_lot | \n",
+ " street | \n",
+ " city | \n",
+ " state | \n",
+ " zip_code | \n",
+ " house_size | \n",
+ " prev_sold_date | \n",
+ " GEO_ID | \n",
+ " NAME | \n",
+ " H1_001N | \n",
+ " Unnamed: 3 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 103378.0 | \n",
+ " for_sale | \n",
+ " 105000.0 | \n",
+ " 3.0 | \n",
+ " 2.0 | \n",
+ " 0.12 | \n",
+ " 1962661.0 | \n",
+ " Adjuntas | \n",
+ " Puerto Rico | \n",
+ " 00601 | \n",
+ " 920.0 | \n",
+ " NaN | \n",
+ " 860Z200US00601 | \n",
+ " ZCTA5 00601 | \n",
+ " 7605 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 52707.0 | \n",
+ " for_sale | \n",
+ " 80000.0 | \n",
+ " 4.0 | \n",
+ " 2.0 | \n",
+ " 0.08 | \n",
+ " 1902874.0 | \n",
+ " Adjuntas | \n",
+ " Puerto Rico | \n",
+ " 00601 | \n",
+ " 1527.0 | \n",
+ " NaN | \n",
+ " 860Z200US00601 | \n",
+ " ZCTA5 00601 | \n",
+ " 7605 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 103379.0 | \n",
+ " for_sale | \n",
+ " 67000.0 | \n",
+ " 2.0 | \n",
+ " 1.0 | \n",
+ " 0.15 | \n",
+ " 1404990.0 | \n",
+ " Juana Diaz | \n",
+ " Puerto Rico | \n",
+ " 00795 | \n",
+ " 748.0 | \n",
+ " NaN | \n",
+ " 860Z200US00795 | \n",
+ " ZCTA5 00795 | \n",
+ " 18935 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 31239.0 | \n",
+ " for_sale | \n",
+ " 145000.0 | \n",
+ " 4.0 | \n",
+ " 2.0 | \n",
+ " 0.10 | \n",
+ " 1947675.0 | \n",
+ " Ponce | \n",
+ " Puerto Rico | \n",
+ " 00731 | \n",
+ " 1800.0 | \n",
+ " NaN | \n",
+ " 860Z200US00731 | \n",
+ " ZCTA5 00731 | \n",
+ " 5556 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 34632.0 | \n",
+ " for_sale | \n",
+ " 65000.0 | \n",
+ " 6.0 | \n",
+ " 2.0 | \n",
+ " 0.05 | \n",
+ " 331151.0 | \n",
+ " Mayaguez | \n",
+ " Puerto Rico | \n",
+ " 00680 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 860Z200US00680 | \n",
+ " ZCTA5 00680 | \n",
+ " 26075 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 2226377 | \n",
+ " 23009.0 | \n",
+ " sold | \n",
+ " 359900.0 | \n",
+ " 4.0 | \n",
+ " 2.0 | \n",
+ " 0.33 | \n",
+ " 353094.0 | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 3600.0 | \n",
+ " 2022-03-25 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2226378 | \n",
+ " 18208.0 | \n",
+ " sold | \n",
+ " 350000.0 | \n",
+ " 3.0 | \n",
+ " 2.0 | \n",
+ " 0.10 | \n",
+ " 1062149.0 | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 1616.0 | \n",
+ " 2022-03-25 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2226379 | \n",
+ " 76856.0 | \n",
+ " sold | \n",
+ " 440000.0 | \n",
+ " 6.0 | \n",
+ " 3.0 | \n",
+ " 0.50 | \n",
+ " 405677.0 | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 3200.0 | \n",
+ " 2022-03-24 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2226380 | \n",
+ " 53618.0 | \n",
+ " sold | \n",
+ " 179900.0 | \n",
+ " 2.0 | \n",
+ " 1.0 | \n",
+ " 0.09 | \n",
+ " 761379.0 | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 933.0 | \n",
+ " 2022-03-24 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " 2226381 | \n",
+ " 108243.0 | \n",
+ " sold | \n",
+ " 580000.0 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 0.31 | \n",
+ " 307704.0 | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 3615.0 | \n",
+ " 2022-03-23 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
2226382 rows × 16 columns
\n",
+ "
\n",
+ "
\n",
+ "
\n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "merged_df1"
+ }
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "housing_information"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 513
+ },
+ "id": "vHlcoUsjk4L-",
+ "outputId": "804ed658-325f-4bf5-b3b9-c52112a762bf"
+ },
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " month_date_yyyymm postal_code zip_name \\\n",
+ "0 202508 21530 flintstone, md \n",
+ "1 202508 83876 worley, id \n",
+ "2 202508 56142 ivanhoe, mn \n",
+ "3 202508 71857 prescott, ar \n",
+ "4 202508 67207 wichita, ks \n",
+ "... ... ... ... \n",
+ "3107480 201607 30608 NaN \n",
+ "3108152 201607 74459 NaN \n",
+ "3109057 201607 28547 camp lejeune, nc \n",
+ "3110124 201607 72338 frenchmans bayou, ar \n",
+ "3113146 201607 48232 NaN \n",
+ "\n",
+ " median_listing_price median_listing_price_mm \\\n",
+ "0 683250.0 -0.4481 \n",
+ "1 837450.0 -0.0870 \n",
+ "2 160500.0 -0.1145 \n",
+ "3 79900.0 -0.0589 \n",
+ "4 283450.0 -0.0071 \n",
+ "... ... ... \n",
+ "3107480 599000.0 NaN \n",
+ "3108152 22600.0 NaN \n",
+ "3109057 31000.0 NaN \n",
+ "3110124 124900.0 NaN \n",
+ "3113146 389225.0 NaN \n",
+ "\n",
+ " median_listing_price_yy active_listing_count \\\n",
+ "0 1.8588 4.0 \n",
+ "1 -0.0643 23.0 \n",
+ "2 3.8198 2.0 \n",
+ "3 -0.0600 15.0 \n",
+ "4 0.0128 71.0 \n",
+ "... ... ... \n",
+ "3107480 NaN 1.0 \n",
+ "3108152 NaN 1.0 \n",
+ "3109057 NaN 1.0 \n",
+ "3110124 NaN 1.0 \n",
+ "3113146 NaN 1.0 \n",
+ "\n",
+ " active_listing_count_mm active_listing_count_yy \\\n",
+ "0 1.0000 0.3333 \n",
+ "1 0.2105 0.2778 \n",
+ "2 0.3333 1.0000 \n",
+ "3 -0.1429 0.3636 \n",
+ "4 0.4343 0.8205 \n",
+ "... ... ... \n",
+ "3107480 NaN NaN \n",
+ "3108152 NaN NaN \n",
+ "3109057 NaN NaN \n",
+ "3110124 NaN NaN \n",
+ "3113146 NaN NaN \n",
+ "\n",
+ " median_days_on_market ... average_listing_price_mm \\\n",
+ "0 27.0 ... -0.3241 \n",
+ "1 71.0 ... -0.1156 \n",
+ "2 40.0 ... -0.1145 \n",
+ "3 136.0 ... 0.0151 \n",
+ "4 30.0 ... -0.0370 \n",
+ "... ... ... ... \n",
+ "3107480 NaN ... NaN \n",
+ "3108152 47.0 ... NaN \n",
+ "3109057 50.0 ... NaN \n",
+ "3110124 4.0 ... NaN \n",
+ "3113146 74.0 ... NaN \n",
+ "\n",
+ " average_listing_price_yy total_listing_count \\\n",
+ "0 -0.1821 6.0 \n",
+ "1 0.1602 27.0 \n",
+ "2 3.8198 3.0 \n",
+ "3 -0.3684 20.0 \n",
+ "4 0.0077 103.0 \n",
+ "... ... ... \n",
+ "3107480 NaN 1.0 \n",
+ "3108152 NaN 1.0 \n",
+ "3109057 NaN 1.0 \n",
+ "3110124 NaN 1.0 \n",
+ "3113146 NaN 1.0 \n",
+ "\n",
+ " total_listing_count_mm total_listing_count_yy pending_ratio \\\n",
+ "0 1.0000 0.2000 0.5000 \n",
+ "1 0.2273 0.2273 0.1304 \n",
+ "2 0.2000 2.0000 1.0000 \n",
+ "3 -0.1304 0.3333 0.3333 \n",
+ "4 0.3733 0.5147 0.4225 \n",
+ "... ... ... ... \n",
+ "3107480 NaN NaN NaN \n",
+ "3108152 NaN NaN NaN \n",
+ "3109057 NaN NaN NaN \n",
+ "3110124 NaN NaN NaN \n",
+ "3113146 NaN NaN NaN \n",
+ "\n",
+ " pending_ratio_mm pending_ratio_yy quality_flag zip_code \n",
+ "0 0.0000 -0.5000 1.0 21530 \n",
+ "1 -0.0538 -0.1196 0.0 83876 \n",
+ "2 0.3333 NaN 1.0 56142 \n",
+ "3 0.0476 -0.1212 1.0 71857 \n",
+ "4 -0.1330 -0.3980 0.0 67207 \n",
+ "... ... ... ... ... \n",
+ "3107480 NaN NaN NaN 30608 \n",
+ "3108152 NaN NaN NaN 74459 \n",
+ "3109057 NaN NaN NaN 28547 \n",
+ "3110124 NaN NaN NaN 72338 \n",
+ "3113146 NaN NaN NaN 48232 \n",
+ "\n",
+ "[34129 rows x 47 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " month_date_yyyymm | \n",
+ " postal_code | \n",
+ " zip_name | \n",
+ " median_listing_price | \n",
+ " median_listing_price_mm | \n",
+ " median_listing_price_yy | \n",
+ " active_listing_count | \n",
+ " active_listing_count_mm | \n",
+ " active_listing_count_yy | \n",
+ " median_days_on_market | \n",
+ " ... | \n",
+ " average_listing_price_mm | \n",
+ " average_listing_price_yy | \n",
+ " total_listing_count | \n",
+ " total_listing_count_mm | \n",
+ " total_listing_count_yy | \n",
+ " pending_ratio | \n",
+ " pending_ratio_mm | \n",
+ " pending_ratio_yy | \n",
+ " quality_flag | \n",
+ " zip_code | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 202508 | \n",
+ " 21530 | \n",
+ " flintstone, md | \n",
+ " 683250.0 | \n",
+ " -0.4481 | \n",
+ " 1.8588 | \n",
+ " 4.0 | \n",
+ " 1.0000 | \n",
+ " 0.3333 | \n",
+ " 27.0 | \n",
+ " ... | \n",
+ " -0.3241 | \n",
+ " -0.1821 | \n",
+ " 6.0 | \n",
+ " 1.0000 | \n",
+ " 0.2000 | \n",
+ " 0.5000 | \n",
+ " 0.0000 | \n",
+ " -0.5000 | \n",
+ " 1.0 | \n",
+ " 21530 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 202508 | \n",
+ " 83876 | \n",
+ " worley, id | \n",
+ " 837450.0 | \n",
+ " -0.0870 | \n",
+ " -0.0643 | \n",
+ " 23.0 | \n",
+ " 0.2105 | \n",
+ " 0.2778 | \n",
+ " 71.0 | \n",
+ " ... | \n",
+ " -0.1156 | \n",
+ " 0.1602 | \n",
+ " 27.0 | \n",
+ " 0.2273 | \n",
+ " 0.2273 | \n",
+ " 0.1304 | \n",
+ " -0.0538 | \n",
+ " -0.1196 | \n",
+ " 0.0 | \n",
+ " 83876 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 202508 | \n",
+ " 56142 | \n",
+ " ivanhoe, mn | \n",
+ " 160500.0 | \n",
+ " -0.1145 | \n",
+ " 3.8198 | \n",
+ " 2.0 | \n",
+ " 0.3333 | \n",
+ " 1.0000 | \n",
+ " 40.0 | \n",
+ " ... | \n",
+ " -0.1145 | \n",
+ " 3.8198 | \n",
+ " 3.0 | \n",
+ " 0.2000 | \n",
+ " 2.0000 | \n",
+ " 1.0000 | \n",
+ " 0.3333 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " 56142 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 202508 | \n",
+ " 71857 | \n",
+ " prescott, ar | \n",
+ " 79900.0 | \n",
+ " -0.0589 | \n",
+ " -0.0600 | \n",
+ " 15.0 | \n",
+ " -0.1429 | \n",
+ " 0.3636 | \n",
+ " 136.0 | \n",
+ " ... | \n",
+ " 0.0151 | \n",
+ " -0.3684 | \n",
+ " 20.0 | \n",
+ " -0.1304 | \n",
+ " 0.3333 | \n",
+ " 0.3333 | \n",
+ " 0.0476 | \n",
+ " -0.1212 | \n",
+ " 1.0 | \n",
+ " 71857 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 202508 | \n",
+ " 67207 | \n",
+ " wichita, ks | \n",
+ " 283450.0 | \n",
+ " -0.0071 | \n",
+ " 0.0128 | \n",
+ " 71.0 | \n",
+ " 0.4343 | \n",
+ " 0.8205 | \n",
+ " 30.0 | \n",
+ " ... | \n",
+ " -0.0370 | \n",
+ " 0.0077 | \n",
+ " 103.0 | \n",
+ " 0.3733 | \n",
+ " 0.5147 | \n",
+ " 0.4225 | \n",
+ " -0.1330 | \n",
+ " -0.3980 | \n",
+ " 0.0 | \n",
+ " 67207 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 3107480 | \n",
+ " 201607 | \n",
+ " 30608 | \n",
+ " NaN | \n",
+ " 599000.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 30608 | \n",
+ "
\n",
+ " \n",
+ " 3108152 | \n",
+ " 201607 | \n",
+ " 74459 | \n",
+ " NaN | \n",
+ " 22600.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 47.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 74459 | \n",
+ "
\n",
+ " \n",
+ " 3109057 | \n",
+ " 201607 | \n",
+ " 28547 | \n",
+ " camp lejeune, nc | \n",
+ " 31000.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 50.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 28547 | \n",
+ "
\n",
+ " \n",
+ " 3110124 | \n",
+ " 201607 | \n",
+ " 72338 | \n",
+ " frenchmans bayou, ar | \n",
+ " 124900.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 4.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 72338 | \n",
+ "
\n",
+ " \n",
+ " 3113146 | \n",
+ " 201607 | \n",
+ " 48232 | \n",
+ " NaN | \n",
+ " 389225.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 74.0 | \n",
+ " ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 48232 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
34129 rows × 47 columns
\n",
+ "
\n",
+ "
\n",
+ "
\n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "housing_information"
+ }
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "final_merged = pd.merge(merged_df1, housing_information, on='zip_code', how='inner')\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "zB4wv9Vbmd9Z"
+ },
+ "execution_count": 10,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "final_merged.to_csv(\"output.csv\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 287
+ },
+ "id": "irDVFLusk7rM",
+ "outputId": "349b2c74-a035-43f5-a1d0-1ba6c6a9282e"
+ },
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m/tmp/ipython-input-196984361.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfinal_merged\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"output.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/util/_decorators.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0mstacklevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfind_stack_level\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m )\n\u001b[0;32m--> 333\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m \u001b[0;31m# error: \"Callable[[VarArg(Any), KwArg(Any)], Any]\" has no\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mto_csv\u001b[0;34m(self, path_or_buf, sep, na_rep, float_format, columns, header, index, index_label, mode, encoding, compression, quoting, quotechar, lineterminator, chunksize, date_format, doublequote, escapechar, decimal, errors, storage_options)\u001b[0m\n\u001b[1;32m 3965\u001b[0m )\n\u001b[1;32m 3966\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3967\u001b[0;31m return DataFrameRenderer(formatter).to_csv(\n\u001b[0m\u001b[1;32m 3968\u001b[0m \u001b[0mpath_or_buf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3969\u001b[0m \u001b[0mlineterminator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlineterminator\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/io/formats/format.py\u001b[0m in \u001b[0;36mto_csv\u001b[0;34m(self, path_or_buf, encoding, sep, columns, index_label, mode, compression, quoting, quotechar, lineterminator, chunksize, date_format, doublequote, escapechar, errors, storage_options)\u001b[0m\n\u001b[1;32m 1012\u001b[0m \u001b[0mformatter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfmt\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1013\u001b[0m )\n\u001b[0;32m-> 1014\u001b[0;31m \u001b[0mcsv_formatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1015\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1016\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcreated_buffer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 268\u001b[0m )\n\u001b[1;32m 269\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 270\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_save\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 271\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_save\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36m_save\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 273\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_need_to_save_header\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_save_header\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 275\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_save_body\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 276\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_save_header\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36m_save_body\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstart_i\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mend_i\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 313\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_save_chunk\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstart_i\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_i\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 314\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_save_chunk\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_i\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mend_i\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/io/formats/csvs.py\u001b[0m in \u001b[0;36m_save_chunk\u001b[0;34m(self, start_i, end_i)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mslicer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 320\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_values_for_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_number_format\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 321\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mres\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_iter_column_arrays\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_get_values_for_csv\u001b[0;34m(self, float_format, date_format, decimal, na_rep, quoting)\u001b[0m\n\u001b[1;32m 1408\u001b[0m ) -> Self:\n\u001b[1;32m 1409\u001b[0m \u001b[0;31m# helper used by to_csv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1410\u001b[0;31m mgr = self._mgr.get_values_for_csv(\n\u001b[0m\u001b[1;32m 1411\u001b[0m \u001b[0mfloat_format\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfloat_format\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1412\u001b[0m \u001b[0mdate_format\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdate_format\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mget_values_for_csv\u001b[0;34m(self, float_format, date_format, decimal, na_rep, quoting)\u001b[0m\n\u001b[1;32m 464\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mformatting\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mrepr\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mcsv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 465\u001b[0m \"\"\"\n\u001b[0;32m--> 466\u001b[0;31m return self.apply(\n\u001b[0m\u001b[1;32m 467\u001b[0m \u001b[0;34m\"get_values_for_csv\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 468\u001b[0m \u001b[0mna_rep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mna_rep\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/internals/managers.py\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, f, align_keys, **kwargs)\u001b[0m\n\u001b[1;32m 361\u001b[0m \u001b[0mapplied\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 362\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 363\u001b[0;31m \u001b[0mapplied\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 364\u001b[0m \u001b[0mresult_blocks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mextend_blocks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mapplied\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresult_blocks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/internals/blocks.py\u001b[0m in \u001b[0;36mget_values_for_csv\u001b[0;34m(self, float_format, date_format, decimal, na_rep, quoting)\u001b[0m\n\u001b[1;32m 778\u001b[0m ) -> Block:\n\u001b[1;32m 779\u001b[0m \u001b[0;34m\"\"\"convert to our native types format\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 780\u001b[0;31m result = get_values_for_csv(\n\u001b[0m\u001b[1;32m 781\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 782\u001b[0m \u001b[0mna_rep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mna_rep\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_values_for_csv\u001b[0;34m(values, date_format, na_rep, quoting, float_format, decimal)\u001b[0m\n\u001b[1;32m 7862\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7863\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 7864\u001b[0;31m \u001b[0mmask\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7865\u001b[0m \u001b[0mitemsize\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwriters\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mword_len\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mna_rep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7866\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/dtypes/missing.py\u001b[0m in \u001b[0;36misna\u001b[0;34m(obj)\u001b[0m\n\u001b[1;32m 176\u001b[0m \u001b[0mName\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \"\"\"\n\u001b[0;32m--> 178\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_isna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 179\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 180\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/dtypes/missing.py\u001b[0m in \u001b[0;36m_isna\u001b[0;34m(obj, inf_as_na)\u001b[0m\n\u001b[1;32m 205\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 206\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCExtensionArray\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 207\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_isna_array\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minf_as_na\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minf_as_na\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 208\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mABCIndex\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 209\u001b[0m \u001b[0;31m# Try to use cached isna, which also short-circuits for integer dtypes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/dtypes/missing.py\u001b[0m in \u001b[0;36m_isna_array\u001b[0;34m(values, inf_as_na)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_isna_recarray_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minf_as_na\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minf_as_na\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 291\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mis_string_or_object_np_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 292\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_isna_string_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minf_as_na\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minf_as_na\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 293\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkind\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m\"mM\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 294\u001b[0m \u001b[0;31m# this is the NaT pattern\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/pandas/core/dtypes/missing.py\u001b[0m in \u001b[0;36m_isna_string_dtype\u001b[0;34m(values, inf_as_na)\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 313\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlibmissing\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misnaobj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minf_as_na\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minf_as_na\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 314\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[0;31m# 0-D, reached via e.g. mask_missing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.decomposition import PCA"
+ ],
+ "metadata": {
+ "id": "YsweB8NLk9WE"
+ },
+ "execution_count": 12,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "categorical_cols = final_merged.select_dtypes(include=['object', 'category']).columns\n"
+ ],
+ "metadata": {
+ "id": "5Xdm4zVDwbBZ"
+ },
+ "execution_count": 23,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "categorical_cols"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "GBAmDL3LwcEA",
+ "outputId": "a0ef0720-de58-4d84-ef1e-3293718dfa33"
+ },
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Index(['status', 'city', 'state', 'zip_code', 'prev_sold_date', 'GEO_ID',\n",
+ " 'NAME', 'H1_001N', 'zip_name'],\n",
+ " dtype='object')"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 24
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "final_merged = final_merged.fillna(final_merged.mean(numeric_only=True))\n",
+ "\n",
+ "numeric_cols = final_merged.select_dtypes(include=['int64', 'float64']).columns\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "178Eq5glmM4A"
+ },
+ "execution_count": 13,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "clean_data = final_merged[numeric_cols]\n",
+ "clean_data = clean_data.drop(columns=['Unnamed: 3'])\n",
+ "print(clean_data)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "bdyyNIIGtHIJ",
+ "outputId": "bab8b931-46bd-49e8-b4b8-a4a0c38931f3"
+ },
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " brokered_by price bed bath acre_lot street \\\n",
+ "0 10368.0 175000.0 3.000000 1.000000 60.000000 553526.0 \n",
+ "1 88024.0 18950.0 3.266342 2.496775 15.148419 1943592.0 \n",
+ "2 22006.0 425000.0 3.000000 2.000000 2.020000 263302.0 \n",
+ "3 48310.0 225000.0 4.000000 2.000000 0.240000 871278.0 \n",
+ "4 7797.0 419000.0 3.000000 3.000000 1.900000 286373.0 \n",
+ "... ... ... ... ... ... ... \n",
+ "2101045 23009.0 359900.0 4.000000 2.000000 0.330000 353094.0 \n",
+ "2101046 18208.0 350000.0 3.000000 2.000000 0.100000 1062149.0 \n",
+ "2101047 76856.0 440000.0 6.000000 3.000000 0.500000 405677.0 \n",
+ "2101048 53618.0 179900.0 2.000000 1.000000 0.090000 761379.0 \n",
+ "2101049 108243.0 580000.0 5.000000 3.000000 0.310000 307704.0 \n",
+ "\n",
+ " house_size month_date_yyyymm postal_code median_listing_price \\\n",
+ "0 1176.000000 202508 12022 240000.0 \n",
+ "1 2747.425997 202508 29835 459900.0 \n",
+ "2 1600.000000 202508 12521 995000.0 \n",
+ "3 1239.000000 202508 12521 995000.0 \n",
+ "4 1800.000000 202508 12516 502500.0 \n",
+ "... ... ... ... ... \n",
+ "2101045 3600.000000 202508 99354 509900.0 \n",
+ "2101046 1616.000000 202508 99354 509900.0 \n",
+ "2101047 3200.000000 202508 99354 509900.0 \n",
+ "2101048 933.000000 202508 99354 509900.0 \n",
+ "2101049 3615.000000 202508 99354 509900.0 \n",
+ "\n",
+ " ... average_listing_price average_listing_price_mm \\\n",
+ "0 ... 240000.0 0.3333 \n",
+ "1 ... 506725.0 -0.0460 \n",
+ "2 ... 1592273.0 -0.2336 \n",
+ "3 ... 1592273.0 -0.2336 \n",
+ "4 ... 1044767.0 0.0717 \n",
+ "... ... ... ... \n",
+ "2101045 ... 486394.0 -0.0546 \n",
+ "2101046 ... 486394.0 -0.0546 \n",
+ "2101047 ... 486394.0 -0.0546 \n",
+ "2101048 ... 486394.0 -0.0546 \n",
+ "2101049 ... 486394.0 -0.0546 \n",
+ "\n",
+ " average_listing_price_yy total_listing_count \\\n",
+ "0 0.6059 3.0 \n",
+ "1 0.0566 106.0 \n",
+ "2 0.0474 18.0 \n",
+ "3 0.0474 18.0 \n",
+ "4 -0.5470 23.0 \n",
+ "... ... ... \n",
+ "2101045 -0.1422 97.0 \n",
+ "2101046 -0.1422 97.0 \n",
+ "2101047 -0.1422 97.0 \n",
+ "2101048 -0.1422 97.0 \n",
+ "2101049 -0.1422 97.0 \n",
+ "\n",
+ " total_listing_count_mm total_listing_count_yy pending_ratio \\\n",
+ "0 0.0000 0.5000 3.0000 \n",
+ "1 0.1042 0.6061 0.2000 \n",
+ "2 0.1250 -0.1000 0.5833 \n",
+ "3 0.1250 -0.1000 0.5833 \n",
+ "4 0.0000 -0.0800 0.5714 \n",
+ "... ... ... ... \n",
+ "2101045 0.0211 0.3472 0.3151 \n",
+ "2101046 0.0211 0.3472 0.3151 \n",
+ "2101047 0.0211 0.3472 0.3151 \n",
+ "2101048 0.0211 0.3472 0.3151 \n",
+ "2101049 0.0211 0.3472 0.3151 \n",
+ "\n",
+ " pending_ratio_mm pending_ratio_yy quality_flag \n",
+ "0 1.0000 2.0000 1.0 \n",
+ "1 -0.0013 -0.1137 0.0 \n",
+ "2 -0.0833 -0.1667 1.0 \n",
+ "3 -0.0833 -0.1667 1.0 \n",
+ "4 0.1198 0.3896 1.0 \n",
+ "... ... ... ... \n",
+ "2101045 0.1696 -0.0246 1.0 \n",
+ "2101046 0.1696 -0.0246 1.0 \n",
+ "2101047 0.1696 -0.0246 1.0 \n",
+ "2101048 0.1696 -0.0246 1.0 \n",
+ "2101049 0.1696 -0.0246 1.0 \n",
+ "\n",
+ "[2101050 rows x 52 columns]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "scaler = StandardScaler()\n",
+ "scaled_data = scaler.fit_transform(clean_data)\n",
+ "\n",
+ "\n",
+ "pca = PCA()\n",
+ "pca.fit(scaled_data)\n",
+ "plt.figure(figsize=(8,5))\n",
+ "plt.plot(range(1, len(pca.explained_variance_ratio_) + 1),\n",
+ " pca.explained_variance_ratio_, 'o-', linewidth=2)\n",
+ "plt.title('Plot')\n",
+ "plt.xlabel('Principal Component')\n",
+ "plt.ylabel('Explained Variance Ratio')\n",
+ "plt.grid(True)\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 487
+ },
+ "id": "RnY-wWDptmCz",
+ "outputId": "079ccab2-0c62-4253-fe7a-18cce7b6e906"
+ },
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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SwMRERFR3en9aGGqmoPMHBZmEgBsaSAiIiKqLQZeAyaRSJSrvNlc4SUiIiKqFQZeA+dkW97Hey+/CIIg6LkaIiIiIuPDwGvgXOzKV3hLygTkFZXquRoiIiIi41Prh9bu3r2LpKQkAECHDh3QpEkTrRVFjzn9a2syB5nxbhBNREREpA8ar/Dm5+dj0qRJaNq0KXr37o3evXujadOmeO211zQ605jEcbbl1mREREREdaFx4A0LC8PRo0exZ88ePHjwAA8ePMDu3btx9OhRvPPOO7qosUFztuPhE0RERER1oXFLw08//YQff/wRffv2VV4bPHgwrK2t8dJLL2HdunXarK/B4168RERERHWj8QpvQUGB8iS0ilxdXdnSoAMVjxfm1mREREREmtM48AYHByM8PByFhYXKa48ePUJERASCg4O1WhyptjRkPWQPLxEREZGmNG5pWL16NUJCQtC8eXN06dIFAHDx4kXIZDIcOHBA6wU2dE4qD61xhZeIiIhIUxoHXl9fX1y7dg3fffcdEhMTAQCjR4/GmDFjYG1trfUCG7qKK7wMvERERESaq9U+vDY2Npg8ebK2ayE17K3MYWEmQUmZgCzu0kBERESkMVGBd8+ePRg0aBAsLCywZ8+eascOGzZMK4VROYlEAmdbK6TnFnIfXiIiIqJaEBV4R4wYgfT0dLi6umLEiBFVjpNIJCgrK9NWbfQPJ1vLfwJvMQRBgEQi0XdJREREREZDVOCVy+Vqv6b6oejjLSkTkFtYCkdrHi9MREREJJbG25J9/fXXKCqq/E/rxcXF+Prrr7VSFKniXrxEREREtadx4J04cSJycnIqXc/Ly8PEiRO1UhSpqrg12T3uxUtERESkEY0Db1U9pH///TccHR21UhSpqrg1GY8XJiIiItKM6G3JnnjiCUgkEkgkEjz77LMwN3/81rKyMqSkpGDgwIE6KbKhY0sDERERUe2JDryK3Rni4+MREhICOzs75WuWlpbw9PTEiy++qPUCqXyXBgW2NBARERFpRnTgDQ8PBwB4enpi1KhRkMlkOiuKVDnbVejh5QovERERkUY0PmltwoQJuqiDquGsssLLwEtERESkCY0Db1lZGT777DP88MMPSE1NRXGxagDLzs7WWnFUruJDa+zhJSIiItKMxrs0REREYOXKlRg1ahRycnIQFhaGF154AVKpFAsWLNBBiWRnZQ5Ls/KpYksDERERkWY0DrzfffcdNm7ciHfeeQfm5uYYPXo0Nm3ahPnz5+P06dO6qLHBk0gkygfX+NAaERERkWY0Drzp6eno3LkzAMDOzk55CMVzzz2Hffv2abc6UlK0NdwvKIYgCHquhoiIiMh4aBx4mzdvjrS0NABAmzZtcPDgQQDA2bNnYWVlVd1bqQ4UK7wlZQJyC0v1XA0RERGR8dA48D7//POIjo4GAEybNg3z5s1Du3btMH78eEyaNEnrBVI5Z+7FS0RERFQrGu/SsGTJEuXXo0aNQqtWrXDq1Cm0a9cOQ4cO1Wpx9FjFvXiz84vRuokeiyEiIiIyIhoH3n/r3r07unfvDgA4d+4cAgIC6lwUVVbxtLUs7sVLREREJJrGLQ0PHz7Eo0ePVK7Fx8dj6NChCAoK0lphpMqFe/ESERER1YrowHvr1i0EBwfD0dERjo6OCAsLQ0FBAcaPH4+goCDY2tri1KlTuqy1QXOyrdjSwB5eIiIiIrFEtzTMmjULhYWFWL16NX7++WesXr0ax48fR1BQEJKTk9G8eXNd1tngsaWBiIiIqHZEB95jx47h559/Rvfu3fHSSy/B3d0dY8aMwYwZM3RYHimwpYGIiIiodkS3NGRkZMDLywsA4OrqChsbGwwaNEhnhZGqiiu899jSQERERCSaRg+tSaVSla8tLS2rGU3aZGdlDkvz8t//e2xpICIiIhJNdEuDIAho3749JBIJgPLdGp544gmVEAwA2dnZ2q2QAAASiQTOtpZIyylkSwMRERGRBkQH3q+++kqXdZAIThUCryAIyv/4ICIiIqKqiQ68EyZM0GUdJILitLVSuYDcR6VwtLHQc0VEREREhk/jgydIf5wrbk3GB9eIiIiIRGHgNSIVd2pgHy8RERGROAy8RqSx7eMWhlPX76FMLuixGiIiIiLjwMBrJCIT0rDxWIry+89+v4qeSw8hMiFNj1URERERGb5aB97i4mIkJSWhtLRUm/WQGpEJaZjybRxyHpWoXE/PKcSUb+MYeomIiIiqoXHgLSgowGuvvQYbGxt06tQJqampAIBp06ZhyZIlWi+woSuTC4jYexnqmhcU1yL2XmZ7AxEREVEVNA68c+bMwcWLF3HkyBHIZDLl9X79+mHHjh1aLY6A2JRspOUUVvm6ACAtpxCxKTzwg4iIiEgd0fvwKuzatQs7duxA9+7dVQ4+6NSpE5KTk7VaHAGZeVWH3dqMIyIiImpoNF7hvXv3LlxdXStdz8/P58lfOuBqL6t5kAbjiIiIiBoajQNvQEAA9u3bp/xeEXI3bdqE4OBg7VVGAIBALyd4OMpQ1X9KSAB4OMoQ6OVUn2URERERGQ2NWxo++eQTDBo0CJcvX0ZpaSlWr16Ny5cv49SpUzh69KguamzQzKQShA/1wZRv4yABKj28JgAIH+oDMylX14mIiIjU0XiFt2fPnoiPj0dpaSk6d+6MgwcPwtXVFTExMfD399dFjQ3eQF8PrBvbDe6OldsWhvp5YKCvhx6qIiIiIjIOGq/wAkCbNm2wceNGbddC1Rjo64H+Pu6ITcnG1YxchO+5DAC4lJYLQRDYP01ERERUBY1XePfv348DBw5Uun7gwAH89ttvWimK1DOTShDcxhkTengh6J+e3b/u5uPSnVw9V0ZERERkuDQOvLNnz0ZZWVml64IgYPbs2Vopimo2vGsz5dd7Lt7RYyVEREREhk3jwHvt2jX4+PhUuu7t7Y3r169rpSiq2SBfd1iYlbcx7Im/AzlPWiMiIiJSS+PA6+joiL/++qvS9evXr8PW1lYrRVHNGttaok/7JgCA9NxCxN7gSWtERERE6mgceIcPH44ZM2aonKp2/fp1vPPOOxg2bJjGBaxduxaenp6QyWQICgpCbGxsteN37twJb29vyGQydO7cGfv376805sqVKxg2bBgcHR1ha2uLJ598EqmpqRrXZuiGVWhr2B1/W4+VEBERERkujQPvsmXLYGtrC29vb3h5ecHLywsdO3aEs7Mzli9frtG9duzYgbCwMISHhyMuLg5dunRBSEgIMjMz1Y4/deoURo8ejddeew0XLlzAiBEjMGLECCQkJCjHJCcno2fPnvD29saRI0fwxx9/YN68eZDJTO8ksv4d3WBjaQYA2P9nOopKK/dWExERETV0Gm9L5ujoiFOnTiEqKgoXL16EtbU1/Pz80Lt3b40/fOXKlZg8eTImTpwIAFi/fj327duHzZs3q30AbvXq1Rg4cCBmzZoFAFi0aBGioqKwZs0arF+/HgDw4YcfYvDgwVi2bJnyfW3atNG4NmNgbWmGkE7u+OXCbeQ8KsGxq1no7+Om77KIiIiIDEqt9uGVSCQYMGAABgwYUOsPLi4uxvnz5zFnzhzlNalUin79+iEmJkbte2JiYhAWFqZyLSQkBLt27QIAyOVy7Nu3D++99x5CQkJw4cIFeHl5Yc6cORgxYkSVtRQVFaGoqEj5fW5u+TZfJSUlKCkpqdXPp3hfbd8v1hBfV/xyobydYVfc3+jbjkcM11V9zR1pF+fNeHHujBPnzXiZytxpUn+tAm90dDSio6ORmZkJuVyu8trmzZtF3SMrKwtlZWVwc1NdkXRzc0NiYqLa96Snp6sdn56eDgDIzMzEw4cPsWTJEnz00UdYunQpIiMj8cILL+Dw4cPo06eP2vsuXrwYERERla4fPHgQNjY2on6eqkRFRdXp/TUpkwO25mbIL5Xg4OU0/Lz3b8jMdPqRDYau5450g/NmvDh3xonzZryMfe4KCgpEj9U48EZERGDhwoUICAiAh4eHQZ3wpQjfw4cPx8yZMwEAXbt2xalTp7B+/foqA++cOXNUVo5zc3PRokULDBgwAA4ODrWqpaSkBFFRUejfvz8sLCxqdQ+xzgtX8F3sLZTIJTBr0RWDuzbV6eeZuvqcO9Iezpvx4twZJ86b8TKVuVP8i7wYGgfe9evXY8uWLRg3bpymb1Xh4uICMzMzZGRkqFzPyMiAu7u72ve4u7tXO97FxQXm5uaV9gnu2LEjTpw4UWUtVlZWsLKyqnTdwsKizn8QtHGPmjzfrTm+i70FANj7Zwb+82QrnX5eQ1Efc0fax3kzXpw748R5M17GPnea1K7xLg3FxcXo0aOHpm+rxNLSEv7+/oiOjlZek8vliI6ORnBwsNr3BAcHq4wHypfjFeMtLS3x5JNPIikpSWXM1atX0aqV6YbAbi0bo1kjawDAietZyHpYVMM7iIiIiBoOjQPv66+/jm3btmnlw8PCwrBx40Zs3boVV65cwZQpU5Cfn6/ctWH8+PEqD7VNnz4dkZGRWLFiBRITE7FgwQKcO3cOoaGhyjGzZs3Cjh07sHHjRly/fh1r1qzB3r178dZbb2mlZkMklUow/J82hjK5gP1/pum5IiIiIiLDoXFLQ2FhITZs2IDff/8dfn5+lZaTV65cKfpeo0aNwt27dzF//nykp6eja9euiIyMVD6YlpqaCqn0cSbv0aMHtm3bhrlz5+KDDz5Au3btsGvXLvj6+irHPP/881i/fj0WL16Mt99+Gx06dMBPP/2Enj17avqjGpXhXZvh/46UHwayO/4Oxgd76rcgIiIiIgOhceD9448/0LVrVwBQOfABQK0eYAsNDVVZoa3oyJEjla6NHDkSI0eOrPaekyZNwqRJkzSuxZh1cLeHt7s9EtPzcP7mfdzKLkALp7rtMEFERERkCjQOvIcPH9ZFHaQFw7o2RWJkef/ynot3MPXptnquiIiIiEj/NO7hJcM11O/xdmS7429DEAQ9VkNERERkGGp18MS5c+fwww8/IDU1FcXFxSqv/fzzz1opjDTXwskGAa0a49zN+7ia8RCJ6Xno6FG7fYSJiIiITIXGK7zbt29Hjx49cOXKFfzyyy8oKSnBpUuXcOjQITg6OuqiRtLA8K4VV3nv6LESIiIiIsOgceD95JNP8Nlnn2Hv3r2wtLTE6tWrkZiYiJdeegktW7bURY2kgSF+TWEuLX94cO/FO5DL2dZAREREDZvGgTc5ORlDhgwBUH7QQ35+PiQSCWbOnIkNGzZovUDSjJOtJXq1cwEA3H7wCKujryEm+R7KGHyJiIiogdI48DZu3Bh5eXkAgGbNmim3Jnvw4AEKCgq0Wx3ViqeLrfLr1dHXMHrjafRcegiRCTyQgoiIiBoejQNv7969ERUVBaB8T9zp06dj8uTJGD16NJ599lmtF0iaiUxIw5aTNypdT88pxJRv4xh6iYiIqMHReJeGNWvWoLCwEADw4YcfwsLCAqdOncKLL76IuXPnar1AEq9MLiBi72Woa14QAEgAROy9jP4+7jCTan5ICBEREZEx0jjwOjk5Kb+WSqWYPXu2Vgui2otNyUZaTmGVrwsA0nIKEZuSjeA2zvVXGBEREZEeiQq8ubm5cHBwUH5dHcU4qn+ZeVWH3dqMIyIiIjIFogJv48aNkZaWBldXVzRq1AgSSeV/DhcEARKJBGVlZVovksRxtZdpdRwRERGRKRAVeA8dOqRsZTh8+LBOC6LaC/RygoejDOk5hWr7eAHAw1GGQC+nKl4lIiIiMj2iAm+fPn0AAKWlpTh69CgmTZqE5s2b67Qw0pyZVILwoT6Y8m0cJIDa0DtnkDcfWCMiIqIGRaNtyczNzfHpp5+itLRUV/VQHQ309cC6sd3g7qi+beHvB4/quSIiIiIi/dJ4l4ZnnnkGR48ehaenpw7KIW0Y6OuB/j7uiE3JRmZeIYpL5Xjvxz8gAPi/w8l4KaAFXOys9F0mERERUb3QOPAOGjQIs2fPxp9//gl/f3/Y2tqqvD5s2DCtFUe1ZyaVqGw9duHWA2w7k4qHRaVY9ftVfDSisx6rIyIiIqo/Ggfet956CwCwcuXKSq9xlwbDNbNfe+y+cBv5xWX4PvYWXu3hibau9voui4iIiEjnND5aWC6XV/mLYddwNbG3wpS+bQCUn8i2eH+inisiIiIiqh8aB14yXq/1bA2Pfx5mi07MxKnrWXquiIiIiEj3NG5pAID8/HwcPXoUqampKC4uVnnt7bff1kphpH3WlmaYFdIBYT9cBAB8tO8K9k7ryW3KiIiIyKRpHHgvXLiAwYMHo6CgAPn5+XByckJWVhZsbGzg6urKwGvgRnRths0nU5BwOxeX03Lxc9zfGBnQQt9lEREREemMxi0NM2fOxNChQ3H//n1YW1vj9OnTuHnzJvz9/bF8+XJd1EhaJJVK8OFgH+X3yw8moaCY+yoTERGR6dI48MbHx+Odd96BVCqFmZkZioqK0KJFCyxbtgwffPCBLmokLQtu44x+Hd0AABm5Rdh0PEXPFRERERHpjsaB18LCAlJp+dtcXV2RmpoKAHB0dMStW7e0Wx3pzJzBj48YXn80GZm5hXquiIiIiEg3NA68TzzxBM6ePQsA6NOnD+bPn4/vvvsOM2bMgK+vr9YLJN1o08QOY4JaAgAKisvw/k9/YHf8bcQk30OZXNBzdURERETaIzrwKvbY/eSTT+Dh4QEA+Pjjj9G4cWNMmTIFd+/exYYNG3RTJenE9GfbQWZe/kfgcNJdTN8ej9EbT6Pn0kOITEjTc3VERERE2iE68DZr1gyzZ8+Gg4MDnn76aQDlLQ2RkZHIzc3F+fPn0aVLF50VStp39kY2Ckvlla6n5xRiyrdxDL1ERERkEkQH3qlTp+LHH39Ex44d0atXL2zZsgUFBQW6rI10qEwuIGLvZbWvKRoaIvZeZnsDERERGT3RgXfevHm4fv06oqOj0bp1a4SGhsLDwwOTJ0/GmTNndFkj6UBsSjbScqp+UE0AkJZTiNiU7PorioiIiEgHNH5orW/fvti6dSvS09OxYsUKXLlyBcHBwejUqRNWrlypixpJBzLzxO3KIHYcERERkaHSOPAq2NnZ4fXXX8eJEyewd+9epKenY9asWdqsjXTI1V6m1XFEREREhqrWgbegoABbtmxBnz59MGzYMDg7O+Pjjz/WZm2kQ4FeTvBwlEFSzRgPRxkCvZzqrSYiIiIiXdA48J46dQqvv/46PDw8MHXqVHh6euLw4cO4evUqZs+erYsaSQfMpBKEDy0/Yriq0Bs+1Ed5OAURERGRsRIdeJctW6bcoeHPP//Ep59+ivT0dGzduhW9e/fWZY2kIwN9PbBubDe4O1ZuW7AwkyDIy1kPVRERERFpl7nYgZ9++inGjh2LnTt38kQ1EzLQ1wP9fdwRm5KNzLxC7P8zDQcuZaCkTMC22FRMfbqtvkskIiIiqhPRgffOnTuwsLDQZS2kJ2ZSCYLblK/mPtGiMaIuZ0AuAFtO3cDrvbxgZW6m5wqJiIiIak90SwPDbsPQ0tkGIZ3cAQB384qwJ/6OnisiIiIiqpta79JApuv1Xq2VX//vRAoEgaetERERkfFi4KVK/Fs1RreWjQAAiel5OHE9S78FEREREdUBAy+pVXGVd+PxFD1WQkRERFQ3oh5ay83NFX1DBweHWhdDhiOkkztaOFnjVvYjHLt6F0npeejgbq/vsoiIiIg0JirwNmrUCBKJuAMIysrK6lQQGQYzqQSTnvJCxN7LAID/nfgLy/7TRc9VEREREWlOVOA9fPiw8usbN25g9uzZePXVVxEcHAwAiImJwdatW7F48WLdVEl6MTKgBVZGXUVeYSl2XbiDd0M6wNW+8iEVRERERIZMVODt06eP8uuFCxdi5cqVGD16tPLasGHD0LlzZ2zYsAETJkzQfpWkF3ZW5nglqCW+PPoXisvk+CbmJt4Z0EHfZRERERFpROOH1mJiYhAQEFDpekBAAGJjY7VSFBmOV3t4wlxa3s7y7embeFTMlhUiIiIyLhoH3hYtWmDjxo2Vrm/atAktWrTQSlFkODwcrfGcnwcA4H5BCX6K+1vPFRERERFpRvTRwgqfffYZXnzxRfz2228ICgoCAMTGxuLatWv46aeftF4g6d/rvVpj1z8nrm0+kYJXAltCKhX3ECMRERGRvmm8wjt48GBcvXoVQ4cORXZ2NrKzszF06FBcvXoVgwcP1kWNpGe+zRwR3NoZAPBXVj4OJWbquSIiIiIi8TRe4QXK2xo++eQTbddCBuz1Xl6I+eseAGDFwSTkF5fC1V6GQC8nmHG1l4iIiAxYrU5aO378OMaOHYsePXrg9u3bAIBvvvkGJ06c0GpxZDie7uAKNwcrAMCV9DxM3x6P0RtPo+fSQ4hMSNNzdURERERV0zjw/vTTTwgJCYG1tTXi4uJQVFQEAMjJyeGqrwk7eDkdGblFla6n5xRiyrdxDL1ERERksDQOvB999BHWr1+PjRs3wsLCQnn9qaeeQlxcnFaLI8NQJheUJ679m/DP/43YexllckHtGCIiIiJ90jjwJiUloXfv3pWuOzo64sGDB9qoiQxMbEo20nIKq3xdAJCWU4jYlGyV62VyATHJ97A7/jZiku8xEBMREZFeaPzQmru7O65fvw5PT0+V6ydOnEDr1q21VRcZkMy8qsNuRV8eS4YAAU96OiH6SgYi9l5WCcoejjKED/XBQF8PXZVKREREVInGgXfy5MmYPn06Nm/eDIlEgjt37iAmJgbvvvsu5s2bp4saSc9c7WWixh1JuosjSXchs5CisERe6XVFv++6sd0YeomIiKjeaBx4Z8+eDblcjmeffRYFBQXo3bs3rKys8O6772LatGm6qJH0LNDLCR6OMqTnFEJMU4K6sAuUtz5IUN7v29/HnduZERERUb3QuIdXIpHgww8/RHZ2NhISEnD69GncvXsXixYtqnURa9euhaenJ2QyGYKCghAbG1vt+J07d8Lb2xsymQydO3fG/v37qxz75ptvQiKRYNWqVbWur6Ezk0oQPtQHQHlgrUjyz68VI/2w+uWu6NHGudp7VdXvC7Dnl4iIiHSjVgdPAIClpSV8fHzqXMCOHTsQFhaG9evXIygoCKtWrUJISAiSkpLg6upaafypU6cwevRoLF68GM899xy2bduGESNGIC4uDr6+vipjf/nlF5w+fRpNmzatc50N3UBfD6wb261SX667mr7cU8n3arzf0shEzHuuI7q1bAyJRILIhDT2/BIREZFOaBx48/PzsWTJEkRHRyMzMxNyueo/X//1118a3W/lypWYPHkyJk6cCABYv3499u3bh82bN2P27NmVxq9evRoDBw7ErFmzAACLFi1CVFQU1qxZg/Xr1yvH3b59G9OmTcOBAwcwZMgQTX9MUmOgrwf6+7gjNiUbmXmFak9aE9vvG3/rAV5cFwO/5o7o1rIRtp66Waldgj2/REREpA0aB97XX38dR48exbhx4+Dh4QGJpPZ9mMXFxTh//jzmzJmjvCaVStGvXz/ExMSofU9MTAzCwsJUroWEhGDXrl3K7+VyOcaNG4dZs2ahU6dONdZRVFSkPEADAHJzcwEAJSUlKCkp0eRHUlK8r7bvN2QBLR0AOAAA5GWlkJc9fu2J5vZwd7BCRm5Rlf2+Ugmg6Fb44+8c/PF3jtpxj3t+L6FvO2eVYF0mF3Du5n1k5hXB1d4KAa0aa60n2JTnzpRx3owX5844cd6Ml6nMnSb1axx4f/vtN+zbtw9PPfWUpm+tJCsrC2VlZXBzc1O57ubmhsTERLXvSU9PVzs+PT1d+f3SpUthbm6Ot99+W1QdixcvRkRERKXrBw8ehI2Njah7VCUqKqpO7zdGg90l2JyraA+vGELLU+64tnKUyoGj6VL8nV99SC3v+S3Cmh2RaOdY/v6L9yT4+YYUD4ofv7eRpYAXPOXo4qy9vt+GOHemgPNmvDh3xonzZryMfe4KCgpEj9U48DZu3BhOTk6avq3enD9/HqtXr0ZcXJzo1ec5c+aorBrn5uaiRYsWGDBgABwcHGpVR0lJCaKiotC/f3+VE+kagsEAul3KwEf7E5Fe4ThiD0cZPhzkjZBO5f/BIggCPj+cjDWHa26DybJphVE9W+PirRx8FXOx0upxTrEEX101wxcvd1Hev7Ya8twZM86b8eLcGSfOm/EylblT/Iu8GBoH3kWLFmH+/PnYunVrnVc/XVxcYGZmhoyMDJXrGRkZcHd3V/sed3f3ascfP34cmZmZaNmypfL1srIyvPPOO1i1ahVu3LhR6Z5WVlawsrKqdN3CwqLOfxC0cQ9j9FzX5hjk16zafl8AeKqtq6jAu/3c39h+7m+YSSVqWyUU7Q8f/5aEQX7NtNLe0FDnzthx3owX5844cd6Ml7HPnSa1axx4V6xYgeTkZLi5ucHT07PSh8XFxYm+l6WlJfz9/REdHY0RI0YAKO+/jY6ORmhoqNr3BAcHIzo6GjNmzFBei4qKQnBwMABg3Lhx6Nevn8p7QkJCMG7cOOWDcVQ/zKQSBNewTZmme/xWt1VZxS3PavpcIiIiajg0DryKYKotYWFhmDBhAgICAhAYGIhVq1YhPz9fGU7Hjx+PZs2aYfHixQCA6dOno0+fPlixYgWGDBmC7du349y5c9iwYQMAwNnZGc7OqmHHwsIC7u7u6NChg1Zrp7pT7PE75ds4SACV0KtYo31nQHsUlwnYE38bN+7V3K8j9ihkIiIiahg0Drzh4eFaLWDUqFG4e/cu5s+fj/T0dHTt2hWRkZHKB9NSU1MhlT4+H6NHjx7Ytm0b5s6diw8++ADt2rXDrl27Ku3BS8ZD7B6/wa2dMXrj6RrvJ3ZrNCIiImoYan3whDaFhoZW2cJw5MiRStdGjhyJkSNHir6/ur5dMixi9vgV0/7g4Vj+PiIiIiIFUYHXyckJV69ehYuLCxo3blzt7gfZ2ZWPjCUSo6ae3+raHxQm92qttf14iYiIyDSICryfffYZ7O3tAQCrVq3SZT1E1aqq/UHhfydS8JyfB1wd2NZARERE5UQF3gkTJqj9mkgf/t3+4CCzwPKDibh0Jw+3HzzCpK1nseONYNhaGUTHDhEREelZnRJBYWEhiouLVa7V9qAGIk38u/2hUzMHPL/2FG4/eISE27kI3RaHjeMDYG4mreYuRERE1BBonAby8/MRGhoKV1dX2NraonHjxiq/iPTB1V6GLROfhIOs/L/hDifdxbzdlyAI2jtqmIiIiIyTxoH3vffew6FDh7Bu3TpYWVlh06ZNiIiIQNOmTfH111/rokYiUdq52WPD+ABY/rOq+31sKtYdTUaZXEBM8j3sjr+NmOR71R5eQURERKZH45aGvXv34uuvv0bfvn0xceJE9OrVC23btkWrVq3w3XffYcyYMbqok0iU7q2d8elIP0zfHg8AWBaZhA1H/8KDRyXKMR7/2t+XiIiITJvGK7zZ2dlo3bo1gPJ+XcU2ZD179sSxY8e0Wx1RLQzv2gyzQh6fqlcx7AJAek4hpnwbh8iEtPoujYiIiPRA48DbunVrpKSkAAC8vb3xww8/AChf+W3UqJFWiyOqrf/2bg1rSzO1rykaGiL2XmZ7AxERUQOgceCdOHEiLl68CACYPXs21q5dC5lMhpkzZ2LWrFlaL5CoNs7euI9HxWVVvi4ASMspRGwKD0ohIiIydRr38M6cOVP5db9+/ZCYmIjz58+jbdu28PPz02pxRLWVmVf5UIq6jCMiIiLjVeed+Vu1aoVWrVppoxYirXG1F3fSmthxREREZLxEBd7PP/9c9A3ffvvtWhdDpC2BXk7wcJQhPacQVXXpejjKEOjlVK91ERERUf0TFXg/++wzUTeTSCQMvGQQzKQShA/1wZRv4yAB1IZev+aOMJNK6rs0IiIiqmeiAq9iVwYiYzLQ1wPrxnZDxN7LSMup3Kt74FIGtp66gQk9POu/OCIiIqo3derhVRzbKpFwlYwM00BfD/T3cUdsSjYy8wrhai/D1cw8hO++BABYsPcS3ByseAgFERGRCdN4WzIA+N///gdfX1/IZDLIZDL4+vpi06ZN2q6NSCvMpBIEt3HG8K7NENzGGROCPTH16TYAAEEA3t4ej7M3uD0ZERGRqdI48M6fPx/Tp0/H0KFDsXPnTuzcuRNDhw7FzJkzMX/+fF3USKR17w7ogBe6NQMAFJfK8frWc7iemYcyuYAzKdk4nyXBmZRsHkxBRERkAjRuaVi3bh02btyI0aNHK68NGzYMfn5+mDZtGhYuXKjVAol0QSKRYOmLfribV4Tj17KQ86gEL60/DXMzCTLzigCY4etr5+DhKEP4UB+2PBARERkxjVd4S0pKEBAQUOm6v78/SktLtVIUUX2wMJNi3Vh/dGrqAADILij+J+w+lp5TiCnfxiEyIU0fJRIREZEWaBx4x40bh3Xr1lW6vmHDBowZM0YrRRHVFzsrc2yaEACzKp67VDQ0ROy9zPYGIiIiI1WrXRr+97//4eDBg+jevTsA4MyZM0hNTcX48eMRFhamHLdy5UrtVEmkQzeyClBWTZYVAKTlFCI2JRvBbZzrrS4iIiLSDo0Db0JCArp16wYASE5OBgC4uLjAxcUFCQkJynHcqoyMRWZe5T166zKOiIiIDIvGgffw4cO6qINIb1ztZVodR0RERIZF4x7eu3fvVvnan3/+WadiiPQh0MsJHo4yVPdvEh6OMgR6OdVbTURERKQ9Ggfezp07Y9++fZWuL1++HIGBgVopiqg+mUklCB/qAwBVht65QzrCTMo2HSIiImOkceANCwvDiy++iClTpuDRo0e4ffs2nn32WSxbtgzbtm3TRY1EOjfQ1wPrxnaDu6P6toU/bufUc0VERESkLRoH3vfeew8xMTE4fvw4/Pz84OfnBysrK/zxxx94/vnndVEjUb0Y6OuBE+8/g28nBWB8uzLMH+Kt3K7sy6N/ITIhXb8FEhERUa1oHHgBoG3btvD19cWNGzeQm5uLUaNGwd3dXdu1EdU7M6kEQV5O8HcRMK57S8x9zkf52rs7L+Kvuw/1WB0RERHVhsaB9+TJk/Dz88O1a9fwxx9/YN26dZg2bRpGjRqF+/fv66JGIr15tYcnnvMrP1b4YVEppnwbh4JinihIRERkTDQOvM888wxGjRqF06dPo2PHjnj99ddx4cIFpKamonPnzrqokUhvJBIJlr7oh7audgCApIw8fPhLAgSBp64REREZC40D78GDB7FkyRJYWFgor7Vp0wYnT57Ef//7X60WR2QIbK3MsX6sP2wtzQAAv1y4jW/PpOq5KiIiIhJL48Dbp08f9TeSSjFv3rw6F0RkiNq62mHZf7oov1+49xLO3chGTPI97I6/jZjkeyiTc9WXiIjIEIkOvIMHD0ZOzuOtmZYsWYIHDx4ov7937x58fHzUvJPINAzx88BrPb0AACVlAl76MgajN57G9O3xGL3xNHouPYTIhDQ9V0lERET/JjrwHjhwAEVFRcrvP/nkE2RnZyu/Ly0tRVJSknarIzIwswd5o00TWwDAvxd003MKMeXbOIZeIiIiAyM68P77IR0+tEMNkVQiQV6h+l0aFH8jIvZertTeUCYX2P5ARESkJ+b6LoDImMSmZCMzr6jK1wUAaTmF+OXC33ixW3NIJBJEJqQhYu9lpOUUKsd5OMoQPtQHA3096qFqIiKihk104JVIJJBIJJWuETUkmXmFNQ8C8O7OP/DpgSR4OtviTEp2pdcV7Q/rxnZj6CUiItIx0YFXEAS8+uqrsLKyAgAUFhbizTffhK1teT9jxf5eIlPlai8TPTYjtwgZuer/XggAJChvf+jv4w4z6eP/eCyTC/+sJBfC1V6GQC8nldeJiIhIM6ID74QJE1S+Hzt2bKUx48ePr3tFRAYs0MsJHo4ypOcUoqouXAeZObq2aITTf2WjuExe5b0U7Q8bjiZjXA9P2FmZs/2BiIhIB0QH3q+++kqXdRAZBTOpBOFDfTDl2zhIAJXQq1iDXfYfPwz09cBP52/hnZ1/1HjPpQeSsDzqKlo6WSMlq6DS62x/ICIiqhuND54gaugG+npg3dhucHdUbW9wd5SphNKmjWxE37NMLqgNu0D1uz8QERFRzbhLA1EtDPT1QH8f92p7bWtqf5AAaGRjgcGdPXA4KRN3HlT9QJyi/SE2JRvBbZy1/vMQERGZMq7wEtWSmVSC4DbOGN61GYLbOFd6sEzR/gA8bndQUHy/+IXO+Pj5znh/oLeoz/z7vvpVYCIiIqoaAy+RDoltfxC7+8PH+65gx9lUZWsDD7QgIiKqGVsaiHRMG+0PCg8eleD9n/7EVydvoL+PG348/zd3dCAiIqoBV3iJ6oE22h+6NHdUXktMz8MXh66rhF3g8Y4OkQlp2v4RiIiIjBYDL5GBqK79Yf3Ybtgd2hM//DcYfs0cqrwHd3QgIiKqjC0NRAakpvaHQC8nzB7UEa9sOlPlPbijAxERkSoGXiIDo2h/qMrdh+KO8b79oAAAAy8REREDL5GREbujw5L9iTCTSjC8SzNIpRKUyYVqH5wjIiIyVQy8REZG7I4OWfnFmLnjIjYeS8GzHV25owMRETVYfGiNyMiI2dHBx+Pxg22X03K5owMRETVoDLxERqimHR32T++F714PQqem9lXegzs6EBFRQ8GWBiIjVdOODk+1dcGHg324owMRETV4DLxERkxbOzpk5hXWPIiIiMhIsaWByISJ3dHhQEI68otKld+XyQXEJN/D7vjbiEm+x5YHIiIyagYReNeuXQtPT0/IZDIEBQUhNja22vE7d+6Et7c3ZDIZOnfujP379ytfKykpwfvvv4/OnTvD1tYWTZs2xfjx43Hnzh1d/xhEBkexo0NNm4/tT0hH/5VHcfBSOiIT0tBz6SGM3nga07fHY/TG0+i59BAfbiMiIqOl98C7Y8cOhIWFITw8HHFxcejSpQtCQkKQmZmpdvypU6cwevRovPbaa7hw4QJGjBiBESNGICEhAQBQUFCAuLg4zJs3D3Fxcfj555+RlJSEYcOG1eePRWQQxOzoYP5Pz++dnEK88c15vPltnEY7OmiyGqyrsURERNXRew/vypUrMXnyZEycOBEAsH79euzbtw+bN2/G7NmzK41fvXo1Bg4ciFmzZgEAFi1ahKioKKxZswbr16+Ho6MjoqKiVN6zZs0aBAYGIjU1FS1btqx0z6KiIhQVPe51zM3NBVC+WlxSUlKrn0vxvtq+n/TH1Obu2Q4u+OLlLvhofyLScx//OXd3tMKHg7zh7WGPBXuv4MT1e1XeQ0B5QI7Yewl92zkrH4w7cCmj8n0drDB3sDdCOrmp3ENXYxVMbd4aEs6dceK8GS9TmTtN6pcIgqC3ZZPi4mLY2Njgxx9/xIgRI5TXJ0yYgAcPHmD37t2V3tOyZUuEhYVhxowZymvh4eHYtWsXLl68qPZzfv/9dwwYMAAPHjyAg4NDpdcXLFiAiIiISte3bdsGGxsbzX8wIgMkF4DkXAlySwAHC6CNgwDFQWuCAPx2S4IDt81qvM/YNmV4wkXApfsSbL6q+EeiiuvH5f+TMqm9HF2cy7++eE83Y8X8bEREZJoKCgrwyiuvICcnR22+q0ivK7xZWVkoKyuDm5vqio2bmxsSExPVvic9PV3t+PT0dLXjCwsL8f7772P06NFV/mbMmTMHYWFhyu9zc3PRokULDBgwoMbfwKqUlJQgKioK/fv3h4WFRa3uQfrRUOdO/kcaDuz8s8Zx3yab4btkQFJloCx/4edbMvj6eUMqAX6OTwSg7r/Ey8fuuWON5/v7w9Jcio/+dxZAsdqxEgC/ZdjgvTG9VVaZF2uwGlwmF3Du5n1k5hXB1d4KAa0a84hlPWuof+eMHefNeJnK3Cn+RV4Mvbc06FJJSQleeuklCIKAdevWVTnOysoKVlZWla5bWFjU+Q+CNu5B+tHQ5s6jka3osQLKV4Wr8+BRCcJ+rDlAA0DWw2IMXRsj6nPTcoqw6eRN9PdxR2J6LmZsv1jpiOWM3CJM234R68Z2Uzk6OTIhDRF7L/OIZQPV0P7OmQrOm/Ey9rnTpHa9PrTm4uICMzMzZGRkqFzPyMiAu7u72ve4u7uLGq8Iuzdv3kRUVFStV2qJGgoxOzrYWZlhSGd3tGhsXW91qbP84FWErDqG6dvjK4Vd4J9ADmDe7kvIzi+GIAiITEjDFA0fyCMiItOg18BraWkJf39/REdHK6/J5XJER0cjODhY7XuCg4NVxgNAVFSUynhF2L127Rp+//13ODvzBCmimtS0o4MEwPKRXbB2jD+W/aeLqHuO7d4SY7tXflBUnd7tXdBDy6e93c0rQrdFUWj/4W9467u4KsMxoP6IZe4qQURkGvTe0hAWFoYJEyYgICAAgYGBWLVqFfLz85W7NowfPx7NmjXD4sWLAQDTp09Hnz59sGLFCgwZMgTbt2/HuXPnsGHDBgDlYfc///kP4uLi8Ouvv6KsrEzZ3+vk5ARLS0v9/KBERmCgrwfWje1W6Z/93f/1z/6K1eD0nEK1IVLyz3sihvkCAKKvZNY49qtXAwEAPZceqnIsADSytsC44FY4nXwPZ2/eF/VzldQQPhVHLG84loxxwZ6wszLXqP2BrRJERIZN74F31KhRuHv3LubPn4/09HR07doVkZGRygfTUlNTIZU+Xoju0aMHtm3bhrlz5+KDDz5Au3btsGvXLvj6lv8/1tu3b2PPnj0AgK5du6p81uHDh9G3b996+bmIjNVAXw/093FHbEo2MvMK4WovQ6CXk8qDXYrV4CnfxkECqIRTxajwoT7K92hz7JIXO2Ogrwdiku9h9MbTNf48nZs54N7DYtzJqfn45KWRSVh+8CqaN7bGzXsFlV5XtD9U7A1WtEr8O1KrG0tERPqh98ALAKGhoQgNDVX72pEjRypdGzlyJEaOHKl2vKenJ/S40xqRSTCTShBcQ3uB2NVgXY0Vu8q8a2pPxKZkiwrHQHlrgrqwCzwO4O/8cBGX03JhL7PAmkPXq2yVKN+7+DL6+7hzJwgiIj0yiMBLRMZJzGqwrsZqsspcUzgGgMY2Fhjc2QNHkjJx+0H1q8H5xWX4PPp69b85eNwqEZuSrfIfEGVyQdTvAxERaQcDLxHViZjVYF2NFbsaLCYcL36hvFVid/xtTN8eL6pGsdYduQ6JBHjS0wlRl9PZ70tEVM8YeInIqClWg2OuZ+Lg8TMY0CsIwW1dK62Yig3HrvYyUZ/7Xkh7FBSXYc3h5BrHHruWhWPXsmBnZY6HRaWVXq+u31fT1WCuHhMRVcbAS0RGz0wqQZCXE+5dERBUTcAT0yohtjf4v33aAgB+irtdbatERerCLlB1v6+muz9wtwgiIvX0ug8vEVF9U7RKDO/aDMFtnCuF45r2IwYe9waL2bt45UtdsPrlrgj0bFxtXYp+31c2xmDt4ev49EAi3tTgoIzaHKzBvYOJqKHgCi8R0b/oageK2Bs17xt8JuU+zqRUPU4RSef8/CfsrMzhYG0BawszzN99SaPdIjRdDWarBBEZMwZeIiI1tL2rhNjeYLHuF5Rg7P9iRY1VrB5/eiAJPdo442pGHj7ad6XSuKp6idkqQUTGjoGXiKgK2txVQmxv8FevPoltsan4OuZm7YquxvqjyVh/tOqH7BR1zdt1CT3bNoGdzLxWB2twNZiIDA0DLxFRPRC7b7C3hwMG+XqICrxDuzRFI2sL3MjKx/HrWVqr9e7DIvguOAB3Bytk55fotFWCiKg+8KE1IqJ6ouj3dXdUbW9wd5SprJQqVoOrWhOVoDxErhrVFYtG+GLLpMBqxwPlB2uED/VBfx9X0fWm5xahuExe5euKVokvj17H3/cL8Nufmj84R0RUH7jCS0RUj7R9ipzY8YqDNbzdHRB1ObPGOtu62iLtQSHyi8tqHLvswFUsO3C10mcrVHfMcplcwJmUbJzPksA5JVvtHspERHXFFV4ionpW09ZogPjVYE3Hi109PjCjDzZNeFKjn6u6Tc0qHrOsEJmQhp5LD2Hs5nP4+poZxm4+h55LD3ElmIi0jiu8REQGSpOdIsSO12T1uKYH7QCgkbUFRgW2wMlrWUi4k1vjzzR9+wUM8fOAjaUZ/u9wskYPwxER1RYDLxGRAdNkpwix48XuHSwmHC95sbxVIqb9PYzeeLrG+jLzivDVyRtVvl5T+wN3fyCi2mDgJSJqgMSuHosNx2JWgy3MJCgtE2o8hrli+4MivPOgDCKqCwZeIqIGSuzqsbZaJb4Y/QSC27hg9e9XsbmaVV6FlQeTMLGnF4pK5QjbES+6/YFboxHRv/GhNSIiqpG2HrRztLZAfx93UZ959uZ9vPVdHGaqCbvA41AdsfcyyuTl3ykOyuDWaERUEVd4iYhIa8SsBotpf6hqi7N/U7Q/PLviCBrZWODyndxabY3G9gci08bAS0REWlVTq4SY9ofPR3eFo7UlNhz7CydEnCJ3414BcK/6MYpwfOhKBvp3Kl9lZm8wUcPAwEtERPVO7MNwFmZSUYHXTApUcyicije+OY9urRqjWSMZ9lys3OLA3mAi08PAS0REeqFof4i5nomDx89gQK+gSiet1dT+IEF5SD7x/jM489c9vLLpTI2fKwA4f/M+zt+s+vV/tz8oeoO5bzCRceJDa0REpDdmUgmCvJzg7yIgSE17gKL9AUCl0+H+fVBGUGvnak+RAwBbKzO0aWJbY12K9of+K4/ija/PIuyHi6IfnFMokwuISb6H3fG3EZN8r9LrRFR/uMJLREQGTZsHZawY2QUDfT3w1YkURPx6ucbP/isrH39l5Vc7Rhv7BhORbjHwEhGRwdP2QRneHg6iPlfsbhEAsOr3q8jO90RhaRneVbMizPYHIv1h4CUiIqOgzYMyxPYGH363Lw5eTsfb38fX+LlnUrJxJiW7yter2xqNiHSLPbxERGRyajooQ2xvsMzCDEM6N62xN1isiu0PRFR/GHiJiKhBEnMyHFBzOJYA+Pzlrtg6KRB92ruI+uzMvMKaBxGR1rClgYiIGixt9wZbmklx9GrN+wZHXc5A99bOcHMoD9s80IJItxh4iYioQavP3mCFX/9Iw8FLGXjRvxk6ujtg3dFknvZGpEMMvERERCLV5dhkBXOpBKVyAcVlcnwfe0vtfXjaG5F2sYeXiIhIi6rqDfZwlGH92G44NecZvNmnDWwtzaq8h/DPrwV7LikPrFCc9lYx7AKPw3FkQuVjknn4BVE5rvASERFpWU3tD7MHeSPAszFe33qu2vuk5xYh6OPf4dvMAWdv3K/ytDd1251xNZjoMa7wEhER6UBNW6PlF5WKuk9WfjGOXM1CfnFZlWMU252d/usegNqtBhOZMq7wEhER6YGrvazmQQCsLaR4VCIXNfbVr2LRwc0eyXfzNVoNBvgwHJk2Bl4iIiI9EHva2/H3nsaBS+mYuu1CjfcsKROQcCe32jEVD79QPIDH9gcydWxpICIi0gOxp72Zm0kx0NejxtPeZOZSeDrbiP78BXsuYfXv17Aq6irbH8jkMfASERHpiTZPe1v1clccmfU0tk58UtRnJ2Xk4bPfr2JV9LUq2x+A8vaHf+/uUCYXcCYlG+ezJDiTks3dH8jgsaWBiIhIj7R92lvPdk1qPPxCKgHEZFRF+8PRpEw809ENwL/bH8zw9bVzbH8gg8fAS0REpGfaPO2tusMvFKPWvtINvs0c8eWxZHx7OrXGz33t63Pwa94IbvZWOHg5o9LrVR2UAfBhODIMDLxERERGREw4FrsaPKRzU1GBVxCAi7ceVP06tLMXMMMx6QoDLxERkQkSsxpc004RAGBjaYamjjJcv5tf7ecp2h9WRiVhVEBLXLqTg7e+i6t0Xx6bTPrAh9aIiIhMVE2HX4h5GG7lS13w+zt98dEIX1GfufZwMnp/ehhTt1UOu4D6h+F4bDLpGld4iYiIGjCx7Q9tmthpdN/q8qdiNXjatjh0auaIDcf+0umxyWyVIAZeIiKiBk4b7Q8SAI1tLTGueytEXkpHUnpejZ+7PyEd+xPSqx2jCMdzf/kT3ds441Z2AZYfvFppnLZaJRiOTRMDLxEREdX4MJyY3R8+ed4XA3090L21M0ZvPK3V+r4/ewvfn71V5euKemb//Cca21iiWWNrXEh9gLe/v8A+YmIPLxEREYkj9qAMxWpwVeuiEgBN7K2w/Y3umNmvnVZrfFBQglEbTqPn0sOYpibsAuXhWACwYE/d+ojJeHCFl4iIiERTtD/EXM/EweNnMKBXEILbumq8F/Ci4Z3QvbUznvR0wvazt6rdKcLZzhLhz/ngUGImdsXf0drPkp5biCcWRqFNExtcSc/TqI9YgS0QxoGBl4iIiDRiJpUgyMsJ964ICKoi4Il9GE5MOP54RHmrRBN7majAG9LJDWk5hfjj75wax+YWluDCrerHKfqIY1OyVdo+2AJhPBh4iYiISCe0fWyymAfn3B1l+L8x/ohNyRbVR9zI2gIPHpWI+nne++kihvo1Rc92Lrj3sAhvfx8vuj+Y9IuBl4iIiHSmvo9NDh/qAzOpRHQ4PvH+Mzhx7S4mfHW2xhpvZT/C/x1Jxv8dSa5yTHUtEGx/0B8GXiIiIjII2jw2WZNw3LNdkxpPnDOXSlAq8nALdS0Q3B5Nvxh4iYiIyKhou1VCTDhe88oT6NaqMU5ez8K2M6k4e+N+jXVuP5sKFztLXM98qNNjlhmOa8bAS0REREZHm60SinFiwvHzTzSHu4O1qP7g3fF3sDv+DqQSiN4BQrE9mi7D8ZmUbJzPksA5JbvSDhumioGXiIiITJq2w3FN/cH/JuaY5YGrjqKxjSXi/86pMhwDQPieS+jX0Q3mZtI6hmMzfH3tXIPZVYKBl4iIiOgfYsKxqP7gYT4okwM/nLsl6pjla5n5APJrHJeRWwTveZFo1kiGtJyiasPxgj2Xax2OAdNqlWDgJSIiItKQ2BYIHw8HrR+zXCoXcDP7UY3j0nML0X7ub3C0tkBuYalGB2uYWh+xQRwtvHbtWnh6ekImkyEoKAixsbHVjt+5cye8vb0hk8nQuXNn7N+/X+V1QRAwf/58eHh4wNraGv369cO1a9d0+SMQERFRAzPQ1wMn3n8G30/ujtUvd8X3k7vjxPvPqARCMccsezjKcO2jQdg66UlRn9uisTVk5uIinFwA7heUKI9QVkfRVrHuyHXczy/W+JjlyIQ09Fx6CKM3nsb07fEYvfE0ei49ZFDHMes98O7YsQNhYWEIDw9HXFwcunTpgpCQEGRmZqodf+rUKYwePRqvvfYaLly4gBEjRmDEiBFISEhQjlm2bBk+//xzrF+/HmfOnIGtrS1CQkJQWFio9p5EREREtaFogRjetRmC2zhXWtVUtD8AqBR6K26PZmEuRc+2TUSF4yOznsZXEwNF1efpbAMnWwtRY5cfvIonFkUhdNuFalslIvZeVgZoTcOxvug98K5cuRKTJ0/GxIkT4ePjg/Xr18PGxgabN29WO3716tUYOHAgZs2ahY4dO2LRokXo1q0b1qxZA6B8dXfVqlWYO3cuhg8fDj8/P3z99de4c+cOdu3aVY8/GREREdHj9gd3R5nKdXdHmUrvrNhwXPFgjZrCcfQ7fbH2FX+N6q1uv2HFavCb35zH8gOJeO/HP0SHY33Saw9vcXExzp8/jzlz5iivSaVS9OvXDzExMWrfExMTg7CwMJVrISEhyjCbkpKC9PR09OvXT/m6o6MjgoKCEBMTg5dffrnSPYuKilBUVKT8Pjc3FwBQUlKCkhJxxw3+m+J9tX0/6Q/nzjhx3owX5844cd4082wHF/Rt1wvnbt5HZl4RXO2tENCqMcykEpXfw2c7uOCLl7vgo/2JSM99nE3cHa3w4SBvPNvBRTn+w0EdMG37xSofnPtwUAfIy0rxRHN7uDtYISNX/UNuANDYxgLDu3ggOvEubt2vuT846koGoq5kVDtGEY5jrmciyMupxntqSpM/e3oNvFlZWSgrK4Obm5vKdTc3NyQmJqp9T3p6utrx6enpytcV16oa82+LFy9GREREpesHDx6EjY2NuB+mClFRUXV6P+kP5844cd6MF+fOOHHeNGcG4B6AA1eqHvO+D5CcK0FuCeBgAbRxyEfZzfPYf1N13MT2Evx8Q4oHxY/Xeh0tBbzgKVcZP9hdgs25in/Yr7guXB6Bn29eiC74C3YeEqy5b1bXH1HFweNncO+K9ld5CwoKRI/lLg0A5syZo7JqnJubixYtWmDAgAFwcHCo1T1LSkoQFRWF/v37w8JCXO8MGQbOnXHivBkvzp1x4rwZhsEA3pMLaleO/z2u26WMSivHHo4yfDjIGyGdyhcKy+QCflxxrMrVYAkAF3tLrH25K87evI9PD9a8KcCAXkE6WeFV/Iu8GHoNvC4uLjAzM0NGhuqSeEZGBtzd3dW+x93dvdrxiv+bkZEBDw8PlTFdu3ZVe08rKytYWVlVum5hYVHnv8TauAfpB+fOOHHejBfnzjhx3vTPAkDP9m41jnuua3MM8muGmOuZOHj8DAb0Cqp00poFgAXDOlW7x/Ci4b4IbNME/l4u+PbMrSoP4JCgvE9ZV6e5afLnTq8PrVlaWsLf3x/R0dHKa3K5HNHR0QgODlb7nuDgYJXxQPk/pyjGe3l5wd3dXWVMbm4uzpw5U+U9iYiIiBoCM6kEQV5O8HcREFTFXrm6eMhO3/Te0hAWFoYJEyYgICAAgYGBWLVqFfLz8zFx4kQAwPjx49GsWTMsXrwYADB9+nT06dMHK1aswJAhQ7B9+3acO3cOGzZsAABIJBLMmDEDH330Edq1awcvLy/MmzcPTZs2xYgRI/T1YxIREREZDbHHLIs9gEPf9B54R40ahbt372L+/PlIT09H165dERkZqXzoLDU1FVLp44XoHj16YNu2bZg7dy4++OADtGvXDrt27YKvr69yzHvvvYf8/Hy88cYbePDgAXr27InIyEjIZLJKn09ERERElYk5ZhkQH471Se+BFwBCQ0MRGhqq9rUjR45UujZy5EiMHDmyyvtJJBIsXLgQCxcu1FaJRERERFQFseFYX/R+8AQRERERkS4x8BIRERGRSWPgJSIiIiKTxsBLRERERCaNgZeIiIiITBoDLxERERGZNAZeIiIiIjJpDLxEREREZNIYeImIiIjIpDHwEhEREZFJM4ijhQ2NIAgAgNzc3Frfo6SkBAUFBcjNzYWFhYW2SqN6wLkzTpw348W5M06cN+NlKnOnyGmK3FYdBl418vLyAAAtWrTQcyVEREREVJ28vDw4OjpWO0YiiInFDYxcLsedO3dgb28PiURSq3vk5uaiRYsWuHXrFhwcHLRcIekS5844cd6MF+fOOHHejJepzJ0gCMjLy0PTpk0hlVbfpcsVXjWkUimaN2+ulXs5ODgY9R+mhoxzZ5w4b8aLc2ecOG/GyxTmrqaVXQU+tEZEREREJo2Bl4iIiIhMGgOvjlhZWSE8PBxWVlb6LoU0xLkzTpw348W5M06cN+PVEOeOD60RERERkUnjCi8RERERmTQGXiIiIiIyaQy8RERERGTSGHiJiIiIyKQx8OrI2rVr4enpCZlMhqCgIMTGxuq7JKrg2LFjGDp0KJo2bQqJRIJdu3apvC4IAubPnw8PDw9YW1ujX79+uHbtmn6KJaXFixfjySefhL29PVxdXTFixAgkJSWpjCksLMTUqVPh7OwMOzs7vPjii8jIyNBTxaSwbt06+Pn5KTe6Dw4Oxm+//aZ8nfNmHJYsWQKJRIIZM2Yor3HuDNOCBQsgkUhUfnl7eytfb2jzxsCrAzt27EBYWBjCw8MRFxeHLl26ICQkBJmZmfoujf6Rn5+PLl26YO3atWpfX7ZsGT7//HOsX78eZ86cga2tLUJCQlBYWFjPlVJFR48exdSpU3H69GlERUWhpKQEAwYMQH5+vnLMzJkzsXfvXuzcuRNHjx7FnTt38MILL+ixagKA5s2bY8mSJTh//jzOnTuHZ555BsOHD8elS5cAcN6MwdmzZ/Hll1/Cz89P5TrnznB16tQJaWlpyl8nTpxQvtbg5k0grQsMDBSmTp2q/L6srExo2rSpsHjxYj1WRVUBIPzyyy/K7+VyueDu7i58+umnymsPHjwQrKyshO+//14PFVJVMjMzBQDC0aNHBUEonycLCwth586dyjFXrlwRAAgxMTH6KpOq0LhxY2HTpk2cNyOQl5cntGvXToiKihL69OkjTJ8+XRAE/p0zZOHh4UKXLl3UvtYQ540rvFpWXFyM8+fPo1+/fsprUqkU/fr1Q0xMjB4rI7FSUlKQnp6uMoeOjo4ICgriHBqYnJwcAICTkxMA4Pz58ygpKVGZO29vb7Rs2ZJzZ0DKysqwfft25OfnIzg4mPNmBKZOnYohQ4aozBHAv3OG7tq1a2jatClat26NMWPGIDU1FUDDnDdzfRdgarKyslBWVgY3NzeV625ubkhMTNRTVaSJ9PR0AFA7h4rXSP/kcjlmzJiBp556Cr6+vgDK587S0hKNGjVSGcu5Mwx//vkngoODUVhYCDs7O/zyyy/w8fFBfHw8582Abd++HXFxcTh79myl1/h3znAFBQVhy5Yt6NChA9LS0hAREYFevXohISGhQc4bAy8RGaWpU6ciISFBpSeNDFuHDh0QHx+PnJwc/Pjjj5gwYQKOHj2q77KoGrdu3cL06dMRFRUFmUym73JIA4MGDVJ+7efnh6CgILRq1Qo//PADrK2t9ViZfrClQctcXFxgZmZW6UnHjIwMuLu766kq0oRinjiHhis0NBS//vorDh8+jObNmyuvu7u7o7i4GA8ePFAZz7kzDJaWlmjbti38/f2xePFidOnSBatXr+a8GbDz588jMzMT3bp1g7m5OczNzXH06FF8/vnnMDc3h5ubG+fOSDRq1Ajt27fH9evXG+TfOQZeLbO0tIS/vz+io6OV1+RyOaKjoxEcHKzHykgsLy8vuLu7q8xhbm4uzpw5wznUM0EQEBoail9++QWHDh2Cl5eXyuv+/v6wsLBQmbukpCSkpqZy7gyQXC5HUVER582APfvss/jzzz8RHx+v/BUQEIAxY8Yov+bcGYeHDx8iOTkZHh4eDfLvHFsadCAsLAwTJkxAQEAAAgMDsWrVKuTn52PixIn6Lo3+8fDhQ1y/fl35fUpKCuLj4+Hk5ISWLVtixowZ+Oijj9CuXTt4eXlh3rx5aNq0KUaMGKG/oglTp07Ftm3bsHv3btjb2yt7zRwdHWFtbQ1HR0e89tprCAsLg5OTExwcHDBt2jQEBweje/fueq6+YZszZw4GDRqEli1bIi8vD9u2bcORI0dw4MABzpsBs7e3V/bIK9ja2sLZ2Vl5nXNnmN59910MHToUrVq1wp07dxAeHg4zMzOMHj26Yf6d0/c2Eabqiy++EFq2bClYWloKgYGBwunTp/VdElVw+PBhAUClXxMmTBAEoXxrsnnz5glubm6ClZWV8OyzzwpJSUn6LZrUzhkA4auvvlKOefTokfDWW28JjRs3FmxsbITnn39eSEtL01/RJAiCIEyaNElo1aqVYGlpKTRp0kR49tlnhYMHDypf57wZj4rbkgkC585QjRo1SvDw8BAsLS2FZs2aCaNGjRKuX7+ufL2hzZtEEARBT1mbiIiIiEjn2MNLRERERCaNgZeIiIiITBoDLxERERGZNAZeIiIiIjJpDLxEREREZNIYeImIiIjIpDHwEhEREZFJY+AlIiIiIpPGwEtEBMDT0xOrVq3S2v1effVVrR9FfeTIEUgkEjx48ECr9yUiMnUMvERkUl599VVIJBJIJBJYWlqibdu2WLhwIUpLS6t939mzZ/HGG29orY7Vq1djy5YtWrufJi5cuICRI0fCzc0NMpkM7dq1w+TJk3H16lW91GOotP0fOURkuBh4icjkDBw4EGlpabh27RreeecdLFiwAJ9++qnascXFxQCAJk2awMbGRms1ODo6olGjRlq7n1i//vorunfvjqKiInz33Xe4cuUKvv32Wzg6OmLevHn1Xg8RkSFg4CUik2NlZQV3d3e0atUKU6ZMQb9+/bBnzx4Aj1sNPv74YzRt2hQdOnQAUHm1TyKRYNOmTXj++edhY2ODdu3aKe+hcOnSJTz33HNwcHCAvb09evXqheTkZJXPUejbty9CQ0MRGhoKR0dHuLi4YN68eRAEQTnmm2++QUBAAOzt7eHu7o5XXnkFmZmZon/ugoICTJw4EYMHD8aePXvQr18/eHl5ISgoCMuXL8eXX36pHHv06FEEBgbCysoKHh4emD17tsoqeN++fTFt2jTMmDEDjRs3hpubGzZu3Ij8/HxMnDgR9vb2aNu2LX777TflexQtF/v27YOfnx9kMhm6d++OhIQElTp/+ukndOrUCVZWVvD09MSKFStUXvf09MQnn3yCSZMmwd7eHi1btsSGDRtUxty6dQsvvfQSGjVqBCcnJwwfPhw3btxQvq74/V++fDk8PDzg7OyMqVOnoqSkRPnz3bx5EzNnzlT+iwARmS4GXiIyedbW1sqVXACIjo5GUlISoqKi8Ouvv1b5voiICLz00kv4448/MHjwYIwZMwbZ2dkAgNu3b6N3796wsrLCoUOHcP78eUyaNKna1omtW7fC3NwcsbGxWL16NVauXIlNmzYpXy8pKcGiRYtw8eJF7Nq1Czdu3MCrr74q+uc8cOAAsrKy8N5776l9XbHifPv2bQwePBhPPvkkLl68iHXr1uF///sfPvroo0r1uri4IDY2FtOmTcOUKVMwcuRI9OjRA3FxcRgwYADGjRuHgoIClffNmjULK1aswNmzZ9GkSRMMHTpUGTTPnz+Pl156CS+//DL+/PNPLFiwAPPmzavU/rFixQoEBATgwoULeOuttzBlyhQkJSUpf59CQkJgb2+P48eP4+TJk7Czs8PAgQNV5vnw4cNITk7G4cOHsXXrVmzZskX5OT///DOaN2+OhQsXIi0tDWlpaaJ/n4nICAlERCZkwoQJwvDhwwVBEAS5XC5ERUUJVlZWwrvvvqt83c3NTSgqKlJ5X6tWrYTPPvtM+T0AYe7cucrvHz58KAAQfvvtN0EQBGHOnDmCl5eXUFxcXGMdgiAIffr0ETp27CjI5XLltffff1/o2LFjlT/L2bNnBQBCXl6eIAiCcPjwYQGAcP/+fbXjly5dKgAQsrOzq7ynIAjCBx98IHTo0EGllrVr1wp2dnZCWVmZst6ePXsqXy8tLRVsbW2FcePGKa+lpaUJAISYmBiV+rZv364cc+/ePcHa2lrYsWOHIAiC8Morrwj9+/dXqWfWrFmCj4+P8vtWrVoJY8eOVX4vl8sFV1dXYd26dYIgCMI333xTqf6ioiLB2tpaOHDggCAI5b//rVq1EkpLS5VjRo4cKYwaNUrlcyrOORGZLq7wEpHJ+fXXX2FnZweZTIZBgwZh1KhRWLBggfL1zp07w9LSssb7+Pn5Kb+2tbWFg4ODssUgPj4evXr1goWFhei6unfvrvJP58HBwbh27RrKysoAlK9+Dh06FC1btoS9vT369OkDAEhNTRV1f6FCe0R1rly5guDgYJVannrqKTx8+BB///238lrFn9/MzAzOzs7o3Lmz8pqbmxsAVGq7CA4OVn7t5OSEDh064MqVK8rPfuqpp1TGP/XUUyq/D//+bIlEAnd3d+XnXLx4EdevX4e9vT3s7OxgZ2cHJycnFBYWKltKAKBTp04wMzNTfu/h4aFRiwgRmQ5zfRdARKRtTz/9NNatWwdLS0s0bdoU5uaq/1Nna2sr6j7/DrMSiQRyuRxAeZuENuXn5yMkJAQhISH47rvv0KRJE6SmpiIkJETln+mr0759ewBAYmKiSuisLXU/f8VrisCs+D3Rpup+7x8+fAh/f3989913ld7XpEkTUfcgooaFK7xEZHJsbW3Rtm1btGzZslLY1RY/Pz8cP35c2ZsqxpkzZ1S+P336NNq1awczMzMkJibi3r17WLJkCXr16gVvb2+NVyMHDBgAFxcXLFu2TO3riv17O3bsiJiYGJUV4ZMnT8Le3h7NmzfX6DPVOX36tPLr+/fv4+rVq+jYsaPys0+ePKky/uTJk2jfvr3Kamx1unXrhmvXrsHV1RVt27ZV+eXo6Ci6TktLS5VVZSIyXQy8RES1EBoaitzcXLz88ss4d+4crl27hm+++Ub5YJU6qampCAsLQ1JSEr7//nt88cUXmD59OgCgZcuWsLS0xBdffIG//voLe/bswaJFizSqydbWFps2bcK+ffswbNgw/P7777hx4wbOnTuH9957D2+++SYA4K233sKtW7cwbdo0JCYmYvfu3QgPD0dYWBik0rr/v4WFCxciOjoaCQkJePXVV+Hi4qLcseKdd95BdHQ0Fi1ahKtXr2Lr1q1Ys2YN3n33XdH3HzNmDFxcXDB8+HAcP34cKSkpOHLkCN5++22VloyaeHp64tixY7h9+zaysrI0/TGJyIgw8BIR1YKzszMOHTqEhw8fok+fPvD398fGjRur7ekdP348Hj16hMDAQEydOhXTp09XHnbRpEkTbNmyBTt37oSPjw+WLFmC5cuXa1zX8OHDcerUKVhYWOCVV16Bt7c3Ro8ejZycHOUuDM2aNcP+/fsRGxuLLl264M0338Rrr72GuXPn1u4341+WLFmC6dOnw9/fH+np6di7d6+yZ7pbt2744YcfsH37dvj6+mL+/PlYuHChRrtR2NjY4NixY2jZsiVeeOEFdOzYEa+99hoKCwvh4OAg+j4LFy7EjRs30KZNG5VWCCIyPRJB7FMORERUa3379kXXrl1N+mSvI0eO4Omnn8b9+/f1cugGEVFVuMJLRERERCaNgZeIiIiITBpbGoiIiIjIpHGFl4iIiIhMGgMvEREREZk0Bl4iIiIiMmkMvERERERk0hh4iYiIiMikMfASERERkUlj4CUiIiIik8bAS0REREQm7f8Bwg53zx0EpRsAAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "\n",
+ "original_cols = clean_data.columns.tolist()\n",
+ "\n",
+ "\n",
+ "scaler = StandardScaler()\n",
+ "scaled_data = scaler.fit_transform(clean_data)\n",
+ "\n",
+ "pca = PCA(n_components=11)\n",
+ "pca_results = pca.fit_transform(scaled_data)\n",
+ "\n",
+ "\n",
+ "loadings = pd.DataFrame(\n",
+ " pca.components_.T,\n",
+ " index=original_cols,\n",
+ " columns=[f'PC{i+1}' for i in range(pca.n_components_)]\n",
+ ")\n",
+ "\n",
+ "pca_df = pd.DataFrame(\n",
+ " pca_results,\n",
+ " columns=[f'PC{i+1}' for i in range(pca.n_components_)]\n",
+ ")\n",
+ "\n",
+ "pca_df"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 423
+ },
+ "id": "TbJfFcNOxAuE",
+ "outputId": "52ec37c1-672c-4caf-cc78-ec82d4fb5d29"
+ },
+ "execution_count": 27,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " PC1 PC2 PC3 PC4 PC5 PC6 PC7 \\\n",
+ "0 -3.723992 2.175499 -5.383260 1.065929 0.036783 -4.908704 4.595037 \n",
+ "1 -1.128337 -0.236868 0.225100 0.140209 -0.022191 0.583782 0.770186 \n",
+ "2 -2.389770 1.702824 -0.532143 1.760444 -0.035687 2.017621 -1.348992 \n",
+ "3 -2.418202 1.658665 -0.520389 1.796203 -0.036110 2.025573 -1.330234 \n",
+ "4 -1.969372 -0.184898 0.593758 -0.613873 0.037860 -4.085190 0.063095 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "2101045 -0.974288 -0.380524 0.794261 0.404978 -0.025433 -0.058525 1.139989 \n",
+ "2101046 -1.021527 -0.412733 0.719908 0.390706 -0.028549 -0.056192 1.185932 \n",
+ "2101047 -0.937448 -0.323654 0.987150 0.506737 -0.020650 -0.033201 1.101129 \n",
+ "2101048 -1.033260 -0.521294 0.602451 0.306990 -0.029109 -0.066948 1.242623 \n",
+ "2101049 -0.935129 -0.341127 0.969916 0.478948 -0.020031 -0.028237 1.132847 \n",
+ "\n",
+ " PC8 PC9 PC10 PC11 \n",
+ "0 -4.437244 8.249801 4.604563 25.136816 \n",
+ "1 -1.312394 -1.203949 0.629475 -0.212604 \n",
+ "2 1.683002 0.251769 -1.169499 -0.436427 \n",
+ "3 1.665306 0.387826 -0.726483 -0.629101 \n",
+ "4 0.356921 1.489301 -1.986591 -1.983543 \n",
+ "... ... ... ... ... \n",
+ "2101045 -1.691462 0.753095 -0.578761 -1.179430 \n",
+ "2101046 -1.785440 0.504943 -0.936178 -1.023495 \n",
+ "2101047 -1.583732 1.316418 0.626102 -1.733167 \n",
+ "2101048 -1.906180 0.070453 -1.656210 -0.612906 \n",
+ "2101049 -1.651293 1.088288 0.280861 -1.541376 \n",
+ "\n",
+ "[2101050 rows x 11 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " | \n",
+ " PC1 | \n",
+ " PC2 | \n",
+ " PC3 | \n",
+ " PC4 | \n",
+ " PC5 | \n",
+ " PC6 | \n",
+ " PC7 | \n",
+ " PC8 | \n",
+ " PC9 | \n",
+ " PC10 | \n",
+ " PC11 | \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " -3.723992 | \n",
+ " 2.175499 | \n",
+ " -5.383260 | \n",
+ " 1.065929 | \n",
+ " 0.036783 | \n",
+ " -4.908704 | \n",
+ " 4.595037 | \n",
+ " -4.437244 | \n",
+ " 8.249801 | \n",
+ " 4.604563 | \n",
+ " 25.136816 | \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " -1.128337 | \n",
+ " -0.236868 | \n",
+ " 0.225100 | \n",
+ " 0.140209 | \n",
+ " -0.022191 | \n",
+ " 0.583782 | \n",
+ " 0.770186 | \n",
+ " -1.312394 | \n",
+ " -1.203949 | \n",
+ " 0.629475 | \n",
+ " -0.212604 | \n",
+ " \n",
+ " \n",
+ " 2 | \n",
+ " -2.389770 | \n",
+ " 1.702824 | \n",
+ " -0.532143 | \n",
+ " 1.760444 | \n",
+ " -0.035687 | \n",
+ " 2.017621 | \n",
+ " -1.348992 | \n",
+ " 1.683002 | \n",
+ " 0.251769 | \n",
+ " -1.169499 | \n",
+ " -0.436427 | \n",
+ " \n",
+ " \n",
+ " 3 | \n",
+ " -2.418202 | \n",
+ " 1.658665 | \n",
+ " -0.520389 | \n",
+ " 1.796203 | \n",
+ " -0.036110 | \n",
+ " 2.025573 | \n",
+ " -1.330234 | \n",
+ " 1.665306 | \n",
+ " 0.387826 | \n",
+ " -0.726483 | \n",
+ " -0.629101 | \n",
+ " \n",
+ " \n",
+ " 4 | \n",
+ " -1.969372 | \n",
+ " -0.184898 | \n",
+ " 0.593758 | \n",
+ " -0.613873 | \n",
+ " 0.037860 | \n",
+ " -4.085190 | \n",
+ " 0.063095 | \n",
+ " 0.356921 | \n",
+ " 1.489301 | \n",
+ " -1.986591 | \n",
+ " -1.983543 | \n",
+ " \n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " \n",
+ " \n",
+ " 2101045 | \n",
+ " -0.974288 | \n",
+ " -0.380524 | \n",
+ " 0.794261 | \n",
+ " 0.404978 | \n",
+ " -0.025433 | \n",
+ " -0.058525 | \n",
+ " 1.139989 | \n",
+ " -1.691462 | \n",
+ " 0.753095 | \n",
+ " -0.578761 | \n",
+ " -1.179430 | \n",
+ " \n",
+ " \n",
+ " 2101046 | \n",
+ " -1.021527 | \n",
+ " -0.412733 | \n",
+ " 0.719908 | \n",
+ " 0.390706 | \n",
+ " -0.028549 | \n",
+ " -0.056192 | \n",
+ " 1.185932 | \n",
+ " -1.785440 | \n",
+ " 0.504943 | \n",
+ " -0.936178 | \n",
+ " -1.023495 | \n",
+ " \n",
+ " \n",
+ " 2101047 | \n",
+ " -0.937448 | \n",
+ " -0.323654 | \n",
+ " 0.987150 | \n",
+ " 0.506737 | \n",
+ " -0.020650 | \n",
+ " -0.033201 | \n",
+ " 1.101129 | \n",
+ " -1.583732 | \n",
+ " 1.316418 | \n",
+ " 0.626102 | \n",
+ " -1.733167 | \n",
+ " \n",
+ " \n",
+ " 2101048 | \n",
+ " -1.033260 | \n",
+ " -0.521294 | \n",
+ " 0.602451 | \n",
+ " 0.306990 | \n",
+ " -0.029109 | \n",
+ " -0.066948 | \n",
+ " 1.242623 | \n",
+ " -1.906180 | \n",
+ " 0.070453 | \n",
+ " -1.656210 | \n",
+ " -0.612906 | \n",
+ " \n",
+ " \n",
+ " 2101049 | \n",
+ " -0.935129 | \n",
+ " -0.341127 | \n",
+ " 0.969916 | \n",
+ " 0.478948 | \n",
+ " -0.020031 | \n",
+ " -0.028237 | \n",
+ " 1.132847 | \n",
+ " -1.651293 | \n",
+ " 1.088288 | \n",
+ " 0.280861 | \n",
+ " -1.541376 | \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2101050 rows × 11 columns \n",
+ " \n",
+ " \n",
+ " \n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "pca_df"
+ }
+ },
+ "metadata": {},
+ "execution_count": 27
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "pca_data_cat = pd.concat([final_merged[categorical_cols].reset_index(drop=True), pca_df], axis=1)"
+ ],
+ "metadata": {
+ "id": "ufSBSH_cx_bE"
+ },
+ "execution_count": 34,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "all_pca_data = pd.concat([final_merged.reset_index(drop=True), pca_df], axis=1)"
+ ],
+ "metadata": {
+ "id": "lB7tm7vSybtV"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "pca_data_cat"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 634
+ },
+ "id": "Zio-jpO2mQhq",
+ "outputId": "696619c7-9723-4152-f352-7f207cd5ed2b"
+ },
+ "execution_count": 35,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " status city state zip_code prev_sold_date \\\n",
+ "0 for_sale Berlin New York 12022 NaN \n",
+ "1 for_sale McCormick South Carolina 29835 NaN \n",
+ "2 for_sale Claverack New York 12521 2021-11-24 \n",
+ "3 for_sale Copake New York 12521 2018-02-01 \n",
+ "4 for_sale Copake New York 12516 NaN \n",
+ "... ... ... ... ... ... \n",
+ "2101045 sold Richland Washington 99354 2022-03-25 \n",
+ "2101046 sold Richland Washington 99354 2022-03-25 \n",
+ "2101047 sold Richland Washington 99354 2022-03-24 \n",
+ "2101048 sold Richland Washington 99354 2022-03-24 \n",
+ "2101049 sold Richland Washington 99354 2022-03-23 \n",
+ "\n",
+ " GEO_ID NAME H1_001N zip_name PC1 \\\n",
+ "0 860Z200US12022 ZCTA5 12022 399 berlin, ny -3.723992 \n",
+ "1 860Z200US29835 ZCTA5 29835 3740 mc cormick, sc -1.128337 \n",
+ "2 860Z200US12521 ZCTA5 12521 1115 craryville, ny -2.389770 \n",
+ "3 860Z200US12521 ZCTA5 12521 1115 craryville, ny -2.418202 \n",
+ "4 860Z200US12516 ZCTA5 12516 1026 copake, ny -1.969372 \n",
+ "... ... ... ... ... ... \n",
+ "2101045 860Z200US99354 ZCTA5 99354 10666 richland, wa -0.974288 \n",
+ "2101046 860Z200US99354 ZCTA5 99354 10666 richland, wa -1.021527 \n",
+ "2101047 860Z200US99354 ZCTA5 99354 10666 richland, wa -0.937448 \n",
+ "2101048 860Z200US99354 ZCTA5 99354 10666 richland, wa -1.033260 \n",
+ "2101049 860Z200US99354 ZCTA5 99354 10666 richland, wa -0.935129 \n",
+ "\n",
+ " PC2 PC3 PC4 PC5 PC6 PC7 PC8 \\\n",
+ "0 2.175499 -5.383260 1.065929 0.036783 -4.908704 4.595037 -4.437244 \n",
+ "1 -0.236868 0.225100 0.140209 -0.022191 0.583782 0.770186 -1.312394 \n",
+ "2 1.702824 -0.532143 1.760444 -0.035687 2.017621 -1.348992 1.683002 \n",
+ "3 1.658665 -0.520389 1.796203 -0.036110 2.025573 -1.330234 1.665306 \n",
+ "4 -0.184898 0.593758 -0.613873 0.037860 -4.085190 0.063095 0.356921 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "2101045 -0.380524 0.794261 0.404978 -0.025433 -0.058525 1.139989 -1.691462 \n",
+ "2101046 -0.412733 0.719908 0.390706 -0.028549 -0.056192 1.185932 -1.785440 \n",
+ "2101047 -0.323654 0.987150 0.506737 -0.020650 -0.033201 1.101129 -1.583732 \n",
+ "2101048 -0.521294 0.602451 0.306990 -0.029109 -0.066948 1.242623 -1.906180 \n",
+ "2101049 -0.341127 0.969916 0.478948 -0.020031 -0.028237 1.132847 -1.651293 \n",
+ "\n",
+ " PC9 PC10 PC11 \n",
+ "0 8.249801 4.604563 25.136816 \n",
+ "1 -1.203949 0.629475 -0.212604 \n",
+ "2 0.251769 -1.169499 -0.436427 \n",
+ "3 0.387826 -0.726483 -0.629101 \n",
+ "4 1.489301 -1.986591 -1.983543 \n",
+ "... ... ... ... \n",
+ "2101045 0.753095 -0.578761 -1.179430 \n",
+ "2101046 0.504943 -0.936178 -1.023495 \n",
+ "2101047 1.316418 0.626102 -1.733167 \n",
+ "2101048 0.070453 -1.656210 -0.612906 \n",
+ "2101049 1.088288 0.280861 -1.541376 \n",
+ "\n",
+ "[2101050 rows x 20 columns]"
+ ],
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " | \n",
+ " status | \n",
+ " city | \n",
+ " state | \n",
+ " zip_code | \n",
+ " prev_sold_date | \n",
+ " GEO_ID | \n",
+ " NAME | \n",
+ " H1_001N | \n",
+ " zip_name | \n",
+ " PC1 | \n",
+ " PC2 | \n",
+ " PC3 | \n",
+ " PC4 | \n",
+ " PC5 | \n",
+ " PC6 | \n",
+ " PC7 | \n",
+ " PC8 | \n",
+ " PC9 | \n",
+ " PC10 | \n",
+ " PC11 | \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " for_sale | \n",
+ " Berlin | \n",
+ " New York | \n",
+ " 12022 | \n",
+ " NaN | \n",
+ " 860Z200US12022 | \n",
+ " ZCTA5 12022 | \n",
+ " 399 | \n",
+ " berlin, ny | \n",
+ " -3.723992 | \n",
+ " 2.175499 | \n",
+ " -5.383260 | \n",
+ " 1.065929 | \n",
+ " 0.036783 | \n",
+ " -4.908704 | \n",
+ " 4.595037 | \n",
+ " -4.437244 | \n",
+ " 8.249801 | \n",
+ " 4.604563 | \n",
+ " 25.136816 | \n",
+ " \n",
+ " \n",
+ " 1 | \n",
+ " for_sale | \n",
+ " McCormick | \n",
+ " South Carolina | \n",
+ " 29835 | \n",
+ " NaN | \n",
+ " 860Z200US29835 | \n",
+ " ZCTA5 29835 | \n",
+ " 3740 | \n",
+ " mc cormick, sc | \n",
+ " -1.128337 | \n",
+ " -0.236868 | \n",
+ " 0.225100 | \n",
+ " 0.140209 | \n",
+ " -0.022191 | \n",
+ " 0.583782 | \n",
+ " 0.770186 | \n",
+ " -1.312394 | \n",
+ " -1.203949 | \n",
+ " 0.629475 | \n",
+ " -0.212604 | \n",
+ " \n",
+ " \n",
+ " 2 | \n",
+ " for_sale | \n",
+ " Claverack | \n",
+ " New York | \n",
+ " 12521 | \n",
+ " 2021-11-24 | \n",
+ " 860Z200US12521 | \n",
+ " ZCTA5 12521 | \n",
+ " 1115 | \n",
+ " craryville, ny | \n",
+ " -2.389770 | \n",
+ " 1.702824 | \n",
+ " -0.532143 | \n",
+ " 1.760444 | \n",
+ " -0.035687 | \n",
+ " 2.017621 | \n",
+ " -1.348992 | \n",
+ " 1.683002 | \n",
+ " 0.251769 | \n",
+ " -1.169499 | \n",
+ " -0.436427 | \n",
+ " \n",
+ " \n",
+ " 3 | \n",
+ " for_sale | \n",
+ " Copake | \n",
+ " New York | \n",
+ " 12521 | \n",
+ " 2018-02-01 | \n",
+ " 860Z200US12521 | \n",
+ " ZCTA5 12521 | \n",
+ " 1115 | \n",
+ " craryville, ny | \n",
+ " -2.418202 | \n",
+ " 1.658665 | \n",
+ " -0.520389 | \n",
+ " 1.796203 | \n",
+ " -0.036110 | \n",
+ " 2.025573 | \n",
+ " -1.330234 | \n",
+ " 1.665306 | \n",
+ " 0.387826 | \n",
+ " -0.726483 | \n",
+ " -0.629101 | \n",
+ " \n",
+ " \n",
+ " 4 | \n",
+ " for_sale | \n",
+ " Copake | \n",
+ " New York | \n",
+ " 12516 | \n",
+ " NaN | \n",
+ " 860Z200US12516 | \n",
+ " ZCTA5 12516 | \n",
+ " 1026 | \n",
+ " copake, ny | \n",
+ " -1.969372 | \n",
+ " -0.184898 | \n",
+ " 0.593758 | \n",
+ " -0.613873 | \n",
+ " 0.037860 | \n",
+ " -4.085190 | \n",
+ " 0.063095 | \n",
+ " 0.356921 | \n",
+ " 1.489301 | \n",
+ " -1.986591 | \n",
+ " -1.983543 | \n",
+ " \n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " \n",
+ " \n",
+ " 2101045 | \n",
+ " sold | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 2022-03-25 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " richland, wa | \n",
+ " -0.974288 | \n",
+ " -0.380524 | \n",
+ " 0.794261 | \n",
+ " 0.404978 | \n",
+ " -0.025433 | \n",
+ " -0.058525 | \n",
+ " 1.139989 | \n",
+ " -1.691462 | \n",
+ " 0.753095 | \n",
+ " -0.578761 | \n",
+ " -1.179430 | \n",
+ " \n",
+ " \n",
+ " 2101046 | \n",
+ " sold | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 2022-03-25 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " richland, wa | \n",
+ " -1.021527 | \n",
+ " -0.412733 | \n",
+ " 0.719908 | \n",
+ " 0.390706 | \n",
+ " -0.028549 | \n",
+ " -0.056192 | \n",
+ " 1.185932 | \n",
+ " -1.785440 | \n",
+ " 0.504943 | \n",
+ " -0.936178 | \n",
+ " -1.023495 | \n",
+ " \n",
+ " \n",
+ " 2101047 | \n",
+ " sold | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 2022-03-24 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " richland, wa | \n",
+ " -0.937448 | \n",
+ " -0.323654 | \n",
+ " 0.987150 | \n",
+ " 0.506737 | \n",
+ " -0.020650 | \n",
+ " -0.033201 | \n",
+ " 1.101129 | \n",
+ " -1.583732 | \n",
+ " 1.316418 | \n",
+ " 0.626102 | \n",
+ " -1.733167 | \n",
+ " \n",
+ " \n",
+ " 2101048 | \n",
+ " sold | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 2022-03-24 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " richland, wa | \n",
+ " -1.033260 | \n",
+ " -0.521294 | \n",
+ " 0.602451 | \n",
+ " 0.306990 | \n",
+ " -0.029109 | \n",
+ " -0.066948 | \n",
+ " 1.242623 | \n",
+ " -1.906180 | \n",
+ " 0.070453 | \n",
+ " -1.656210 | \n",
+ " -0.612906 | \n",
+ " \n",
+ " \n",
+ " 2101049 | \n",
+ " sold | \n",
+ " Richland | \n",
+ " Washington | \n",
+ " 99354 | \n",
+ " 2022-03-23 | \n",
+ " 860Z200US99354 | \n",
+ " ZCTA5 99354 | \n",
+ " 10666 | \n",
+ " richland, wa | \n",
+ " -0.935129 | \n",
+ " -0.341127 | \n",
+ " 0.969916 | \n",
+ " 0.478948 | \n",
+ " -0.020031 | \n",
+ " -0.028237 | \n",
+ " 1.132847 | \n",
+ " -1.651293 | \n",
+ " 1.088288 | \n",
+ " 0.280861 | \n",
+ " -1.541376 | \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2101050 rows × 20 columns \n",
+ " \n",
+ " \n",
+ " \n"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "dataframe",
+ "variable_name": "pca_data_cat"
+ }
+ },
+ "metadata": {},
+ "execution_count": 35
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "itSDkipKxm4h"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
|