{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ab31756a",
   "metadata": {},
   "source": [
    "# The CBD changing use\n",
    "\n",
    "The City of Melbourne's Census of Land Use and Employment (CLUE) measures the floor space in every city block by what\n",
    "it is used for, every year since 2002. It is published as a table keyed by `block_id`, with no shapes in it; the block\n",
    "outlines are a separate file. In [Plotlay](https://www.getplotlay.com) the 603 blocks were taken from the council's\n",
    "blocks file and keyed by `block_id`, the census table was linked from the council's portal with the census year as the\n",
    "time axis, and formula columns worked out each block's office and apartments in 2002 and 2024 and the change.\n",
    "\n",
    "This notebook reads only the files in `../data` and recomputes the numbers on the page."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8166cdd1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import pandas as pd\n",
    "import geopandas as gpd\n",
    "import matplotlib.pyplot as plt\n",
    "DATA = '../data'\n",
    "pd.set_option('display.width', 140)\n",
    "plt.rcParams.update({'figure.dpi': 110, 'axes.spines.top': False, 'axes.spines.right': False, 'font.size': 10})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "350701f4",
   "metadata": {},
   "source": [
    "## Sources and licence\n",
    "\n",
    "Floor space per space use for blocks (CLUE, 2002 to 2024), CLUE blocks and road segments: City of Melbourne Open Data,\n",
    "CC BY 4.0. Full credits in `NOTICE`.\n",
    "\n",
    "**Held back cells.** The census leaves a cell blank where it would describe two businesses or fewer. Each row's total\n",
    "still includes them. Blank cells are left blank here, never filled in."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c9815188",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "83 CBD blocks, 2002 to 2024\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Office</th>\n",
       "      <th>Apartments</th>\n",
       "      <th>Hotels</th>\n",
       "      <th>Student housing</th>\n",
       "      <th>All floor space</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>year</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2002</th>\n",
       "      <td>2745609.0</td>\n",
       "      <td>306545.0</td>\n",
       "      <td>228332.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>9397165.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008</th>\n",
       "      <td>3194201.0</td>\n",
       "      <td>505377.0</td>\n",
       "      <td>232573.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10785603.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014</th>\n",
       "      <td>3025938.0</td>\n",
       "      <td>684440.0</td>\n",
       "      <td>261956.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>11430997.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019</th>\n",
       "      <td>3140760.0</td>\n",
       "      <td>1658110.0</td>\n",
       "      <td>305624.0</td>\n",
       "      <td>4857.0</td>\n",
       "      <td>13206021.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020</th>\n",
       "      <td>2888722.0</td>\n",
       "      <td>1704285.0</td>\n",
       "      <td>257693.0</td>\n",
       "      <td>4857.0</td>\n",
       "      <td>13373382.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2024</th>\n",
       "      <td>2833795.0</td>\n",
       "      <td>2276604.0</td>\n",
       "      <td>427960.0</td>\n",
       "      <td>3033.0</td>\n",
       "      <td>14818195.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Office  Apartments    Hotels  Student housing  All floor space\n",
       "year                                                                   \n",
       "2002  2745609.0    306545.0  228332.0              0.0        9397165.0\n",
       "2008  3194201.0    505377.0  232573.0              0.0       10785603.0\n",
       "2014  3025938.0    684440.0  261956.0              0.0       11430997.0\n",
       "2019  3140760.0   1658110.0  305624.0           4857.0       13206021.0\n",
       "2020  2888722.0   1704285.0  257693.0           4857.0       13373382.0\n",
       "2024  2833795.0   2276604.0  427960.0           3033.0       14818195.0"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = pd.read_csv(f'{DATA}/clue/floor_space_by_use.csv')\n",
    "d['year'] = d.census_year.astype(str).str[:4].astype(int)\n",
    "cbd = d[d.clue_small_area == 'Melbourne (CBD)']\n",
    "print(cbd.block_id.nunique(), 'CBD blocks,', d.year.min(), 'to', d.year.max())\n",
    "cols = {'office': 'Office', 'residential_apartment': 'Apartments', 'commercial_accommodation': 'Hotels', 'student_accommodation': 'Student housing', 'total_floor_space_in_block': 'All floor space'}\n",
    "tot = cbd.groupby('year')[list(cols)].sum().rename(columns=cols)\n",
    "tot.loc[[2002, 2008, 2014, 2019, 2020, 2024]].round(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "17e09a3a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Apartments, 2024 over 2002: 7.4 times\n",
      "Office peak: 2008 3194201\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwoAAAGNCAYAAACxEoZoAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAQ6wAAEOsBUJTofAAAdxVJREFUeJzt3Qd8FNXaBvAnvZIAKbQEQu8WehERREGaVBUFFVAs2K6iXj8RwV4QsGNHQSlSFfFKlSZFeq+hhE4IIaS3+X7v2ewyW5JsQpLd7D5/79wpOzs7O7tszjvnPed4aJqmgYiIiIiISMdTv0JERERERMRAgYiIiIiIbGKNAhERERERWWGgQEREREREVhgoEBERERGRFQYKRERERERkhYECERERERFZYaBARERERERWGCgQEREREZEVb+tNRERUVuLi4rB27VqcO3cOubm5pu21atXC4MGD+UE4yPHjxzF37lz06dMHDRs25OdARG6JgQIRuRRN07Bz5041JSUloUqVKqrQ3bp1a3h6XqtETUhIwPfff2/2XF9fX0RFRaFt27aoUaOG2WOW+8uxKlSogKpVq+Lmm29WzyuqpUuXol+/fkhLS7N67Pbbb2eg4EAHDhzAiy++qD5XBgpE5K4YKBCRy5CC93PPPYf9+/dbPSYF//Hjx+ORRx5R6xcuXFAFQVt8fHzw5JNPYvLkyfDw8Ch0f9GmTRu8+eabuPPOO+0+3wkTJiAjIwP33XefWWDy1Vdf2X0MIiKi0sJAgYhcwi+//IJhw4ap9B0pdN96662IiIhQBfwTJ05g8+bN+N///mcKFIyaNm2KHj16qOXMzEwcO3ZMBRwff/yxqoV44IEH8t0/JSVFpQ79888/6vjdu3fH559/roIMexw8eBBdu3bFzJkzzbbPmjXrOq8GERHR9WOgQETl3tmzZ1UAIGlHH374If7zn//Ay8vLbJ8zZ85g9+7dVs9t1aoVJk6caLZt+vTpePDBB7FhwwarQMHW/lIr8MEHH2DcuHF49tlncdddd6F27dr5nu/69evVsa9cuYLz58+bjte3b180aNAg3+fJ/suXL8fp06cRFhaGLl26oHr16sXeV5+HX79+faxcuVLVxkjqldSQ5CcrK0vtK0FVUFAQbrzxRtxwww02j1u3bl389ddfat+YmBgVTEmNjaUjR45g69atuHjxorp2knrl7+9v8/Wzs7NVuw5JD5LXb9eunc3rJue5evVqFZBJWlnHjh3RpEkTFJW8Xn7vITY2FvPnz0e3bt1w0003WT1Xgs5du3ap4DEwMDDf15DvpryGfN+qVatmFThKUDpy5Ei7P4OSvgZE5KY0IqJybty4cZr8nI0ePdru5+zfv18956GHHrJ6bMGCBeqxN954w679jR577DG1z6uvvlrga8vjsp/l9Ouvv6rHa9Sood1+++1mz5kzZ44WGhpqtr+vr6/23nvvWR3f3n3//PNP9djUqVO19u3bm/Z955138j33AwcOaNHR0Vbn3q1bNy0zM9PsuF9++aXWqlUrs/2aNm2qnTp1ynS8xMRE7c4777Q6nrzGrl27rF5/w4YNWu3atc329fDw0J544gmz/TZu3Gi1n0wjRozQsrKyCvx8ivIekpKStODgYK13795Wx8jJydFq1qypnl+Yb775Rh1b3p+ljh07anXr1i3SZ1AS14CIiDUKRFTurVq1Ss0ff/zxIj937969pjv6cvdV7obPnj1b3dUdPnx4kY712GOPqfYFkopUkFtuuQUvvPACpkyZou64y513kV+jWbkjLXea5fzkbr80npY72XK3+r///a86xqBBg4q8r76thNyxvvfee1Xj3YJqE8aMGaPSreTuudzJl3StHTt2qNoLqVnR1xbIcaWhtrTBCAgIwLJly9T1HjJkCNasWaP2uXz5sjo3OV7z5s3VXfdt27bh33//xT333IN9+/aZ2onIZyN386WRer169dC+fXtVc7Rx40Z1DCM5P0kPS0xMVOcod9vl3OSOvTRIr1OnDl599VU7PtHC34M0aB86dCi++eYbVXujb2sir3fy5ElV01SS7PkMSvIaEJEbY6xEROWd3DWVu8rZ2dl2P8dYQ2BriomJUXdjbe1fUI1CSkqK2qdJkyZ2nYOfn582cOBAq+2WNQpyB1iO+/rrr5vtN3PmTLVdf8e6KPsa75pHRERocXFxdp1zs2bNtJYtW2q5ublm21esWKFlZGSYHTc8PFw7ceKEaR+5+y7Plcf+/fdfte3y5cvamjVr8q0lWr9+vWnbU089Zao50t8Rl3NZunSpaf25555T+/3yyy9Wn0+LFi3U+7U8f0tFeQ87d+5U62+++abZMQYMGKBqduR1S7JGwZ7PoCSuARERaxTyIbmvP/zwA37//XeVk7pkyZLr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",
      "text/plain": [
       "<Figure size 880x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print('Apartments, 2024 over 2002:', round(tot.loc[2024, 'Apartments'] / tot.loc[2002, 'Apartments'], 1), 'times')\n",
    "print('Office peak:', tot.Office.idxmax(), round(tot.Office.max()))\n",
    "ax = tot[['Office', 'Apartments', 'Hotels']].plot(figsize=(8, 3.6)); ax.set_ylabel('m², published cells'); ax.set_title('CBD floor space by use')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "565aeb15",
   "metadata": {},
   "source": [
    "## The blocks, as Plotlay worked them out\n",
    "\n",
    "`blocks.geojson` is Plotlay's export of the Blocks layer, keyed by `block_id`, with the formula columns\n",
    "`office_2002`, `office_2024`, `office_change`, `apartments_change`, `hotels_change`, `student_change` and\n",
    "`homes_hotels_students_change` (`apartments_change + coalesce(hotels_change, 0) + coalesce(student_change, 0)`). A\n",
    "change is empty where a year's figure is held back. Below, the same changes again from the census table."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "611ad941",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "largest difference, Plotlay against pandas: 0.0 m²\n"
     ]
    }
   ],
   "source": [
    "b = gpd.read_file(f'{DATA}/geometry/blocks.geojson')\n",
    "names = pd.read_csv(f'{DATA}/clue/block_names.csv').set_index('block_id').name\n",
    "for c in ['office_change', 'apartments_change', 'homes_hotels_students_change']: b[c] = pd.to_numeric(b[c])\n",
    "a, z = cbd[cbd.year == 2002].set_index('block_id'), cbd[cbd.year == 2024].set_index('block_id')\n",
    "again = pd.DataFrame({'office_change': z.office - a.office, 'apartments_change': z.residential_apartment - a.residential_apartment})\n",
    "again['living'] = again.apartments_change + (z.commercial_accommodation - a.commercial_accommodation).fillna(0) + (z.student_accommodation - a.student_accommodation).fillna(0)\n",
    "m = b.set_index(b.key.astype(int)).join(again.add_suffix('_py'), how='inner')\n",
    "print('largest difference, Plotlay against pandas:', float((m.office_change - m.office_change_py).abs().max()), 'm²')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0f4b2f34",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "41 CBD blocks with office and apartments published in both years\n",
      "9 lost over 5,000 m² of office and gained over 5,000 m² of homes, hotels or student rooms: 143,008 m² of office out, 365,305 m² in\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>name</th>\n",
       "      <th>office_change</th>\n",
       "      <th>apartments_change</th>\n",
       "      <th>homes_hotels_students_change</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>32</td>\n",
       "      <td>Collins St, William St to King St</td>\n",
       "      <td>-33043.0</td>\n",
       "      <td>16503.0</td>\n",
       "      <td>16503.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>261</th>\n",
       "      <td>25</td>\n",
       "      <td>Collins St, Swanston St to Elizabeth St</td>\n",
       "      <td>-30005.0</td>\n",
       "      <td>12688.0</td>\n",
       "      <td>12688.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>38</td>\n",
       "      <td>Collins St, Exhibition St to Spring St</td>\n",
       "      <td>-18864.0</td>\n",
       "      <td>10776.0</td>\n",
       "      <td>10776.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>74</td>\n",
       "      <td>Lonsdale St, Elizabeth St to Queen St</td>\n",
       "      <td>-16658.0</td>\n",
       "      <td>57877.0</td>\n",
       "      <td>86528.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>97</td>\n",
       "      <td>La Trobe St, Victoria St to Mackenzie St</td>\n",
       "      <td>-12420.0</td>\n",
       "      <td>102021.0</td>\n",
       "      <td>102021.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>87</td>\n",
       "      <td>La Trobe St, Russell St to Exhibition St</td>\n",
       "      <td>-11185.0</td>\n",
       "      <td>54289.0</td>\n",
       "      <td>54289.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>254</th>\n",
       "      <td>58</td>\n",
       "      <td>Bourke St, Spring St to Exhibition St</td>\n",
       "      <td>-8478.0</td>\n",
       "      <td>4618.0</td>\n",
       "      <td>12457.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>68</td>\n",
       "      <td>Lonsdale St, Spring St to Exhibition St</td>\n",
       "      <td>-7309.0</td>\n",
       "      <td>16986.0</td>\n",
       "      <td>22096.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>460</th>\n",
       "      <td>93</td>\n",
       "      <td>La Trobe St, A'Beckett St to Queen St</td>\n",
       "      <td>-5046.0</td>\n",
       "      <td>47947.0</td>\n",
       "      <td>47947.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    key                                      name  office_change  apartments_change  homes_hotels_students_change\n",
       "57   32         Collins St, William St to King St       -33043.0            16503.0                       16503.0\n",
       "261  25   Collins St, Swanston St to Elizabeth St       -30005.0            12688.0                       12688.0\n",
       "247  38    Collins St, Exhibition St to Spring St       -18864.0            10776.0                       10776.0\n",
       "263  74     Lonsdale St, Elizabeth St to Queen St       -16658.0            57877.0                       86528.0\n",
       "252  97  La Trobe St, Victoria St to Mackenzie St       -12420.0           102021.0                      102021.0\n",
       "257  87  La Trobe St, Russell St to Exhibition St       -11185.0            54289.0                       54289.0\n",
       "254  58     Bourke St, Spring St to Exhibition St        -8478.0             4618.0                       12457.0\n",
       "33   68   Lonsdale St, Spring St to Exhibition St        -7309.0            16986.0                       22096.0\n",
       "460  93     La Trobe St, A'Beckett St to Queen St        -5046.0            47947.0                       47947.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = b[b.region_name == 'Melbourne (CBD)'].copy()\n",
    "c['name'] = c.key.astype(int).map(names)\n",
    "known = c.dropna(subset=['office_change', 'homes_hotels_students_change'])\n",
    "print(len(known), 'CBD blocks with office and apartments published in both years')\n",
    "big = known[(known.office_change < -5000) & (known.homes_hotels_students_change > 5000)].sort_values('office_change')\n",
    "print(len(big), 'lost over 5,000 m² of office and gained over 5,000 m² of homes, hotels or student rooms:',\n",
    "      f'{-big.office_change.sum():,.0f} m² of office out, {big.homes_hotels_students_change.sum():,.0f} m² in')\n",
    "big[['key', 'name', 'office_change', 'apartments_change', 'homes_hotels_students_change']]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58118f2f",
   "metadata": {},
   "source": [
    "## Read it carefully\n",
    "\n",
    "- These are blocks, not buildings: office falling and apartments rising in the same block does not show that one\n",
    "  building changed use. A tower can go up beside an office building.\n",
    "- Held back cells stay blank, so a block where a year is held back has no change worked out.\n",
    "- For about half the blocks the 2023 figures repeat 2022's."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
