diff --git a/Makefile.data b/Makefile.data index 31a3c03..af3a1f3 100644 --- a/Makefile.data +++ b/Makefile.data @@ -115,7 +115,7 @@ MAP_ASSETS_DEPS := pipeline/download/map_assets.py pipeline/transform/transform_ transform-school-proximity transform-tree-density \ generate-postcode-boundaries generate-travel-times enrich-actual-listings -prepare: $(PRICES_STAMP) download-places tiles satellite-tiles overlay-tiles property-border-tiles generate-postcode-boundaries download-map-assets generate-travel-times | $(POSTCODES_PQ) $(PROPERTIES_PQ) $(PRICE_INDEX) +prepare: $(PRICES_STAMP) download-places tiles satellite-tiles overlay-tiles property-border-tiles tree-overlay-tiles crime-hotspot-tiles property-border-tiles generate-postcode-boundaries download-map-assets generate-travel-times | $(POSTCODES_PQ) $(PROPERTIES_PQ) $(PRICE_INDEX) $(VALIDATE_OUTPUTS) --parquet $(POSTCODES_PQ) --parquet $(PROPERTIES_PQ) --parquet $(PRICE_INDEX) --postcode-boundary-match "$(POSTCODES_PQ)::$(PC_BOUNDARIES)" --postcode-features $(POSTCODES_PQ) --postcode-universe "$(ARCGIS)::$(POSTCODES_PQ)" --properties-subset "$(PROPERTIES_PQ)::$(POSTCODES_PQ)" --price-index $(PRICE_INDEX) merge: $(MERGE_STAMP) | $(POSTCODES_PQ) $(PROPERTIES_PQ) $(VALIDATE_OUTPUTS) --parquet $(POSTCODES_PQ) --parquet $(PROPERTIES_PQ) --postcode-features $(POSTCODES_PQ) --postcode-universe "$(ARCGIS)::$(POSTCODES_PQ)" --properties-subset "$(PROPERTIES_PQ)::$(POSTCODES_PQ)" diff --git a/analyses/online_listings_buy.ipynb b/analyses/online_listings_buy.ipynb index 6f461c2..44dba93 100644 --- a/analyses/online_listings_buy.ipynb +++ b/analyses/online_listings_buy.ipynb @@ -2,68 +2,99 @@ "cells": [ { "cell_type": "markdown", - "id": "55bc43ad", + "id": "21f27a93", "metadata": {}, "source": [ - "# Online Buy Listings\n", + "# Online Buy Listings — data quality & cleanup\n", "\n", - "Analysis of `finder/data/online_listings_buy.parquet`." + "Source: `finder/data/online_listings_buy.parquet` — ~112k UK *for-sale* property listings\n", + "(Greater London) scraped from **Rightmove**, **OnTheMarket** and **Zoopla** and merged by the\n", + "`finder` pipeline (`transform.py` / `onthemarket.py` / `zoopla.py` → `storage.py`).\n", + "\n", + "This notebook:\n", + "1. **Profiles** the raw data (shape, schema, missingness by provider).\n", + "2. **Demonstrates each data-quality issue** found in the audit, with the query that proves it.\n", + "3. **Cleans** the data (cell block in §4), adding provenance/flag columns rather than silently dropping where possible.\n", + "4. **Re-shows the stats** so the fixes are visible (§5), incl. a before/after summary table.\n", + "\n", + "Every count below is computed live from the file." ] }, { "cell_type": "code", "execution_count": 1, - "id": "1560f01a", + "id": "075fbea3", "metadata": { "execution": { - "iopub.execute_input": "2026-05-17T10:23:47.594553Z", - "iopub.status.busy": "2026-05-17T10:23:47.594488Z", - "iopub.status.idle": "2026-05-17T10:23:47.858517Z", - "shell.execute_reply": "2026-05-17T10:23:47.858194Z" + "iopub.execute_input": "2026-06-03T07:34:30.479194Z", + "iopub.status.busy": "2026-06-03T07:34:30.479121Z", + "iopub.status.idle": "2026-06-03T07:34:30.900789Z", + "shell.execute_reply": "2026-06-03T07:34:30.900538Z" } }, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'matplotlib'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m pathlib \u001b[38;5;28;01mimport\u001b[39;00m Path\n\u001b[32m 2\u001b[39m \n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m matplotlib.pyplot \u001b[38;5;28;01mas\u001b[39;00m plt\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m numpy \u001b[38;5;28;01mas\u001b[39;00m np\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m polars \u001b[38;5;28;01mas\u001b[39;00m pl\n\u001b[32m 6\u001b[39m \n", + "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'matplotlib'" + ] + } + ], "source": [ "from pathlib import Path\n", "\n", - "import plotly.express as px\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", "import polars as pl\n", "\n", - "pl.Config.set_tbl_rows(45)\n", - "pl.Config.set_fmt_str_lengths(80)\n", + "%matplotlib inline\n", + "plt.rcParams[\"figure.dpi\"] = 110\n", + "pl.Config.set_tbl_rows(40)\n", + "pl.Config.set_fmt_str_lengths(90)\n", + "pl.Config.set_tbl_cols(30)\n", "\n", - "DATA_PATH = Path(\"/volumes/projects/perfect-postcode/finder/data/test/online_listings_buy.parquet\")" + "DATA_PATH = Path(\"/volumes/projects/perfect-postcode/finder/data/online_listings_buy.parquet\")\n", + "\n", + "# Provider derived from the listing URL domain (mirrors the existing analysis convention).\n", + "PROVIDER = (\n", + " pl.when(pl.col(\"Listing URL\").str.contains(\"rightmove.co.uk\", literal=True)).then(pl.lit(\"Rightmove\"))\n", + " .when(pl.col(\"Listing URL\").str.contains(\"onthemarket.com\", literal=True)).then(pl.lit(\"OnTheMarket\"))\n", + " .when(pl.col(\"Listing URL\").str.contains(\"zoopla.co.uk\", literal=True)).then(pl.lit(\"Zoopla\"))\n", + " .otherwise(pl.lit(\"Unknown\"))\n", + " .alias(\"provider\")\n", + ")\n", + "\n", + "raw = pl.read_parquet(DATA_PATH).with_columns(PROVIDER)\n", + "print(f\"Rows: {raw.height:,} Columns: {len(raw.columns)}\")\n", + "raw.group_by(\"provider\").len().sort(\"len\", descending=True)" ] }, { "cell_type": "markdown", - "id": "6c5d1f0a", + "id": "8d632ad4", "metadata": {}, "source": [ - "## Load" + "## 1 · Overview" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "09a54208", + "execution_count": null, + "id": "692830dd", "metadata": { "execution": { - "iopub.execute_input": "2026-05-17T10:23:47.859716Z", - "iopub.status.busy": "2026-05-17T10:23:47.859600Z", - "iopub.status.idle": "2026-05-17T10:23:47.955592Z", - "shell.execute_reply": "2026-05-17T10:23:47.955345Z" + "iopub.execute_input": "2026-06-03T07:34:30.901690Z", + "iopub.status.busy": "2026-06-03T07:34:30.901608Z", + "iopub.status.idle": "2026-06-03T07:34:30.903798Z", + "shell.execute_reply": "2026-06-03T07:34:30.903603Z" } }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Rows: 242\n", - "Columns: 25\n" - ] - }, { "data": { "text/html": [ @@ -74,183 +105,63 @@ " white-space: pre-wrap;\n", "}\n", "\n", - "shape: (3, 2)
| provider | len |
|---|---|
| str | u32 |
| "OnTheMarket" | 85 |
| "Rightmove" | 99 |
| "Zoopla" | 58 |
| column | dtype |
|---|---|
| str | str |
| "Bedrooms" | "Int32" |
| "Bathrooms" | "Int32" |
| "Number of bedrooms & living rooms" | "Int32" |
| "lon" | "Float64" |
| "lat" | "Float64" |
| "Postcode" | "String" |
| "Postcode source" | "String" |
| "Extracted postcode" | "String" |
| "Inferred postcode" | "String" |
| "Listing raw address" | "String" |
| "Address per Property Register" | "String" |
| "UPRN" | "String" |
| "Property number or name" | "String" |
| "Leasehold/Freehold" | "String" |
| "Property type" | "String" |
| "Property sub-type" | "String" |
| "Price qualifier" | "String" |
| "Total floor area (sqm)" | "Float64" |
| "Listing URL" | "String" |
| "Listing features" | "List(String)" |
| "Listing date" | "Datetime(time_unit='us', time_zone=None)" |
| "Listing status" | "String" |
| "Asking price" | "Int64" |
| "Asking price per sqm" | "Int32" |
| "provider" | "String" |
| provider | Bedrooms | Bathrooms | Number of bedrooms & living rooms | lon | lat | Postcode | Postcode source | Extracted postcode | Inferred postcode | Listing raw address | Address per Property Register | UPRN | Property number or name | Leasehold/Freehold | Property type | Property sub-type | Price qualifier | Total floor area (sqm) | Listing URL | Listing features | Listing date | Listing status | Asking price | Asking price per sqm |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| str | i32 | i32 | i32 | f64 | f64 | str | str | str | str | str | str | str | str | str | str | str | str | f64 | str | list[str] | datetime[μs] | str | i64 | i32 |
| "OnTheMarket" | 1 | 1 | 2 | -0.129102 | 51.463636 | "SW4 7EF" | "coordinates" | null | "SW4 7EF" | "Bedford Road, London" | "Bedford Road, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Apartment" | "" | null | "https://www.onthemarket.com/details/19209711/" | ["Tenure: Leasehold (111 years remaining)", "Top floor one-bedroom apartment within a modern development completed in 2021", … "Generous double bedroom, contemporary bathroom and separate utility/storage room"] | null | "For sale" | 525000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.100233 | 51.466129 | "SE5 9AA" | "coordinates" | null | "SE5 9AA" | "Padfield Road, London, SE5" | "Padfield Road, London" | null | null | "Freehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19522441/" | ["Tenure: Share of freehold (999 years remaining)", "One Bedroom"] | null | "For sale" | 275000 | null |
| "OnTheMarket" | 4 | 1 | 5 | -0.108913 | 51.471775 | "SW9 6NN" | "coordinates" | null | "SW9 6NN" | "Lord Holland Lane, Myatts Fields South, London" | "Lord Holland Lane, Myatts Fields South, London" | null | null | "Freehold" | "Terraced" | "Terraced House" | "Offers in excess of" | null | "https://www.onthemarket.com/details/18847208/" | ["Tenure: Freehold", "Four Bedrooms", … "Superb Condition"] | null | "For sale" | 600000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.107904 | 51.473026 | "SW9 6BF" | "coordinates" | null | "SW9 6BF" | "Mostyn Road, London SW9" | "Mostyn Road, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19305103/" | ["Tenure: Leasehold", "One bedroom"] | null | "For sale" | 350000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.115372 | 51.475374 | "SW9 0RG" | "coordinates" | null | "SW9 0RG" | "Hackford Road, London SW9" | "Hackford Road, London" | null | null | "Freehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19601952/" | ["Tenure: Share of freehold", "Separate dining and living room", … "Study"] | null | "For sale" | 475000 | null |
| "OnTheMarket" | 0 | 1 | 1 | -0.117911 | 51.476212 | "SW9 0HP" | "coordinates" | null | "SW9 0HP" | "Clapham Road, London SW9" | "Clapham Road, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19601638/" | ["Tenure: Leasehold", "Nearest station 0.3mi."] | null | "For sale" | 225000 | null |
| "OnTheMarket" | 2 | 2 | 4 | -0.105579 | 51.463969 | "SW9 8SE" | "coordinates" | null | "SW9 8SE" | "Coldharbour Lane, Brixton, London, SW9" | "Coldharbour Lane, Brixton, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19601141/" | ["Tenure: Leasehold", "Fantastic two bedroom period flat"] | null | "For sale" | 575000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.116437 | 51.466426 | "SW9 9FX" | "coordinates" | null | "SW9 9FX" | "Stockwell Road, SW9" | "Stockwell Road" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19599310/" | ["Tenure: Leasehold (120 years remaining)", "One double bedroom", "Chain-free"] | null | "For sale" | 435000 | null |
| "OnTheMarket" | 2 | 2 | 4 | -0.102355 | 51.46566 | "SW9 8RU" | "coordinates" | null | "SW9 8RU" | "Coldharbour Lane, SW9" | "Coldharbour Lane" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "Offers over" | null | "https://www.onthemarket.com/details/19599313/" | ["Tenure: Leasehold (127 years remaining)", "Two double bedrooms", "Chain-free"] | null | "For sale" | 450000 | null |
| "OnTheMarket" | 2 | 2 | 4 | -0.114496 | 51.466421 | "SW9 0FH" | "coordinates" | null | "SW9 0FH" | "Stockwell Park Walk, London, SW9" | "Stockwell Park Walk, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "Offers in excess of" | null | "https://www.onthemarket.com/details/18060975/" | ["Tenure: Leasehold (113 years remaining)", "Stylish and well-presented two-bedroom, two-bathroom apartment", "Study"] | null | "For sale" | 500000 | null |
| "OnTheMarket" | 2 | 2 | 4 | -0.126918 | 51.469851 | "SW4 6BF" | "coordinates" | null | "SW4 6BF" | "20 Fergusson Mews, London, SW4" | "20 Fergusson Mews, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "Offers in excess of" | null | "https://www.onthemarket.com/details/19266851/" | ["Tenure: Leasehold", "Gated Development", … "Chain-free"] | null | "For sale" | 650000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.116535 | 51.466385 | "SW9 9FX" | "coordinates" | null | "SW9 9FX" | "Stockwell Road, Stockwell, London, SW9" | "Stockwell Road, Stockwell, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "Offers in excess of" | null | "https://www.onthemarket.com/details/19167472/" | ["Tenure: Leasehold (125 years remaining)", "Stylish finish", … "Chain-free"] | null | "For sale" | 450000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.1109 | 51.462364 | "SW9 8GA" | "coordinates" | null | "SW9 8GA" | "Milles Square, Brixton, London, SW9" | "Milles Square, Brixton, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19592532/" | ["Tenure: Leasehold (155 years remaining)", "Neatly presented 1 bedroom flat in a convenient location"] | null | "For sale" | 340000 | null |
| "OnTheMarket" | 2 | 1 | 3 | -0.110269 | 51.46006 | "SE24 0LW" | "coordinates" | null | "SE24 0LW" | "Railton Road, London SE24" | "Railton Road, London" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19591254/" | ["Tenure: Leasehold", "Two Double Bedrooms", "Chain-free"] | null | "For sale" | 500000 | null |
| "OnTheMarket" | 1 | 1 | 2 | -0.126297 | 51.466742 | "SW9 9LE" | "coordinates" | null | "SW9 9LE" | "Hemberton Road, London SW9" | "Hemberton Road, London" | null | null | "Freehold" | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.onthemarket.com/details/19591126/" | ["Tenure: Share of freehold", "Chain Free", … "Study"] | null | "For sale" | 550000 | null |
| "Rightmove" | 1 | 1 | 2 | -0.121569 | 51.471079 | "SW9 9EU" | "coordinates" | null | "SW9 9EU" | "Stockwell Road, London, SW9" | "Stockwell Road, London" | null | null | null | "Flats/Maisonettes" | "Apartment" | "Guide Price" | null | "https://www.rightmove.co.uk/properties/89076063#/?channel=RES_BUY" | ["Within easy reach of local amenities, green spaces and transport connections", "Excellent value-add opportunity for owner-occupiers and investors", … "Well-proportioned one-bedroom apartment in a popular SW9 location"] | 2026-05-29 14:30:37 | "For sale" | 310000 | null |
| "Rightmove" | 5 | 4 | 9 | -0.11817 | 51.47115 | "SW9 0DG" | "coordinates" | null | "SW9 0DG" | "Stockwell Park Crescent II, London SW9" | "Stockwell Park Crescent II, London" | null | null | "Freehold" | "Semi-Detached" | "Semi-Detached" | "" | 310.6 | "https://www.rightmove.co.uk/properties/174610352#/?channel=RES_BUY" | [] | 2026-04-17 18:34:21 | "For sale" | 2595000 | 8355 |
| "Rightmove" | 6 | 3 | 9 | -0.114727 | 51.473247 | "SW9 0AR" | "coordinates" | null | "SW9 0AR" | "Groveway, Stockwell" | "Groveway, Stockwell" | null | null | "Freehold" | "Detached" | "Detached" | "" | null | "https://www.rightmove.co.uk/properties/174282005#/?channel=RES_BUY" | ["Early Victorian Family Home", "Grade II Listed", … "Wonderful Potential"] | 2026-04-10 11:17:35 | "For sale" | 2295000 | null |
| "Rightmove" | 4 | 2 | 6 | -0.116603 | 51.472141 | "SW9 0DD" | "coordinates" | null | "SW9 0DD" | "Stockwell Park Road, London, SW9" | "Stockwell Park Road, London" | null | null | "Freehold" | "Semi-Detached" | "Semi-Detached" | "" | 216.1 | "https://www.rightmove.co.uk/properties/170781485#/?channel=RES_BUY" | ["4 bedrooms", "2 reception rooms", … "Semi-Detached"] | 2026-01-02 17:30:39 | "For sale" | 2250000 | 10412 |
| "Rightmove" | 2 | 2 | 4 | -0.11247 | 51.46428 | "SW9 7QH" | "coordinates" | null | "SW9 7QH" | "St Johns Buildings, London SW9" | "St Johns Buildings, London" | null | null | null | "Terraced" | "Terraced" | "" | 213.4 | "https://www.rightmove.co.uk/properties/174206714#/?channel=RES_BUY" | [] | 2026-04-08 17:23:59 | "For sale" | 2100000 | 9841 |
| "Rightmove" | 4 | 3 | 7 | -0.116765 | 51.47089 | "SW9 0DB" | "coordinates" | null | "SW9 0DB" | "Stockwell Park Road, London SW9" | "Stockwell Park Road, London" | null | null | "Freehold" | "Terraced" | "Terraced" | "Guide Price" | 197.5 | "https://www.rightmove.co.uk/properties/88435821#/?channel=RES_BUY" | ["4 bedrooms", "2 reception rooms", … "Garden"] | 2026-05-13 16:21:42 | "For sale" | 2100000 | 10633 |
| "Rightmove" | 5 | 3 | 8 | -0.113111 | 51.478768 | "SW9 0LJ" | "coordinates" | null | "SW9 0LJ" | "Crewdson Road, London SW9" | "Crewdson Road, London" | null | null | "Freehold" | "Terraced" | "Terraced" | "" | 246.7 | "https://www.rightmove.co.uk/properties/174798002#/?channel=RES_BUY" | ["5 bedrooms", "1 reception room", … "Garden"] | 2026-04-22 16:04:47 | "For sale" | 1900000 | 7702 |
| "Rightmove" | 3 | 3 | 6 | -0.11805 | 51.47091 | "SW9 0DG" | "coordinates" | null | "SW9 0DG" | "Stockwell Park Crescent, Stockwell, London, SW9" | "Stockwell Park Crescent, Stockwell, London" | null | null | "Freehold" | "Detached" | "House" | "" | 156.8 | "https://www.rightmove.co.uk/properties/88376967#/?channel=RES_BUY" | ["Wonderful 2-bedroom semi-detached house situated over 3 floors", "Spacious kitchen", … "Well located for the local shops and amenities of Clapham and Stockwell Road"] | 2026-05-12 16:14:48 | "For sale" | 1695000 | 10810 |
| "Rightmove" | 5 | 3 | 8 | -0.119192 | 51.474381 | "SW9 0RU" | "coordinates" | null | "SW9 0RU" | "Stockwell Park Road, London, SW9" | "Stockwell Park Road, London" | null | null | "Freehold" | "Semi-Detached" | "Semi-Detached" | "" | 193.2 | "https://www.rightmove.co.uk/properties/167893637#/?channel=RES_BUY" | [] | 2025-10-07 09:57:34 | "For sale" | 1695000 | 8773 |
| "Rightmove" | 2 | 2 | 4 | -0.11778 | 51.470774 | "SW9 0DG" | "coordinates" | null | "SW9 0DG" | "Stockwell Park Crescent, Stockwell" | "Stockwell Park Crescent, Stockwell" | null | null | "Freehold" | "Semi-Detached" | "Semi-Detached" | "" | null | "https://www.rightmove.co.uk/properties/173668991#/?channel=RES_BUY" | ["Georgian Home", "Excellent Condition", … "No Onward Chain"] | 2026-03-25 09:55:49 | "For sale" | 1695000 | null |
| "Rightmove" | 4 | 3 | 7 | -0.121041 | 51.465546 | "SW9 9RF" | "coordinates" | null | "SW9 9RF" | "Hargwyne Street, London, SW9" | "Hargwyne Street, London" | null | null | "Freehold" | "Terraced" | "Terraced" | "" | 165.7 | "https://www.rightmove.co.uk/properties/174050450#/?channel=RES_BUY" | [] | 2026-04-02 16:51:56 | "For sale" | 1650000 | 9958 |
| "Rightmove" | 5 | 2 | 7 | -0.119194 | 51.470986 | "SW9 0SW" | "coordinates" | null | "SW9 0SW" | "Burnley Road, London, SW9" | "Burnley Road, London" | null | null | "Freehold" | "Terraced" | "Terraced" | "Guide Price" | 199.5 | "https://www.rightmove.co.uk/properties/88367181#/?channel=RES_BUY" | ["Quiet Residential Street", "Versatile Accommodation", … "Period Features"] | 2026-05-12 14:23:19 | "For sale" | 1595000 | 7995 |
| "Rightmove" | 5 | 3 | 8 | -0.118914 | 51.475262 | "SW9 0QQ" | "coordinates" | null | "SW9 0QQ" | "Clapham Road, Stockwell" | "Clapham Road, Stockwell" | null | null | "Freehold" | "Terraced" | "Terraced" | "" | null | "https://www.rightmove.co.uk/properties/172178081#/?channel=RES_BUY" | ["Georgian Townhouse", "Five Double Bedrooms", … "2617sq.ft"] | 2026-02-13 14:31:16 | "For sale" | 1550000 | null |
| "Rightmove" | 8 | 1 | 9 | -0.114329 | 51.465359 | "SW9 7AW" | "coordinates" | null | "SW9 7AW" | "Brixton Road, Brixton High Street" | "Brixton Road, Brixton High Street" | null | null | "Freehold" | "Terraced" | "Terraced" | "Guide Price" | 44.0 | "https://www.rightmove.co.uk/properties/88139847#/?channel=RES_BUY" | ["FREEHOLD MIXED USE COMMERCIAL & RESIDENTIAL", "GROUND FLOOR TAKE-AWAY - LEASE EXPIRING 2030", … "NEAR BRIXTON UNDERGROUND & OVERGROUND STATIONS"] | 2026-05-06 17:31:38 | "For sale" | 1550000 | 35227 |
| "Rightmove" | 4 | 2 | 6 | -0.118903 | 51.461726 | "SW9 8DR" | "coordinates" | null | "SW9 8DR" | "Trinity Gardens, LONDON" | "Trinity Gardens, LONDON" | null | null | "Freehold" | "Terraced" | "Terraced" | "Guide Price" | 114.5 | "https://www.rightmove.co.uk/properties/174274454#/?channel=RES_BUY" | ["Victorian House", "Mid Terraced", … "Central Location"] | 2026-04-10 09:39:04 | "For sale" | 1500000 | 13100 |
| "Zoopla" | 4 | 2 | 6 | -0.116819 | 51.477238 | "SW9 0HD" | "detail_address" | null | "SW9 0HU" | "Caldwell Street, Stockwell SW9" | "1, Caldwell Street, Stockwell" | "100021818679" | "1" | "Freehold" | "Other" | "Property" | "" | 114.0 | "https://www.zoopla.co.uk/for-sale/details/73326946/" | [] | null | "For sale" | 995000 | 8728 |
| "Zoopla" | 2 | 1 | 3 | -0.118798 | 51.468221 | "SW9 0TZ" | "detail_address" | null | "SW9 9PU" | "Stockwell Road, Stockwell, London SW9" | "Flat 27, Addington House,, Stockwell Road, Stockwell, London" | "100021894599" | "Flat 27, Addington House," | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 77.9 | "https://www.zoopla.co.uk/for-sale/details/72554891/" | [] | null | "For sale" | 350000 | 4493 |
| "Zoopla" | 5 | 3 | 8 | -0.119192 | 51.474381 | "SW9 0AP" | "detail_address" | null | "SW9 0RU" | "Stockwell Park Road, London SW9" | "1, Stockwell Park Road, London" | "100023386020" | "1" | "Freehold" | "Semi-Detached" | "Semi Detached" | "" | 194.9 | "https://www.zoopla.co.uk/for-sale/details/69392186/" | [] | null | "For sale" | 1695000 | 8697 |
| "Zoopla" | 3 | 2 | 5 | -0.122658 | 51.469424 | "SW9 9HG" | "detail_address" | null | "SW9 9HE" | "Lingham Street, Stockwell, London SW9" | "Flat 11 Beale House, 45, Lingham Street, Stockwell, London" | "100021894650" | "Flat 11 Beale House, 45" | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 102.9 | "https://www.zoopla.co.uk/for-sale/details/73306789/" | [] | null | "For sale" | 525000 | 5102 |
| "Zoopla" | 2 | 2 | 4 | -0.129002 | 51.46795 | "SW9 9AN" | "detail_address" | null | "SW9 9AN" | "Houghton Square, London SW9" | "17, Houghton Square, London" | "10008788775" | "17" | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 72.0 | "https://www.zoopla.co.uk/for-sale/details/73302918/" | [] | null | "For sale" | 500000 | 6944 |
| "Zoopla" | 2 | 1 | 3 | -0.115029 | 51.477508 | "SW9 0ET" | "detail_address" | null | "SW9 0EN" | "Cleveland House, Hackford Road, London SW9" | "Flat 4,, Cleveland House, Hackford Road, London" | "100021847214" | "Flat 4," | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 55.0 | "https://www.zoopla.co.uk/for-sale/details/73302851/" | [] | null | "For sale" | 515000 | 9364 |
| "Zoopla" | 2 | 1 | 3 | -0.125681 | 51.466593 | "SW9 9LF" | "detail_address" | null | "SW9 9LF" | "Hemberton Road, Clapham North, London SW9" | "chpk0226649, Hemberton Road, Clapham North, London" | null | "chpk0226649" | null | "Flats/Maisonettes" | "Flat" | "" | 49.7 | "https://www.zoopla.co.uk/for-sale/details/71215394/" | [] | null | "For sale" | 475000 | 9557 |
| "Zoopla" | 1 | 1 | 2 | -0.117086 | 51.466529 | "SW9 9FX" | "detail_address" | null | "SW9 9TG" | "Stockwell Road SW9" | "Flat 59, 151, Stockwell Road" | "10094957235" | "Flat 59, 151" | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 52.0 | "https://www.zoopla.co.uk/for-sale/details/73250562/" | [] | null | "For sale" | 465000 | 8942 |
| "Zoopla" | 2 | 1 | 3 | -0.12876 | 51.464473 | "SW9 9NW" | "detail_address" | null | "SW9 9PG" | "Fenwick Place SW9" | "First Floor Flat, 70, Fenwick Place" | null | "First Floor Flat, 70" | null | "Flats/Maisonettes" | "Flat" | "" | 70.2 | "https://www.zoopla.co.uk/for-sale/details/73268982/" | [] | null | "For sale" | 599950 | 8546 |
| "Zoopla" | 1 | 1 | 2 | -0.108771 | 51.470695 | "SW9 7SB" | "detail_address" | null | "SW9 7JX" | "Loughborough Road SW9" | "Flat C, 58, Loughborough Road" | null | "Flat C, 58" | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 44.1 | "https://www.zoopla.co.uk/for-sale/details/73268027/" | [] | null | "For sale" | 375000 | 8503 |
| "Zoopla" | 2 | 2 | 4 | -0.108351 | 51.475345 | "SW9 7RH" | "detail_address" | null | "SW9 7BN" | "Eythorne Road, Oval SW9" | "Flat 7, 5, Eythorne Road, Oval" | null | "Flat 7, 5" | null | "Flats/Maisonettes" | "Flat" | "" | null | "https://www.zoopla.co.uk/for-sale/details/73266802/" | [] | null | "For sale" | 575000 | null |
| "Zoopla" | 2 | 1 | 3 | -0.12142 | 51.472181 | "SW9 9AU" | "detail_address" | null | "SW9 9AU" | "Yates Court, Stockwell, London SW9" | "chpk3677610, Yates Court, Stockwell, London" | null | "chpk3677610" | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 72.0 | "https://www.zoopla.co.uk/for-sale/details/73261921/" | [] | null | "For sale" | 475000 | 6597 |
| "Zoopla" | 2 | 2 | 4 | -0.10787 | 51.476628 | "SW9 6HP" | "detail_address" | null | "SW9 6SB" | "Beam, Lambeth SW9, New home" | "Beam, Lambeth SW9, New home" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 74.4 | "https://www.zoopla.co.uk/new-homes/details/73247019/" | [] | null | "For sale" | 580000 | 7796 |
| "Zoopla" | 2 | 2 | 4 | -0.10787 | 51.476628 | "SW9 6HP" | "detail_address" | null | "SW9 6SB" | "Beam, Lambeth SW9, New home" | "Beam, Lambeth SW9, New home" | null | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 74.4 | "https://www.zoopla.co.uk/new-homes/details/73246935/" | [] | null | "For sale" | 595000 | 7997 |
| "Zoopla" | 2 | 2 | 4 | -0.122738 | 51.467418 | "SW9 9FX" | "detail_address" | null | "SW9 9DG" | "Stockwell Road, Brixton SW9, New home" | "Stockwell Road, Brixton SW9, New home" | "10094957206" | null | "Leasehold" | "Flats/Maisonettes" | "Flat" | "" | 72.0 | "https://www.zoopla.co.uk/new-homes/details/73239981/" | [] | null | "For sale" | 575000 | 7986 |
| provider | Bedrooms | Bathrooms | Number of bedrooms & living rooms | lon | lat | Postcode | Postcode source | Extracted postcode | Inferred postcode | Listing raw address | Address per Property Register | UPRN | Property number or name | Leasehold/Freehold | Property type | Property sub-type | Price qualifier | Total floor area (sqm) | Listing URL | Listing features | Listing date | Listing status | Asking price | Asking price per sqm |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| str | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 |
| "OnTheMarket" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 84 | 0 | 0 | 0 | 85 | 85 | 0 | 0 | 0 | 0 | 82 | 0 | 0 | 85 | 0 | 0 | 82 |
| "Rightmove" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 98 | 0 | 0 | 0 | 99 | 99 | 17 | 0 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 34 |
| "Zoopla" | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 58 | 0 | 0 | 0 | 25 | 11 | 14 | 0 | 0 | 0 | 5 | 0 | 0 | 58 | 0 | 0 | 5 |
| provider | Postcode | Property type | Property sub-type | Bedrooms | Bathrooms | Asking price | Total floor area (sqm) | Price qualifier | Listing date |
|---|---|---|---|---|---|---|---|---|---|
| str | str | str | str | i32 | i32 | i64 | f64 | str | datetime[μs] |
| "Rightmove" | "BR1 5RW" | "Semi-Detached" | "Semi-Detached" | 3 | 1 | 550000 | null | "" | 2025-11-12 13:58:41 |
| "Rightmove" | "BR1 2PF" | "Detached" | "Detached" | 6 | 4 | 3000000 | 361.8 | "" | 2026-01-22 10:22:09 |
| "Rightmove" | "BR1 2QD" | "Detached" | "Detached" | 5 | 5 | 3000000 | null | "Guide Price" | 2026-03-24 10:55:03 |
| "Rightmove" | "BR1 3LU" | "Detached" | "Detached" | 6 | 0 | 2750000 | 322.1 | "" | 2026-04-25 11:59:31 |
| "Rightmove" | "BR1 3AR" | "Detached" | "Detached" | 6 | 4 | 2695000 | 483.6 | "" | 2026-01-06 21:38:25 |
| "Rightmove" | "BR1 2AY" | "Detached" | "Detached" | 5 | 5 | 2500000 | 402.8 | "Offers in Excess of" | 2026-02-20 11:48:01 |
| "Rightmove" | "BR1 2HG" | "Detached" | "Detached" | 5 | 4 | 2500000 | 457.5 | "Guide Price" | 2026-02-07 18:12:38 |
| "Rightmove" | "BR1 2JG" | "Detached" | "Detached" | 5 | 3 | 2350000 | null | "" | 2026-05-01 11:14:35 |
| statistic | Bedrooms | Bathrooms | Number of bedrooms & living rooms | Asking price | Total floor area (sqm) | Asking price per sqm | lat | lon |
|---|---|---|---|---|---|---|---|---|
| str | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 |
| "count" | 112605.0 | 112605.0 | 112605.0 | 112241.0 | 56914.0 | 56914.0 | 112605.0 | 112605.0 |
| "null_count" | 0.0 | 0.0 | 0.0 | 364.0 | 55691.0 | 55691.0 | 0.0 | 0.0 |
| "mean" | 2.39191 | 1.567399 | 3.959309 | 921922.833465 | 113.720136 | 9283.323295 | 51.500839 | -0.147325 |
| "std" | 1.400247 | 1.013846 | 2.225019 | 1.6093e6 | 108.288173 | 7445.316463 | 0.083935 | 0.166763 |
| "min" | 0.0 | 0.0 | 0.0 | 1.0 | 5.0 | 4.0 | 51.242629 | -0.593469 |
| "25%" | 1.0 | 1.0 | 2.0 | 375000.0 | 60.0 | 5624.0 | 51.450302 | -0.245267 |
| "50%" | 2.0 | 1.0 | 4.0 | 550000.0 | 81.8 | 7301.0 | 51.5008 | -0.15191 |
| "75%" | 3.0 | 2.0 | 5.0 | 875000.0 | 126.0 | 10492.0 | 51.550221 | -0.05151 |
| "max" | 20.0 | 20.0 | 40.0 | 1e8 | 1893.1 | 410959.0 | 51.781074 | 0.452373 |
| provider | Bedrooms | Bathrooms | Number of bedrooms & living rooms | lon | lat | Postcode | Postcode source | Extracted postcode | Inferred postcode | Listing raw address | Address per Property Register | UPRN | Property number or name | Leasehold/Freehold | Property type | Property sub-type | Price qualifier | Total floor area (sqm) | Listing URL | Listing features | Listing date | Listing status | Asking price | Asking price per sqm |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| str | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 |
| "OnTheMarket" | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 95.9 | 0.0 | 0.0 | 0.1 | 100.0 | 100.0 | 11.2 | 0.0 | 0.0 | 60.9 | 86.9 | 0.0 | 0.0 | 100.0 | 0.0 | 0.1 | 86.9 |
| "Rightmove" | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 95.1 | 0.0 | 0.0 | 0.0 | 100.0 | 100.0 | 14.2 | 0.0 | 0.0 | 58.8 | 46.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 46.8 |
| "Zoopla" | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 100.0 | 0.0 | 40.1 | 40.2 | 70.7 | 61.5 | 50.2 | 0.0 | 0.0 | 100.0 | 16.8 | 0.0 | 0.0 | 100.0 | 0.0 | 4.9 | 16.8 |
| provider | frac == beds+baths |
|---|---|
| str | f64 |
| "OnTheMarket" | 1.0 |
| "Rightmove" | 1.0 |
| "Zoopla" | 1.0 |
| shared_ownership | rows | median_price | median_£/sqm |
|---|---|---|---|
| bool | u32 | f64 | f64 |
| false | 111201 | 550000.0 | 7323.0 |
| true | 1404 | 146250.0 | 2163.5 |
| provider | Bedrooms | Total floor area (sqm) | Asking price | Asking price per sqm |
|---|---|---|---|---|
| str | i32 | f64 | i64 | i32 |
| "Zoopla" | 2 | 6.1 | 1270000 | 208197 |
| "Zoopla" | 2 | 6.1 | 1270000 | 208197 |
| "Zoopla" | 2 | 6.1 | 1270000 | 208197 |
| "Rightmove" | 2 | 6.8 | 1400000 | 205882 |
| "Zoopla" | 2 | 6.1 | 1250000 | 204918 |
| "Rightmove" | 2 | 7.2 | 1250000 | 173611 |
| provider | Property type | Property sub-type | Bedrooms | Bathrooms | Asking price | Total floor area (sqm) | Address per Property Register |
|---|---|---|---|---|---|---|---|
| str | str | str | i32 | i32 | i64 | f64 | str |
| "OnTheMarket" | "Other" | "Land" | 0 | 0 | null | null | "Sutton Road, Hounslow, Greater London" |
| "Zoopla" | "Other" | "Property" | 0 | 0 | null | null | "" |
| "Zoopla" | "Other" | "Property" | 0 | 0 | null | null | "" |
| "Zoopla" | "Other" | "Property" | 0 | 0 | null | null | "" |
| "Zoopla" | "Other" | "Property" | 0 | 0 | null | null | "" |
| norm | variants | rows |
|---|---|---|
| str | u32 | u32 |
| "guide price" | 2 | 23851 |
| "offers in excess of" | 2 | 11832 |
| "offers over" | 2 | 3449 |
| "offers in region of" | 2 | 1963 |
| "fixed price" | 2 | 464 |
| "shared equity" | 2 | 7 |
| Postcode | Postcode source | Extracted postcode | Inferred postcode | Listing raw address | Address per Property Register | UPRN | Property number or name | Leasehold/Freehold | Property type | Property sub-type | Price qualifier | Listing URL | Listing status | provider |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 | u32 |
| 0 | 0 | 0 | 0 | 2825 | 2837 | 0 | 0 | 0 | 0 | 0 | 69358 | 0 | 0 | 0 |
| provider | rows | date_null | oldest | newest |
|---|---|---|---|---|
| str | u32 | u32 | datetime[μs] | datetime[μs] |
| "OnTheMarket" | 12771 | 12771 | null | null |
| "Rightmove" | 92797 | 0 | 2011-03-14 13:57:53 | 2026-05-31 02:38:38 |
| "Zoopla" | 7037 | 7037 | null | null |
| price_basis | count |
|---|---|
| str | u32 |
| "firm" | 69358 |
| "auction_guide" | 23851 |
| "floor" | 17258 |
| "share" | 1404 |
| "other" | 494 |
| "from" | 221 |
| "unpriced" | 19 |
| provider | clean | dedup |
|---|---|---|
| str | u32 | u32 |
| "OnTheMarket" | 12771 | 9949 |
| "Rightmove" | 92797 | 91064 |
| "Zoopla" | 7037 | 5498 |
| dataset | rows | impossible_tiny_area | pqualifier_casing_dupes | empty_string_cells | max_£/sqm | subtype_distinct | zero_bed_non_studio | dead_columns |
|---|---|---|---|---|---|---|---|---|
| str | i64 | i64 | i64 | i64 | i64 | i64 | i64 | i64 |
| "raw" | 112605 | 89 | 6 | 75020 | 410959 | 79 | 4088 | 2 |
| "clean" | 112605 | 0 | 0 | 0 | 212963 | 63 | 934 | 0 |
| "dedup" | 106511 | 0 | 0 | 0 | 212963 | 63 | 711 | 0 |
| column | dtype |
|---|---|
| str | str |
| "Bedrooms" | "Int32" |
| "Bathrooms" | "Int32" |
| "lon" | "Float64" |
| "lat" | "Float64" |
| "Postcode" | "String" |
| "Postcode source" | "String" |
| "Extracted postcode" | "String" |
| "Inferred postcode" | "String" |
| "Listing raw address" | "String" |
| "Address per Property Register" | "String" |
| "UPRN" | "String" |
| "Property number or name" | "String" |
| "Leasehold/Freehold" | "String" |
| "Property type" | "String" |
| "Property sub-type" | "String" |
| "Price qualifier" | "String" |
| "Total floor area (sqm)" | "Float64" |
| "Listing URL" | "String" |
| "Listing features" | "List(String)" |
| "Listing date" | "Datetime(time_unit='us', time_zone=None)" |
| "Asking price" | "Int64" |
| "Asking price per sqm" | "Int64" |
| "provider" | "String" |
| "is_shared_ownership" | "Boolean" |
| "price_basis" | "String" |
| "floor_area_suspect_small" | "Boolean" |
| "floor_area_suspect_large" | "Boolean" |
| "is_residential" | "Boolean" |
| "build_type_unspecified" | "Boolean" |
| "location_precision" | "String" |
| provider | Bedrooms | Bathrooms | lon | lat | Postcode | Postcode source | Extracted postcode | Inferred postcode | Listing raw address | Address per Property Register | UPRN | Property number or name | Leasehold/Freehold | Property type | Property sub-type | Price qualifier | Total floor area (sqm) | Listing URL | Listing features | Listing date | Asking price | Asking price per sqm | is_shared_ownership | price_basis | floor_area_suspect_small | floor_area_suspect_large | is_residential | build_type_unspecified | location_precision |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| str | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 | f64 |
| "OnTheMarket" | 0.2 | 5.1 | 0.0 | 0.0 | 0.0 | 0.0 | 95.9 | 0.0 | 0.0 | 0.1 | 100.0 | 100.0 | 11.2 | 0.0 | 0.0 | 60.9 | 87.0 | 0.0 | 0.0 | 100.0 | 0.1 | 87.5 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| "Rightmove" | 0.8 | 2.4 | 0.0 | 0.0 | 0.0 | 0.0 | 95.1 | 0.0 | 0.0 | 0.0 | 100.0 | 100.0 | 14.2 | 0.0 | 0.0 | 58.8 | 46.9 | 0.0 | 0.0 | 0.0 | 0.0 | 47.1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| "Zoopla" | 33.7 | 36.1 | 0.0 | 0.0 | 0.0 | 0.0 | 100.0 | 0.0 | 40.1 | 40.2 | 70.7 | 61.5 | 50.2 | 0.0 | 0.0 | 100.0 | 17.0 | 0.0 | 0.0 | 100.0 | 4.9 | 17.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| statistic | Asking price | Total floor area (sqm) | Asking price per sqm |
|---|---|---|---|
| str | f64 | f64 | f64 |
| "count" | 109645.0 | 56075.0 | 56075.0 |
| "null_count" | 17.0 | 53587.0 | 53587.0 |
| "mean" | 924734.079256 | 113.391677 | 9186.075381 |
| "std" | 1.5915e6 | 106.075279 | 6356.803435 |
| "min" | 500.0 | 12.4 | 35.0 |
| "25%" | 375000.0 | 60.0 | 5644.0 |
| "50%" | 550000.0 | 82.0 | 7317.0 |
| "75%" | 875000.0 | 126.1 | 10496.0 |
| "max" | 1e8 | 1893.1 | 212963.0 |
| provider | column | na_count | provider_rows | na_pct |
|---|---|---|---|---|
| str | str | u32 | u32 | f64 |
| "OnTheMarket" | "Listing date" | 85 | 85 | 100.0 |
| "OnTheMarket" | "Property number or name" | 85 | 85 | 100.0 |
| "OnTheMarket" | "UPRN" | 85 | 85 | 100.0 |
| "OnTheMarket" | "Extracted postcode" | 84 | 85 | 98.82 |
| "OnTheMarket" | "Asking price per sqm" | 82 | 85 | 96.47 |
| "OnTheMarket" | "Total floor area (sqm)" | 82 | 85 | 96.47 |
| "Rightmove" | "Property number or name" | 99 | 99 | 100.0 |
| "Rightmove" | "UPRN" | 99 | 99 | 100.0 |
| "Rightmove" | "Extracted postcode" | 98 | 99 | 98.99 |
| "Rightmove" | "Asking price per sqm" | 34 | 99 | 34.34 |
| "Rightmove" | "Total floor area (sqm)" | 34 | 99 | 34.34 |
| "Rightmove" | "Leasehold/Freehold" | 17 | 99 | 17.17 |
| "Zoopla" | "Extracted postcode" | 58 | 58 | 100.0 |
| "Zoopla" | "Listing date" | 58 | 58 | 100.0 |
| "Zoopla" | "UPRN" | 25 | 58 | 43.1 |
| "Zoopla" | "Leasehold/Freehold" | 14 | 58 | 24.14 |
| "Zoopla" | "Property number or name" | 11 | 58 | 18.97 |
| "Zoopla" | "Asking price per sqm" | 5 | 58 | 8.62 |
| "Zoopla" | "Total floor area (sqm)" | 5 | 58 | 8.62 |
| price_basis | rows | median_price |
|---|---|---|
| str | u32 | f64 |
| "firm" | 69358 | 575000.0 |
| "auction_guide" | 23851 | 575000.0 |
| "floor" | 17258 | 500000.0 |
| "share" | 1404 | 146250.0 |
| "other" | 494 | 452500.0 |
| "from" | 221 | 632500.0 |
| "unpriced" | 19 | null |
| Property sub-type | count |
|---|---|
| str | u32 |
| "Flat" | 64390 |
| "Terraced" | 10532 |
| "Semi-Detached" | 10170 |
| "Detached" | 7610 |
| "End Of Terrace" | 3747 |
| "House" | 3590 |
| "Maisonette" | 3196 |
| "Studio" | 1503 |
| "Retirement Property" | 891 |
| "Ground Flat" | 889 |
| "Unknown" | 842 |
| "Bungalow" | 797 |
| "Penthouse" | 735 |
| "Detached Bungalow" | 577 |
| "Town House" | 523 |