{ "cells": [ { "cell_type": "code", "execution_count": 11, "id": "2c1b65cb-7982-4700-8b19-510424f02e76", "metadata": {}, "outputs": [], "source": [ "import yaml" ] }, { "cell_type": "code", "execution_count": 12, "id": "61bdecc6-0495-422c-9e32-610c0381ca4e", "metadata": {}, "outputs": [], "source": [ "# load menu\n", "with open(\"mnt/city-directories/01-user-input/menu.yml\", 'r') as f:\n", " menu = yaml.safe_load(f)" ] }, { "cell_type": "code", "execution_count": 13, "id": "8b70b249-9d76-4391-92c2-1ddd7b639980", "metadata": {}, "outputs": [], "source": [ "if menu['all_stats']:\n", " import os\n", " import glob\n", " import math\n", " import geopandas as gpd\n", " import pandas as pd\n", " import numpy as np\n", " from io import StringIO\n", " import requests\n", " from sklearn.preprocessing import MinMaxScaler\n", " from shapely.geometry import shape\n", " from shapely.ops import unary_union\n", " import pint\n", " import folium\n", " from pathlib import Path\n", " import matplotlib.pyplot as plt\n", " import requests\n", " import re\n", " import rasterio\n", " from rasterio.mask import mask\n", " from shapely.geometry import Point\n", " from fiona.crs import from_epsg\n", " from nbconvert import MarkdownExporter\n", " import nbformat\n", " import base64\n", " import pickle\n", " import plotly.graph_objects as go\n", " import osmnx as ox\n", " from shapely.geometry import box\n", " from matplotlib.lines import Line2D\n", " from mpl_toolkits.axes_grid1.inset_locator import inset_axes, mark_inset\n", " import contextily as cx\n", " import matplotlib.patheffects as pe\n", " from sklearn.preprocessing import robust_scale\n", " from sklearn.cluster import AgglomerativeClustering\n", " from rasterio.plot import show\n", " import plotly.express as px\n", " from shapely.geometry import shape\n", " from scipy.stats import linregress\n", " from rasterio.warp import reproject, Resampling\n", " from shapely.ops import transform\n", " from functools import partial\n", " import pyproj\n", " import warnings\n", " import plotly.offline as pyo\n", " #from pysal import lib\n", " #from pysal.explore import esda\n", " " ] }, { "cell_type": "markdown", "id": "fcd6b142", "metadata": {}, "source": [ "##Text begins" ] }, { "cell_type": "code", "execution_count": 14, "id": "8f9f5a53-588d-4a6c-b788-a68208b8c2a0", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Merged pluvial data saved as mnt/city-directories/02-process-output/goris_merged_pluvial_data.tif\n", "Merged pluvial data saved as mnt/city-directories/02-process-output/goris_merged_pluvial_data_utm.tif\n", "Merged fluvial data saved as mnt/city-directories/02-process-output/goris_merged_fluvial_data.tif\n", "Merged fluvial data saved as mnt/city-directories/02-process-output/goris_merged_fluvial_data_utm.tif\n", "city name: goris\n", "country name:armenia\n" ] } ], "source": [ "# SET UP ##############################################\n", "# load city inputs files, to be updated for each city scan\n", "with open(\"city_inputs.yml\", 'r') as f:\n", " city_inputs = yaml.safe_load(f)\n", "\n", "city = city_inputs['city_name'].replace(' ', '_').lower()\n", "country = city_inputs['country_name'].replace(' ', '_').lower()\n", "\n", "# load global inputs, such as data sources that generally remain the same across scans\n", "\n", "with open(\"global_inputs.yml\", 'r') as f:\n", " global_inputs = yaml.safe_load(f)\n", "# run scan assembly and toolbox\n", "%run 'scan_assembly.ipynb'\n", "%run 'toolbox.ipynb'\n", "\n", "# transform the input shp to correct prj (epsg 4326)\n", "lowest_admin_file = gpd.read_file(city_inputs['lowest_admin_shp']).to_crs(epsg = 4326) \n", "lowest_admin_country = lowest_admin_file.geometry\n", "aoi_file = gpd.read_file(city_inputs['AOI_path']).to_crs(epsg = 4326)\n", "features = aoi_file.geometry\n", "# Define output folder ---------\n", "output_folder = Path('mnt/city-directories/02-process-output')\n", "render_folder = Path('mnt/city-directories/03-render-output')\n", "if not os.path.exists(output_folder):\n", " os.mkdir(output_folder)\n", "print(f\"city name: {city}\")\n", "print(f\"country name:{country}\")\n" ] }, { "cell_type": "markdown", "id": "d3cac1a2", "metadata": {}, "source": [ "##City Subdistricts available?" ] }, { "cell_type": "code", "execution_count": 15, "id": "93b5b0a7-6fc0-417b-a530-d93fd849bc38", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "city subdistricts are larger than goris: Not available\n" ] } ], "source": [ "#Intersect subdistricts to AOI - Is this necessary? We need ward level files\n", "clip_extent = features.geometry.total_bounds\n", "clip_box = box(*clip_extent)\n", "lower_admin_level = lowest_admin_country.cx[clip_box.bounds[0]:clip_box.bounds[2], clip_box.bounds[1]:clip_box.bounds[3]]\n", "#plot check\n", "fig, ax = plt.subplots()\n", "lower_admin_level.plot(ax=ax)\n", "plt.title('Subdistricts')\n", "plt.xlabel('Longitude')\n", "plt.ylabel('Latitude')\n", "plt.show()\n", "\n", "print(f\"city subdistricts are larger than {city}: Not available\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "5834e3d7-bb81-44e9-b173-069d3e78581e", "metadata": {}, "outputs": [], "source": [ "#Standard Units\n", "def enumerate_items(source):\n", " print(\"/n\")\n", " for ele in enumerate(source): \n", " print(ele)\n", "\n", "def list_df_columns(df):\n", " field_list = list(df)\n", " enumerate_items(field_list)\n", " return field_list\n", "\n", "def percentage_formatter(x, pos):\n", " return f'{x * 100 :,.0f}'\n", "\n", "def millions_formatter(x, pos):\n", " return f'{x / 1000000 :,.0f}'\n", "\n", "\n", "def hundred_thousand_formatter(x, pos):\n", " return f'{x / 100000 :,.0f}'\n", "\n", "def billions_formatter(x, pos):\n", " return f'{x / 1000000000 :,.0f}'\n" ] }, { "cell_type": "markdown", "id": "9dfc14d5", "metadata": {}, "source": [ "##Lowest admin level available?" ] }, { "cell_type": "code", "execution_count": 17, "id": "ba0fcbb7-b91e-4b34-80a0-bdc28a3fafa0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Not available\n", "aspect must be finite and positive \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/ipshitakarmakar/mambaforge/envs/geo/lib/python3.11/site-packages/geopandas/geodataframe.py:1538: SettingWithCopyWarning:\n", "\n", "\n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def get_lowest_admin_level():\n", " try:\n", " # Reset index of features DataFrame\n", " vector = features.reset_index()\n", " \n", " # Set the CRS to EPSG 4326 (WGS84)\n", " crs = 4326\n", " \n", " # Define OSM admin layers tags\n", " tags = {\"boundary\": \"administrative\"}\n", " \n", " # Get the bounding box of the features\n", " minx, miny, maxx, maxy = vector.to_crs(epsg=4326).total_bounds\n", " \n", " # Retrieve OSM geometries within the bounding box with the specified tags\n", " all_admin_layers = ox.geometries.geometries_from_bbox(miny, maxy, minx, maxx, tags)\n", " \n", " # Get the lowest admin level \n", " lowest_admin_level = all_admin_layers[\"admin_level\"].mode()[0]\n", " warnings.filterwarnings(\"ignore\", message=\"Geometry is in a geographic CRS\")\n", " # Filter OSM geometries to only include the lowest admin level\n", " vector_gdf = all_admin_layers[all_admin_layers['admin_level'] == lowest_admin_level]\n", " \n", " # Define the name for the lowest admin level\n", " lowest_admin_level_name = \"Settlement\"\n", " \n", " # Calculate the area of the geometries before clipping\n", " vector_gdf[\"pre_clip_area\"] = vector_gdf['geometry'].area\n", " \n", " # Clip the OSM geometries using the features geometry\n", " sub_city_gdf = gpd.clip(vector_gdf.to_crs(crs), vector.to_crs(crs))\n", " \n", " # Calculate the area of the clipped geometries\n", " sub_city_gdf[\"post_clip_area\"] = sub_city_gdf['geometry'].area\n", " \n", " # Calculate the percentage of area retained after clipping\n", " sub_city_gdf[\"pct_clip_area\"] = (sub_city_gdf[\"post_clip_area\"] / sub_city_gdf[\"pre_clip_area\"]) * 100\n", " \n", " # Filter out geometries with less than 50% area retained after clipping\n", " sub_city_gdf = sub_city_gdf[sub_city_gdf['pct_clip_area'] > 50]\n", " \n", " # Fill English names with native names\n", " sub_city_gdf['name:en'] = sub_city_gdf['name:en'].str.strip().replace('', np.nan).fillna(sub_city_gdf['name'])\n", " \n", " # Convert the clipped OSM geometries to the desired CRS\n", " sub_city_gdf = sub_city_gdf.to_crs(crs)\n", " \n", " \n", " # Plot your GeoDataFrame\n", " ax = sub_city_gdf.plot(alpha=0.8,\n", " facecolor='none',\n", " edgecolor='black',\n", " label=f\"{city}\",\n", " missing_kwds={\"color\": \"white\", \"edgecolor\": \"black\", \"label\": \"none\"},\n", " zorder=5)\n", " \n", " # Show plot\n", " plt.show()\n", " \n", " print(\"Yes, it is available\")\n", " except Exception as e:\n", " print(\"Not available\")\n", " print(e)\n", " warnings.filterwarnings(\"ignore\")\n", " \n", "get_lowest_admin_level() \n", "\n", " " ] }, { "cell_type": "markdown", "id": "482571d7", "metadata": {}, "source": [ "Area of the city" ] }, { "cell_type": "code", "execution_count": 18, "id": "801220d3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Area of the city of goris is 1.4398561252041046e-09 kilometer ** 2\n" ] } ], "source": [ "area = calculate_aoi_area(features)\n", "print(f\"Area of the city of {city} is {area}\")" ] }, { "cell_type": "markdown", "id": "3f19f953", "metadata": {}, "source": [ "Koppen Climate" ] }, { "cell_type": "code", "execution_count": 19, "id": "7c0cd019", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Köppen climate classification: Dfb, Cfa, Dfa (See https://en.wikipedia.org/wiki/Köppen_climate_classification for classes)\n" ] }, { "data": { "text/plain": [ "array([' Dfb', ' Cfa', ' Dfa'], dtype=object)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_koeppen_classification()" ] }, { "cell_type": "markdown", "id": "35eaf963", "metadata": {}, "source": [ "Population distribution by age and sex" ] }, { "cell_type": "code", "execution_count": 20, "id": "fce65129", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "alignmentgroup": "True", "hovertemplate": "Sex=f
Age Bracket=%{x}
Percentage=%{y}", "legendgroup": "f", "marker": { "color": "#636efa", "pattern": { "shape": "" } }, "name": "f", "offsetgroup": "f", "orientation": "v", "showlegend": true, "textposition": "auto", "type": "bar", "x": [ "0-1", "0-4", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "5-9", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79", "80+" ], "xaxis": "x", "y": [ 0.011524535448655938, 0.04512922374699999, 0.07178165961227649, 0.047297312289315316, 0.053167234594929925, 0.072333281292355, 0.0873056970538609, 0.08316571027320753, 0.06497046447665528, 0.05142209379065957, 0.06423798086548305, 0.05306484112942663, 0.07725073388576335, 0.07264939742690783, 0.04695647603224045, 0.03471458509688661, 0.016605653074458066, 0.04642311990991807 ], "yaxis": "y" }, { "alignmentgroup": "True", "hovertemplate": "Sex=m
Age Bracket=%{x}
Percentage=%{y}", "legendgroup": "m", "marker": { "color": "#EF553B", "pattern": { "shape": "" } }, "name": "m", "offsetgroup": "m", "orientation": "v", "showlegend": true, "textposition": "auto", "type": "bar", "x": [ "0-1", "0-4", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "5-9", "50-54", "55-59", "60-64", "65-69", "70-74", "75-79", "80+" ], "xaxis": "x", "y": [ 0.01074099067098224, 0.048824681707271333, 0.07358647927085558, 0.05313374971079099, 0.05651011697303686, 0.0845407138675057, 0.08954879884840901, 0.08830004100680094, 0.06715465345365319, 0.05572891547348099, 0.07880697266850659, 0.05118494205471488, 0.06280611966912025, 0.06571734626839035, 0.04184764966479111, 0.02567054516811456, 0.013236956379188697, 0.032660327144386714 ], "yaxis": "y" } ], "layout": { "barmode": "group", "legend": { "title": { "text": "Sex" }, "tracegroupgap": 0 }, "plot_bgcolor": "white", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Population distribution in goris by sex" }, "xaxis": { "anchor": "y", "domain": [ 0, 1 ], "tickangle": 45, "title": { "text": "Age Bracket" } }, "yaxis": { "anchor": "x", "domain": [ 0, 1 ], "title": { "text": "Percentage" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "under5: 9.40%\n", "youth (15-24): 21.01%\n", "working_age (15-64): 0.00%\n", "elderly (60+): 39.65%\n", "reproductive_age, percent of women (15-50): 45.97%\n", "sex_ratio: 0.0 males to 100 females\n" ] } ], "source": [ "age_stats()" ] }, { "cell_type": "code", "execution_count": 21, "id": "e723a110", "metadata": {}, "outputs": [], "source": [ "#Text option 1 - Delta and Range\n", "\n", "def find_highest_lowest_pixel_value_path(raster_path):\n", " try:\n", " with rasterio.open(raster_path) as src:\n", " # Read the raster data\n", " raster_data = src.read(1)\n", "\n", " # Find the highest and lowest pixel values\n", " highest_value = round(raster_data.max(), 2)\n", " lowest_value = round(raster_data[raster_data > 0].min(), 2) # Exclude zero values\n", " \n", " # Print the statement with reduced digits after the decimal point\n", " print(f\"Values range from {lowest_value:.2f} units to {highest_value:.2f} units\")\n", "\n", " return highest_value, lowest_value\n", " \n", " except Exception as e:\n", " print(\"Error:\", e)\n", " return None, None" ] }, { "cell_type": "code", "execution_count": 22, "id": "fe2d7e76-68dc-44bc-879c-69df92053d31", "metadata": {}, "outputs": [], "source": [ "#Text option 1 - Delta and Range\n", "def find_highest_lowest_pixel_value(raster_data):\n", " try:\n", " # Flatten the array, excluding NaN values\n", " valid_values = raster_data[~np.isnan(raster_data)].flatten()\n", " \n", " # Find the highest and lowest pixel values\n", " highest_value = round(np.nanmax(valid_values), 2)\n", " lowest_value = round(np.nanmin(valid_values), 2)\n", " \n", " # Print the statement with reduced digits after the decimal point\n", " print(f\"Values range from {lowest_value:.2f} units to {highest_value:.2f} units\")\n", "\n", " return highest_value, lowest_value\n", " \n", " except Exception as e:\n", " print(\"Error:\", e)\n", " return None, None\n", "\n" ] }, { "cell_type": "code", "execution_count": 23, "id": "a6c93ce0-a06a-4f44-88cb-8b1b8e88d827", "metadata": {}, "outputs": [], "source": [ "#Text Option 2 - Clustering \n", "def create_raster_clusters(raster_data, n_clusters=5):\n", " try:\n", " if isinstance(raster_data, str):\n", " with rasterio.open(raster_data) as src:\n", " raster_data = src.read(1)\n", " transform = src.transform\n", " else:\n", " pass\n", "\n", " flat_data = raster_data.flatten().reshape(-1, 1)\n", "\n", " clustering = AgglomerativeClustering(n_clusters=n_clusters).fit(flat_data)\n", "\n", " cluster_labels = clustering.labels_.reshape(raster_data.shape)\n", "\n", " return cluster_labels\n", "\n", " except Exception as e:\n", " print(\"Error:\", e)\n", " return None\n", "\n", "#example usage\n", "raster_path = os.path.join(output_folder, city + '_population.tif')\n", "create_raster_clusters(raster_path)\n", "cluster_labels = create_raster_clusters(raster_path)\n", "\n", "\n", "\n", "def plot_cluster_labels_plotly(cluster_labels):\n", " fig = px.imshow(cluster_labels, color_continuous_scale='viridis')\n", " fig.update_layout(\n", " xaxis_title='Column Index',\n", " yaxis_title='Row Index'\n", " )\n", " fig.show()\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "id": "54ded187-d221-48ac-b528-a4921a852ee4", "metadata": {}, "outputs": [], "source": [ "def get_raster_cluster_labels(raster_path, n_clusters=5):\n", " try:\n", " # Open the raster file\n", " with rasterio.open(raster_path) as src:\n", " raster_data = src.read(1)\n", " transform = src.transform\n", "\n", " # Flatten the raster data to a 1D array\n", " flat_data = raster_data.flatten().reshape(-1, 1)\n", "\n", " # Perform agglomerative clustering\n", " clustering = AgglomerativeClustering(n_clusters=n_clusters).fit(flat_data)\n", "\n", " # Reshape the cluster labels to match the original raster dimensions\n", " cluster_labels = clustering.labels_.reshape(raster_data.shape)\n", "\n", " return cluster_labels, transform\n", "\n", " except Exception as e:\n", " print(\"Error:\", e)\n", " return None, None\n", "\n", "# Example usage:\n", "raster_path = os.path.join(output_folder, city + '_population.tif')\n", "cluster_labels, transform = get_raster_cluster_labels(raster_path)\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 25, "id": "4d2474bc-e0fd-4862-8736-4af7428ca87f", "metadata": {}, "outputs": [], "source": [ "from rasterio.crs import CRS\n", "\n", "# Define the Affine transformation matrix\n", "affine_transform = transform\n", "\n", "# Define the EPSG code for the CRS\n", "epsg_code = 4326 \n", "\n", "# Create a CRS object\n", "crs = CRS.from_epsg(epsg_code)" ] }, { "cell_type": "code", "execution_count": 26, "id": "561c9b5a-1f09-4fdf-9bec-d9be50ada036", "metadata": {}, "outputs": [], "source": [ "def get_cluster_boundaries(cluster_labels, transform):\n", " # Get unique cluster labels\n", " unique_labels = np.unique(cluster_labels)\n", "\n", " # Initialize a list to store cluster boundary polygons\n", " cluster_polygons = []\n", "\n", " # Iterate over each unique cluster label\n", " for label in unique_labels:\n", " # Create a mask for pixels with the current label\n", " mask = cluster_labels == label\n", "\n", " # Get the indices of non-zero elements in the mask\n", " nonzero_indices = np.argwhere(mask)\n", "\n", " # Calculate the bounding box of the cluster\n", " min_row, min_col = np.min(nonzero_indices, axis=0)\n", " max_row, max_col = np.max(nonzero_indices, axis=0)\n", "\n", " # Calculate the bounding box coordinates\n", " minx, miny = transform * (min_col, min_row)\n", " maxx, maxy = transform * (max_col, max_row)\n", "\n", " # Create the bounding box polygon\n", " geom = box(minx, miny, maxx, maxy)\n", "\n", " # Transform the polygon to the desired CRS\n", " geom = gpd.GeoSeries(geom, crs=crs).to_crs(crs)\n", "\n", " # Add the polygon to the list\n", " cluster_polygons.append(geom[0]) # Take the first element\n", "\n", " # Combine all polygons into a GeoDataFrame\n", " cluster_gdf = gpd.GeoDataFrame({'cluster_label': unique_labels}, geometry=cluster_polygons, crs=crs)\n", "\n", " return cluster_gdf\n", "\n", "cluster_gdf = get_cluster_boundaries(cluster_labels, transform)" ] }, { "cell_type": "code", "execution_count": 27, "id": "dfe4c998-e046-49b3-820f-1762935462b9", "metadata": {}, "outputs": [], "source": [ "def describe_cluster_location(cluster_gdf, aoi_file):\n", " # Get the centroid of the city\n", " city_centroid = shape(aoi_file.geometry.centroid.iloc[0])\n", " \n", " # Get the centroid of the cluster with the highest value\n", " highest_cluster = cluster_gdf[cluster_gdf['cluster_label'] == cluster_gdf['cluster_label'].max()]['geometry'].centroid.values[0]\n", " # Get the centroid of the cluster with the lowest value\n", " lowest_cluster = cluster_gdf[cluster_gdf['cluster_label'] == cluster_gdf['cluster_label'].min()]['geometry'].centroid.values[0]\n", " \n", " # Determine the location of the clusters\n", " highest_location = \"north\" if highest_cluster.y > city_centroid.y else \"south\"\n", " lowest_location = \"north\" if lowest_cluster.y > city_centroid.y else \"south\"\n", " \n", " if highest_cluster.x > city_centroid.x:\n", " highest_location += \" east\"\n", " elif highest_cluster.x < city_centroid.x:\n", " highest_location += \" west\"\n", " \n", " if lowest_cluster.x > city_centroid.x:\n", " lowest_location += \" east\"\n", " elif lowest_cluster.x < city_centroid.x:\n", " lowest_location += \" west\"\n", " \n", " # Check if the centroids are within a range of the city centroid \n", " center_range = 0.2 \n", " center_clusters = cluster_gdf[cluster_gdf['geometry'].apply(lambda geom: abs(geom.centroid.x - city_centroid.x) < center_range and abs(geom.centroid.y - city_centroid.y) < center_range)]\n", " \n", " if len(center_clusters) > 0:\n", " if cluster_gdf['cluster_label'].max() == center_clusters['cluster_label'].max():\n", " highest_location = \"center\"\n", " else:\n", " center_location = \"center\"\n", " \n", " # Print statements describing cluster locations\n", " print(f\"The cluster with the highest value is located in the {highest_location} of the city.\")\n", " print(f\"The cluster with the lowest value is located in the {lowest_location} of the city.\")\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 28, "id": "8c3295a5-bd43-4a44-b602-83195d8056e0", "metadata": {}, "outputs": [], "source": [ "#Text option 4 - OLS\n", "#Bit tricky but might be fun\n", "if menu['summer_lst']: \n", " summer_path = os.path.join(output_folder, city + '_summer.tiff')\n", " with rasterio.open(summer_path) as src:\n", " summer_data = src.read(1)\n", " summer_data = np.nan_to_num(summer_data, nan=0) \n", " transform = src.transform\n", "def pixelwise_regression(pop_path, summer_path):\n", " try:\n", " # Open population raster\n", " with rasterio.open(pop_path) as pop_src:\n", " pop_data = pop_src.read(1)\n", " pop_profile = pop_src.profile\n", "\n", " # Open summer LST raster and reproject to match population raster\n", " with rasterio.open(summer_path) as summer_src:\n", " summer_data = summer_src.read(1)\n", " summer_profile = summer_src.profile\n", "\n", " # Reproject summer LST raster to match population raster\n", " pop_data_resampled = np.zeros_like(summer_data)\n", " reproject(\n", " source=pop_data,\n", " destination=pop_data_resampled,\n", " src_transform=pop_src.transform,\n", " src_crs=pop_src.crs,\n", " dst_transform=summer_src.transform,\n", " dst_crs=summer_src.crs,\n", " resampling=Resampling.bilinear\n", " )\n", "\n", " # Flatten the arrays\n", " summer_flat = summer_data.flatten()\n", " pop_flat = pop_data_resampled.flatten()\n", "\n", " # Perform pixel-wise linear regression\n", " slope, intercept, r_value, p_value, std_err = linregress(pop_flat, summer_flat)\n", "\n", " # Check if p-value is significant\n", " if np.isnan(p_value):\n", " print(\"Regression is not significant. Results may not be reliable.\")\n", "\n", " return slope, intercept, r_value, p_value, std_err\n", "\n", " except Exception as e:\n", " print(\"Error:\", e)\n", " return None, None, None, None, None\n", " \n", "\n" ] }, { "cell_type": "markdown", "id": "54275b76", "metadata": {}, "source": [ "Population Density" ] }, { "cell_type": "code", "execution_count": 29, "id": "cbfd8158-1cc0-4888-bdc5-2890e85ec27d", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "coloraxis": "coloraxis", "hovertemplate": "x: %{x}
y: %{y}
color: %{z}", "name": "0", "type": "heatmap", "xaxis": "x", "yaxis": "y", "z": [ [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 1, 1, 3, 2, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 2, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 3, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 1, 3, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 1, 2, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 4, 4, 0, 0, 0, 0, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 4, 2, 4, 0, 0, 0, 0, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 4, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 2, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 0, 4, 0, 4, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 0, 0, 0, 4, 0, 0, 0, 4, 4, 4, 0, 4, 4, 4, 2, 4, 4, 4, 4, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 4, 4, 0, 0, 0, 0, 4, 0, 0, 4, 4, 4, 4, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 4, 2, 2, 4, 2, 4, 0, 0, 0, 0, 4, 0, 4, 2, 2, 2, 3, 4, 2, 4, 4, 2, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 2, 2, 2, 2, 4, 2, 4, 2, 2, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, 2, 3, 3, 0, 4, 4, 0, 0, 0, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 4, 4, 0, 0, 4, 4, 4, 4, 4, 3, 2, 2, 2, 4, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 4, 4, 4, 0, 0, 4, 4, 2, 4, 2, 2, 2, 2, 0, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 4, 2, 2, 2, 2, 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, 0, 3, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 4, 3, 4, 2, 4, 2, 3, 2, 2, 2, 2, 2, 2, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 4, 3, 4, 4, 4, 4, 3, 4, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 2, 4, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 4, 2, 2, 4, 2, 2, 2, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 3, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 4, 4, 2, 2, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 4, 2, 2, 2, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 4, 4, 4, 2, 0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 2, 2, 4, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 4, 0, 4, 4, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 2, 2, 0, 0, 0, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 2, 2, 3, 0, 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 0, 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ], [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ] ] } ], "layout": { "coloraxis": { "colorscale": [ [ 0, "#440154" ], [ 0.1111111111111111, "#482878" ], [ 0.2222222222222222, "#3e4989" ], [ 0.3333333333333333, "#31688e" ], [ 0.4444444444444444, "#26828e" ], [ 0.5555555555555556, "#1f9e89" ], [ 0.6666666666666666, "#35b779" ], [ 0.7777777777777778, "#6ece58" ], [ 0.8888888888888888, "#b5de2b" ], [ 1, "#fde725" ] ] }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "constrain": "domain", "domain": [ 0, 1 ], "scaleanchor": "y", "title": { "text": "Column Index" } }, "yaxis": { "anchor": "x", "autorange": "reversed", "constrain": "domain", "domain": [ 0, 1 ], "title": { "text": "Row Index" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster labels shape: (71, 80)\n", "The cluster with the highest value is located in the center of the city.\n", "The cluster with the lowest value is located in the south east of the city.\n", "Values range from 7.36 units to 47.96 units\n", "Regression is not significant. Results may not be reliable.\n" ] } ], "source": [ "#Iterate\n", "if menu['population']: \n", " pop_path = os.path.join(output_folder, city + '_population.tif')\n", " with rasterio.open(pop_path) as src:\n", " pop_data = src.read(1)\n", " transform = src.transform \n", "\n", " create_raster_clusters(pop_data, n_clusters=5)\n", " plot_cluster_labels_plotly(cluster_labels)\n", " if cluster_labels is not None:\n", " print(\"Cluster labels shape:\", cluster_labels.shape)\n", " pop_cluster_gdf = get_cluster_boundaries(cluster_labels, transform)\n", " pop_cluster = describe_cluster_location(pop_cluster_gdf, aoi_file)\n", " pop_cluster\n", " find_highest_lowest_pixel_value_path(pop_path)\n", " pixelwise_regression(pop_path, summer_path)" ] }, { "cell_type": "markdown", "id": "93f09b4e", "metadata": {}, "source": [ "Economic Activity" ] }, { "cell_type": "code", "execution_count": 30, "id": "4c3c2778", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "coloraxis": "coloraxis", "hovertemplate": "x: %{x}
y: %{y}
color: %{z}", "name": "0", "type": "heatmap", "xaxis": "x", "yaxis": "y", "z": [ [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ] } ], "layout": { "coloraxis": { "colorscale": [ [ 0, "#440154" ], [ 0.1111111111111111, "#482878" ], [ 0.2222222222222222, "#3e4989" ], [ 0.3333333333333333, "#31688e" ], [ 0.4444444444444444, "#26828e" ], [ 0.5555555555555556, "#1f9e89" ], [ 0.6666666666666666, "#35b779" ], [ 0.7777777777777778, "#6ece58" ], [ 0.8888888888888888, "#b5de2b" ], [ 1, "#fde725" ] ] }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "constrain": "domain", "domain": [ 0, 1 ], "scaleanchor": "y", "title": { "text": "Column Index" } }, "yaxis": { "anchor": "x", "autorange": "reversed", "constrain": "domain", "domain": [ 0, 1 ], "title": { "text": "Row Index" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster labels shape: (66, 74)\n", "The cluster with the highest value is located in the center of the city.\n", "The cluster with the lowest value is located in the south east of the city.\n", "Values range from 0.00 units to 1329.00 units\n" ] } ], "source": [ "if menu['raster_processing']: \n", " rad_path = os.path.join(output_folder, city + '_avg_rad_sum.tiff')\n", " with rasterio.open(rad_path) as src:\n", " rad_data = src.read(1)\n", " rad_data = np.nan_to_num(rad_data, nan=0) \n", " transform = src.transform\n", " rad_cluster_labels = create_raster_clusters(rad_data, n_clusters=5)\n", " plot_cluster_labels_plotly(rad_cluster_labels)\n", " if cluster_labels is not None:\n", " print(\"Cluster labels shape:\", rad_cluster_labels.shape)\n", " rad_cluster_gdf = get_cluster_boundaries(rad_cluster_labels, transform)\n", " rad_cluster = describe_cluster_location(rad_cluster_gdf, aoi_file)\n", " rad_cluster\n", " find_highest_lowest_pixel_value(rad_data)" ] }, { "cell_type": "markdown", "id": "d6cf5c3f", "metadata": {}, "source": [ "Change in Economic Activity " ] }, { "cell_type": "code", "execution_count": 31, "id": "83bf5ffc", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "coloraxis": "coloraxis", "hovertemplate": "x: %{x}
y: %{y}
color: %{z}", "name": "0", "type": "heatmap", "xaxis": "x", "yaxis": "y", "z": [ [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ] } ], "layout": { "coloraxis": { "colorscale": [ [ 0, "#440154" ], [ 0.1111111111111111, "#482878" ], [ 0.2222222222222222, "#3e4989" ], [ 0.3333333333333333, "#31688e" ], [ 0.4444444444444444, "#26828e" ], [ 0.5555555555555556, "#1f9e89" ], [ 0.6666666666666666, "#35b779" ], [ 0.7777777777777778, "#6ece58" ], [ 0.8888888888888888, "#b5de2b" ], [ 1, "#fde725" ] ] }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "constrain": "domain", "domain": [ 0, 1 ], "scaleanchor": "y", "title": { "text": "Column Index" } }, "yaxis": { "anchor": "x", "autorange": "reversed", "constrain": "domain", "domain": [ 0, 1 ], "title": { "text": "Row Index" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster labels shape: (66, 74)\n", "The cluster with the highest value is located in the center of the city.\n", "The cluster with the lowest value is located in the south east of the city.\n", "Values range from -0.10 units to 1.76 units\n" ] } ], "source": [ "if menu['raster_processing']: \n", " linfit_path = os.path.join(output_folder, city + '_linfit.tiff')\n", " with rasterio.open(linfit_path) as src:\n", " linfit_data = src.read(1)\n", " linfit_data = np.nan_to_num(linfit_data, nan=0) \n", " transform = src.transform\n", " linfit_cluster_labels = create_raster_clusters(linfit_data, n_clusters=5)\n", " plot_cluster_labels_plotly(linfit_cluster_labels)\n", " if cluster_labels is not None:\n", " print(\"Cluster labels shape:\", linfit_cluster_labels.shape)\n", " linfit_cluster_gdf = get_cluster_boundaries(linfit_cluster_labels, transform)\n", " linfit_cluster = describe_cluster_location(linfit_cluster_gdf, aoi_file)\n", " linfit_cluster\n", " find_highest_lowest_pixel_value(linfit_data)" ] }, { "cell_type": "markdown", "id": "9d2a7267", "metadata": {}, "source": [ "Urban Extent and Change" ] }, { "cell_type": "code", "execution_count": 32, "id": "37f5a306", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "mode": "lines+markers", "name": "Urban built-up area (km^2)", "type": "scatter", "x": [ 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ], "y": [ 1.97605976747904, 1.9767540962799817, 1.990640672298808, 2.0822920740230644, 2.131589418889899, 2.2649005486706355, 2.3523859775892437, 2.3579406079967744, 2.396128692048548, 2.4384827489059693, 2.4447317081144413, 2.445426036915382, 2.445426036915382, 2.4725048601520947, 2.47528217535586, 2.4843084497680974, 2.487780093772804, 2.500278012189748, 2.587069112307415, 2.7502363805286287, 2.8078656710067595, 2.8800758663046584, 3.053658066539992, 3.1168419874256537, 3.1890521827235525, 3.2348778835856806, 3.2515417748082727, 3.329306600513702, 3.6077324496911776, 3.679248316188135, 4.195828944088489 ] } ], "layout": { "hovermode": "x", "showlegend": true, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } }, "title": { "text": "Urban Built-up Area, 1985-2015" }, "xaxis": { "title": { "text": "Year" } }, "yaxis": { "title": { "text": "Urban built-up area (km^2)" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "The city's built-up area grew from 1.98 sq. km in 1985 to 4.2 in 2015 for 112.33% growth\n" ] } ], "source": [ "wsf_stats()" ] }, { "cell_type": "markdown", "id": "771f58d2", "metadata": {}, "source": [ "Land Cover" ] }, { "cell_type": "code", "execution_count": 33, "id": "2de9e186", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "customdata": [ [ "Tree cover" ], [ "Shrubland" ], [ "Grassland" ], [ "Cropland" ], [ "Built-up" ], [ "Bare / sparse vegetation" ], [ "Snow and ice" ], [ "Permanent water bodies" ], [ "Herbaceous wetland" ], [ "Mangroves" ], [ "Moss and lichen" ] ], "domain": { "x": [ 0, 1 ], "y": [ 0, 1 ] }, "hovertemplate": "Land Cover Type=%{customdata[0]}
Pixel Count=%{value}", "labels": [ "Tree cover", "Shrubland", "Grassland", "Cropland", "Built-up", "Bare / sparse vegetation", "Snow and ice", "Permanent water bodies", "Herbaceous wetland", "Mangroves", "Moss and lichen" ], "legendgroup": "", "marker": { "colors": [ "#397e48", "#dfc25a", "#88af52", "#e49634", "#c4281b", "#a59b8f", "#F5F5F5", "#00008b", "#7d87c4", "#90EE90", "#013220" ] }, "name": "", "showlegend": true, "textinfo": "percent+label", "textposition": "inside", "type": "pie", "values": [ 87720.52156862727, 0, 56026.49803921572, 2117.105882352941, 31513.87843137256, 1042.7882352941176, 0, 4, 0, 0, 0 ] } ], "layout": { "legend": { "tracegroupgap": 0 }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "The first highest landcover value is Tree cover with 49.16% of the total land area\n", "The second highest landcover value is Grassland with 31.40% of the total land area\n", "The third highest landcover value is Built-up with 17.66% of the total land area\n" ] } ], "source": [ "lc_stats()" ] }, { "cell_type": "markdown", "id": "3207ca96", "metadata": {}, "source": [ "Photovoltaic Power Potential" ] }, { "cell_type": "code", "execution_count": 34, "id": "71bcb7a3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Seasonality is low to moderate, making solar energy available in only some of the months\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "month=%{x}
daily=%{y}", "legendgroup": "", "line": { "color": "#636efa", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines+markers", "name": "", "orientation": "v", "showlegend": false, "type": "scatter", "x": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ], "xaxis": "x", "y": [ 2.7285001277923584, 3.3229546546936035, 3.6072728633880615, 3.8908181190490723, 4.337772846221924, 4.879409313201904, 4.876999855041504, 4.8460001945495605, 4.32490873336792, 3.5589544773101807, 3.001636505126953, 2.4764091968536377 ], "yaxis": "y" } ], "layout": { "annotations": [ { "font": { "color": "darkgrey" }, "showarrow": false, "text": "Excellent Conditions", "x": 1, "xshift": 5, "y": 4.6 }, { "font": { "color": "darkgrey" }, "showarrow": false, "text": "Favorable Conditions", "x": 1, "xshift": 5, "y": 3.6 } ], "legend": { "tracegroupgap": 0 }, "margin": { "t": 60 }, "plot_bgcolor": "white", "shapes": [ { "line": { "color": "black", "dash": "dash", "width": 1 }, "type": "line", "x0": 1, "x1": 12, "y0": 3.5, "y1": 3.5 }, { "line": { "color": "black", "dash": "dash", "width": 1 }, "type": "line", "x0": 1, "x1": 12, "y0": 4.5, "y1": 4.5 } ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Seasonal availability of solar energy" }, "xaxis": { "anchor": "y", "domain": [ 0, 1 ], "showgrid": true, "ticktext": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], "tickvals": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ], "title": { "text": "Month" }, "zeroline": false }, "yaxis": { "anchor": "x", "domain": [ 0, 1 ], "range": [ 0, 5 ], "title": { "text": "Daily PV energy yield (kWh/kWp)" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "extract_monthly_stats()" ] }, { "cell_type": "markdown", "id": "1a3ae8d6", "metadata": {}, "source": [ "Land Surface Temperature" ] }, { "cell_type": "code", "execution_count": 35, "id": "758bb1be-2bfd-455f-ae86-5bf4c5a7dd6a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Values range from 0.00 units to 47.84 units\n" ] } ], "source": [ "\n", "if menu['summer_lst']: \n", " summer_path = os.path.join(output_folder, city + '_summer.tiff')\n", " with rasterio.open(summer_path) as src:\n", " summer_data = src.read(1)\n", " summer_data = np.nan_to_num(summer_data, nan=0) \n", " transform = src.transform\n", " find_highest_lowest_pixel_value(summer_data)\n" ] }, { "cell_type": "markdown", "id": "c8a7abb9", "metadata": {}, "source": [ "Green Spaces" ] }, { "cell_type": "code", "execution_count": 36, "id": "96f6175d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Values range from -0.04 units to 0.53 units\n" ] } ], "source": [ "if menu['green']: \n", " NDVI_path = os.path.join(output_folder, city + '_NDVI_Annual.tiff')\n", " with rasterio.open(NDVI_path) as src:\n", " NDVI_data = src.read(1)\n", " NDVI_data = np.nan_to_num(NDVI_data, nan=0) \n", " find_highest_lowest_pixel_value(NDVI_data)" ] }, { "cell_type": "markdown", "id": "036d62ba", "metadata": {}, "source": [ "Elevation" ] }, { "cell_type": "code", "execution_count": 37, "id": "c1b1a8c2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " legend count percent Percent Elevation\n", "0 1160-1290 1581 0.096520 10% 1160\n", "1 1290-1410 5121 0.312637 31% 1290\n", "2 1410-1530 5101 0.311416 31% 1410\n", "3 1530-1640 4577 0.279426 28% 1530\n", "4 1640-1780 3447 0.210440 21% 1640\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "domain": { "x": [ 0, 1 ], "y": [ 0, 1 ] }, "hole": 0.3, "hovertemplate": "Elevation Range=%{label}
Percentage=%{value}", "labels": [ 1160, 1290, 1410, 1530, 1640 ], "legendgroup": "", "name": "", "showlegend": true, "type": "pie", "values": [ 0.096520147, 0.312637363, 0.311416361, 0.279426129, 0.21043956 ] } ], "layout": { "legend": { "orientation": "h", "tracegroupgap": 0, "x": 0.5, "y": 1.1 }, "margin": { "b": 0, "l": 0, "r": 0, "t": 50 }, "piecolorway": [ "#f5c4c0", "#f19bb4", "#ec5fa1", "#c20b8a", "#762175" ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } }, "title": { "text": "Elevation Distribution" } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Highest percentage entry for Elevation:\n", "legend 1290-1410\n", "count 5121\n", "percent 0.312637\n", "Percent 31%\n", "Elevation 1290\n", "Name: 1, dtype: object\n" ] } ], "source": [ "elev_stats()" ] }, { "cell_type": "markdown", "id": "aee50ba4", "metadata": {}, "source": [ "Slope" ] }, { "cell_type": "code", "execution_count": 38, "id": "d7bc5355-3d3a-40ea-a625-bbff73335cca", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "coloraxis": "coloraxis", "hovertemplate": "x: %{x}
y: %{y}
color: %{z}", "name": "0", "type": "heatmap", "xaxis": "x", "yaxis": "y", "z": [ [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 9, 9, 9, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 4, 4, 4, 4, 4, 0, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 4, 4, 4, 4, 4, 0, 0, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 6, 6, 3, 3, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 6, 6, 3, 3, 3, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 6, 6, 3, 3, 3, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 6, 6, 3, 3, 3, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 6, 6, 3, 3, 3, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 0, 0, 0, 0, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 4, 4, 4, 4, 4, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 ] ] } ], "layout": { "coloraxis": { "colorscale": [ [ 0, "#440154" ], [ 0.1111111111111111, "#482878" ], [ 0.2222222222222222, "#3e4989" ], [ 0.3333333333333333, "#31688e" ], [ 0.4444444444444444, "#26828e" ], [ 0.5555555555555556, "#1f9e89" ], [ 0.6666666666666666, "#35b779" ], [ 0.7777777777777778, "#6ece58" ], [ 0.8888888888888888, "#b5de2b" ], [ 1, "#fde725" ] ] }, "margin": { "t": 60 }, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "xaxis": { "anchor": "y", "constrain": "domain", "domain": [ 0, 1 ], "scaleanchor": "y", "title": { "text": "Column Index" } }, "yaxis": { "anchor": "x", "autorange": "reversed", "constrain": "domain", "domain": [ 0, 1 ], "title": { "text": "Row Index" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Cluster labels shape: (66, 74)\n", "The cluster with the highest value is located in the center of the city.\n", "The cluster with the lowest value is located in the north west of the city.\n", "Values range from 0.00 units to 65535.00 units\n" ] } ], "source": [ "if menu['slope']: \n", " slope_path = os.path.join(output_folder, city + '_slope.tif')\n", " with rasterio.open(slope_path) as src:\n", " slope_data = src.read(1)\n", " slope_data = np.nan_to_num(slope_data, nan=0) \n", " transform = src.transform\n", " slope_cluster_labels = create_raster_clusters(linfit_data, n_clusters=10)\n", " plot_cluster_labels_plotly(slope_cluster_labels)\n", " if cluster_labels is not None:\n", " print(\"Cluster labels shape:\", slope_cluster_labels.shape)\n", " slope_cluster_gdf = get_cluster_boundaries(slope_cluster_labels, transform)\n", " slope_cluster = describe_cluster_location(slope_cluster_gdf, aoi_file)\n", " slope_cluster\n", " find_highest_lowest_pixel_value(slope_data)" ] }, { "cell_type": "code", "execution_count": 39, "id": "1101160f", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "domain": { "x": [ 0, 1 ], "y": [ 0, 1 ] }, "hole": 0.3, "hovertemplate": "Slope Range=%{label}
Percentage=%{value}", "labels": [ 0, 2, 5, 10, 20 ], "legendgroup": "", "name": "", "showlegend": true, "type": "pie", "values": [ 0.021349719, 0.13622162, 0.271610081, 0.345084357, 0.225734222 ] } ], "layout": { "legend": { "orientation": "h", "tracegroupgap": 0, "x": 0.5, "y": 1.1 }, "margin": { "b": 0, "l": 0, "r": 0, "t": 50 }, "piecolorway": [ "#ffffd4", "#fed98e", "#fe9929", "#d95f0e", "#993404" ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "white", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "#C8D4E3", "linecolor": "#C8D4E3", "minorgridcolor": "#C8D4E3", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "#C8D4E3" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": { "angularaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" }, "bgcolor": "white", "radialaxis": { "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "yaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" }, "zaxis": { "backgroundcolor": "white", "gridcolor": "#DFE8F3", "gridwidth": 2, "linecolor": "#EBF0F8", "showbackground": true, "ticks": "", "zerolinecolor": "#EBF0F8" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "baxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" }, "bgcolor": "white", "caxis": { "gridcolor": "#DFE8F3", "linecolor": "#A2B1C6", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "#EBF0F8", "linecolor": "#EBF0F8", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "#EBF0F8", "zerolinewidth": 2 } } }, "title": { "text": "Slope Distribution" } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Highest percentage entry for Slope:\n", "legend 10-20\n", "count 6627\n", "percent 0.345084\n", "Percent 35%\n", "Slope 10.0\n", "Name: 3, dtype: object\n" ] } ], "source": [ "slope_stats()" ] }, { "cell_type": "markdown", "id": "52b6d564", "metadata": {}, "source": [ "NDMI" ] }, { "cell_type": "code", "execution_count": 40, "id": "3c9e6b2e-b35b-4b22-958a-d4d459fb1f43", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Values range from -0.22 units to 0.31 units\n" ] } ], "source": [ "if menu['ndmi']: \n", " NDMI_path = os.path.join(output_folder, city + '_NDMI_Annual.tiff')\n", " with rasterio.open(NDMI_path) as src:\n", " NDMI_data = src.read(1)\n", " NDMI_data = np.nan_to_num(NDMI_data, nan=0) \n", " find_highest_lowest_pixel_value(NDMI_data)" ] }, { "cell_type": "markdown", "id": "5e4311f7", "metadata": {}, "source": [ "Flooding " ] }, { "cell_type": "markdown", "id": "d1037b36", "metadata": {}, "source": [ "Pluvial and OSM" ] }, { "cell_type": "code", "execution_count": 41, "id": "de3c25a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 of 3 (0.00%) health are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "2 of 3 (66.67%) police are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "Fire stations do not exist\n", "6 of 10 (60.00%) schools are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "Statistics saved to mnt/city-directories/02-process-output/pu_osmpt.xlsx\n", "Total length of highways intersecting pluvial data: 0.04 meters\n", "Percentage of highways intersecting pluvial data: 0.0011%\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "get_pu_am()\n", "get_pu_roads()" ] }, { "cell_type": "markdown", "id": "7b7a7cd1", "metadata": {}, "source": [ "Pluvial Flooding and WSF" ] }, { "cell_type": "code", "execution_count": 42, "id": "2cb3943e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics by year saved to mnt/city-directories/02-process-output/goris_pu_wsf_areas_by_year.xlsx\n", "PNG saved to mnt/city-directories/03-render-output/pu_wsf.png\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "mode": "lines+markers", "name": "Flooded Area", "type": "scatter", "x": [ 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ], "y": [ 0, 83.6304313104747, 167.2608626209494, 250.89129393142412, 334.5217252418988, 418.1521565523735, 501.78258786284823, 585.4130191733229, 669.0434504837976, 752.6738817942723, 2860.160750818235, 4967.647619842198, 7075.134488866161, 9182.621357890122, 11290.108226914086, 13397.59509593805, 15505.081964962012, 17612.568833985973, 19720.055703009937, 21827.542572033897, 34924.06811525424, 48020.59365847458, 61117.11920169491, 74213.64474491525, 87310.17028813559, 100406.69583135593, 113503.22137457627, 126599.74691779661, 139696.27246101695, 152792.7980042373 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Flooded Area from 1986 to 2015" }, "xaxis": { "title": { "text": "Year" } }, "yaxis": { "title": { "text": "Area (square units)" } } } } }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "In 2015, 152792.80 sq.m of the city’s built-up area (15.33%) was exposed to surface water flooding.\n" ] } ], "source": [ "stats_by_year = get_pu_wsf()\n", "\n", "if stats_by_year is not None:\n", " df = pd.DataFrame(stats_by_year.items(), columns=['Year', 'Area (square units)'])\n", "\n", " excel_file = os.path.join(output_folder, f\"{city}_pu_wsf_areas_by_year.xlsx\")\n", "\n", " df.to_excel(excel_file, index=False)\n", " \n", " print(f\"Statistics by year saved to {excel_file}\")\n", "else:\n", " print(\"No statistics calculated.\")\n", "\n", "if stats_by_year is not None:\n", " years = list(stats_by_year.keys())\n", " areas = list(stats_by_year.values())\n", "\n", " # Filter years for plotting\n", " years_to_plot = [1986, 1995, 2005, 2015]\n", " areas_to_plot = [stats_by_year.get(year, np.nan) for year in years_to_plot]\n", "\n", " # Interpolate missing years' data for a smoother curve\n", " interp_years = np.arange(min(years_to_plot), max(years_to_plot) + 1)\n", " interp_areas = np.interp(interp_years, years_to_plot, areas_to_plot)\n", "\n", " # Matplotlib plot\n", " import matplotlib.pyplot as plt\n", " plt.figure(figsize=(10, 6))\n", " plt.plot(interp_years, interp_areas, marker='o', linestyle='-')\n", " plt.title('Flooded Area from 1986 to 2015')\n", " plt.xlabel('Year')\n", " plt.ylabel('Area (square units)')\n", " plt.grid(True)\n", " plt.tight_layout()\n", " render_path = os.path.join(render_folder, \"pu_wsf.png\")\n", " plt.savefig(render_path)\n", " plt.close()\n", " print(f\"PNG saved to {render_path}\")\n", "\n", " # Plotly plot\n", " fig = go.Figure()\n", " fig.add_trace(go.Scatter(x=interp_years, y=interp_areas, mode='lines+markers', name='Flooded Area'))\n", " fig.update_layout(title='Flooded Area from 1986 to 2015',\n", " xaxis_title='Year',\n", " yaxis_title='Area (square units)')\n", " fig.show()\n", " fig.write_html(render_path.replace('.png', '.html'))\n", "\n", " # Calculate 2015 text\n", " total_built_up_area = sum(stats_by_year.values())\n", " flooded_area_2015 = stats_by_year.get(2015, 0)\n", " percentage_2015 = (flooded_area_2015 / total_built_up_area) * 100\n", " print(f\"In 2015, {flooded_area_2015:.2f} sq.m of the city’s built-up area ({percentage_2015:.2f}%) was exposed to surface water flooding.\")\n", "else:\n", " print(\"No areas calculated.\")" ] }, { "cell_type": "markdown", "id": "21475702", "metadata": {}, "source": [ "Pluvial and Population" ] }, { "cell_type": "code", "execution_count": 43, "id": "c5b95240", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.90% of densely populated areas are located within the rainwater flood risk zone with a minimum depth of 15 cm\n", "Result saved to mnt/city-directories/02-process-output/pu_pop_area.csv\n" ] } ], "source": [ "get_pu_pop_norm()" ] }, { "cell_type": "markdown", "id": "01ff0548", "metadata": {}, "source": [ "Fluvial and OSM" ] }, { "cell_type": "code", "execution_count": 44, "id": "6c5e5c23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 of 3 (0.00%) health are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "0 of 3 (0.00%) police are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "Fire stations do not exist\n", "0 of 10 (0.00%) schools are located in a riverine flood risk zone with a minimum depth of 15 cm.\n", "Statistics saved to mnt/city-directories/02-process-output/fu_osmpt.xlsx\n", "Total length of highways flooded due to pluvial conditions: 0.00 meters\n", "Percentage of highways flooded due to pluvial conditions: 0.00%\n" ] } ], "source": [ "get_fu_am()\n", "get_fu_roads()" ] }, { "cell_type": "markdown", "id": "c2e09c9a", "metadata": {}, "source": [ "Fluvial and WSF" ] }, { "cell_type": "code", "execution_count": 45, "id": "99224e17", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics by year saved to mnt/city-directories/02-process-output/goris_fu_wsf_areas_by_year.xlsx\n", "PNG saved to mnt/city-directories/03-render-output/fu_wsf.png\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "mode": "lines+markers", "name": "Flooded Area", "type": "scatter", "x": [ 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 ], "y": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Flooded Area from 1986 to 2015 " }, "xaxis": { "title": { "text": "Year" } }, "yaxis": { "title": { "text": "Area (square units)" } } } } }, "metadata": {}, "output_type": "display_data" }, { "ename": "ZeroDivisionError", "evalue": "float division by zero", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[45], line 52\u001b[0m\n\u001b[1;32m 50\u001b[0m total_built_up_area \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msum\u001b[39m(stats_by_year\u001b[38;5;241m.\u001b[39mvalues())\n\u001b[1;32m 51\u001b[0m flooded_area_2015 \u001b[38;5;241m=\u001b[39m stats_by_year\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;241m2015\u001b[39m, \u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m---> 52\u001b[0m percentage_2015 \u001b[38;5;241m=\u001b[39m (\u001b[43mflooded_area_2015\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtotal_built_up_area\u001b[49m) \u001b[38;5;241m*\u001b[39m \u001b[38;5;241m100\u001b[39m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIn 2015, \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mflooded_area_2015\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m sq.m of the city’s built-up area (\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mpercentage_2015\u001b[38;5;132;01m:\u001b[39;00m\u001b[38;5;124m.2f\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m%) was exposed to surface water flooding.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", "\u001b[0;31mZeroDivisionError\u001b[0m: float division by zero" ] } ], "source": [ "stats_by_year = get_fu_wsf()\n", "\n", "if stats_by_year is not None:\n", " df = pd.DataFrame(stats_by_year.items(), columns=['Year', 'Area (square units)'])\n", "\n", " excel_file = os.path.join(output_folder, f\"{city}_fu_wsf_areas_by_year.xlsx\")\n", "\n", " df.to_excel(excel_file, index=False)\n", " \n", " print(f\"Statistics by year saved to {excel_file}\")\n", "else:\n", " print(\"No statistics calculated.\")\n", "\n", "if stats_by_year is not None:\n", " years = list(stats_by_year.keys())\n", " areas = list(stats_by_year.values())\n", "\n", " # Filter years for plotting\n", " years_to_plot = [1986, 1995, 2005, 2015]\n", " areas_to_plot = [stats_by_year.get(year, np.nan) for year in years_to_plot]\n", "\n", " # Interpolate missing years' data for a smoother curve\n", " interp_years = np.arange(min(years_to_plot), max(years_to_plot) + 1)\n", " interp_areas = np.interp(interp_years, years_to_plot, areas_to_plot)\n", "\n", " # Matplotlib plot\n", " import matplotlib.pyplot as plt\n", " plt.figure(figsize=(10, 6))\n", " plt.plot(interp_years, interp_areas, marker='o', linestyle='-')\n", " plt.title('Flooded Area from 1986 to 2015 ')\n", " plt.xlabel('Year')\n", " plt.ylabel('Area (square units)')\n", " plt.grid(True)\n", " plt.tight_layout()\n", " render_path = os.path.join(render_folder, \"fu_wsf.png\")\n", " plt.savefig(render_path)\n", " plt.close()\n", " print(f\"PNG saved to {render_path}\")\n", "\n", " # Plotly plot\n", " fig = go.Figure()\n", " fig.add_trace(go.Scatter(x=interp_years, y=interp_areas, mode='lines+markers', name='Flooded Area'))\n", " fig.update_layout(title='Flooded Area from 1986 to 2015 ',\n", " xaxis_title='Year',\n", " yaxis_title='Area (square units)')\n", " fig.show()\n", " fig.write_html(render_path.replace('.png', '.html'))\n", "\n", " # Calculate 2015 text\n", " total_built_up_area = sum(stats_by_year.values())\n", " flooded_area_2015 = stats_by_year.get(2015, 0)\n", " percentage_2015 = (flooded_area_2015 / total_built_up_area) * 100\n", " print(f\"In 2015, {flooded_area_2015:.2f} sq.m of the city’s built-up area ({percentage_2015:.2f}%) was exposed to surface water flooding.\")\n", "else:\n", " print(\"No areas calculated.\")\n" ] }, { "cell_type": "markdown", "id": "2b8874f0", "metadata": {}, "source": [ "Fluvial and Population" ] }, { "cell_type": "code", "execution_count": 70, "id": "5d135cfb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.72% of densely populated areas are located within the fluvial flood risk zone with a minimum depth of 10 cm\n", "Result saved to mnt/city-directories/02-process-output/fu_pop_area.csv\n" ] } ], "source": [ "get_fu_pop_norm()" ] }, { "cell_type": "code", "execution_count": 46, "id": "2dd419f8", "metadata": {}, "outputs": [], "source": [ "def export_outputs_to_markdown(notebook_path, output_path):\n", " # Load the notebook\n", " with open(notebook_path, 'r', encoding='utf-8') as f:\n", " notebook_content = nbformat.read(f, as_version=4)\n", " \n", " # Initialize the Markdown exporter\n", " markdown_exporter = MarkdownExporter()\n", " markdown_exporter.exclude_input = True # Exclude input cells from the Markdown\n", " \n", " # Convert the notebook to Markdown format\n", " markdown_output, resources = markdown_exporter.from_notebook_node(notebook_content)\n", " \n", " # Remove the folders for plots and pickles from the resources\n", " resources.pop('outputs', None)\n", " resources.pop('output_files', None)\n", " \n", " # Write the Markdown content to a file\n", " with open(output_path, 'w', encoding='utf-8') as f:\n", " f.write(markdown_output)\n", "\n", "# Path to the input notebook\n", "input_notebook_path = \"/Users/ipshitakarmakar/Documents/GitHub/city-scan-automation/Text Options- Clustering.ipynb\"\n", "\n", "# Path for the output Markdown file\n", "output_markdown_path = \"/Users/ipshitakarmakar/Documents/GitHub/city-scan-automation/output_notebook.md\"\n", " \n", "# Export the outputs to Markdown\n", "export_outputs_to_markdown(input_notebook_path, output_markdown_path)\n" ] } ], "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.11.4" } }, "nbformat": 4, "nbformat_minor": 5 }