{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "6947fe33-dd74-4235-90d7-af68aae454ce",
"metadata": {},
"outputs": [],
"source": [
"%load_ext lab_black"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1a572123-f84e-4c61-933d-3f1cede2af8e",
"metadata": {},
"outputs": [],
"source": [
"from bs4 import BeautifulSoup\n",
"import gzip\n",
"import json\n",
"import re\n",
"import datetime\n",
"import pathlib\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7e71aa7f-4d8f-446c-9f58-41ec77ca039e",
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "ef0bb3ba-081d-4f16-a4e1-34fd636f9951",
"metadata": {},
"outputs": [],
"source": [
"pd.set_option(\"display.max_rows\", None)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9c4dd76b-c2e5-454d-98d2-0c5d1f826fb7",
"metadata": {},
"outputs": [],
"source": [
"TIME_STRING = \"%Y%m%dT%H%M%SZ\""
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a837900c-6a6d-4f13-8c6c-25c14cfaaf06",
"metadata": {},
"outputs": [],
"source": [
"DIRECTORY = \"/home/agude/Projects/blog_projects/zillow_redfin/data/\""
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e5f714d3-ca36-4823-b7af-eac742e84185",
"metadata": {},
"outputs": [],
"source": [
"def get_date_from_file(file_name: str, time_string: str = TIME_STRING) -> datetime:\n",
" return datetime.datetime.strptime(\n",
" file_name.split(\"_\")[-1].split(\".\")[0], time_string\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "b0543217-3baf-4536-923b-9400e9379d68",
"metadata": {
"tags": []
},
"source": [
"# Zillow"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9e2dd087-95b1-4edb-baed-0ad065b057b5",
"metadata": {},
"outputs": [],
"source": [
"def get_zillow_price(file_name: str):\n",
"\n",
" with gzip.open(file_name) as fp:\n",
" soup = BeautifulSoup(fp, \"html.parser\")\n",
"\n",
" item = soup.select_one(\"script#hdpApolloPreloadedData\").text\n",
" api_cache_string = json.loads(item)[\"apiCache\"]\n",
" zillow_data_json = json.loads(api_cache_string)\n",
"\n",
" for key in zillow_data_json.keys():\n",
" targets = zillow_data_json[key][\"property\"].get(\"adTargets\")\n",
" if targets is not None:\n",
" price = targets.get(\"zestimate\")\n",
" break\n",
"\n",
" return price"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "0753acaa-4316-46e5-b1fb-4c7117f0875e",
"metadata": {},
"outputs": [],
"source": [
"price_data = {\"date\": [], \"amount\": []}\n",
"\n",
"for path in pathlib.Path(DIRECTORY).iterdir():\n",
" if path.is_file() and \"zillow_1381\" in str(path):\n",
" path_str = str(path)\n",
"\n",
" price_data[\"date\"].append(get_date_from_file(path_str))\n",
" price_data[\"amount\"].append(get_zillow_price(path_str))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "8de78aee-1b7e-4494-8729-cc818ee9fbe1",
"metadata": {},
"outputs": [],
"source": [
"zillow_df = (\n",
" pd.DataFrame.from_dict(price_data).sort_values(\"date\").reset_index(drop=True)\n",
")\n",
"\n",
"zillow_df[\"amount\"] = zillow_df[\"amount\"].astype(\"float\")\n",
"\n",
"zillow_df[\"website\"] = \"zillow\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "7e704146-8089-49f6-b15d-8919c9cd0404",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" date | \n",
" amount | \n",
" website | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2022-04-11 01:24:32 | \n",
" 1027400.0 | \n",
" zillow | \n",
"
\n",
" \n",
" 1 | \n",
" 2022-04-11 07:03:45 | \n",
" 1035800.0 | \n",
" zillow | \n",
"
\n",
" \n",
" 2 | \n",
" 2022-04-12 07:04:05 | \n",
" 1035800.0 | \n",
" zillow | \n",
"
\n",
" \n",
" 3 | \n",
" 2022-04-13 07:00:49 | \n",
" 1035800.0 | \n",
" zillow | \n",
"
\n",
" \n",
" 4 | \n",
" 2022-04-14 07:02:32 | \n",
" 1035800.0 | \n",
" zillow | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date amount website\n",
"0 2022-04-11 01:24:32 1027400.0 zillow\n",
"1 2022-04-11 07:03:45 1035800.0 zillow\n",
"2 2022-04-12 07:04:05 1035800.0 zillow\n",
"3 2022-04-13 07:00:49 1035800.0 zillow\n",
"4 2022-04-14 07:02:32 1035800.0 zillow"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"zillow_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "4721bc01-859d-43f9-8bda-e88da2f118f4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(zillow_df[\"date\"], zillow_df[\"amount\"], \".\", color=\"blue\")"
]
},
{
"cell_type": "markdown",
"id": "c4f17000-14c9-424e-becf-6a51e8392f5a",
"metadata": {},
"source": [
"# Redfin"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "516c8a93-60fe-4bc1-a30e-32e8de7a2d4a",
"metadata": {},
"outputs": [],
"source": [
"def get_redfin_price(file_name: str) -> float:\n",
"\n",
" date = get_date_from_file(file_name)\n",
"\n",
" with gzip.open(file_name) as fp:\n",
" file_text = str(fp.read())\n",
"\n",
" return float(file_text.split('predictedValue\\\\\\\\\":')[1].split(\"}\")[0])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "b4402eea-b253-482d-9850-b1e02d53b06c",
"metadata": {},
"outputs": [],
"source": [
"redfin_price_data = {\"date\": [], \"amount\": []}\n",
"\n",
"for path in pathlib.Path(DIRECTORY).iterdir():\n",
" if path.is_file() and \"redfin_1381\" in str(path):\n",
" path_str = str(path)\n",
"\n",
" redfin_price_data[\"date\"].append(get_date_from_file(path_str))\n",
" redfin_price_data[\"amount\"].append(get_redfin_price(path_str))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "023543c1-2cd8-4807-944c-ebb41e5f36c3",
"metadata": {},
"outputs": [],
"source": [
"redfin_df = (\n",
" pd.DataFrame.from_dict(redfin_price_data).sort_values(\"date\").reset_index(drop=True)\n",
")\n",
"\n",
"redfin_df[\"amount\"] = redfin_df[\"amount\"].astype(\"float\")\n",
"\n",
"redfin_df[\"website\"] = \"redfin\""
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "8b0db34f-53b2-4d05-92f6-8e2668b35739",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" date | \n",
" amount | \n",
" website | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2022-04-11 01:24:36 | \n",
" 1156960.86 | \n",
" redfin | \n",
"
\n",
" \n",
" 1 | \n",
" 2022-04-11 07:03:49 | \n",
" 1156960.86 | \n",
" redfin | \n",
"
\n",
" \n",
" 2 | \n",
" 2022-04-12 07:04:09 | \n",
" 1156960.86 | \n",
" redfin | \n",
"
\n",
" \n",
" 3 | \n",
" 2022-04-13 07:00:53 | \n",
" 1156960.86 | \n",
" redfin | \n",
"
\n",
" \n",
" 4 | \n",
" 2022-04-14 07:02:36 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 5 | \n",
" 2022-04-15 07:01:36 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 6 | \n",
" 2022-04-16 07:01:43 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 7 | \n",
" 2022-04-17 07:00:37 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 8 | \n",
" 2022-04-18 07:02:41 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 9 | \n",
" 2022-04-19 07:02:34 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 10 | \n",
" 2022-04-20 07:02:47 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 11 | \n",
" 2022-04-21 07:03:00 | \n",
" 1188334.45 | \n",
" redfin | \n",
"
\n",
" \n",
" 12 | \n",
" 2022-04-22 07:00:51 | \n",
" 1169268.70 | \n",
" redfin | \n",
"
\n",
" \n",
" 13 | \n",
" 2022-04-23 07:03:32 | \n",
" 1169268.70 | \n",
" redfin | \n",
"
\n",
" \n",
" 14 | \n",
" 2022-04-24 07:05:07 | \n",
" 1169268.70 | \n",
" redfin | \n",
"
\n",
" \n",
" 15 | \n",
" 2022-04-25 07:00:59 | \n",
" 1169268.70 | \n",
" redfin | \n",
"
\n",
" \n",
" 16 | \n",
" 2022-04-26 07:02:12 | \n",
" 1234551.86 | \n",
" redfin | \n",
"
\n",
" \n",
" 17 | \n",
" 2022-04-27 07:03:52 | \n",
" 1253357.70 | \n",
" redfin | \n",
"
\n",
" \n",
" 18 | \n",
" 2022-04-28 07:02:34 | \n",
" 1259087.09 | \n",
" redfin | \n",
"
\n",
" \n",
" 19 | \n",
" 2022-04-29 07:04:12 | \n",
" 1256868.63 | \n",
" redfin | \n",
"
\n",
" \n",
" 20 | \n",
" 2022-04-30 07:02:36 | \n",
" 1256868.63 | \n",
" redfin | \n",
"
\n",
" \n",
" 21 | \n",
" 2022-05-01 07:02:05 | \n",
" 1262774.23 | \n",
" redfin | \n",
"
\n",
" \n",
" 22 | \n",
" 2022-05-02 07:03:49 | \n",
" 1262993.79 | \n",
" redfin | \n",
"
\n",
" \n",
" 23 | \n",
" 2022-05-03 07:22:24 | \n",
" 1262296.79 | \n",
" redfin | \n",
"
\n",
" \n",
" 24 | \n",
" 2022-05-04 07:02:49 | \n",
" 1262292.24 | \n",
" redfin | \n",
"
\n",
" \n",
" 25 | \n",
" 2022-05-05 07:01:20 | \n",
" 1262936.89 | \n",
" redfin | \n",
"
\n",
" \n",
" 26 | \n",
" 2022-05-06 07:02:21 | \n",
" 1262936.89 | \n",
" redfin | \n",
"
\n",
" \n",
" 27 | \n",
" 2022-05-07 07:04:21 | \n",
" 1265774.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 28 | \n",
" 2022-05-08 07:04:54 | \n",
" 1264471.54 | \n",
" redfin | \n",
"
\n",
" \n",
" 29 | \n",
" 2022-05-09 07:02:51 | \n",
" 1263528.52 | \n",
" redfin | \n",
"
\n",
" \n",
" 30 | \n",
" 2022-05-10 07:04:54 | \n",
" 1263528.52 | \n",
" redfin | \n",
"
\n",
" \n",
" 31 | \n",
" 2022-05-11 07:03:39 | \n",
" 1263528.52 | \n",
" redfin | \n",
"
\n",
" \n",
" 32 | \n",
" 2022-05-12 07:01:17 | \n",
" 1265244.53 | \n",
" redfin | \n",
"
\n",
" \n",
" 33 | \n",
" 2022-05-13 07:01:40 | \n",
" 1266800.85 | \n",
" redfin | \n",
"
\n",
" \n",
" 34 | \n",
" 2022-05-14 07:03:30 | \n",
" 1265878.84 | \n",
" redfin | \n",
"
\n",
" \n",
" 35 | \n",
" 2022-05-15 07:01:14 | \n",
" 1265878.84 | \n",
" redfin | \n",
"
\n",
" \n",
" 36 | \n",
" 2022-05-16 07:05:25 | \n",
" 1265878.84 | \n",
" redfin | \n",
"
\n",
" \n",
" 37 | \n",
" 2022-05-17 07:04:54 | \n",
" 1265878.84 | \n",
" redfin | \n",
"
\n",
" \n",
" 38 | \n",
" 2022-05-18 07:02:24 | \n",
" 1265878.84 | \n",
" redfin | \n",
"
\n",
" \n",
" 39 | \n",
" 2022-05-19 07:16:48 | \n",
" 1263741.10 | \n",
" redfin | \n",
"
\n",
" \n",
" 40 | \n",
" 2022-05-20 07:02:36 | \n",
" 1263713.04 | \n",
" redfin | \n",
"
\n",
" \n",
" 41 | \n",
" 2022-05-21 07:02:08 | \n",
" 1263713.04 | \n",
" redfin | \n",
"
\n",
" \n",
" 42 | \n",
" 2022-05-22 07:02:09 | \n",
" 1263297.58 | \n",
" redfin | \n",
"
\n",
" \n",
" 43 | \n",
" 2022-05-23 07:01:05 | \n",
" 1263615.05 | \n",
" redfin | \n",
"
\n",
" \n",
" 44 | \n",
" 2022-05-24 07:01:02 | \n",
" 1263455.00 | \n",
" redfin | \n",
"
\n",
" \n",
" 45 | \n",
" 2022-05-25 07:04:25 | \n",
" 1263455.00 | \n",
" redfin | \n",
"
\n",
" \n",
" 46 | \n",
" 2022-05-26 07:04:37 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 47 | \n",
" 2022-05-27 07:05:13 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 48 | \n",
" 2022-05-28 07:01:26 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 49 | \n",
" 2022-05-29 07:02:07 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 50 | \n",
" 2022-05-30 07:05:11 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 51 | \n",
" 2022-05-31 07:02:55 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 52 | \n",
" 2022-06-01 07:04:31 | \n",
" 1262117.12 | \n",
" redfin | \n",
"
\n",
" \n",
" 53 | \n",
" 2022-06-02 07:05:23 | \n",
" 1259206.48 | \n",
" redfin | \n",
"
\n",
" \n",
" 54 | \n",
" 2022-06-03 07:01:24 | \n",
" 1259206.48 | \n",
" redfin | \n",
"
\n",
" \n",
" 55 | \n",
" 2022-06-04 07:04:13 | \n",
" 1259206.48 | \n",
" redfin | \n",
"
\n",
" \n",
" 56 | \n",
" 2022-06-05 07:01:32 | \n",
" 1252787.11 | \n",
" redfin | \n",
"
\n",
" \n",
" 57 | \n",
" 2022-06-06 07:01:20 | \n",
" 1252787.11 | \n",
" redfin | \n",
"
\n",
" \n",
" 58 | \n",
" 2022-06-08 07:01:59 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 59 | \n",
" 2022-06-09 07:05:10 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 60 | \n",
" 2022-06-10 07:01:00 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 61 | \n",
" 2022-06-11 07:01:19 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 62 | \n",
" 2022-06-12 07:03:14 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 63 | \n",
" 2022-06-13 07:02:41 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 64 | \n",
" 2022-06-14 07:03:38 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 65 | \n",
" 2022-06-15 07:04:07 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 66 | \n",
" 2022-06-16 07:02:39 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 67 | \n",
" 2022-06-17 07:04:27 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
" 68 | \n",
" 2022-06-18 07:04:15 | \n",
" 1200096.93 | \n",
" redfin | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date amount website\n",
"0 2022-04-11 01:24:36 1156960.86 redfin\n",
"1 2022-04-11 07:03:49 1156960.86 redfin\n",
"2 2022-04-12 07:04:09 1156960.86 redfin\n",
"3 2022-04-13 07:00:53 1156960.86 redfin\n",
"4 2022-04-14 07:02:36 1188334.45 redfin\n",
"5 2022-04-15 07:01:36 1188334.45 redfin\n",
"6 2022-04-16 07:01:43 1188334.45 redfin\n",
"7 2022-04-17 07:00:37 1188334.45 redfin\n",
"8 2022-04-18 07:02:41 1188334.45 redfin\n",
"9 2022-04-19 07:02:34 1188334.45 redfin\n",
"10 2022-04-20 07:02:47 1188334.45 redfin\n",
"11 2022-04-21 07:03:00 1188334.45 redfin\n",
"12 2022-04-22 07:00:51 1169268.70 redfin\n",
"13 2022-04-23 07:03:32 1169268.70 redfin\n",
"14 2022-04-24 07:05:07 1169268.70 redfin\n",
"15 2022-04-25 07:00:59 1169268.70 redfin\n",
"16 2022-04-26 07:02:12 1234551.86 redfin\n",
"17 2022-04-27 07:03:52 1253357.70 redfin\n",
"18 2022-04-28 07:02:34 1259087.09 redfin\n",
"19 2022-04-29 07:04:12 1256868.63 redfin\n",
"20 2022-04-30 07:02:36 1256868.63 redfin\n",
"21 2022-05-01 07:02:05 1262774.23 redfin\n",
"22 2022-05-02 07:03:49 1262993.79 redfin\n",
"23 2022-05-03 07:22:24 1262296.79 redfin\n",
"24 2022-05-04 07:02:49 1262292.24 redfin\n",
"25 2022-05-05 07:01:20 1262936.89 redfin\n",
"26 2022-05-06 07:02:21 1262936.89 redfin\n",
"27 2022-05-07 07:04:21 1265774.12 redfin\n",
"28 2022-05-08 07:04:54 1264471.54 redfin\n",
"29 2022-05-09 07:02:51 1263528.52 redfin\n",
"30 2022-05-10 07:04:54 1263528.52 redfin\n",
"31 2022-05-11 07:03:39 1263528.52 redfin\n",
"32 2022-05-12 07:01:17 1265244.53 redfin\n",
"33 2022-05-13 07:01:40 1266800.85 redfin\n",
"34 2022-05-14 07:03:30 1265878.84 redfin\n",
"35 2022-05-15 07:01:14 1265878.84 redfin\n",
"36 2022-05-16 07:05:25 1265878.84 redfin\n",
"37 2022-05-17 07:04:54 1265878.84 redfin\n",
"38 2022-05-18 07:02:24 1265878.84 redfin\n",
"39 2022-05-19 07:16:48 1263741.10 redfin\n",
"40 2022-05-20 07:02:36 1263713.04 redfin\n",
"41 2022-05-21 07:02:08 1263713.04 redfin\n",
"42 2022-05-22 07:02:09 1263297.58 redfin\n",
"43 2022-05-23 07:01:05 1263615.05 redfin\n",
"44 2022-05-24 07:01:02 1263455.00 redfin\n",
"45 2022-05-25 07:04:25 1263455.00 redfin\n",
"46 2022-05-26 07:04:37 1262117.12 redfin\n",
"47 2022-05-27 07:05:13 1262117.12 redfin\n",
"48 2022-05-28 07:01:26 1262117.12 redfin\n",
"49 2022-05-29 07:02:07 1262117.12 redfin\n",
"50 2022-05-30 07:05:11 1262117.12 redfin\n",
"51 2022-05-31 07:02:55 1262117.12 redfin\n",
"52 2022-06-01 07:04:31 1262117.12 redfin\n",
"53 2022-06-02 07:05:23 1259206.48 redfin\n",
"54 2022-06-03 07:01:24 1259206.48 redfin\n",
"55 2022-06-04 07:04:13 1259206.48 redfin\n",
"56 2022-06-05 07:01:32 1252787.11 redfin\n",
"57 2022-06-06 07:01:20 1252787.11 redfin\n",
"58 2022-06-08 07:01:59 1200096.93 redfin\n",
"59 2022-06-09 07:05:10 1200096.93 redfin\n",
"60 2022-06-10 07:01:00 1200096.93 redfin\n",
"61 2022-06-11 07:01:19 1200096.93 redfin\n",
"62 2022-06-12 07:03:14 1200096.93 redfin\n",
"63 2022-06-13 07:02:41 1200096.93 redfin\n",
"64 2022-06-14 07:03:38 1200096.93 redfin\n",
"65 2022-06-15 07:04:07 1200096.93 redfin\n",
"66 2022-06-16 07:02:39 1200096.93 redfin\n",
"67 2022-06-17 07:04:27 1200096.93 redfin\n",
"68 2022-06-18 07:04:15 1200096.93 redfin"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"redfin_df"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "db93c5ea-e25a-48d4-b8b2-1bd7c150ecf1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEDCAYAAAA7jc+ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAX2ElEQVR4nO3df7AdZX3H8ffHmwSt2hG5USkQI4pFJIBwxF5l9FKmFhyn6FytIlNQsZlSkeYPO5pxFEdGodaZphQppJkY01asNmKpv5BG7pBpLpSLAxioIiKWpNiEgCKVEgjf/rF7J+ee7Llnz7l7fj3n85o5c84+z7O7z+7d8z3PffbZXUUEZmaWrmf1uwJmZtZdDvRmZolzoDczS5wDvZlZ4hzozcwS50BvZpa4gQ30kjZK2i1pR8nyfyjpHkl3S/pSt+tnZjYsNKjj6CW9EXgc2BwRx7coewzwFeB3I+JRSS+KiN29qKeZ2aAb2BZ9RNwMPFKfJunlkr4j6XZJ2yQdm2f9MfD5iHg0n9dB3swsN7CBvon1wIci4hTgw8BVeforgVdK+ndJt0g6s281NDMbMEv6XYGyJD0PeD3wVUlzyYfk70uAY4BJ4EjgZkmrIuIXPa6mmdnAGZpAT/bfxy8i4qSCvJ3ArRHxFPBTSfeSBf7belg/M7OBNDRdNxHxGFkQfyeAMifm2V8na80jaZysK+f+PlTTzGzgDGygl3QtMAP8tqSdki4AzgUukHQncDdwdl78BmCvpHuAm4A/j4i9/ai3mdmgGdjhlWZmVo2BbdGbmVk1BvJk7Pj4eKxcubLf1TAzGxq33377wxGxvChvIAP9ypUrmZ2d7Xc1zMyGhqSfNctz142ZWeIc6M3MEudAb2aWOAd6M7PEOdCbmSXOgd7MLHEO9GaLMDMDl12WvRdNmw2CgRxHbzYMZmbgjDNg3z5YtgzWrYM1aw5Mb90KExP9rqWZW/RmHZuezoL6/v3Z+5Yt86enp/tdQ7OMA71ZhyYns5b72Fj2PjU1f3pyst81NMu468asQxMTWffM9HQW1CcmYNWq+dNmg2Agb1Ncq9XC97oxMytP0u0RUSvKc9eNmVniWgZ6SRsl7Za0o0n+2ZLuknSHpFlJp9Xl7c/T75B0fZUVNzOzcsr00W8CrgQ2N8nfClwfESHpBOArwLF53hNNHuZtZmY90rJFHxE3A48skP94HOjofy4weJ3+ZmYjrJI+eklvl/RD4JvA++uynp1359wi6W0tlrE6Lzu7Z8+eKqplZmZUFOgj4rqIOBZ4G3BpXdZL87PA7wHWSXr5AstYHxG1iKgtX174NCwzM+tApaNu8m6eoyWN59O78vf7gWngNVWuz8zMWlt0oJf0CknKP58MHALslXSopEPy9HHgDcA9i12fmZm1p+WoG0nXApPAuKSdwCXAUoCIuBqYAs6T9BTwBPCufATOq4BrJD1D9oNyeUQ40JuZ9ZivjDUzS4CvjDUzG2EO9GZmiXOgNzNLnAO9mVniHOjNzBLnQG9mljgHejOzxDnQm5klzoHezCxxDvRmZolzoDczS5wDvZlZ4hzozcwS50BvZpY4B3ozs8Q50JuZJc6B3swscQ70ZmaJc6A3M0ucA72ZWeJKBXpJGyXtlrSjSf7Zku6SdIekWUmn1eWdL+nH+ev8qipuZmbllG3RbwLOXCB/K3BiRJwEvB/YACDphcAlwOuAU4FLJB3aaWXNzKx9pQJ9RNwMPLJA/uMREfnkc4G5z78P3BgRj0TEo8CNLPyDYWZmFausj17S2yX9EPgmWase4AjgwbpiO/O0ovlX590+s3v27KmqWmZmI6+yQB8R10XEscDbgEs7mH99RNQiorZ8+fKqqmVmNvIqH3WTd/McLWkc2AUcVZd9ZJ5mZmY9Ukmgl/QKSco/nwwcAuwFbgDeLOnQ/CTsm/M0MzPrkSVlCkm6FpgExiXtJBtJsxQgIq4GpoDzJD0FPAG8Kz85+4ikS4Hb8kV9KiKantQ1G1UzMzA9DZOTMDFx8LTZYujAYJnBUavVYnZ2tt/VMOuJmRk44wzYtw+WLYN162DNmgPTW7c62Ftrkm6PiFpRnq+MNeuz6eksqO/fn71v2TJ/enq63zW0YedAb9Znk5NZy31sLHufmpo/PTnZ7xrasCvVR29m3TMxkXXP1PfJr1rlPnqrjvvozYaET9jaQhbqo3eL3mwI+IStLYb76M2GgE/Y2mI40JsNAZ+wtcVw143ZEPAJW1sMn4w1M0uAL5gyMxthDvRmZolzoDczS5wDvdmcmRm47LLsvcx0p2XMesyjbmywdety0KLlLnRFUtEVStD6KqbGMr6yyfrAgd7aVxRsOwnArYJ42ctBy/wY1KfBwcG31RVJza5QarfMXFqr/VdmH3daxkaOA721pzH4Nmu1wuKDeNnLQdttVZ9//sHLmbsiaa7M1BRs29Z8eu4HY6F5isocdljr/VfVfw+d/jD6RyY5DvSjrt0vY2PwLWq1bt4MX/zi4oN4q+A7OVn+x6A+DeYvd27bW12RVHSFUpmrmOrLlNl/Vf330MkPY79/ZDo5Jq0lB/pRVtQ6b/XFagy+Ra1WqCaIl70ctN1W9XnnZa/G5UxMzN/+VtOdlmm1/6r676GTH8Z+/sj4nEbXONCPsmaty1YtrMbgC/PTYH6LfjFBvEzwbbdVXb/sXiuz/6r676GTH8Z+/sg0O6fhQL9ovgXCKCvTTw6dtbDcXzu4+tVH383jzRa8BYID/Shp9eWcnoaPfzxrTY2NwaWXZmUa09au7Uv1LQHd+lGxxQV6SRuBtwK7I+L4gvxzgY8AAn4FXBgRd+Z5D+Rp+4Gnm1WikQN9F5Tpjy87osZfLOsVH5OlLfYJU5uAK4HNTfJ/CrwpIh6VdBawHnhdXf7pEfFwG/W1bijqjy86aVim/9isV8qMUnI/fkstA31E3Cxp5QL52+smbwGOrKBeVrVmo2UalRk1YtYrZUZ5+akrLVU96uYC4Nt10wF8V1IA10TE+mYzSloNrAZYsWJFxdWypq11s0Hm/zIrUepkbN6i/0ZRH31dmdOBq4DTImJvnnZEROyS9CLgRuBDEXFzq/W5j97MrD1df/CIpBOADcDZc0EeICJ25e+7geuAU6tYn5mZlbfoQC9pBfA14I8i4t669OdKev7cZ+DNwI7Frs/MzNrTso9e0rXAJDAuaSdwCbAUICKuBj4BHAZcJQkODKN8MXBdnrYE+FJEfKcL22BmZgsoM+rmnBb5HwA+UJB+P3Bi51UzM7Mq+AlTZmaJc6BPmR9hZ2b47pXp6uQWxGaWJLfoU9Xs0nEzGzkO9Kmau3R8bMyXiZuNOHfdpMq3PDCznAN9ynwzMjPDXTdmZslzoDczS5wDvZlZ4hzozcwS50BvZpY4B3ozs8Q50JuZJc6B3swscQ70ZmaJc6A3M0ucA72ZWeIc6M3MEudAbzZiGh885geRpa/l3SslbQTeCuyOiOML8s8FPgII+BVwYUTcmeedCfw1MAZsiIjLK6y7mbWp8cFj69bBmjV+EFnqyrToNwFnLpD/U+BNEbEKuBRYDyBpDPg8cBZwHHCOpOMWVVuzITRILejGB49t2ZLwg8ha7fiiP8SglalKRLR8ASuBHSXKHQrsyj9PADfU5a0F1pZZ3ymnnBJmKdi+PeI5z4kYG8ver7lm/vT27aNdn65ptaFFG15m5/SyTJuA2WgSU6t+8MgFwLfzz0cAD9bl7QRe12xGSauB1QArVqyouFpm/VGmBd3LrpKiB4+tWpXgg8ha7fhm/8oMUpkK/xiVBXpJp5MF+tM6mT8i1pN3+9RqtaiqXmb9NPfo3rk+8Kkp2LbtwHQ/HuXb+OCxJB9E1mrHN/tDlPlj9bJMRSoJ9JJOADYAZ0XE3jx5F3BUXbEj8zSzkTEyLehBU2bHF/0hyvyxelmmIsq6dloUklYC34jiUTcrgO8B50XE9rr0JcC9wBlkAf424D0RcXer9dVqtZidnS27DWZmI0/S7RFRK8orM7zyWmASGJe0E7gEWAoQEVcDnwAOA66SBPB0RNQi4mlJFwE3kA2v3FgmyJuZWbVKteh7rect+pmZg/9lakzrVpmieczM2rSoFn3yGq8g2bo1S291VUkVZXy1ipn1gAN94zCsXg6h6vdYOzMbCb7XzdwwrLGxA8OaGtOmprpTpmgeM7OKuUVfNAwLejeEymPtzIZKr07fVcknY83MSipzUziopky7wd4nY83MKlD2pnADdgcE99GbWXf0+8aP3bh5Za9O31V+uq7Z3c76+fLdK82GW+PNGQft5pCLuaHk9u0Rn/lM8+kqy7SDHt690sysr6OWOx3ZXGa5czeAa3VTuKrKVMVdN2ZWuX6OWu50ZHPPu1N6yC36QTRoY7PM2tTvUctlyvT5hpI95eGVg6aq8VvDfFTawCvT9rDe8vDKYVLV+C1/06xLytweym2NweI++kEzkGOzzA4oOtHa7OSrDQa36AdN2UcSpdqZaAOv8Sl9RU/Gc1tjsLiP3sza5j76wbNQH70DvVlCPBhrdPlkrNkIKDNgy8F+NKV1MnZmBi68MHu1c0MLswSUHbBloyedFv3MTPb/6b592fQXvgBXXNF6DLqbOZaIxpOkU1OwbVv7J0jd/56edAL99DQ89dSB6bJj0D3m3BJRdsDWQjxGPk0tA72kjcBbgd0RcXxB/rHAF4CTgY9FxOfq8h4AfgXsB55udqKgEpOTsHTpgRb9Qk0ajwOzRC32RlllbkbmttHwKdOi3wRcCWxukv8IcDHwtib5p0fEw23XrF0TE9kRuDmv5nnnlR+DbmaAx8inqtTwSkkrgW8UtejrynwSeLygRV9rN9B7eKVZ/7iPfjj1c3hlAN+VFMA1EbG+WUFJq4HVACtWrOhytcysmTL3Trfh0u3hladFxMnAWcAHJb2xWcGIWB8RtYioLV++vMvVMjMbHV0N9BGxK3/fDVwHnNrN9ZmZ2cG6FuglPVfS8+c+A28GdnRrfWZmVqzM8MprgUlgXNJO4BJgKUBEXC3pJcAs8JvAM5LWAMcB48B1kubW86WI+E4XtsHMzBbQMtBHxDkt8n8OHFmQ9RhwYof1MjOziqR1rxszMzuIA72ZWeIc6M3MEudAb2aWOAd6M7PEOdCbmSXOgd7MLHEO9GZmiXOgNzNLnAO9mVniHOjNzBLnQG9mljgHejOzxDnQm5klzoHezCxxDvRmZolzoDczS5wDvZlZ4hzozcwS50BvZpa4loFe0kZJuyXtaJJ/rKQZSU9K+nBD3pmSfiTpPkkfrarSZmZWXpkW/SbgzAXyHwEuBj5XnyhpDPg8cBZwHHCOpOM6q6aZmXWqZaCPiJvJgnmz/N0RcRvwVEPWqcB9EXF/ROwDvgycvZjKmplZ+7rZR38E8GDd9M48rZCk1ZJmJc3u2bOni9UyMxstA3MyNiLWR0QtImrLly/vd3XMzJLRzUC/CziqbvrIPM3MzHqom4H+NuAYSS+TtAx4N3B9F9dnZmYFlrQqIOlaYBIYl7QTuARYChARV0t6CTAL/CbwjKQ1wHER8Ziki4AbgDFgY0Tc3ZWtMDOzploG+og4p0X+z8m6ZYryvgV8q7OqmZlZFQbmZKyZmXWHA72ZWeIc6M3MEudAb2aWOAd6M7PEOdCbmSXOgd7MLHEO9GZmiXOgNzNLnAO9mVniHOjNzBLnQG9mljgHejOzxDnQm5klzoHezCxxDvRmZolzoDczS5wDvZlZ4hzoB9DMDFx2WfZeNF22jJkZlHhmrPXWzAyccQbs2wfLlsG6dbBmzYHprVuzcq3KTEz0bxvMbLC0bNFL2ihpt6QdTfIl6QpJ90m6S9LJdXn7Jd2Rv66vsuKpmp7OAvb+/dn7li3zp6eny5UxM5tTputmE3DmAvlnAcfkr9XA39blPRERJ+WvP+i4lglp1eUyOZm1ysfGsvepqfnTk5PlypiZzWnZdRMRN0tauUCRs4HNERHALZJeIOnwiHioqkqmoky3zMRE9j49nQXsiQlYtWr+NJQrY2YG1fTRHwE8WDe9M097CHi2pFngaeDyiPh6BesbWmW6XCYmDrzmNE4XpRWVMTOD7p+MfWlE7JJ0NPA9ST+IiJ8UFZS0mqzrhxUrVnS5Wt0xM3Nwq7o+ba7LZa4FPzUF27YdmHaXi5l1QxWBfhdwVN30kXkaETH3fr+kaeA1QGGgj4j1wHqAWq0WFdSrpxq7ZYpGx2zd6i4XM+u9KgL99cBFkr4MvA74ZUQ8JOlQ4NcR8aSkceANwGcrWF9ftGqtN3bLzI18aUxbu9ZdLmbWWy0DvaRrgUlgXNJO4BJgKUBEXA18C3gLcB/wa+B9+ayvAq6R9AzZ6J7LI+KeqjegF8q01tetm98tM9cNU5RmZtZLZUbdnNMiP4APFqRvB1Z1XrXBUaa1vnfvwd0yUJxmZtZLvjK2hMaTqM1a62VGx5iZ9Vpygb6xL71V33rZMm6tm9mwSirQV3WfmMYycxcyubVuZsMoqUBf9h4w7ZaZu5DJzGwYJRXoy16Q1G4Zj5Yxs2GWVKCv8j4x7n83s1QoGx05WGq1WszOzrY9X9FJVTOzUSDp9oioFeUl06IvuqjJwd7MLKFHCTa7qMnMbNQlE+gbH8bhE6hmZplkum6aXdRkZjbqkgn04AuYzMyKJNN1Y2ZmxRzozcwS50BvZpY4B3ozs8Q50JuZJc6B3swscQN5rxtJe4Cf9bEK48DDfVz/oBvV/TOq292pUd1f/drul0bE8qKMgQz0/SZpttnNgWx098+obnenRnV/DeJ2u+vGzCxxDvRmZolzoC+2vt8VGHCjun9Gdbs7Nar7a+C22330ZmaJc4vezCxxDvRmZokbikAv6ShJN0m6R9Ldkv4sT3+hpBsl/Th/PzRPP1fSXZJ+IGm7pBMXWk6TdZ4p6UeS7pP00YL8KyQ9vsD8n5b0YGMZSe+VtEfSHfnrA53ul7plDsz+kbRJ0k/rtu+kJvO/TNKt+fz/JGlZnv5GSd+X9LSkdyS43Rfl84ak8br0SUm/rJv/EwtteycGbH8p/47cK+k/JV3cZP7UjpOy213tcRIRA/8CDgdOzj8/H7gXOA74LPDRPP2jwF/kn18PHJp/Pgu4daHlFKxvDPgJcDSwDLizvhxQA/4eeHyBOv9Ovr7HG9LfC1yZ6v4BNgHvKFHnrwDvzj9fDVyYf14JnABsbrWcId3u1+Tb+AAwXpc+CXxjVL5HwPvyv/Gz8ukXjchxUna7Kz1OunZQdfmA/Rfg94AfAYfX/RF+VFD2UGDXQsspSJ8AbqibXgusrfsj3kRBEG+yjq4H+gHbP5tKfPFEduXgkqLllV3OsG13w7Iq+QIP8XHyH8ArRvA4abnd3ThOhqLrpp6klWS/drcCL46Ih/KsnwMvLpjlAuDbLZbT6AjgwbrpnXkawEXA9XXr7cRU/q/hP0s6ahHLOcgA7B+AT+fb91eSDimY/zDgFxHxdJP52zYk293KhKQ7JX1b0qs7mL+0AdhfLwfeJWk2395jCuZP8Tgps92ttH2cDFWgl/Q8YAuwJiIeq8+L7OcuGsqfTvaH+kjZ5bRY/28B7wT+pqMNyPwrsDIiTgBuBL64iGXN0+/9k1sLHAu8Fnhh47K7IZHt/j7ZvUpOJDu+vt7m/KUNyP46BPi/yG4V8HfAxjbnb1si293RcTI0gV7SUrKd+48R8bU8+X8kHZ7nHw7srit/ArABODsi9i60nPwky9zJjT8BdgH1Le0j87TXAK8A7pP0APAb+QmTsbr5P7XQdkTE3oh4Mp/cAJzS0Q5pMCD7h4h4KDJPAl8ATs2XcUM+/wZgL/ACSUsa5098u5uKiMci4vH887eApfUn4aoyKPuLrJU7t/7ryPrbkz9OSm53Ux0fJ+329fTjRdZXtxlY15D+l8w/mfLZ/PMK4D7g9WWWU7C+JcD9wMs4cDLl1QXlOumjP7zu89uBW1LaPxzo8xSwDri8yTK+yvyTbH/akL+Jcn39Q7Xddct6gPl9ry/hwAWMpwL/NTed4vcIuBx4f/55ErhtRI6TUttd9XFS2UHUzRdwGtm/VXcBd+Svt5D14W0Ffgz8G/DCvPwG4NG6srMLLafJOt9Cdlb9J8DHmpRZaNTNZ8l+vZ/J3z+Zp18G3J3/8W8Cjk1p/wDfA34A7AD+AXhek/mPJjsxdR/Zl/mQPP21+f76X7IW3d2JbffF+fY9Dfw3sCFPv6juuLiFhiCT2vcIeAHwzXyfzQAnjshxUna7Kz1OfAsEM7PEDU0fvZmZdcaB3swscQ70ZmaJc6A3M0ucA72ZWeIc6M3MEudAb2aWuP8HzY76UcolPacAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(redfin_df[\"date\"], redfin_df[\"amount\"], \".\", color=\"red\")\n",
"plt.plot(zillow_df[\"date\"], zillow_df[\"amount\"], \".\", color=\"blue\")"
]
},
{
"cell_type": "markdown",
"id": "afc6164e-8ed9-4e6d-8f8f-60544fc556bc",
"metadata": {},
"source": [
"# realtor.com"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "0f526dad-81b7-4ada-929b-3ec66a0b6686",
"metadata": {},
"outputs": [],
"source": [
"def get_realtorcom_price(file_name: str):\n",
"\n",
" with gzip.open(file_name) as fp:\n",
" soup = BeautifulSoup(fp, \"html.parser\")\n",
"\n",
" item = soup.select_one(\"script#__NEXT_DATA__\").text\n",
" api_cache_string = json.loads(item)\n",
"\n",
" try:\n",
" estimates = api_cache_string[\"props\"][\"pageProps\"][\"initialPropertyDetails\"][\n",
" \"home\"\n",
" ][\"estimates\"][\"current_values\"][0]\n",
"\n",
" except KeyError:\n",
" return None\n",
"\n",
" high, mid, low, source, date, source = (\n",
" estimates[\"estimate_high\"],\n",
" estimates[\"estimate\"],\n",
" estimates[\"estimate_low\"],\n",
" estimates[\"estimate_low\"],\n",
" estimates[\"date\"],\n",
" estimates[\"source\"][\"type\"],\n",
" )\n",
"\n",
" return high, mid, low, source, date, source"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "f563c9a7-7fa5-40fe-8014-85d9267d3e25",
"metadata": {},
"outputs": [],
"source": [
"realtorcom_price_data = {\n",
" \"date\": [],\n",
" \"prediction_date\": [],\n",
" \"amount\": [],\n",
" \"amount_high\": [],\n",
" \"amount_low\": [],\n",
" \"source\": [],\n",
"}\n",
"\n",
"for path in pathlib.Path(DIRECTORY).iterdir():\n",
" if path.is_file() and \"realtorcom_1381\" in str(path):\n",
" path_str = str(path)\n",
"\n",
" try:\n",
" high, mid, low, source, date, source = get_realtorcom_price(path_str)\n",
"\n",
" except TypeError: # Returned none\n",
" continue\n",
"\n",
" model_date = datetime.datetime.strptime(date, \"%Y-%m-%d\")\n",
" read_date = get_date_from_file(path_str)\n",
"\n",
" realtorcom_price_data[\"date\"].append(read_date)\n",
" realtorcom_price_data[\"prediction_date\"].append(model_date)\n",
" realtorcom_price_data[\"amount\"].append(mid)\n",
" realtorcom_price_data[\"amount_high\"].append(high)\n",
" realtorcom_price_data[\"amount_low\"].append(low)\n",
" realtorcom_price_data[\"source\"].append(source)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "32cd5885-c58f-45b5-8015-2dd7d1f2692e",
"metadata": {},
"outputs": [],
"source": [
"realtor_df = (pd.DataFrame.from_dict(realtorcom_price_data)).drop_duplicates()\n",
"\n",
"start_date = datetime.date(2022, 4, 22)\n",
"end_date = datetime.date(2022, 5, 27)\n",
"\n",
"dates = []\n",
"for n in range(int((end_date - start_date).days)):\n",
" n_date = start_date + datetime.timedelta(n)\n",
" dates.append([n_date, n_date, None, None, None, None])\n",
"\n",
"append_df = pd.DataFrame(\n",
" columns=realtor_df.columns,\n",
" data=dates,\n",
")\n",
"\n",
"realtor_df = pd.concat([realtor_df, append_df])\n",
"\n",
"# Cast Columns as nullable int\n",
"cast_cols = [\"amount\", \"amount_high\", \"amount_low\"]\n",
"realtor_df[cast_cols] = realtor_df[cast_cols].astype(\"float\")\n",
"\n",
"date_cols = [\"date\", \"prediction_date\"]\n",
"realtor_df[date_cols] = realtor_df[date_cols].astype(\"datetime64[ns]\")\n",
"\n",
"realtor_df[\"error_low\"] = realtor_df[\"amount\"] - realtor_df[\"amount_low\"]\n",
"realtor_df[\"error_high\"] = realtor_df[\"amount_high\"] - realtor_df[\"amount\"]\n",
"\n",
"\n",
"realtor_df = realtor_df.sort_values(\"date\").reset_index(drop=True)\n",
"\n",
"realtor_df[\"website\"] = \"realtor.com\""
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "babff326-eeb7-4fd9-bf4e-485f59fb31d8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" date | \n",
" prediction_date | \n",
" amount | \n",
" amount_high | \n",
" amount_low | \n",
" source | \n",
" error_low | \n",
" error_high | \n",
" website | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2022-04-11 01:24:40 | \n",
" 2022-03-31 | \n",
" 1104300.0 | \n",
" 1268500.0 | \n",
" 940200.0 | \n",
" corelogic | \n",
" 164100.0 | \n",
" 164200.0 | \n",
" realtor.com | \n",
"
\n",
" \n",
" 1 | \n",
" 2022-04-11 07:03:53 | \n",
" 2022-03-31 | \n",
" 1104300.0 | \n",
" 1268500.0 | \n",
" 940200.0 | \n",
" corelogic | \n",
" 164100.0 | \n",
" 164200.0 | \n",
" realtor.com | \n",
"
\n",
" \n",
" 2 | \n",
" 2022-04-12 07:04:14 | \n",
" 2022-03-31 | \n",
" 1104300.0 | \n",
" 1268500.0 | \n",
" 940200.0 | \n",
" corelogic | \n",
" 164100.0 | \n",
" 164200.0 | \n",
" realtor.com | \n",
"
\n",
" \n",
" 3 | \n",
" 2022-04-13 07:00:57 | \n",
" 2022-03-31 | \n",
" 1104300.0 | \n",
" 1268500.0 | \n",
" 940200.0 | \n",
" corelogic | \n",
" 164100.0 | \n",
" 164200.0 | \n",
" realtor.com | \n",
"
\n",
" \n",
" 4 | \n",
" 2022-04-14 07:02:41 | \n",
" 2022-03-31 | \n",
" 1104300.0 | \n",
" 1268500.0 | \n",
" 940200.0 | \n",
" corelogic | \n",
" 164100.0 | \n",
" 164200.0 | \n",
" realtor.com | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" date prediction_date amount amount_high amount_low \\\n",
"0 2022-04-11 01:24:40 2022-03-31 1104300.0 1268500.0 940200.0 \n",
"1 2022-04-11 07:03:53 2022-03-31 1104300.0 1268500.0 940200.0 \n",
"2 2022-04-12 07:04:14 2022-03-31 1104300.0 1268500.0 940200.0 \n",
"3 2022-04-13 07:00:57 2022-03-31 1104300.0 1268500.0 940200.0 \n",
"4 2022-04-14 07:02:41 2022-03-31 1104300.0 1268500.0 940200.0 \n",
"\n",
" source error_low error_high website \n",
"0 corelogic 164100.0 164200.0 realtor.com \n",
"1 corelogic 164100.0 164200.0 realtor.com \n",
"2 corelogic 164100.0 164200.0 realtor.com \n",
"3 corelogic 164100.0 164200.0 realtor.com \n",
"4 corelogic 164100.0 164200.0 realtor.com "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"realtor_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "1904969d-79a8-40fd-8c78-8cb547ae3ce6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(redfin_df[\"date\"], redfin_df[\"amount\"], \".\", color=\"red\")\n",
"plt.plot(zillow_df[\"date\"], zillow_df[\"amount\"], \".\", color=\"blue\")\n",
"plt.plot(realtor_df[\"date\"], realtor_df[\"amount\"], \".\", color=\"purple\")"
]
},
{
"cell_type": "markdown",
"id": "1d89832e-ec8a-478c-8b1d-d257b1c5041a",
"metadata": {},
"source": [
"# Combine"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "563c69be-a10f-499a-b31b-d7af998cbc9c",
"metadata": {},
"outputs": [],
"source": [
"combined_df = pd.concat(\n",
" [\n",
" realtor_df,\n",
" redfin_df,\n",
" zillow_df,\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "c6984926-805e-4ecd-9b3a-28ddcdb60f25",
"metadata": {},
"outputs": [],
"source": [
"combined_df.to_json(\"./home_price_estimate_20220701.json\", orient=\"table\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}