{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Working with Pressure Level Data\n", "\n", "This tutorial demonstrates how to extract and analyze ERA5 pressure level data using varunayan. Unlike single-level variables (like 2-meter temperature), pressure level data provides vertical atmospheric profiles at specific pressure levels.\n", "\n", "ERA5 pressure level data is available at these levels (in hPa):\n", "- **Surface levels**: 1000, 975, 950, 925\n", "- **Lower atmosphere**: 900, 875, 850, 825, 800, 775, 750, 700\n", "- **Middle atmosphere**: 650, 600, 550, 500, 450, 400, 350, 300\n", "- **Upper atmosphere**: 250, 225, 200, 175, 150, 125, 100, 70, 50, 30, 20, 10, 7, 5, 3, 2, 1\n", "\n", "\n", "| Variable Code | Description | Units |\n", "|---------------|-------------|-------|\n", "| `t` | Temperature | K |\n", "| `r` | Relative humidity | % |\n", "| `q` | Specific humidity | kg/kg |\n", "| `u` | U-component of wind | m/s |\n", "| `v` | V-component of wind | m/s |\n", "| `w` | Vertical velocity | Pa/s |\n", "| `z` | Geopotential | m²/s² |\n", "| `d` | Divergence | s⁻¹ |\n", "| `vo` | Vorticity | s⁻¹ |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-10-12T11:50:33.696053Z", "iopub.status.busy": "2025-10-12T11:50:33.695558Z", "iopub.status.idle": "2025-10-12T11:50:35.289213Z", "shell.execute_reply": "2025-10-12T11:50:35.288940Z", "shell.execute_reply.started": "2025-10-12T11:50:33.696028Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "varunayan version: 0.1.0\n" ] } ], "source": [ "import calendar\n", "import warnings\n", "from datetime import datetime\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "\n", "import varunayan\n", "\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "# Set up plotting style\n", "plt.style.use(\"default\")\n", "sns.set_palette(\"husl\")\n", "plt.rcParams[\"figure.figsize\"] = (12, 8)\n", "plt.rcParams[\"font.size\"] = 11\n", "\n", "print(f\"varunayan version: {varunayan.__version__}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Atmospheric Temperature Profile\n", "\n", "Let's extract temperature data at multiple pressure levels to create an atmospheric temperature profile over India." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-10-12T11:50:35.289657Z", "iopub.status.busy": "2025-10-12T11:50:35.289478Z", "iopub.status.idle": "2025-10-12T11:50:55.457740Z", "shell.execute_reply": "2025-10-12T11:50:55.457501Z", "shell.execute_reply.started": "2025-10-12T11:50:35.289648Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0m\n", "============================================================\u001b[0m\n", "\u001b[0m\u001b[0;34mSTARTING ERA5 PRESSURE LEVEL PROCESSING\u001b[0m\u001b[0m\n", "\u001b[0m============================================================\u001b[0m\n", "\u001b[0mRequest ID: temp_profile_india_2023\u001b[0m\n", "\u001b[0mVariables: ['t']\u001b[0m\n", "\u001b[0mPressure Levels: ['1000', '850', '700', '500', '300', '200']\u001b[0m\n", "\u001b[0mDate Range: 2023-01-01 to 2023-12-31\u001b[0m\n", "\u001b[0mFrequency: monthly\u001b[0m\n", "\u001b[0mResolution: 0.25°\u001b[0m\n", "\u001b[0mGeoJSON File: /var/folders/gl/sfjd74gn0wv11h31lr8v2cj40000gn/T/temp_profile_india_2023_temp_geojson.json\u001b[0m\n", "\n", "\n", "--- GeoJSON Mini Map ---\n", "\n", "\u001b[0;34mMINI MAP (Longitude: 68.18° to 97.38°, Latitude: 8.13° to 37.08°):\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│\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;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;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[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;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│\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;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\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│\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;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│\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;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│\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;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[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;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│\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;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;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;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[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;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[0;31m·\u001b[0m\u001b[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│\n", "└──────────────────────────────┘\n", " \u001b[0;32m■\u001b[0m = Inside the shape\n", " \u001b[0;31m·\u001b[0m = Outside the shape\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2025-10-12 17:20:36,903 INFO Request ID is 56d107f1-a0d3-4e6a-9772-500298476305\n", "INFO:ecmwf.datastores.legacy_client:Request ID is 56d107f1-a0d3-4e6a-9772-500298476305\n", "2025-10-12 17:20:37,074 INFO status has been updated to accepted\n", "INFO:ecmwf.datastores.legacy_client:status has been updated to accepted\n", "2025-10-12 17:20:46,124 INFO status has been updated to running\n", "INFO:ecmwf.datastores.legacy_client:status has been updated to running\n", "2025-10-12 17:20:51,368 INFO status has been updated to successful\n", "INFO:ecmwf.datastores.legacy_client:status has been updated to successful\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2fbdfcd791fc4c11901db9c6430708ab", "version_major": 2, "version_minor": 0 }, "text/plain": [ "24d1d4534ceeb348240019d4bb9cff69.nc: 0%| | 0.00/1.53M [00:00, ?B/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0m\n", "Saving files to output directory: temp_profile_india_2023_output\u001b[0m\n", "\u001b[0m Saved final data to: temp_profile_india_2023_output/temp_profile_india_2023_monthly_data.csv\u001b[0m\n", "\u001b[0m Saved unique coordinates to: temp_profile_india_2023_output/temp_profile_india_2023_unique_latlongs.csv\u001b[0m\n", "\u001b[0m Saved raw data to: temp_profile_india_2023_output/temp_profile_india_2023_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: 2023-01-01 to 2023-12-31\u001b[0m\n", "\u001b[0mFinal output shape: (72, 5)\u001b[0m\n", "\u001b[0mTotal complete processing time: 19.75 seconds\u001b[0m\n", "\u001b[0m\n", "First 5 rows of aggregated data:\u001b[0m\n", "\u001b[0m t pressure_level year month feature\n", "0 293.515991 1000.0 2023 1 feature_0\n", "1 297.903076 1000.0 2023 2 feature_0\n", "2 299.780853 1000.0 2023 3 feature_0\n", "3 303.042023 1000.0 2023 4 feature_0\n", "4 304.408234 1000.0 2023 5 feature_0\u001b[0m\n", "\u001b[0m\n", "============================================================\u001b[0m\n", "\u001b[0m\u001b[0;34mERA5 PRESSURE LEVEL PROCESSING COMPLETED SUCCESSFULLY\u001b[0m\u001b[0m\n", "\u001b[0m============================================================\u001b[0m\n", "Temperature profile data extraction completed!\n", "Output saved to: temp_profile_india_2023_output/\n" ] } ], "source": [ "# Extract temperature at multiple pressure levels\n", "df_temp_profile = varunayan.era5ify_geojson(\n", " request_id=\"temp_profile_india_2023\",\n", " variables=[\"t\"], # Temperature\n", " pressure_levels=[\n", " \"1000\",\n", " \"850\",\n", " \"700\",\n", " \"500\",\n", " \"300\",\n", " \"200\",\n", " ], # Different atmospheric levels\n", " start_date=\"2023-01-01\",\n", " end_date=\"2023-12-31\",\n", " json_file=\"https://gist.githubusercontent.com/JaggeryArray/26b6e4c09ce033305080253002c0ba76/raw/35d1ca0ca8ee64c4b5a0a8c4f22764cf6ac38bd4/india.geojson\",\n", " frequency=\"monthly\",\n", " resolution=0.25, # Lower resolution for faster processing\n", " dataset_type=\"pressure\", # This is the key parameter!\n", ")\n", "\n", "print(\"Temperature profile data extraction completed!\")\n", "print(f\"Output saved to: temp_profile_india_2023_output/\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-10-12T11:50:55.458286Z", "iopub.status.busy": "2025-10-12T11:50:55.458179Z", "iopub.status.idle": "2025-10-12T11:50:55.463962Z", "shell.execute_reply": "2025-10-12T11:50:55.463749Z", "shell.execute_reply.started": "2025-10-12T11:50:55.458276Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset shape: (72, 5)\n", "\n", "Columns: ['t', 'pressure_level', 'year', 'month', 'feature']\n", "\n", "First few rows:\n" ] }, { "data": { "text/html": [ "
| \n", " | t | \n", "pressure_level | \n", "year | \n", "month | \n", "feature | \n", "
|---|---|---|---|---|---|
| 0 | \n", "293.51600 | \n", "1000.0 | \n", "2023 | \n", "1 | \n", "feature_0 | \n", "
| 1 | \n", "297.90308 | \n", "1000.0 | \n", "2023 | \n", "2 | \n", "feature_0 | \n", "
| 2 | \n", "299.78085 | \n", "1000.0 | \n", "2023 | \n", "3 | \n", "feature_0 | \n", "
| 3 | \n", "303.04202 | \n", "1000.0 | \n", "2023 | \n", "4 | \n", "feature_0 | \n", "
| 4 | \n", "304.40823 | \n", "1000.0 | \n", "2023 | \n", "5 | \n", "feature_0 | \n", "