From 326b63490ab002450ede41240a3ffcd365f24aeb Mon Sep 17 00:00:00 2001 From: Mattia Almansi Date: Fri, 6 Sep 2024 16:32:58 +0200 Subject: [PATCH] add q03 --- ...ations-europe_climate-monitoring_q03.ipynb | 627 ++++++++++++++++++ 1 file changed, 627 insertions(+) create mode 100644 In_Situ/insitu_insitu-gridded-observations-europe_climate-monitoring_q03.ipynb diff --git a/In_Situ/insitu_insitu-gridded-observations-europe_climate-monitoring_q03.ipynb b/In_Situ/insitu_insitu-gridded-observations-europe_climate-monitoring_q03.ipynb new file mode 100644 index 00000000..ea556c61 --- /dev/null +++ b/In_Situ/insitu_insitu-gridded-observations-europe_climate-monitoring_q03.ipynb @@ -0,0 +1,627 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# Insitu wind and precipitation completeness for climate monitoring \n", + "\n", + "Production date: 05/09/2024\n", + "\n", + "Produced by: Ana Oliveira (CoLAB +ATLANTIC)\n", + "\n", + "\n", + "## Use Case: Impact of climate change on precipitation over the Iberian Peninsula.\n", + "\n", + "## Quality Statement question\n", + "* **How consistent are the estimates of precipitation and wind speed trends from E-OBS compared to those from reanalysis products?** \n", + "\n", + "In this Use Case we will access the E-OBS daily gridded meteorological data for Europe from 1950 to present derived from in-situ observations (henceforth, E-OBS) data from the Climate Data Store (CDS) of the Copernicus Climate Change Service (C3S) and analyse the spatial consistency of the E-OBS air temperature climatology over a given Area of Interest (AoI).\n", + "\n", + "## The Quality Statements of this Use Case are:\n", + "\n", + "* Accordingly, with [Bandhauer, M. et al (2021)](https://doi.org/10.1002/joc.7269), both E-OBS and ERA5 demonstrate accuracy in capturing precipitation patterns, with E-OBS showing good agreement in regions with dense station networks while ERA5 exhibits consistent mesoscale pattern representation. The authors also concluded that E-OBS can capture extreme values of precipitation in areas with high data density but may smooth out extreme events in data-sparse regions, however ERA5 shows improved detection of extreme precipitation events due to advanced physical modeling.\n", + "\n", + "* [Rivoire P., Martius O. and Naveau P. (2021)](https://doi.org/10.1029/2020EA001633) studied the consistency of precipitation and wind speed trends in ERA-5 compared to 2 observational datasets (E-OBS and CMORPH) analysis; since ERA-5 offers regular spatial and temporal coverage, the precipitation data are derived from short-term forecasts (not observations), the authors wanted to fill the gap in large-scale assessments of ERA-5 comparing it with E-OBS over Europe and globally with CMORPH, emphasizing intensity distribution and co-occurrence of events. The authors showed that ERA-5 demonstrated a high level of accuracy in capturing precipitation trends compared to E-OBS, in Europe where discrepancies are smaller. However, they found some differences in extreme precipitation events, indicating potential precision limitations in ERA-5 data, especially in tropical regions.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "## Methodology\n", + "\n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-1)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-1.1)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-2)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-3)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-4)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-5)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-6)** \n", + "**[](C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-7)** " + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-1)= \n", + "### 1. Define the AoI, search and download E-OBS\n" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "#### Import all the libraries/packages\n", + "\n", + "We will be working with data in NetCDF format. To best handle this data we will use libraries for working with multidimensional arrays, in particular Xarray. We will also need libraries for plotting and viewing data, in this case we will use Matplotlib and Cartopy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "import cartopy.crs as ccrs\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import xarray as xr\n", + "import pymannkendall as mk\n", + "from c3s_eqc_automatic_quality_control import download, utils, diagnostics, plot\n", + "\n", + "# # import libraries\n", + "# from cdo import cdo\n", + "\n", + "# # check cdo\n", + "# cdo = Cdo()\n", + "# help(cdo.sinfov)\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = [15, 5]\n", + "plt.style.use(\"seaborn-v0_8-notebook\")\n", + "\n", + "import warnings\n", + "import os\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "#### Data Overview\n", + "\n", + "To search for data, visit the CDS website: http://cds.climate.copernicus.eu. Here you can search for 'in-situ observations' using the search bar. The data we need for this tutorial is the E-OBS daily gridded meteorological data for Europe from 1950 to present derived from in-situ observations. This catalogue entry provides a daily gridded dataset of historical meteorological observations, covering Europe (land-only), from 1950 to the present. This data is derived from in-situ meteorological stations, made available through the European Climate Assessment & Dataset (ECA&D) project, as provided by National Meteorological and Hydrological Services (NMHSs) and other data-holding institutes. \n", + "\n", + "E-OBS comprises a set of spatially continuous Essential Climate Variables (ECVs) from the Surface Atmosphere, following the Global Climate Observing System (GCOS) convention, provided as the mean and spread of the spatial prediction ensemble algorithm, at regular latitude-longitude grid intervals (at a 0.1° and 0.25° spatial resolution), and covering a long time-period, from 1 January 1950 to present-day. In addition to the land surface elevation, E-OBS includes daily air temperature (mean, maximum and minimum), precipitation amount, wind speed, sea-level pressure and shortwave downwelling radiation. \n", + "\n", + "The E-OBS version used for this Use Case, E-OBSv28.0e, was released in October 2023 and its main difference from the previous E-OBSv27.0e is the inclusion of new series and some corrections for precipitation stations.\n", + "\n", + "Having selected the correct dataset, we now need to specify what product type, variables, temporal and geographic coverage we are interested in. In this Use Case, the ensemble mean of precipitation (RR) and daily mean wind speed (FG) will be used, considering the last version available (v28.0e). These can all be selected in the “Download data” tab from the CDS. In this tab a form appears in which we will select the following parameters to download, for example:\n", + "\n", + "- Product Type: Ensemble mean \n", + "- Variable: daily precipitation sum and daily mean wind speed\n", + "- Grid resolution: 0.25 \n", + "- Period: Full period \n", + "- Version: 28.0e \n", + "- Format: Zip file (.zip)\n", + "\n", + "At the end of the download form, select `Show API request`. This will reveal a block of code, which you can simply copy and paste into a cell of your Jupyter Notebook …\n", + "\n", + "Download data\n", + "… having copied the API request to a Jupyter Notebook cell, running it will retrieve and download the data you requested into your local directory. However, before you run it, the `terms and conditions` of this particular dataset need to have been accepted directly at the CDS website. The option to view and accept these conditions is given at the end of the download form, just above the `Show API request` option. In addition, it is also useful to define the time period and AoI parameters and edit the request accordingly, as exemplified in the cells below." + ] + }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-1.1)= \n", + "### 1.1. Download and prepared E-OBS data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7", + "metadata": {}, + "outputs": [], + "source": [ + "# Define request\n", + "request = (\n", + " \"insitu-gridded-observations-europe\",\n", + " {\n", + " \"format\": \"zip\",\n", + " \"product_type\": \"ensemble_mean\",\n", + " \"variable\": [\"precipitation_amount\", \"wind_speed\"],\n", + " \"grid_resolution\": \"0.25deg\",\n", + " \"period\": \"full_period\",\n", + " \"version\": \"28.0e\",\n", + " \"area\": [42.15, -9.50, 36.95, -6.19],\n", + " },\n", + ")\n", + "\n", + "# Process the request\n", + "ds_EOBS = download.download_and_transform(*request)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "# Subset data for the year range 1950 to 2020\n", + "ds_EOBS = ds_EOBS.sel(time=slice('1950-01-01', '2020-12-31'))\n", + "\n", + "# Inspect data\n", + "ds_EOBS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename and update attributes for 'rr'\n", + "ds_EOBS = ds_EOBS.rename({'rr': 'RR EOBS'})\n", + "ds_EOBS['RR EOBS'].attrs['long_name'] = 'Total Precipitation'\n", + "ds_EOBS['RR EOBS'].attrs['units'] = 'mm'\n", + "\n", + "# Rename and update attributes for 'var2'\n", + "ds_EOBS = ds_EOBS.rename({'fg': 'WS EOBS'})\n", + "ds_EOBS['WS EOBS'].attrs['long_name'] = 'Wind Speed'\n", + "ds_EOBS['WS EOBS'].attrs['units'] = 'm/s'\n", + "\n", + "ds_EOBS\n" + ] + }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "### Download ERA5 and prepared data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11", + "metadata": {}, + "outputs": [], + "source": [ + "# Define time interval\n", + "start = \"1950-01\"\n", + "stop = \"2020-12\"\n", + "\n", + "# Define request\n", + "collection_id = \"reanalysis-era5-single-levels\"\n", + "request = {\n", + " \"product_type\": \"ensemble_mean\",\n", + " \"format\": 'netcdf',\n", + " 'variable': [\n", + " '10m_u_component_of_wind', '10m_v_component_of_wind', 'total_precipitation',\n", + " ],\n", + " \"time\": [f\"{hour:02d}:00\" for hour in range(0, 24, 3)],\n", + " \"area\": [44, -10, 36, 1],\n", + "\n", + "} \n", + "\n", + "requests = download.update_request_date(request, start, stop)\n", + "\n", + "# Process the request\n", + "ds_ERA5 = download.download_and_transform(collection_id, requests, chunks={\"year\": 1})\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "# Subset data for the year range 1950 to 2020\n", + "ds_ERA5 = ds_ERA5.sel(time=slice('1950-01-01', '2020-12-31'))\n", + "\n", + "# Inspect data\n", + "ds_ERA5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert units for precipitation from meters to millimeters\n", + "ds_ERA5['tp'] = ds_ERA5['tp'] * 1000" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14", + "metadata": {}, + "outputs": [], + "source": [ + "# Resample precipitation to daily frequency and sum up\n", + "ds_ERA5_precip = ds_ERA5['tp'].resample(time='1D').sum(dim='time')\n", + "ds_ERA5_precip = ds_ERA5_precip.rename('RR ERA5')\n", + "ds_ERA5_precip.attrs['long_name'] = 'Total Precipitation'\n", + "ds_ERA5_precip.attrs['units'] = 'mm'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "ds_ERA5_precip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16", + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate wind speed from U and V components\n", + "u10 = ds_ERA5['u10']\n", + "v10 = ds_ERA5['v10']\n", + "wind_speed_ERA5 = np.sqrt(u10**2 + v10**2)\n", + "\n", + "# Resample wind speed to daily frequency\n", + "wind_speed_daily = wind_speed_ERA5.resample(time='1D').mean(dim='time')\n", + "wind_speed_daily = wind_speed_daily.rename('WS ERA5')\n", + "wind_speed_daily.attrs['long_name'] = '10m Wind Speed'\n", + "wind_speed_daily.attrs['units'] = 'm/s'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17", + "metadata": {}, + "outputs": [], + "source": [ + "# Combine ERA5 variables into one dataset\n", + "ds_ERA5_daily = xr.Dataset({'RR ERA5': ds_ERA5_precip, 'WS ERA5': wind_speed_daily})" + ] + }, + { + "cell_type": "markdown", + "id": "18", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-2)= \n", + "### 2. Merge E-OBS with ERA5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19", + "metadata": {}, + "outputs": [], + "source": [ + "# Interpolate ERA5 data to match E-OBS resolution\n", + "ds_ERA5_interp = ds_ERA5_daily.interp_like(ds_EOBS)\n", + "\n", + "# Merge the datasets\n", + "merged_ds = xr.merge([ds_EOBS, ds_ERA5_interp], join='left')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20", + "metadata": {}, + "outputs": [], + "source": [ + "print(merged_ds)" + ] + }, + { + "cell_type": "markdown", + "id": "21", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-3)= \n", + "### 3. Inspect and view the merged datasets \n", + "\n", + "Precipitation amount and Wind Speed plot representation, with an overview of a selected subset (year of 2000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22", + "metadata": {}, + "outputs": [], + "source": [ + "# Calculate mean values over latitude and longitude\n", + "mean_ds = merged_ds.mean(dim=('longitude', 'latitude'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23", + "metadata": {}, + "outputs": [], + "source": [ + "# Plot the Precipitation data\n", + "plt.figure(figsize=(10, 6))\n", + "plt.title('Precipitation Comparison: E-OBS vs ERA5')\n", + "plt.xlabel('Date')\n", + "plt.ylabel('Precipitation (mm)')\n", + "\n", + "plt.plot(mean_ds.time, mean_ds['RR EOBS'], label='E-OBS Precipitation', color='red')\n", + "plt.plot(mean_ds.time, mean_ds['RR ERA5'], label='ERA5 Precipitation', color='blue')\n", + "\n", + "# Add legend\n", + "plt.legend(loc='upper left')\n", + "\n", + "# Show the plot\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24", + "metadata": {}, + "outputs": [], + "source": [ + "# Specify the year you want to subset (e.g., 2000)\n", + "year_to_subset = '2000'\n", + "\n", + "# Subset the dataset for the specified year\n", + "subset_rr = mean_ds.sel(time=year_to_subset)\n", + "\n", + "subset_rr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25", + "metadata": {}, + "outputs": [], + "source": [ + "# Plot the Precipitation data considering a subset\n", + "plt.figure(figsize=(10, 6))\n", + "plt.title('Precipitation Comparison - year 2000')\n", + "plt.xlabel('Date')\n", + "plt.ylabel('Precipitation (mm)')\n", + "\n", + "plt.plot(subset_rr.time, subset_rr['RR ERA5'], label='ERA5 (RR)', color='blue')\n", + "plt.plot(subset_rr.time, subset_rr['RR EOBS'], label='E-OBS (RR)', color='red')\n", + "\n", + "# Add a legend\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26", + "metadata": {}, + "outputs": [], + "source": [ + "# Plot the Wind Speed (WS) data\n", + "plt.figure(figsize=(10, 6))\n", + "plt.title('Wind Speed Comparison: E-OBS vs ERA5')\n", + "plt.xlabel('Date')\n", + "plt.ylabel('Wind Speed (m/s)')\n", + "\n", + "plt.plot(mean_ds.time, mean_ds['WS ERA5'], label='ERA 5 (WS)', color='blue')\n", + "plt.plot(mean_ds.time, mean_ds['WS EOBS'], label='E-OBS (WS)', color='red')\n", + "\n", + "# Add a legend\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27", + "metadata": {}, + "outputs": [], + "source": [ + "# Plot the Wind Speed (WS) data considering a subset\n", + "plt.figure(figsize=(10, 6))\n", + "plt.title('Wind Speed Comparison - year 2000')\n", + "plt.xlabel('Date')\n", + "plt.ylabel('Wind Speed (m/s)')\n", + "\n", + "# Plot tg data\n", + "plt.plot(subset_rr.time, subset_rr['WS ERA5'], label='ERA5 (WS)', color='blue')\n", + "plt.plot(subset_rr.time, subset_rr['WS EOBS'], label='E-OBS (WS)', color='red')\n", + "\n", + "# Add a legend\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "28", + "metadata": {}, + "source": [ + "#### Save the data into .csv and .nc formats" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29", + "metadata": {}, + "outputs": [], + "source": [ + "# Save as NetCDF for inspecting spatially averaged data\n", + "merged_ds.to_netcdf('RR_WS_EOBS_ERA5_merged.nc')\n", + "# Convert xarray dataset to pandas DataFrame\n", + "df = merged_ds.to_dataframe()\n", + "df.to_csv('RR_WS_EOBS_ERA5_merged.csv')" + ] + }, + { + "cell_type": "markdown", + "id": "30", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-4)= \n", + "### 4. Calculate the Probability density function (PDF) \n", + "\n", + "Of each alternative 30-year period" + ] + }, + { + "cell_type": "markdown", + "id": "31", + "metadata": {}, + "source": [ + "#### Work in progress" + ] + }, + { + "cell_type": "markdown", + "id": "32", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-5)= \n", + "### 5. Calculate the the annual count of days\n", + "\n", + "When RR>=10mm; as defined by WMO Expert Team on Climate Change Detection Indices, ETCCDI\n" + ] + }, + { + "cell_type": "markdown", + "id": "33", + "metadata": {}, + "source": [ + "#### Work in progress" + ] + }, + { + "cell_type": "markdown", + "id": "34", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-6)=\n", + "### 6. Map of the annual count of days\n", + "\n", + "These maps will be compared to disclose if RR extremes are shifting in terms of mean and the distribution's tails. \n", + "The results from these maps shall be developed and compared considering the two datasets." + ] + }, + { + "cell_type": "markdown", + "id": "35", + "metadata": {}, + "source": [ + "#### Work in progress" + ] + }, + { + "cell_type": "markdown", + "id": "36", + "metadata": {}, + "source": [ + "(C3S2_D520.5.3.14b_Quality_Assessment_User_Questions_EOBS_UQ3_v1.4:code-section-7)= \n", + "### 7. Main takeaways\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "37", + "metadata": {}, + "source": [ + "#### Work in progress" + ] + }, + { + "cell_type": "markdown", + "id": "38", + "metadata": {}, + "source": [ + "## If you want to know more\n", + "\n", + "### Key resources\n", + "\n", + "Some key resources and further reading were linked throughout this assessment.\n", + "\n", + "The CDS catalogue entry for the data used were:\n", + "* E-OBS daily gridded meteorological data for Europe from 1950 to present derived from in-situ observations:\n", + " https://cds.climate.copernicus.eu/cdsapp#!/dataset/insitu-gridded-observations-europe?tab=overview\n", + "\n", + "* ERA5 hourly data on pressure levels from 1940 to present:\n", + " https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-pressure-levels?tab=overview \n", + "\n", + "Code libraries used:\n", + "* [C3S EQC custom functions](https://github.com/bopen/c3s-eqc-automatic-quality-control/tree/main/c3s_eqc_automatic_quality_control), `c3s_eqc_automatic_quality_control`, prepared by [BOpen](https://www.bopen.eu/)\n", + "\n", + "### References\n", + "\n", + "[[1]](https://library.wmo.int/index.php?lvl=notice_display&id=20130) World Meteorological Organization (WMO) Guidelines on the Calculation of Climate Normals: \n", + "\n", + "[[2]](https://doi.org/10.1029/2017JD028200) Cornes, R., G. van der Schrier, E.J.M. van den Besselaar, and P.D. Jones. 2018: An Ensemble Version of the E-OBS Temperature and Precipitation Datasets, J. Geophys. Res. (Atmospheres), 123.\n", + "\n", + "[[3]](https://doi.org/10.1002/JOC.7269) Bandhauer, Moritz, Francesco Isotta, Mónika Lakatos, Cristian Lussana, Line Båserud, Beatrix Izsák, Olivér Szentes, Ole Einar Tveito, and Christoph Frei. 2022. “Evaluation of Daily Precipitation Analyses in E-OBS (V19.0e) and ERA5 by Comparison to Regional High-Resolution Datasets in European Regions.” International Journal of Climatology 42 (2): 727–47.\n", + "\n", + "[[4]](https://doi.org/10.1029/2009JD011799) Hofstra, Nynke, Malcolm Haylock, Mark New, and Phil D. Jones. 2009. “Testing E-OBS European High-Resolution Gridded Data Set of Daily Precipitation and Surface Temperature.” Journal of Geophysical Research Atmospheres. \n", + "\n", + "[[5]](https://doi.org/10.1029/2020EA001633) Rivoire, Pauline, Olivia Martius, and Philippe Naveau. 2021. “A Comparison of Moderate and Extreme ERA-5 Daily Precipitation With Two Observational Data Sets.” Earth and Space Science 8 (4): e2020EA001633." + ] + } + ], + "metadata": { + "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.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}