{ "cells": [ { "cell_type": "markdown", "metadata": { "execution": { "iopub.execute_input": "2025-07-15T17:54:57.930578Z", "iopub.status.busy": "2025-07-15T17:54:57.926902Z", "iopub.status.idle": "2025-07-15T17:54:57.937203Z", "shell.execute_reply": "2025-07-15T17:54:57.936416Z", "shell.execute_reply.started": "2025-07-15T17:54:57.930422Z" } }, "source": [ "# Visualizing Climate Change in India\n", "\n", "In this vignette, we show how to use **`varunayan`** to easily extract annual average temperature data for India and visualize the temperature changes over the period from **1941 to 2024**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 1: Download Temperature Data for India\n", "\n", "We use `varunayan.era5ify_geojson` to download **yearly average 2m temperature data** for India, using a GeoJSON boundary file from a public URL." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": { "iopub.execute_input": "2025-07-15T18:03:49.340292Z", "iopub.status.busy": "2025-07-15T18:03:49.339724Z", "iopub.status.idle": "2025-07-15T18:09:27.454747Z", "shell.execute_reply": "2025-07-15T18:09:27.454301Z", "shell.execute_reply.started": "2025-07-15T18:03:49.340264Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0m\n", "============================================================\u001b[0m\n", "\u001b[0m\u001b[0;34mSTARTING ERA5 SINGLE LEVEL PROCESSING\u001b[0m\u001b[0m\n", "\u001b[0m============================================================\u001b[0m\n", "\u001b[0mRequest ID: temp_india_yearly\u001b[0m\n", "\u001b[0mVariables: ['2m_temperature']\u001b[0m\n", "\u001b[0mDate Range: 1941-01-01 to 2024-12-31\u001b[0m\n", "\u001b[0mFrequency: yearly\u001b[0m\n", "\u001b[0mResolution: 0.25°\u001b[0m\n", "\u001b[0mGeoJSON File: C:\\Users\\ATHARV~1\\AppData\\Local\\Temp\\temp_india_yearly_temp_geojson.json\u001b[0m\n", "\n", "\n", "--- GeoJSON Mini Map ---\n", "\n", "\u001b[0;34mMINI MAP (68.18°W to 97.40°E, 7.97°S to 35.49°N):\u001b[0m\n", "┌─────────────────────────────────────────┐\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;32m■\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "│\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m│\n", "└─────────────────────────────────────────┘\n", " \u001b[0;32m■\u001b[0m = Inside the shape\n", " \u001b[0;31m·\u001b[0m = Outside the shape\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ad5158af79764a58904656f6fc9881ad", "version_major": 2, "version_minor": 0 }, "text/plain": [ "11816a5996f2ad50a927f9c906761429.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "89595885dc954fa9b71598d6ddeb5a06", "version_major": 2, "version_minor": 0 }, "text/plain": [ "e0a0ebf7450e58d35c26985e9ffdf5d2.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "453dc5cceab1422e99801b769e664ab0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "684289f83f9ec5a445f2777d12466f59.zip: 0%| | 0.00/2.28M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a5992fd8e10347b0a19aa9c86ab0d7f3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "412b00c7f5eee84fe077883928bc2829.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e581374743ef4bfd840656ccacf1c4f2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "435c337616af70ed2ba0251618388fdd.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b9cbac435680472da4f1d9176322fdc9", "version_major": 2, "version_minor": 0 }, "text/plain": [ "c03c5d2fe3a0462c9c84d90e39f9a850.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ff8d5b91bbd74797a71600c9d07d4312", "version_major": 2, "version_minor": 0 }, "text/plain": [ "cd6900b6c23a704f4e7066e4233b5242.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "70039e9b41bc42869e2df08945105a5d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "9d5648bc4e64a705ffab07909854d4a6.zip: 0%| | 0.00/2.29M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a85ceb20a67a46e59af4fbbdd43ead2a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "d5e88404acc5259c4dec5904a8b420ef.zip: 0%| | 0.00/2.28M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "51b5d6c186d0477a9baaf9ad815a9214", "version_major": 2, "version_minor": 0 }, "text/plain": [ "316b09b4161591ccc0a3a1ac059b2348.zip: 0%| | 0.00/2.28M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "265dd096744742228a255d77f8f7e402", "version_major": 2, "version_minor": 0 }, "text/plain": [ "f81da4a5487d6f886abf9d3c3b5aedac.zip: 0%| | 0.00/195k [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0m\n", "Saving files to output directory: temp_india_yearly_output\u001b[0m\n", "\u001b[0m Saved final data to: temp_india_yearly_output\\temp_india_yearly_yearly_data.csv\u001b[0m\n", "\u001b[0m Saved unique coordinates to: temp_india_yearly_output\\temp_india_yearly_unique_latlongs.csv\u001b[0m\n", "\u001b[0m Saved raw data to: temp_india_yearly_output\\temp_india_yearly_raw_data.csv\u001b[0m\n", "\u001b[0m\n", "============================================================\u001b[0m\n", "\u001b[0m\u001b[0;32mPROCESSING COMPLETE\u001b[0m\u001b[0m\n", "\u001b[0m============================================================\u001b[0m\n", "\u001b[0m\n", "\u001b[0;36mRESULTS SUMMARY:\u001b[0m\u001b[0m\n", "\u001b[0m----------------------------------------\u001b[0m\n", "\u001b[0mVariables processed: 1\u001b[0m\n", "\u001b[0mTime period: 1941-01-01 to 2024-12-31\u001b[0m\n", "\u001b[0mFinal output shape: (84, 2)\u001b[0m\n", "\u001b[0mTotal complete processing time: 447.03 seconds\u001b[0m\n", "\u001b[0m\n", "First 5 rows of aggregated data:\u001b[0m\n", "\u001b[0m t2m year\n", "0 296.386200 1941\n", "1 296.234344 1942\n", "2 295.743408 1943\n", "3 296.361176 1944\n", "4 296.111603 1945\u001b[0m\n", "\u001b[0m\n", "============================================================\u001b[0m\n", "\u001b[0m\u001b[0;34mERA5 SINGLE LEVEL PROCESSING COMPLETED SUCCESSFULLY\u001b[0m\u001b[0m\n", "\u001b[0m============================================================\u001b[0m\n" ] } ], "source": [ "import varunayan\n", "\n", "df = varunayan.era5ify_geojson(\n", " request_id=\"temp_india_yearly\",\n", " variables=[\"2m_temperature\"],\n", " start_date=\"1941-1-1\",\n", " end_date=\"2024-12-31\",\n", " json_file=\"https://gist.githubusercontent.com/JaggeryArray/bf296307132e7d6127e28864c7bea5bf/raw/4bce03beea35d61a93007f54e52ba81f575a7feb/india.json\",\n", " frequency=\"yearly\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 2: Compute Deviation from Long-Term Mean\n", "\n", "We calculate the deviation of each year's average temperature from the long-term mean. This helps us understand how each year compares to the overall average." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": { "iopub.execute_input": "2025-07-15T18:09:27.455453Z", "iopub.status.busy": "2025-07-15T18:09:27.455333Z", "iopub.status.idle": "2025-07-15T18:09:27.461908Z", "shell.execute_reply": "2025-07-15T18:09:27.461676Z", "shell.execute_reply.started": "2025-07-15T18:09:27.455443Z" } }, "outputs": [ { "data": { "text/html": [ "
| \n", " | t2m | \n", "year | \n", "dev | \n", "
|---|---|---|---|
| 0 | \n", "296.386200 | \n", "1941 | \n", "-0.202301 | \n", "
| 1 | \n", "296.234344 | \n", "1942 | \n", "-0.354156 | \n", "
| 2 | \n", "295.743408 | \n", "1943 | \n", "-0.845093 | \n", "
| 3 | \n", "296.361176 | \n", "1944 | \n", "-0.227325 | \n", "
| 4 | \n", "296.111603 | \n", "1945 | \n", "-0.476898 | \n", "