diff --git a/notebooks/tutorial/HadISD/1_HadISD_Download.ipynb b/notebooks/tutorial/HadISD/1_HadISD_Download.ipynb
index 31a7c932..ad495a08 100644
--- a/notebooks/tutorial/HadISD/1_HadISD_Download.ipynb
+++ b/notebooks/tutorial/HadISD/1_HadISD_Download.ipynb
@@ -30,7 +30,8 @@
"from tqdm.auto import tqdm\n",
"import tarfile\n",
"import gzip\n",
- "import shutil"
+ "import shutil\n",
+ "from pathlib import Path"
]
},
{
@@ -45,13 +46,13 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "2eadaf27",
"metadata": {},
"outputs": [],
"source": [
- "%run Data_Config.ipynb\n",
- "print(f\"Data will be downloaded to: {download_dir}\") "
+ "# ruff: noqa: F821\n",
+ "%run Data_Config.ipynb"
]
},
{
@@ -60,95 +61,93 @@
"metadata": {},
"source": [
"### Download HadISD Data\n",
- "The following code will download the HadISD data files. Some files take longer to download than others depending on time of day. To download different WMO datasets, you can change `wmo_id_range` in the `Data_Config.ipynb` notebook .\n",
+ "The following code will download the HadISD data files. Some files take longer to download than others depending on time of day. To download different WMO datasets, you can change `wmo_id_ranges` in the `Data_Config.ipynb` notebook.\n",
"\n",
"The full list of available data can be found here:\n",
- "https://www.metoffice.gov.uk/hadobs/hadisd/v340_2023f/download.html"
+ "https://www.metoffice.gov.uk/hadobs/hadisd/v340_2023f/download.html\n",
+ "\n",
+ "Station data has been split up into ranges to make downloads more managable. You may download as much or as little as you like. To get started we reccomend just downloading a few station ranges to get an idea of how to use HadISD data with PyEarthTools. "
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "feb8d671",
+ "execution_count": 3,
+ "id": "8ddbebda",
"metadata": {},
"outputs": [],
"source": [
- "# Explain why stations are split into ranges, file size, and how it's not neccesssary to download all stations. "
+ "wmo_id_ranges = wmo_id_ranges # This has been defined in HadISD_data_config.ipynb"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"id": "11a188d4",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Downloading HadISD data for WMO range: ['500000-549999', '722000-722999', '800000-849999']\n"
+ ]
+ }
+ ],
"source": [
- "print(f\"Downloading HadISD data for WMO range: {wmo_id_range}\")"
+ "print(f\"Downloading HadISD data for WMO range: {wmo_id_ranges}\")"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "8ddbebda",
- "metadata": {},
- "outputs": [],
- "source": [
- "wmo_id_range = wmo_id_range # This has been defined in HadISD_data_config.ipynb\n",
- "\n",
- "wmo_str = f\"WMO_{wmo_id_range}\"\n",
- "url = f\"https://www.metoffice.gov.uk/hadobs/hadisd/v340_2023f/data/{wmo_str}.tar.gz\"\n",
- "tar_name = f\"{wmo_str}.tar\"\n",
- "filename = download_dir / tar_name"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "08ac36fd",
"metadata": {},
"outputs": [],
"source": [
- "# Get remote file size using HTTP HEAD\n",
- "head = requests.head(url, allow_redirects=True)\n",
- "remote_size = int(head.headers.get('content-length', 0))\n",
- "\n",
- "local_size = filename.stat().st_size if filename.exists() else 0\n",
- "\n",
- "if filename.exists() and local_size == remote_size:\n",
- " print(f\"File already fully downloaded: {filename} ({local_size/1024**2:.2f} MB)\")\n",
- "else:\n",
- " headers = {}\n",
- " mode = 'wb'\n",
- " initial_pos = 0\n",
- " if filename.exists() and local_size < remote_size:\n",
- " headers['Range'] = f'bytes={local_size}-'\n",
- " mode = 'ab'\n",
- " initial_pos = local_size\n",
- " print(f\"Resuming download for {filename.name} at {local_size/1024**2:.2f} MB...\")\n",
- " else:\n",
- " print(f\"Starting download for {filename.name}...\")\n",
- "\n",
- " response = requests.get(url, stream=True, headers=headers)\n",
- " total = remote_size\n",
- "\n",
- " with open(filename, mode) as f, tqdm(\n",
- " desc=f\"Downloading {filename.name}\",\n",
- " total=total,\n",
- " initial=initial_pos,\n",
- " unit='B', unit_scale=True, unit_divisor=1024\n",
- " ) as bar:\n",
- " for chunk in response.iter_content(chunk_size=8192):\n",
- " if chunk:\n",
- " f.write(chunk)\n",
- " bar.update(len(chunk))\n",
- "\n",
- " final_size = filename.stat().st_size\n",
- " if final_size == remote_size:\n",
- " print(f\"Download complete: {filename} ({final_size/1024**2:.2f} MB)\")\n",
+ "def download_wmo_range(wmo_id_range, download_dir):\n",
+ " wmo_str = f\"WMO_{wmo_id_range}\"\n",
+ " url = f\"https://www.metoffice.gov.uk/hadobs/hadisd/v340_2023f/data/{wmo_str}.tar.gz\"\n",
+ " tar_name = f\"{wmo_str}.tar\"\n",
+ " filename = Path(download_dir) / tar_name\n",
+ "\n",
+ " head = requests.head(url, allow_redirects=True)\n",
+ " remote_size = int(head.headers.get('content-length', 0))\n",
+ " local_size = filename.stat().st_size if filename.exists() else 0\n",
+ "\n",
+ " if filename.exists() and local_size == remote_size:\n",
+ " print(f\"File already fully downloaded: {filename} ({local_size/1024**2:.2f} MB)\")\n",
" else:\n",
- " print(f\"Warning: Download incomplete. Local size: {final_size}, Remote size: {remote_size}\")\n",
+ " headers = {}\n",
+ " mode = 'wb'\n",
+ " initial_pos = 0\n",
+ " if filename.exists() and local_size < remote_size:\n",
+ " headers['Range'] = f'bytes={local_size}-'\n",
+ " mode = 'ab'\n",
+ " initial_pos = local_size\n",
+ " print(f\"Resuming download for {filename.name} at {local_size/1024**2:.2f} MB...\")\n",
+ " else:\n",
+ " print(f\"Starting download for {filename.name}...\")\n",
+ "\n",
+ " response = requests.get(url, stream=True, headers=headers)\n",
+ " total = remote_size\n",
+ " with open(filename, mode) as f, tqdm(\n",
+ " desc=f\"Downloading {filename.name}\",\n",
+ " total=total,\n",
+ " initial=initial_pos,\n",
+ " unit='B', unit_scale=True, unit_divisor=1024\n",
+ " ) as bar:\n",
+ " for chunk in response.iter_content(chunk_size=8192):\n",
+ " if chunk:\n",
+ " f.write(chunk)\n",
+ " bar.update(len(chunk))\n",
+ "\n",
+ " final_size = filename.stat().st_size\n",
+ " if final_size == remote_size:\n",
+ " print(f\"Download complete: {filename} ({final_size/1024**2:.2f} MB)\")\n",
+ " else:\n",
+ " print(f\"Warning: Download incomplete. Local size: {final_size}, Remote size: {remote_size}\")\n",
"\n",
- "# Possibly also add check to see if netcdf files esist for the downloaded tar file, if so then don't download again"
+ " return filename, tar_name\n"
]
},
{
@@ -161,77 +160,239 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"id": "fb79a81c",
"metadata": {},
"outputs": [],
"source": [
- "extract_dir = download_dir / tar_name.replace('.tar', '')\n",
- "extract_dir.mkdir(exist_ok=True)\n",
- "\n",
- "extracted_files = list(extract_dir.glob('*'))\n",
- "if extracted_files:\n",
- " print(f\"Extraction directory '{extract_dir}' already contains {len(extracted_files)} files. Skipping extraction.\")\n",
- "elif filename.exists():\n",
- " with tarfile.open(filename, \"r:gz\") as tar:\n",
- " tar.extractall(path=extract_dir)\n",
+ "def extract_wmo_tar(filename, tar_name, download_dir):\n",
+ " extract_dir = Path(download_dir) / tar_name.replace('.tar', '')\n",
+ " extract_dir.mkdir(exist_ok=True)\n",
" extracted_files = list(extract_dir.glob('*'))\n",
" if extracted_files:\n",
- " print(f\"Extraction successful. {len(extracted_files)} files found in {extract_dir}.\")\n",
- " # Delete the tar file after extraction\n",
- " filename.unlink()\n",
- " print(f\"Deleted tar file: {filename}\")\n",
+ " print(f\"Extraction directory '{extract_dir}' already contains {len(extracted_files)} files. Skipping extraction.\")\n",
+ " elif filename.exists():\n",
+ " with tarfile.open(filename, \"r:gz\") as tar:\n",
+ " tar.extractall(path=extract_dir)\n",
+ " extracted_files = list(extract_dir.glob('*'))\n",
+ " if extracted_files:\n",
+ " print(f\"Extraction successful. {len(extracted_files)} files found in {extract_dir}.\")\n",
+ " filename.unlink()\n",
+ " print(f\"Deleted tar file: {filename}\")\n",
+ " else:\n",
+ " print(f\"Warning: No files extracted to {extract_dir}. Tar file will not be deleted.\")\n",
+ " raise RuntimeError(\"Extraction failed, tar file not deleted.\")\n",
" else:\n",
- " print(f\"Warning: No files extracted to {extract_dir}. Tar file will not be deleted.\")\n",
- " raise RuntimeError(\"Extraction failed, tar file not deleted.\")\n",
- "else:\n",
- " print(f\"No tar file found and extraction directory is empty. Nothing to extract.\")\n",
- " raise FileNotFoundError(f\"Missing tar file: {filename}\")\n"
+ " print(\"No tar file found and extraction directory is empty. Nothing to extract.\")\n",
+ " raise FileNotFoundError(f\"Missing tar file: {filename}\")\n",
+ " return extract_dir"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "53161550",
+ "execution_count": 7,
+ "id": "4e43dcc4",
"metadata": {},
"outputs": [],
"source": [
- "# Create subfolder for netcdf\n",
- "netcdf_dir = download_dir / \"netcdf\"\n",
- "netcdf_dir.mkdir(parents=True, exist_ok=True)"
+ "# Move extracted .nc files into netcdf_dir after extraction\n",
+ "def move_netcdf_files(extract_dir, download_dir):\n",
+ " netcdf_dir = Path(download_dir) / \"netcdf\"\n",
+ " netcdf_dir.mkdir(parents=True, exist_ok=True)\n",
+ " num_files = 0\n",
+ " for gz_path in extract_dir.glob('*.nc.gz'):\n",
+ " nc_path = gz_path.with_suffix('') # Remove .gz extension\n",
+ " with gzip.open(gz_path, 'rb') as f_in, open(nc_path, 'wb') as f_out:\n",
+ " f_out.write(f_in.read())\n",
+ " gz_path.unlink()\n",
+ " shutil.move(str(nc_path), netcdf_dir / nc_path.name)\n",
+ " num_files += 1\n",
+ " print(f\"{num_files} .nc files have been extracted, cleaned up, and moved to the netcdf directory: {netcdf_dir}\")\n",
+ "\n",
+ " # Delete extraction directory\n",
+ " try:\n",
+ " shutil.rmtree(extract_dir)\n",
+ " print(f\"Deleted extraction directory: {extract_dir}\")\n",
+ " except Exception as e:\n",
+ " print(f\"Could not delete extraction directory {extract_dir}: {e}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "932e8906",
+ "metadata": {},
+ "source": [
+ "### Idempotent Checks"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "4e43dcc4",
+ "execution_count": 8,
+ "id": "dcb9b902",
"metadata": {},
"outputs": [],
"source": [
- "# Move extracted .nc files into netcdf_dir after extraction\n",
- "num_files = 0\n",
- "for gz_path in extract_dir.glob('*.nc.gz'):\n",
- " nc_path = gz_path.with_suffix('') # Remove .gz extension\n",
- " with gzip.open(gz_path, 'rb') as f_in, open(nc_path, 'wb') as f_out:\n",
- " f_out.write(f_in.read())\n",
- " gz_path.unlink() # Delete the .gz file after extraction\n",
- " shutil.move(str(nc_path), netcdf_dir / nc_path.name)\n",
- " num_files += 1\n",
- "\n",
- "print(f\"{num_files} .nc files have been extracted, cleaned up, and moved to the netcdf directory: {netcdf_dir}\")\n",
- "\n",
- "# Delete the extraction directory after processing\n",
- "try:\n",
- " shutil.rmtree(extract_dir)\n",
- " print(f\"Deleted extraction directory: {extract_dir}\")\n",
- "except Exception as e:\n",
- " print(f\"Could not delete extraction directory {extract_dir}: {e}\")"
+ "def netcdf_files_exist_for_range(wmo_id_range, netcdf_dir):\n",
+ " \"\"\"Check if any .nc files for the given WMO range exist in the netcdf directory.\"\"\"\n",
+ " start, end = map(int, wmo_id_range.split('-'))\n",
+ " nc_files = list(Path(netcdf_dir).glob(\"*.nc\"))\n",
+ " for nc_file in nc_files:\n",
+ " try:\n",
+ " # Extract the first 6 digits from the station part of the filename\n",
+ " station_part = nc_file.stem.split('_')[-1]\n",
+ " wmo_number = int(station_part.split('-')[0])\n",
+ " if start <= wmo_number <= end:\n",
+ " return True\n",
+ " except Exception as e:\n",
+ " print(f\"Skipping file {nc_file.name}: {e}\")\n",
+ " continue\n",
+ " print(f\"No NetCDF files found for WMO range {wmo_id_range}.\")\n",
+ " return False"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "36ad9920",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def is_tar_fully_downloaded(wmo_id_range, download_dir):\n",
+ " \"\"\"Check if the tar file exists and is fully downloaded (size matches remote).\"\"\"\n",
+ " wmo_str = f\"WMO_{wmo_id_range}\"\n",
+ " tar_name = f\"{wmo_str}.tar\"\n",
+ " tar_path = Path(download_dir) / tar_name\n",
+ " url = f\"https://www.metoffice.gov.uk/hadobs/hadisd/v340_2023f/data/{wmo_str}.tar.gz\"\n",
+ "\n",
+ " if not tar_path.exists():\n",
+ " return False\n",
+ "\n",
+ " # Get remote file size\n",
+ " head = requests.head(url, allow_redirects=True)\n",
+ " remote_size = int(head.headers.get('content-length', 0))\n",
+ " local_size = tar_path.stat().st_size\n",
+ "\n",
+ " return local_size == remote_size"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77f044b9",
+ "metadata": {},
+ "source": [
+ "### Loop through each WMO range, download if necessary, extract, and move files"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ffcc5730",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "No NetCDF files found for WMO range 500000-549999.\n",
+ "Starting download for WMO_500000-549999.tar...\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "274ec4d5674b4781a8657b2c98db1d66",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading WMO_500000-549999.tar: 0%| | 0.00/411M [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Download complete: /Users/joelmiller/HadISD_data/WMO_500000-549999.tar (410.71 MB)\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/v1/7wypnx5x11qgv022zwx5p3g00000gn/T/ipykernel_86163/3933807618.py:9: DeprecationWarning: Python 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.\n",
+ " tar.extractall(path=extract_dir)\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Extraction successful. 208 files found in /Users/joelmiller/HadISD_data/WMO_500000-549999.\n",
+ "Deleted tar file: /Users/joelmiller/HadISD_data/WMO_500000-549999.tar\n",
+ "208 .nc files have been extracted, cleaned up, and moved to the netcdf directory: /Users/joelmiller/HadISD_data/netcdf\n",
+ "Deleted extraction directory: /Users/joelmiller/HadISD_data/WMO_500000-549999\n",
+ "No NetCDF files found for WMO range 722000-722999.\n",
+ "Starting download for WMO_722000-722999.tar...\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "de0e5c7d717949bdaf58d0b0d2178427",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Downloading WMO_722000-722999.tar: 0%| | 0.00/1.65G [00:00, ?B/s]"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Download complete: /Users/joelmiller/HadISD_data/WMO_722000-722999.tar (1684.50 MB)\n",
+ "Extraction successful. 407 files found in /Users/joelmiller/HadISD_data/WMO_722000-722999.\n",
+ "Deleted tar file: /Users/joelmiller/HadISD_data/WMO_722000-722999.tar\n",
+ "407 .nc files have been extracted, cleaned up, and moved to the netcdf directory: /Users/joelmiller/HadISD_data/netcdf\n",
+ "Deleted extraction directory: /Users/joelmiller/HadISD_data/WMO_722000-722999\n",
+ "NetCDF files for 800000-849999 already exist. Skipping download and extraction.\n"
+ ]
+ }
+ ],
+ "source": [
+ "netcdf_dir = Path(download_dir) / \"netcdf\"\n",
+ "for wmo_id_range in wmo_id_ranges:\n",
+ " if is_tar_fully_downloaded(wmo_id_range, download_dir):\n",
+ " print(f\"Tar file for {wmo_id_range} is fully downloaded. Skipping download.\")\n",
+ " continue\n",
+ "\n",
+ " if netcdf_files_exist_for_range(wmo_id_range, netcdf_dir):\n",
+ " print(f\"NetCDF files for {wmo_id_range} already exist. Skipping download and extraction.\")\n",
+ " continue\n",
+ "\n",
+ " filename, tar_name = download_wmo_range(wmo_id_range, download_dir)\n",
+ " extract_dir = extract_wmo_tar(filename, tar_name, download_dir)\n",
+ " move_netcdf_files(extract_dir, download_dir)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d1996642",
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "pyearthtools",
"language": "python",
"name": "python3"
},
@@ -245,7 +406,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.2"
+ "version": "3.13.5"
}
},
"nbformat": 4,
diff --git a/notebooks/tutorial/HadISD/2_HadISD_to_zarr.ipynb b/notebooks/tutorial/HadISD/2_HadISD_to_zarr.ipynb
index 03e92049..6078f795 100644
--- a/notebooks/tutorial/HadISD/2_HadISD_to_zarr.ipynb
+++ b/notebooks/tutorial/HadISD/2_HadISD_to_zarr.ipynb
@@ -10,7 +10,8 @@
"import xarray as xr\n",
"import pandas as pd\n",
"from pathlib import Path\n",
- "from dask import delayed, compute"
+ "from dask import delayed, compute\n",
+ "import multiprocessing"
]
},
{
@@ -49,7 +50,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "209b3b80",
"metadata": {},
"outputs": [],
@@ -57,22 +58,25 @@
"def preprocess_station(file_path, date_range):\n",
" \"\"\"Open and preprocess a single NetCDF file.\"\"\"\n",
" ds = xr.open_dataset(file_path)\n",
- " \n",
- " # Clean invalid attributes\n",
- " #ds = clean_attrs(ds)\n",
"\n",
- " if 'input_station_id' in ds:\n",
- " ds = ds.drop_vars('input_station_id')\n",
+ " # Drop redundant or uninformative station ID variables if present\n",
+ " for var in ['input_station_id', 'station_id']:\n",
+ " if var in ds:\n",
+ " ds = ds.drop_vars(var)\n",
"\n",
" # Assign station ID from attributes or filename\n",
" station_id = ds.attrs.get(\"station_id\", file_path.stem)\n",
- " ds = ds.assign_coords(station_id=station_id)\n",
+ " ds = ds.expand_dims({\"station\": [station_id]})\n",
"\n",
" # Promote lat/lon/elevation to coordinates (if not already)\n",
" for coord in [\"latitude\", \"longitude\", \"elevation\"]:\n",
" if coord in ds and coord not in ds.coords:\n",
" ds = ds.set_coords(coord)\n",
"\n",
+ " for coord in [\"latitude\", \"longitude\", \"elevation\"]:\n",
+ " if coord in ds and \"coordinate_length\" in ds[coord].dims:\n",
+ " ds[coord] = ds[coord].squeeze(\"coordinate_length\")\n",
+ "\n",
" # Reindex time to common range\n",
" target_time = pd.date_range(date_range[0], date_range[1], freq='h')\n",
" ds = ds.reindex(time=target_time)\n",
@@ -109,13 +113,13 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"id": "e8bcbffa",
"metadata": {},
"outputs": [],
"source": [
- "def process_all_to_zarr(netcdf_dir, zarr_output_dir, date_range):\n",
- " \"\"\"Convert NetCDF files to Zarr only if not already present in the Zarr directory.\"\"\"\n",
+ "def process_all_to_zarr(netcdf_dir, zarr_output_dir, date_range, scheduler='threads', num_workers=None):\n",
+ " \"\"\"Parallel NetCDF to Zarr conversion using dask.delayed. Returns both success boolean and status message.\"\"\"\n",
" netcdf_dir = Path(netcdf_dir)\n",
" zarr_output_dir = Path(zarr_output_dir)\n",
" zarr_output_dir.mkdir(parents=True, exist_ok=True)\n",
@@ -123,61 +127,38 @@
" netcdf_files = list(netcdf_dir.glob(\"*.nc\"))\n",
" zarr_files = set(f.stem for f in zarr_output_dir.glob(\"*.zarr\"))\n",
"\n",
- " converted = 0\n",
+ " tasks = []\n",
" skipped = 0\n",
"\n",
- " for nc_file in netcdf_files:\n",
- " zarr_name = nc_file.stem\n",
- " out_path = zarr_output_dir / f\"{zarr_name}.zarr\"\n",
- " if zarr_name in zarr_files:\n",
- " print(f\"Zarr file already exists for {nc_file.name}: {out_path.name}. Skipping.\")\n",
- " skipped += 1\n",
- " continue\n",
- " print(f\"Converting: {nc_file.name} → {out_path.name}\")\n",
+ " def convert_netcdf_to_zarr(nc_file, out_path, date_range):\n",
" try:\n",
" ds = preprocess_station(nc_file, date_range)\n",
" ds.to_zarr(str(out_path), mode='w')\n",
- " converted += 1\n",
+ " return (True, f\"Converted: {nc_file.name} → {out_path.name}\")\n",
" except Exception as e:\n",
- " print(f\"Failed on {nc_file.name}: {e}\")\n",
- "\n",
- " print(f\"Conversion complete. {converted} new stations converted, {skipped} already present.\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "6c2c9987",
- "metadata": {},
- "outputs": [],
- "source": [
- "def process_all_to_zarr(netcdf_dir, zarr_output_dir, date_range):\n",
- " \"\"\"Convert NetCDF files to Zarr only if not already present in the Zarr directory.\"\"\"\n",
- " netcdf_dir = Path(netcdf_dir)\n",
- " zarr_output_dir = Path(zarr_output_dir)\n",
- " zarr_output_dir.mkdir(parents=True, exist_ok=True)\n",
- "\n",
- " netcdf_files = list(netcdf_dir.glob(\"*.nc\"))\n",
- " zarr_files = set(f.stem for f in zarr_output_dir.glob(\"*.zarr\"))\n",
- "\n",
- " converted = 0\n",
- " skipped = 0\n",
+ " return (False, f\"Failed on {nc_file.name}: {e}\")\n",
"\n",
" for nc_file in netcdf_files:\n",
" zarr_name = nc_file.stem\n",
" out_path = zarr_output_dir / f\"{zarr_name}.zarr\"\n",
" if zarr_name in zarr_files:\n",
- " print(f\"Zarr file already exists for {nc_file.name}: {out_path.name}. Skipping.\")\n",
+ " # print(f\"Zarr file already exists for {nc_file.name}: {out_path.name}. Skipping.\")\n",
" skipped += 1\n",
" continue\n",
- " print(f\"Converting: {nc_file.name} → {out_path.name}\")\n",
- " try:\n",
- " ds = preprocess_station(nc_file, date_range)\n",
- " ds.to_zarr(str(out_path), mode='w')\n",
- " converted += 1\n",
- " except Exception as e:\n",
- " print(f\"Failed on {nc_file.name}: {e}\")\n",
+ " tasks.append(delayed(convert_netcdf_to_zarr)(nc_file, out_path, date_range))\n",
+ "\n",
+ " if not tasks:\n",
+ " print(f\"No new NetCDF files to convert. {skipped} already present.\")\n",
+ " return\n",
"\n",
+ " if num_workers is None:\n",
+ " num_workers = multiprocessing.cpu_count() // 2\n",
+ "\n",
+ " print(f\"Starting Dask parallel conversion with {num_workers} workers...\")\n",
+ " results = compute(*tasks, scheduler=scheduler, num_workers=num_workers)\n",
+ " for success, msg in results:\n",
+ " print(msg)\n",
+ " converted = sum(success for success, _ in results)\n",
" print(f\"Conversion complete. {converted} new stations converted, {skipped} already present.\")"
]
},
@@ -198,7 +179,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"id": "0c6ca548",
"metadata": {},
"outputs": [],
@@ -240,25 +221,648 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "09e40126",
"metadata": {},
"outputs": [],
"source": [
- "%run Data_Config.ipynb\n",
- "print(f\"NetCDF input directory: {input_dir}\")\n",
- "print(f\"Zarr output directory: {zarr_output_dir}\")\n",
- "print(f\"Date range: {DATE_RANGE}\")"
+ "# ruff: noqa: F821\n",
+ "%run Data_Config.ipynb"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "id": "57101a08",
+ "execution_count": 6,
+ "id": "ea924673",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Starting Dask parallel conversion with 4 workers...\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722866-23122.nc → hadisd.3.4.0.2023f_19310101-20240101_722866-23122.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722780-23183.nc → hadisd.3.4.0.2023f_19310101-20240101_722780-23183.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722122-03050.nc → hadisd.3.4.0.2023f_19310101-20240101_722122-03050.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_529570-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_529570-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722031-63839.nc → hadisd.3.4.0.2023f_19310101-20240101_722031-63839.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722334-03976.nc → hadisd.3.4.0.2023f_19310101-20240101_722334-03976.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_515730-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_515730-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544830-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544830-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722155-03040.nc → hadisd.3.4.0.2023f_19310101-20240101_722155-03040.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540260-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540260-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722886-23130.nc → hadisd.3.4.0.2023f_19310101-20240101_722886-23130.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722517-12932.nc → hadisd.3.4.0.2023f_19310101-20240101_722517-12932.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722061-03038.nc → hadisd.3.4.0.2023f_19310101-20240101_722061-03038.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722324-03071.nc → hadisd.3.4.0.2023f_19310101-20240101_722324-03071.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722341-92822.nc → hadisd.3.4.0.2023f_19310101-20240101_722341-92822.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722539-12979.nc → hadisd.3.4.0.2023f_19310101-20240101_722539-12979.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544970-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544970-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549450-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549450-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543420-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543420-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722860-23119.nc → hadisd.3.4.0.2023f_19310101-20240101_722860-23119.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722051-12841.nc → hadisd.3.4.0.2023f_19310101-20240101_722051-12841.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722109-00355.nc → hadisd.3.4.0.2023f_19310101-20240101_722109-00355.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722530-12921.nc → hadisd.3.4.0.2023f_19310101-20240101_722530-12921.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722170-03813.nc → hadisd.3.4.0.2023f_19310101-20240101_722170-03813.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722725-23078.nc → hadisd.3.4.0.2023f_19310101-20240101_722725-23078.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722137-13878.nc → hadisd.3.4.0.2023f_19310101-20240101_722137-13878.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722024-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722024-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_545390-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_545390-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722181-13837.nc → hadisd.3.4.0.2023f_19310101-20240101_722181-13837.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535430-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535430-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722249-63887.nc → hadisd.3.4.0.2023f_19310101-20240101_722249-63887.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722197-53819.nc → hadisd.3.4.0.2023f_19310101-20240101_722197-53819.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544050-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544050-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722300-53864.nc → hadisd.3.4.0.2023f_19310101-20240101_722300-53864.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722351-12953.nc → hadisd.3.4.0.2023f_19310101-20240101_722351-12953.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722172-63810.nc → hadisd.3.4.0.2023f_19310101-20240101_722172-63810.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722560-13959.nc → hadisd.3.4.0.2023f_19310101-20240101_722560-13959.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722134-63822.nc → hadisd.3.4.0.2023f_19310101-20240101_722134-63822.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_532310-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_532310-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722745-23109.nc → hadisd.3.4.0.2023f_19310101-20240101_722745-23109.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722062-63842.nc → hadisd.3.4.0.2023f_19310101-20240101_722062-63842.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_504680-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_504680-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722030-12844.nc → hadisd.3.4.0.2023f_19310101-20240101_722030-12844.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543770-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543770-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722680-23009.nc → hadisd.3.4.0.2023f_19310101-20240101_722680-23009.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722210-13858.nc → hadisd.3.4.0.2023f_19310101-20240101_722210-13858.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524410-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524410-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722336-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722336-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528660-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528660-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722506-12959.nc → hadisd.3.4.0.2023f_19310101-20240101_722506-12959.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543860-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543860-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722119-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722119-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722489-53911.nc → hadisd.3.4.0.2023f_19310101-20240101_722489-53911.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722640-93035.nc → hadisd.3.4.0.2023f_19310101-20240101_722640-93035.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542730-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542730-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722125-04829.nc → hadisd.3.4.0.2023f_19310101-20240101_722125-04829.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537230-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537230-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722545-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722545-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722784-03184.nc → hadisd.3.4.0.2023f_19310101-20240101_722784-03184.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_545340-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_545340-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722103-12895.nc → hadisd.3.4.0.2023f_19310101-20240101_722103-12895.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722256-64774.nc → hadisd.3.4.0.2023f_19310101-20240101_722256-64774.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722594-53909.nc → hadisd.3.4.0.2023f_19310101-20240101_722594-53909.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722106-12835.nc → hadisd.3.4.0.2023f_19310101-20240101_722106-12835.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722243-03738.nc → hadisd.3.4.0.2023f_19310101-20240101_722243-03738.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722817-03068.nc → hadisd.3.4.0.2023f_19310101-20240101_722817-03068.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722211-94087.nc → hadisd.3.4.0.2023f_19310101-20240101_722211-94087.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_514630-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_514630-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722485-13944.nc → hadisd.3.4.0.2023f_19310101-20240101_722485-13944.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_511330-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_511330-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_512430-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_512430-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535930-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535930-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722247-54785.nc → hadisd.3.4.0.2023f_19310101-20240101_722247-54785.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722169-03058.nc → hadisd.3.4.0.2023f_19310101-20240101_722169-03058.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542590-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542590-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_511560-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_511560-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_526330-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_526330-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722166-93845.nc → hadisd.3.4.0.2023f_19310101-20240101_722166-93845.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722599-03971.nc → hadisd.3.4.0.2023f_19310101-20240101_722599-03971.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722225-03855.nc → hadisd.3.4.0.2023f_19310101-20240101_722225-03855.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722480-13957.nc → hadisd.3.4.0.2023f_19310101-20240101_722480-13957.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722050-12815.nc → hadisd.3.4.0.2023f_19310101-20240101_722050-12815.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722006-54926.nc → hadisd.3.4.0.2023f_19310101-20240101_722006-54926.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518860-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518860-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722505-12904.nc → hadisd.3.4.0.2023f_19310101-20240101_722505-12904.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722212-92814.nc → hadisd.3.4.0.2023f_19310101-20240101_722212-92814.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_512320-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_512320-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722265-13821.nc → hadisd.3.4.0.2023f_19310101-20240101_722265-13821.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_506580-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_506580-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722350-03940.nc → hadisd.3.4.0.2023f_19310101-20240101_722350-03940.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_525760-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_525760-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722469-53912.nc → hadisd.3.4.0.2023f_19310101-20240101_722469-53912.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_507450-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_507450-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_506030-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_506030-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722405-13976.nc → hadisd.3.4.0.2023f_19310101-20240101_722405-13976.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722543-12977.nc → hadisd.3.4.0.2023f_19310101-20240101_722543-12977.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722032-54916.nc → hadisd.3.4.0.2023f_19310101-20240101_722032-54916.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_503530-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_503530-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722164-53949.nc → hadisd.3.4.0.2023f_19310101-20240101_722164-53949.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722436-12906.nc → hadisd.3.4.0.2023f_19310101-20240101_722436-12906.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722099-53936.nc → hadisd.3.4.0.2023f_19310101-20240101_722099-53936.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722820-03949.nc → hadisd.3.4.0.2023f_19310101-20240101_722820-03949.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722135-13870.nc → hadisd.3.4.0.2023f_19310101-20240101_722135-13870.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524240-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524240-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527540-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527540-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722034-12812.nc → hadisd.3.4.0.2023f_19310101-20240101_722034-12812.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722899-03179.nc → hadisd.3.4.0.2023f_19310101-20240101_722899-03179.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722011-92813.nc → hadisd.3.4.0.2023f_19310101-20240101_722011-92813.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722730-03124.nc → hadisd.3.4.0.2023f_19310101-20240101_722730-03124.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535640-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535640-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_536140-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_536140-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722025-12849.nc → hadisd.3.4.0.2023f_19310101-20240101_722025-12849.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722113-53979.nc → hadisd.3.4.0.2023f_19310101-20240101_722113-53979.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722104-92806.nc → hadisd.3.4.0.2023f_19310101-20240101_722104-92806.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_539150-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_539150-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722120-12833.nc → hadisd.3.4.0.2023f_19310101-20240101_722120-12833.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722323-00362.nc → hadisd.3.4.0.2023f_19310101-20240101_722323-00362.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722209-12986.nc → hadisd.3.4.0.2023f_19310101-20240101_722209-12986.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722977-93184.nc → hadisd.3.4.0.2023f_19310101-20240101_722977-93184.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722552-93929.nc → hadisd.3.4.0.2023f_19310101-20240101_722552-93929.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_508440-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_508440-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_546560-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_546560-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509780-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509780-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_513790-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_513790-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722022-12803.nc → hadisd.3.4.0.2023f_19310101-20240101_722022-12803.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722420-12923.nc → hadisd.3.4.0.2023f_19310101-20240101_722420-12923.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722588-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722588-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722260-13895.nc → hadisd.3.4.0.2023f_19310101-20240101_722260-13895.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_522670-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_522670-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722038-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722038-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722690-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722690-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527370-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527370-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722128-53899.nc → hadisd.3.4.0.2023f_19310101-20240101_722128-53899.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722319-53943.nc → hadisd.3.4.0.2023f_19310101-20240101_722319-53943.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722156-53873.nc → hadisd.3.4.0.2023f_19310101-20240101_722156-53873.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_504420-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_504420-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722357-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722357-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722003-54930.nc → hadisd.3.4.0.2023f_19310101-20240101_722003-54930.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535130-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535130-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722216-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722216-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722867-23156.nc → hadisd.3.4.0.2023f_19310101-20240101_722867-23156.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722108-12894.nc → hadisd.3.4.0.2023f_19310101-20240101_722108-12894.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547250-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547250-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548080-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548080-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_519310-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_519310-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722927-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722927-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722524-12972.nc → hadisd.3.4.0.2023f_19310101-20240101_722524-12972.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722045-12843.nc → hadisd.3.4.0.2023f_19310101-20240101_722045-12843.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_507560-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_507560-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722600-03969.nc → hadisd.3.4.0.2023f_19310101-20240101_722600-03969.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722255-93842.nc → hadisd.3.4.0.2023f_19310101-20240101_722255-93842.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_522030-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_522030-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722686-23008.nc → hadisd.3.4.0.2023f_19310101-20240101_722686-23008.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722823-03749.nc → hadisd.3.4.0.2023f_19310101-20240101_722823-03749.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722925-93117.nc → hadisd.3.4.0.2023f_19310101-20240101_722925-93117.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722042-53978.nc → hadisd.3.4.0.2023f_19310101-20240101_722042-53978.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540490-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540490-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540940-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540940-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722342-54931.nc → hadisd.3.4.0.2023f_19310101-20240101_722342-54931.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509530-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509530-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722131-03713.nc → hadisd.3.4.0.2023f_19310101-20240101_722131-03713.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722403-12968.nc → hadisd.3.4.0.2023f_19310101-20240101_722403-12968.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722783-03185.nc → hadisd.3.4.0.2023f_19310101-20240101_722783-03185.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540270-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540270-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541611-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541611-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541610-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541610-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722079-53888.nc → hadisd.3.4.0.2023f_19310101-20240101_722079-53888.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722146-12816.nc → hadisd.3.4.0.2023f_19310101-20240101_722146-12816.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722015-12850.nc → hadisd.3.4.0.2023f_19310101-20240101_722015-12850.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722516-12928.nc → hadisd.3.4.0.2023f_19310101-20240101_722516-12928.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722057-12854.nc → hadisd.3.4.0.2023f_19310101-20240101_722057-12854.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722142-04114.nc → hadisd.3.4.0.2023f_19310101-20240101_722142-04114.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722054-53959.nc → hadisd.3.4.0.2023f_19310101-20240101_722054-53959.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518480-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518480-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517650-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517650-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722147-53817.nc → hadisd.3.4.0.2023f_19310101-20240101_722147-53817.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722241-54925.nc → hadisd.3.4.0.2023f_19310101-20240101_722241-54925.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722007-54828.nc → hadisd.3.4.0.2023f_19310101-20240101_722007-54828.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_530680-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_530680-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722285-03896.nc → hadisd.3.4.0.2023f_19310101-20240101_722285-03896.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540120-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540120-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548230-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548230-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722052-53933.nc → hadisd.3.4.0.2023f_19310101-20240101_722052-53933.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528250-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528250-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722500-12919.nc → hadisd.3.4.0.2023f_19310101-20240101_722500-12919.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722956-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722956-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542080-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542080-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722618-23091.nc → hadisd.3.4.0.2023f_19310101-20240101_722618-23091.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722143-53975.nc → hadisd.3.4.0.2023f_19310101-20240101_722143-53975.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722648-03031.nc → hadisd.3.4.0.2023f_19310101-20240101_722648-03031.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722787-53126.nc → hadisd.3.4.0.2023f_19310101-20240101_722787-53126.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541020-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541020-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722129-04939.nc → hadisd.3.4.0.2023f_19310101-20240101_722129-04939.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509830-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509830-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722041-12993.nc → hadisd.3.4.0.2023f_19310101-20240101_722041-12993.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722261-00360.nc → hadisd.3.4.0.2023f_19310101-20240101_722261-00360.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722655-23005.nc → hadisd.3.4.0.2023f_19310101-20240101_722655-23005.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722673-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722673-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722885-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722885-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722320-12884.nc → hadisd.3.4.0.2023f_19310101-20240101_722320-12884.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722094-53984.nc → hadisd.3.4.0.2023f_19310101-20240101_722094-53984.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722178-53953.nc → hadisd.3.4.0.2023f_19310101-20240101_722178-53953.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722096-53127.nc → hadisd.3.4.0.2023f_19310101-20240101_722096-53127.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722089-94959.nc → hadisd.3.4.0.2023f_19310101-20240101_722089-94959.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_536980-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_536980-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549060-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549060-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722740-23160.nc → hadisd.3.4.0.2023f_19310101-20240101_722740-23160.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722356-13939.nc → hadisd.3.4.0.2023f_19310101-20240101_722356-13939.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722920-23191.nc → hadisd.3.4.0.2023f_19310101-20240101_722920-23191.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722145-04884.nc → hadisd.3.4.0.2023f_19310101-20240101_722145-04884.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722203-03041.nc → hadisd.3.4.0.2023f_19310101-20240101_722203-03041.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722650-23023.nc → hadisd.3.4.0.2023f_19310101-20240101_722650-23023.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722429-53910.nc → hadisd.3.4.0.2023f_19310101-20240101_722429-53910.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722447-53903.nc → hadisd.3.4.0.2023f_19310101-20240101_722447-53903.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722537-12961.nc → hadisd.3.4.0.2023f_19310101-20240101_722537-12961.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722189-92815.nc → hadisd.3.4.0.2023f_19310101-20240101_722189-92815.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722556-12925.nc → hadisd.3.4.0.2023f_19310101-20240101_722556-12925.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722345-03866.nc → hadisd.3.4.0.2023f_19310101-20240101_722345-03866.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722214-03070.nc → hadisd.3.4.0.2023f_19310101-20240101_722214-03070.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722535-12909.nc → hadisd.3.4.0.2023f_19310101-20240101_722535-12909.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722786-23104.nc → hadisd.3.4.0.2023f_19310101-20240101_722786-23104.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722610-22010.nc → hadisd.3.4.0.2023f_19310101-20240101_722610-22010.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722542-03999.nc → hadisd.3.4.0.2023f_19310101-20240101_722542-03999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722284-03892.nc → hadisd.3.4.0.2023f_19310101-20240101_722284-03892.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_525331-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_525331-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722076-94891.nc → hadisd.3.4.0.2023f_19310101-20240101_722076-94891.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_525330-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_525330-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722196-53863.nc → hadisd.3.4.0.2023f_19310101-20240101_722196-53863.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722115-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722115-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722541-53914.nc → hadisd.3.4.0.2023f_19310101-20240101_722541-53914.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722317-13970.nc → hadisd.3.4.0.2023f_19310101-20240101_722317-13970.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722390-03931.nc → hadisd.3.4.0.2023f_19310101-20240101_722390-03931.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722198-63819.nc → hadisd.3.4.0.2023f_19310101-20240101_722198-63819.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_526810-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_526810-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722168-04960.nc → hadisd.3.4.0.2023f_19310101-20240101_722168-04960.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722580-13960.nc → hadisd.3.4.0.2023f_19310101-20240101_722580-13960.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722899-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722899-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722800-23195.nc → hadisd.3.4.0.2023f_19310101-20240101_722800-23195.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722314-03934.nc → hadisd.3.4.0.2023f_19310101-20240101_722314-03934.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722055-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722055-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722091-53940.nc → hadisd.3.4.0.2023f_19310101-20240101_722091-53940.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722200-12832.nc → hadisd.3.4.0.2023f_19310101-20240101_722200-12832.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537720-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537720-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517770-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517770-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722721-93063.nc → hadisd.3.4.0.2023f_19310101-20240101_722721-93063.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722039-12885.nc → hadisd.3.4.0.2023f_19310101-20240101_722039-12885.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549380-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549380-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722533-12962.nc → hadisd.3.4.0.2023f_19310101-20240101_722533-12962.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544230-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544230-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_514950-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_514950-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547530-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547530-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722245-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722245-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722235-13838.nc → hadisd.3.4.0.2023f_19310101-20240101_722235-13838.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722577-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722577-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722678-23052.nc → hadisd.3.4.0.2023f_19310101-20240101_722678-23052.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722486-13942.nc → hadisd.3.4.0.2023f_19310101-20240101_722486-13942.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_504340-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_504340-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722953-03183.nc → hadisd.3.4.0.2023f_19310101-20240101_722953-03183.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722910-93116.nc → hadisd.3.4.0.2023f_19310101-20240101_722910-93116.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722315-53917.nc → hadisd.3.4.0.2023f_19310101-20240101_722315-53917.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722180-03820.nc → hadisd.3.4.0.2023f_19310101-20240101_722180-03820.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722400-03937.nc → hadisd.3.4.0.2023f_19310101-20240101_722400-03937.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722909-93115.nc → hadisd.3.4.0.2023f_19310101-20240101_722909-93115.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722097-04936.nc → hadisd.3.4.0.2023f_19310101-20240101_722097-04936.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528890-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528890-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722182-04890.nc → hadisd.3.4.0.2023f_19310101-20240101_722182-04890.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_545270-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_545270-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722183-04972.nc → hadisd.3.4.0.2023f_19310101-20240101_722183-04972.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722186-04892.nc → hadisd.3.4.0.2023f_19310101-20240101_722186-04892.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722596-13961.nc → hadisd.3.4.0.2023f_19310101-20240101_722596-13961.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722520-12920.nc → hadisd.3.4.0.2023f_19310101-20240101_722520-12920.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722598-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722598-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518390-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518390-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722201-03723.nc → hadisd.3.4.0.2023f_19310101-20240101_722201-03723.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722033-04999.nc → hadisd.3.4.0.2023f_19310101-20240101_722033-04999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537050-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537050-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722536-12911.nc → hadisd.3.4.0.2023f_19310101-20240101_722536-12911.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722725-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722725-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722865-93180.nc → hadisd.3.4.0.2023f_19310101-20240101_722865-93180.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722590-03927.nc → hadisd.3.4.0.2023f_19310101-20240101_722590-03927.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722900-23188.nc → hadisd.3.4.0.2023f_19310101-20240101_722900-23188.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_546180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_546180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722362-93937.nc → hadisd.3.4.0.2023f_19310101-20240101_722362-93937.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_507270-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_507270-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722710-93045.nc → hadisd.3.4.0.2023f_19310101-20240101_722710-93045.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722416-12971.nc → hadisd.3.4.0.2023f_19310101-20240101_722416-12971.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722748-03914.nc → hadisd.3.4.0.2023f_19310101-20240101_722748-03914.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_546620-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_546620-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722252-54923.nc → hadisd.3.4.0.2023f_19310101-20240101_722252-54923.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722287-13871.nc → hadisd.3.4.0.2023f_19310101-20240101_722287-13871.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722447-03901.nc → hadisd.3.4.0.2023f_19310101-20240101_722447-03901.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722484-53905.nc → hadisd.3.4.0.2023f_19310101-20240101_722484-53905.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722029-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722029-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_510530-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_510530-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524460-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524460-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722226-93841.nc → hadisd.3.4.0.2023f_19310101-20240101_722226-93841.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722446-93987.nc → hadisd.3.4.0.2023f_19310101-20240101_722446-93987.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541570-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541570-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535880-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535880-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722508-12957.nc → hadisd.3.4.0.2023f_19310101-20240101_722508-12957.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528950-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528950-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_507740-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_507740-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722175-13860.nc → hadisd.3.4.0.2023f_19310101-20240101_722175-13860.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722080-13880.nc → hadisd.3.4.0.2023f_19310101-20240101_722080-13880.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_506320-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_506320-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722070-03822.nc → hadisd.3.4.0.2023f_19310101-20240101_722070-03822.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722338-12994.nc → hadisd.3.4.0.2023f_19310101-20240101_722338-12994.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722903-03131.nc → hadisd.3.4.0.2023f_19310101-20240101_722903-03131.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722660-13962.nc → hadisd.3.4.0.2023f_19310101-20240101_722660-13962.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722346-54824.nc → hadisd.3.4.0.2023f_19310101-20240101_722346-54824.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527650-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527650-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722343-54826.nc → hadisd.3.4.0.2023f_19310101-20240101_722343-54826.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722676-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722676-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722004-54922.nc → hadisd.3.4.0.2023f_19310101-20240101_722004-54922.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_529550-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_529550-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722266-13850.nc → hadisd.3.4.0.2023f_19310101-20240101_722266-13850.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722069-53853.nc → hadisd.3.4.0.2023f_19310101-20240101_722069-53853.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722589-03991.nc → hadisd.3.4.0.2023f_19310101-20240101_722589-03991.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537380-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537380-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549290-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549290-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_526020-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_526020-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722044-53930.nc → hadisd.3.4.0.2023f_19310101-20240101_722044-53930.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_507880-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_507880-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722244-00358.nc → hadisd.3.4.0.2023f_19310101-20240101_722244-00358.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517470-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517470-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_530830-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_530830-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722630-23034.nc → hadisd.3.4.0.2023f_19310101-20240101_722630-23034.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722276-53820.nc → hadisd.3.4.0.2023f_19310101-20240101_722276-53820.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_539470-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_539470-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722037-92809.nc → hadisd.3.4.0.2023f_19310101-20240101_722037-92809.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722880-23152.nc → hadisd.3.4.0.2023f_19310101-20240101_722880-23152.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722132-63801.nc → hadisd.3.4.0.2023f_19310101-20240101_722132-63801.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_508540-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_508540-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722359-13978.nc → hadisd.3.4.0.2023f_19310101-20240101_722359-13978.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722173-53951.nc → hadisd.3.4.0.2023f_19310101-20240101_722173-53951.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722312-03908.nc → hadisd.3.4.0.2023f_19310101-20240101_722312-03908.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722764-03029.nc → hadisd.3.4.0.2023f_19310101-20240101_722764-03029.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509680-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509680-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548570-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548570-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722046-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722046-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_536460-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_536460-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518280-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518280-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722190-13874.nc → hadisd.3.4.0.2023f_19310101-20240101_722190-13874.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517050-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517050-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722616-03032.nc → hadisd.3.4.0.2023f_19310101-20240101_722616-03032.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517110-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517110-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722677-03027.nc → hadisd.3.4.0.2023f_19310101-20240101_722677-03027.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548430-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548430-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722008-12995.nc → hadisd.3.4.0.2023f_19310101-20240101_722008-12995.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722149-04899.nc → hadisd.3.4.0.2023f_19310101-20240101_722149-04899.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547140-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547140-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_512880-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_512880-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722126-04879.nc → hadisd.3.4.0.2023f_19310101-20240101_722126-04879.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722749-53128.nc → hadisd.3.4.0.2023f_19310101-20240101_722749-53128.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722195-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722195-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722107-03056.nc → hadisd.3.4.0.2023f_19310101-20240101_722107-03056.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541150-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541150-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517300-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517300-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_536730-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_536730-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722267-03878.nc → hadisd.3.4.0.2023f_19310101-20240101_722267-03878.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722114-54901.nc → hadisd.3.4.0.2023f_19310101-20240101_722114-54901.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722972-63878.nc → hadisd.3.4.0.2023f_19310101-20240101_722972-63878.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509490-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509490-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543370-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543370-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_521180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_521180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722176-53884.nc → hadisd.3.4.0.2023f_19310101-20240101_722176-53884.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722406-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722406-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722897-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722897-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_514310-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_514310-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722116-12873.nc → hadisd.3.4.0.2023f_19310101-20240101_722116-12873.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722049-92805.nc → hadisd.3.4.0.2023f_19310101-20240101_722049-92805.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_546020-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_546020-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722666-93943.nc → hadisd.3.4.0.2023f_19310101-20240101_722666-93943.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_533520-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_533520-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_534870-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_534870-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_546160-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_546160-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722563-53952.nc → hadisd.3.4.0.2023f_19310101-20240101_722563-53952.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722112-53982.nc → hadisd.3.4.0.2023f_19310101-20240101_722112-53982.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722144-04945.nc → hadisd.3.4.0.2023f_19310101-20240101_722144-04945.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_524950-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_524950-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544930-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544930-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722427-12975.nc → hadisd.3.4.0.2023f_19310101-20240101_722427-12975.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543460-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543460-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722078-53938.nc → hadisd.3.4.0.2023f_19310101-20240101_722078-53938.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722810-23199.nc → hadisd.3.4.0.2023f_19310101-20240101_722810-23199.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722275-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722275-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542920-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542920-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722154-53885.nc → hadisd.3.4.0.2023f_19310101-20240101_722154-53885.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544010-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544010-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509630-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509630-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722199-53956.nc → hadisd.3.4.0.2023f_19310101-20240101_722199-53956.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_515420-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_515420-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548260-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548260-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722193-03722.nc → hadisd.3.4.0.2023f_19310101-20240101_722193-03722.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722291-00470.nc → hadisd.3.4.0.2023f_19310101-20240101_722291-00470.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722250-13829.nc → hadisd.3.4.0.2023f_19310101-20240101_722250-13829.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722270-13864.nc → hadisd.3.4.0.2023f_19310101-20240101_722270-13864.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_529080-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_529080-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722223-13899.nc → hadisd.3.4.0.2023f_19310101-20240101_722223-13899.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722510-12924.nc → hadisd.3.4.0.2023f_19310101-20240101_722510-12924.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722430-12960.nc → hadisd.3.4.0.2023f_19310101-20240101_722430-12960.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722789-03192.nc → hadisd.3.4.0.2023f_19310101-20240101_722789-03192.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535290-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535290-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722487-13935.nc → hadisd.3.4.0.2023f_19310101-20240101_722487-13935.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_523230-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_523230-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722174-23097.nc → hadisd.3.4.0.2023f_19310101-20240101_722174-23097.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722160-13869.nc → hadisd.3.4.0.2023f_19310101-20240101_722160-13869.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722788-03186.nc → hadisd.3.4.0.2023f_19310101-20240101_722788-03186.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722354-13927.nc → hadisd.3.4.0.2023f_19310101-20240101_722354-13927.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722615-22001.nc → hadisd.3.4.0.2023f_19310101-20240101_722615-22001.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_529830-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_529830-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722279-53852.nc → hadisd.3.4.0.2023f_19310101-20240101_722279-53852.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722179-04968.nc → hadisd.3.4.0.2023f_19310101-20240101_722179-04968.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722693-93097.nc → hadisd.3.4.0.2023f_19310101-20240101_722693-93097.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722310-12916.nc → hadisd.3.4.0.2023f_19310101-20240101_722310-12916.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722570-03933.nc → hadisd.3.4.0.2023f_19310101-20240101_722570-03933.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722071-53935.nc → hadisd.3.4.0.2023f_19310101-20240101_722071-53935.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_513340-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_513340-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_545110-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_545110-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722907-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722907-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722151-14794.nc → hadisd.3.4.0.2023f_19310101-20240101_722151-14794.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722363-23098.nc → hadisd.3.4.0.2023f_19310101-20240101_722363-23098.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722333-03069.nc → hadisd.3.4.0.2023f_19310101-20240101_722333-03069.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722066-03853.nc → hadisd.3.4.0.2023f_19310101-20240101_722066-03853.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722215-13884.nc → hadisd.3.4.0.2023f_19310101-20240101_722215-13884.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_538980-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_538980-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722348-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722348-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722314-53915.nc → hadisd.3.4.0.2023f_19310101-20240101_722314-53915.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_538450-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_538450-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722101-03039.nc → hadisd.3.4.0.2023f_19310101-20240101_722101-03039.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722167-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722167-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_514670-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_514670-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722316-12958.nc → hadisd.3.4.0.2023f_19310101-20240101_722316-12958.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722081-13730.nc → hadisd.3.4.0.2023f_19310101-20240101_722081-13730.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_505270-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_505270-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_523780-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_523780-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_526520-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_526520-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722021-92816.nc → hadisd.3.4.0.2023f_19310101-20240101_722021-92816.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_545273-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_545273-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549090-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549090-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722130-13861.nc → hadisd.3.4.0.2023f_19310101-20240101_722130-13861.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722329-12936.nc → hadisd.3.4.0.2023f_19310101-20240101_722329-12936.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_505570-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_505570-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722670-23042.nc → hadisd.3.4.0.2023f_19310101-20240101_722670-23042.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722728-03196.nc → hadisd.3.4.0.2023f_19310101-20240101_722728-03196.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722785-23111.nc → hadisd.3.4.0.2023f_19310101-20240101_722785-23111.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722526-12947.nc → hadisd.3.4.0.2023f_19310101-20240101_722526-12947.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543740-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543740-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722499-53948.nc → hadisd.3.4.0.2023f_19310101-20240101_722499-53948.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542260-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542260-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722636-93042.nc → hadisd.3.4.0.2023f_19310101-20240101_722636-93042.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722202-12985.nc → hadisd.3.4.0.2023f_19310101-20240101_722202-12985.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547760-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547760-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517090-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517090-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722448-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722448-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722124-04998.nc → hadisd.3.4.0.2023f_19310101-20240101_722124-04998.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_538210-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_538210-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722593-03985.nc → hadisd.3.4.0.2023f_19310101-20240101_722593-03985.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_510870-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_510870-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722165-13815.nc → hadisd.3.4.0.2023f_19310101-20240101_722165-13815.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722895-23243.nc → hadisd.3.4.0.2023f_19310101-20240101_722895-23243.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722040-12838.nc → hadisd.3.4.0.2023f_19310101-20240101_722040-12838.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722065-93837.nc → hadisd.3.4.0.2023f_19310101-20240101_722065-93837.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722268-93843.nc → hadisd.3.4.0.2023f_19310101-20240101_722268-93843.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722404-13941.nc → hadisd.3.4.0.2023f_19310101-20240101_722404-13941.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722016-12896.nc → hadisd.3.4.0.2023f_19310101-20240101_722016-12896.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722700-23044.nc → hadisd.3.4.0.2023f_19310101-20240101_722700-23044.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722585-93901.nc → hadisd.3.4.0.2023f_19310101-20240101_722585-93901.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722286-93806.nc → hadisd.3.4.0.2023f_19310101-20240101_722286-93806.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518110-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518110-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722192-23033.nc → hadisd.3.4.0.2023f_19310101-20240101_722192-23033.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_534800-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_534800-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_540960-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_540960-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722689-23077.nc → hadisd.3.4.0.2023f_19310101-20240101_722689-23077.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_514635-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_514635-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722133-53946.nc → hadisd.3.4.0.2023f_19310101-20240101_722133-53946.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722248-00359.nc → hadisd.3.4.0.2023f_19310101-20240101_722248-00359.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_516560-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_516560-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722116-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722116-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722185-53838.nc → hadisd.3.4.0.2023f_19310101-20240101_722185-53838.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722675-23021.nc → hadisd.3.4.0.2023f_19310101-20240101_722675-23021.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541350-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541350-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527130-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527130-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722934-53121.nc → hadisd.3.4.0.2023f_19310101-20240101_722934-53121.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_541860-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_541860-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_510760-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_510760-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722322-00361.nc → hadisd.3.4.0.2023f_19310101-20240101_722322-00361.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547150-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547150-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_501360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_501360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_508880-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_508880-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722020-12839.nc → hadisd.3.4.0.2023f_19310101-20240101_722020-12839.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_502460-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_502460-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722470-03901.nc → hadisd.3.4.0.2023f_19310101-20240101_722470-03901.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722127-04880.nc → hadisd.3.4.0.2023f_19310101-20240101_722127-04880.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722148-63824.nc → hadisd.3.4.0.2023f_19310101-20240101_722148-63824.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_544710-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_544710-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722157-04949.nc → hadisd.3.4.0.2023f_19310101-20240101_722157-04949.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722688-93034.nc → hadisd.3.4.0.2023f_19310101-20240101_722688-93034.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722085-93831.nc → hadisd.3.4.0.2023f_19310101-20240101_722085-93831.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722123-12809.nc → hadisd.3.4.0.2023f_19310101-20240101_722123-12809.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527070-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527070-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543424-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543424-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722361-92808.nc → hadisd.3.4.0.2023f_19310101-20240101_722361-92808.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_531920-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_531920-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722637-93046.nc → hadisd.3.4.0.2023f_19310101-20240101_722637-93046.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722269-03850.nc → hadisd.3.4.0.2023f_19310101-20240101_722269-03850.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722976-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722976-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_533360-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_533360-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722620-23055.nc → hadisd.3.4.0.2023f_19310101-20240101_722620-23055.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722026-12826.nc → hadisd.3.4.0.2023f_19310101-20240101_722026-12826.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722575-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722575-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722444-53902.nc → hadisd.3.4.0.2023f_19310101-20240101_722444-53902.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722332-54953.nc → hadisd.3.4.0.2023f_19310101-20240101_722332-54953.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722152-53957.nc → hadisd.3.4.0.2023f_19310101-20240101_722152-53957.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_548630-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_548630-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_533910-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_533910-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722926-03154.nc → hadisd.3.4.0.2023f_19310101-20240101_722926-03154.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722095-03030.nc → hadisd.3.4.0.2023f_19310101-20240101_722095-03030.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_535020-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_535020-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722550-12912.nc → hadisd.3.4.0.2023f_19310101-20240101_722550-12912.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722435-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722435-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_526740-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_526740-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_538630-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_538630-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722364-23903.nc → hadisd.3.4.0.2023f_19310101-20240101_722364-23903.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722068-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722068-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537870-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537870-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722488-03996.nc → hadisd.3.4.0.2023f_19310101-20240101_722488-03996.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_521120-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_521120-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722110-12842.nc → hadisd.3.4.0.2023f_19310101-20240101_722110-12842.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722090-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722090-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_547510-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_547510-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722687-93033.nc → hadisd.3.4.0.2023f_19310101-20240101_722687-93033.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722251-53958.nc → hadisd.3.4.0.2023f_19310101-20240101_722251-53958.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722555-12935.nc → hadisd.3.4.0.2023f_19310101-20240101_722555-12935.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722735-93026.nc → hadisd.3.4.0.2023f_19310101-20240101_722735-93026.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722014-12818.nc → hadisd.3.4.0.2023f_19310101-20240101_722014-12818.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537980-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537980-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_505640-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_505640-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722527-12976.nc → hadisd.3.4.0.2023f_19310101-20240101_722527-12976.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722187-93911.nc → hadisd.3.4.0.2023f_19310101-20240101_722187-93911.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722597-93985.nc → hadisd.3.4.0.2023f_19310101-20240101_722597-93985.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722141-03731.nc → hadisd.3.4.0.2023f_19310101-20240101_722141-03731.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722887-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722887-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722092-53941.nc → hadisd.3.4.0.2023f_19310101-20240101_722092-53941.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_537640-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_537640-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722217-63881.nc → hadisd.3.4.0.2023f_19310101-20240101_722217-63881.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722358-93919.nc → hadisd.3.4.0.2023f_19310101-20240101_722358-93919.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722280-13876.nc → hadisd.3.4.0.2023f_19310101-20240101_722280-13876.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722695-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722695-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_539750-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_539750-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722093-04878.nc → hadisd.3.4.0.2023f_19310101-20240101_722093-04878.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543080-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543080-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722595-13911.nc → hadisd.3.4.0.2023f_19310101-20240101_722595-13911.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722683-93083.nc → hadisd.3.4.0.2023f_19310101-20240101_722683-93083.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722098-64761.nc → hadisd.3.4.0.2023f_19310101-20240101_722098-64761.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722747-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722747-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722177-63811.nc → hadisd.3.4.0.2023f_19310101-20240101_722177-63811.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722955-03122.nc → hadisd.3.4.0.2023f_19310101-20240101_722955-03122.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722230-13894.nc → hadisd.3.4.0.2023f_19310101-20240101_722230-13894.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722445-03904.nc → hadisd.3.4.0.2023f_19310101-20240101_722445-03904.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722547-53942.nc → hadisd.3.4.0.2023f_19310101-20240101_722547-53942.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722073-03727.nc → hadisd.3.4.0.2023f_19310101-20240101_722073-03727.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722208-04224.nc → hadisd.3.4.0.2023f_19310101-20240101_722208-04224.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722059-04866.nc → hadisd.3.4.0.2023f_19310101-20240101_722059-04866.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722075-04871.nc → hadisd.3.4.0.2023f_19310101-20240101_722075-04871.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722171-04889.nc → hadisd.3.4.0.2023f_19310101-20240101_722171-04889.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_532760-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_532760-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722188-53985.nc → hadisd.3.4.0.2023f_19310101-20240101_722188-53985.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722904-23196.nc → hadisd.3.4.0.2023f_19310101-20240101_722904-23196.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722586-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722586-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722587-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722587-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722523-12970.nc → hadisd.3.4.0.2023f_19310101-20240101_722523-12970.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_539230-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_539230-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722576-03902.nc → hadisd.3.4.0.2023f_19310101-20240101_722576-03902.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_542180-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_542180-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722204-04996.nc → hadisd.3.4.0.2023f_19310101-20240101_722204-04996.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_527870-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_527870-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722340-13865.nc → hadisd.3.4.0.2023f_19310101-20240101_722340-13865.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722330-53865.nc → hadisd.3.4.0.2023f_19310101-20240101_722330-53865.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543240-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543240-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722970-23129.nc → hadisd.3.4.0.2023f_19310101-20240101_722970-23129.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_539590-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_539590-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722140-93805.nc → hadisd.3.4.0.2023f_19310101-20240101_722140-93805.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_529960-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_529960-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722082-04876.nc → hadisd.3.4.0.2023f_19310101-20240101_722082-04876.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722656-23040.nc → hadisd.3.4.0.2023f_19310101-20240101_722656-23040.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722213-12819.nc → hadisd.3.4.0.2023f_19310101-20240101_722213-12819.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722410-12917.nc → hadisd.3.4.0.2023f_19310101-20240101_722410-12917.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528420-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528420-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722950-23174.nc → hadisd.3.4.0.2023f_19310101-20240101_722950-23174.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722060-13889.nc → hadisd.3.4.0.2023f_19310101-20240101_722060-13889.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_517160-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_517160-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_531490-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_531490-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_534630-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_534630-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722074-63840.nc → hadisd.3.4.0.2023f_19310101-20240101_722074-63840.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722159-12980.nc → hadisd.3.4.0.2023f_19310101-20240101_722159-12980.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722191-03721.nc → hadisd.3.4.0.2023f_19310101-20240101_722191-03721.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_516440-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_516440-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722869-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722869-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_549160-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_549160-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_543110-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_543110-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722868-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_722868-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_722874-93134.nc → hadisd.3.4.0.2023f_19310101-20240101_722874-93134.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_509150-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_509150-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_505480-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_505480-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_528560-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_528560-99999.zarr\n",
+ "Converted: hadisd.3.4.0.2023f_19310101-20240101_518550-99999.nc → hadisd.3.4.0.2023f_19310101-20240101_518550-99999.zarr\n",
+ "Conversion complete. 615 new stations converted, 155 already present.\n"
+ ]
+ }
+ ],
"source": [
- "process_all_to_zarr(str(input_dir), str(zarr_output_dir), DATE_RANGE)"
+ "# Run parallel NetCDF-to-Zarr\n",
+ "process_all_to_zarr(str(input_dir), str(zarr_output_dir), DATE_RANGE, scheduler='processes')"
]
},
{
@@ -271,34 +875,2930 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"id": "1889e763",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
<xarray.Dataset> Size: 327GB\n",
+ "Dimensions: (station: 770, time: 473352, flagged: 19, test: 71,\n",
+ " reporting_v: 19, reporting_t: 1116, reporting_2: 2)\n",
+ "Coordinates:\n",
+ " elevation (station) float64 6kB 1.676e+03 401.0 ... 117.7 36.0\n",
+ " latitude (station) float64 6kB 38.47 42.33 ... 45.93 30.48\n",
+ " longitude (station) float64 6kB 102.2 120.7 ... 126.6 -87.19\n",
+ " * station (station) object 6kB '526740-99999' ... '722223-13...\n",
+ " * time (time) datetime64[ns] 4MB 1970-01-01 ... 2023-12-3...\n",
+ "Dimensions without coordinates: flagged, test, reporting_v, reporting_t,\n",
+ " reporting_2\n",
+ "Data variables: (12/25)\n",
+ " cloud_base (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " dewpoints (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " flagged_obs (station, time, flagged) float64 55GB dask.array<chunksize=(1, 29585, 3), meta=np.ndarray>\n",
+ " high_cloud_cover (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " low_cloud_cover (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " mid_cloud_cover (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " ... ...\n",
+ " stnlp (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " temperatures (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " total_cloud_cover (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " wind_gust (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " winddirs (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ " windspeeds (station, time) float64 3GB dask.array<chunksize=(1, 59169), meta=np.ndarray>\n",
+ "Attributes: (12/39)\n",
+ " Conventions: CF-1.6\n",
+ " Metadata_Conventions: Unidata Dataset Discovery v1.0, CF Discrete ...\n",
+ " acknowledgement: RJHD was supported by the Joint BEIS/Defra M...\n",
+ " cdm_data_type: station\n",
+ " creator_email: robert.dunn@metoffice.gov.uk\n",
+ " creator_name: Robert Dunn\n",
+ " ... ...\n",
+ " station_id: 526740-99999\n",
+ " station_information: Where station is a composite the station id ...\n",
+ " summary: Quality-controlled, sub-daily, station datas...\n",
+ " time_coverage_end: 2002-05-13T09:00Z\n",
+ " time_coverage_start: 1964-01-01T00:00Z\n",
+ " title: HadISD Dimensions: station : 770time : 473352flagged : 19test : 71reporting_v : 19reporting_t : 1116reporting_2 : 2
Coordinates: (5)
elevation
(station)
float64
1.676e+03 401.0 47.0 ... 117.7 36.0
axis : Z long_name : vertical distance above the surface positive : up standard_name : surface_altitude units : meters array([ 1.6760e+03, 4.0100e+02, 4.7000e+01, 2.3990e+02, 2.5484e+03,\n",
+ " 9.9700e+02, 2.4360e+02, 6.2800e+01, 5.8000e+00, 7.2540e+02,\n",
+ " 5.4480e+02, 3.2900e+03, 1.7310e+02, 1.2470e+03, 2.5390e+02,\n",
+ " 3.5400e+01, 2.7890e+02, 1.0540e+03, 3.0800e+02, 3.0000e+00,\n",
+ " 1.3100e+01, 7.6000e+00, 7.1600e+01, 6.6500e+02, 1.0170e+03,\n",
+ " 1.1800e+02, 5.6910e+02, 5.9000e+01, 3.3020e+03, 1.9500e+01,\n",
+ " 1.3460e+03, 2.7179e+03, 4.0500e+01, 5.1000e+01, 2.1520e+02,\n",
+ " 6.6690e+02, 1.4780e+03, 2.0552e+03, 3.0970e+02, 3.5939e+03,\n",
+ " 1.6570e+02, 8.5000e+00, 5.2300e+01, 2.5200e+01, 2.0100e+01,\n",
+ " 6.8300e+01, 2.0000e+00, 3.0440e+03, 5.3710e+02, 1.2360e+02,\n",
+ " 1.6500e+02, 8.5000e+01, 8.2600e+01, 1.2510e+02, 6.0000e+00,\n",
+ " 3.5400e+01, 2.0000e+00, 1.1120e+03, 1.0104e+03, 8.8820e+02,\n",
+ " 1.0990e+03, 4.6900e+01, 7.9100e+01, 9.4870e+02, 9.1400e+02,\n",
+ " 8.0190e+02, 6.0400e+01, 1.4400e+02, 2.0000e+01, 4.0000e+01,\n",
+ " 7.5300e+01, 3.1000e+00, 1.9320e+02, 1.0000e+01, 2.5570e+02,\n",
+ " 2.8127e+03, 1.4940e+03, 2.0000e+00, 9.8000e+00, 1.0000e+01,\n",
+ " 8.0920e+02, 8.7100e+01, 4.9000e+00, 5.2000e+01, 1.4000e+00,\n",
+ " 2.4900e+02, 1.3091e+03, 6.5900e+02, 1.1900e+01, 1.4384e+03,\n",
+ " 6.3700e+01, 2.1950e+02, 9.0000e-01, 2.3500e+01, 5.3680e+02,\n",
+ " 1.0060e+02, 8.6300e+01, 1.2320e+03, 1.6300e+02, 1.8530e+02,\n",
+ "...\n",
+ " 6.5000e+02, 1.7800e+02, 3.7650e+02, 2.6600e+02, 2.0000e+00,\n",
+ " 6.2240e+02, 2.4300e+02, 5.9980e+02, 1.8290e+02, 5.9100e+01,\n",
+ " 8.8900e+02, 1.5000e+02, 3.0360e+02, 1.9510e+02, 1.0130e+03,\n",
+ " 4.2300e+02, 2.7100e+01, 3.7220e+02, 7.4700e+01, 9.6600e+02,\n",
+ " 1.4760e+02, 6.7000e+00, 4.4100e+02, 9.9320e+02, 3.5050e+02,\n",
+ " 5.8200e+01, 2.6520e+02, 1.9100e+02, 2.3590e+02, 1.4780e+02,\n",
+ " 2.1300e+01, 6.4620e+02, 1.1147e+03, 4.5020e+02, 1.0000e-01,\n",
+ " 9.0000e+00, 1.6550e+03, 7.1600e+01, 6.6100e+02, 5.0300e+01,\n",
+ " 2.4500e+03, 1.9460e+02, 6.9600e+01, 4.4560e+02, 1.4540e+02,\n",
+ " 6.7000e+00, 6.1000e+00, 2.2000e+01, 3.3500e+01, 3.3700e+01,\n",
+ " 1.7700e+03, 1.8750e+03, 1.2200e+02, 3.0000e-01, 1.7910e+02,\n",
+ " 2.3200e+01, 7.3900e+02, 6.5710e+02, 8.0500e+01, 2.1340e+02,\n",
+ " 1.4160e+03, 9.5000e+00, 1.3830e+03, 2.3920e+02, 3.4320e+02,\n",
+ " 6.7900e+02, 1.1520e+03, 2.9250e+03, 7.5000e+00, 2.9840e+02,\n",
+ " 6.0000e-01, 1.2802e+03, 3.8000e+00, 1.1046e+03, 2.9470e+02,\n",
+ " 7.3900e+02, 2.4590e+03, 3.5000e+00, 1.8290e+02, 1.5190e+02,\n",
+ " 7.9000e+00, 1.0910e+02, 7.7760e+02, 3.0000e+00, 1.1477e+03,\n",
+ " 3.2300e+01, 2.9510e+02, 1.1000e+01, 1.3750e+03, 2.2800e+02,\n",
+ " 1.6510e+03, 1.4702e+03, 6.2800e+01, 2.1550e+02, 9.5100e+02,\n",
+ " 2.2340e+02, 9.2400e+01, 2.1421e+03, 1.1770e+02, 3.6000e+01]) latitude
(station)
float64
38.47 42.33 37.4 ... 45.93 30.48
axis : Y long_name : station latitude standard_name : latitude units : degrees_north array([ 3.8467e+01, 4.2333e+01, 3.7400e+01, -2.5596e+01, 4.7020e+00,\n",
+ " 4.7167e+01, 2.9544e+01, 3.1536e+01, -2.1570e+00, 3.2473e+01,\n",
+ " 3.2411e+01, 3.5267e+01, 2.9339e+01, 4.2183e+01, 3.6605e+01,\n",
+ " 4.0080e+01, 4.1932e+01, 4.0083e+01, 3.4083e+01, 2.7900e+01,\n",
+ " 1.1526e+01, 3.3929e+01, 1.0558e+01, -9.1330e+00, 3.3600e+01,\n",
+ " -9.5110e+00, -2.3334e+01, 3.8167e+01, 3.7333e+01, -1.2911e+01,\n",
+ " 4.8130e+00, -1.3155e+01, 3.3496e+01, 3.2350e+01, 4.3996e+01,\n",
+ " 3.6437e+01, 3.9767e+01, 3.5657e+01, 3.4804e+01, 3.7450e+01,\n",
+ " 3.2897e+01, -2.2809e+01, 3.2540e+01, 3.2348e+01, 2.8367e+01,\n",
+ " 9.7490e+00, 2.5650e+01, 3.7200e+01, -9.3340e+00, 3.1182e+01,\n",
+ " 3.0200e+01, -4.2560e+00, 3.2550e+01, 3.3467e+01, 3.0200e+01,\n",
+ " -5.2060e+00, 2.6153e+01, 3.8483e+01, 3.2675e+01, 4.1964e+01,\n",
+ " 3.9000e+01, 7.8830e+00, 3.1419e+01, 3.6682e+01, 3.5167e+01,\n",
+ " -2.3627e+01, -2.4220e+00, 2.8459e+01, 3.3917e+01, 3.7933e+01,\n",
+ " 3.5582e+01, 3.0131e+01, -9.8690e+00, 2.8517e+01, 3.3651e+01,\n",
+ " -1.4100e-01, 3.9667e+01, 2.5900e+01, 1.0481e+01, 5.8110e+00,\n",
+ " -1.9765e+01, 3.1236e+01, 3.0400e+01, 2.7741e+01, 2.5788e+01,\n",
+ " 3.3950e+01, 3.4383e+01, 3.5483e+01, 2.9519e+01, 3.1588e+01,\n",
+ " 3.5140e+01, 3.5668e+01, 3.0049e+01, 2.9620e+01, -2.2792e+01,\n",
+ " 3.1050e+01, 3.1083e+01, 3.8433e+01, 3.3067e+01, 3.2767e+01,\n",
+ "...\n",
+ " 4.9250e+01, 4.2883e+01, 3.5117e+01, 4.4567e+01, 5.9500e+00,\n",
+ " 1.0043e+01, 4.9167e+01, -2.1985e+01, -3.1391e+01, 3.4681e+01,\n",
+ " 3.9033e+01, 4.6383e+01, 4.5150e+01, 9.5530e+00, 4.0500e+01,\n",
+ " 4.0967e+01, 2.8418e+01, 3.4317e+01, 5.6200e+00, 4.3650e+01,\n",
+ " 3.2838e+01, 2.8014e+01, -1.3267e+01, 3.3666e+01, 3.5096e+01,\n",
+ " 3.1536e+01, -1.0719e+01, 4.5217e+01, -1.0292e+01, 3.0169e+01,\n",
+ " 2.6178e+01, -2.3229e+01, -2.1267e+01, -2.2175e+01, 2.7913e+01,\n",
+ " 2.7383e+01, 3.1833e+01, 1.0603e+01, 4.1200e+01, 3.5541e+01,\n",
+ " 3.5383e+01, 3.3209e+01, 3.2447e+01, 3.2950e+01, 4.7240e+01,\n",
+ " 1.1120e+01, 3.0233e+01, 3.7433e+01, -2.2875e+01, 2.8862e+01,\n",
+ " 4.1800e+01, 3.5867e+01, 3.1317e+01, 2.9445e+01, 3.4658e+01,\n",
+ " 3.0537e+01, 4.8767e+01, -2.2550e+01, -3.0390e+00, 3.2565e+01,\n",
+ " 4.1033e+01, 2.6230e+01, 3.9383e+01, 3.4212e+01, 4.4074e+01,\n",
+ " -2.7117e+01, 4.2400e+01, 3.6783e+01, 3.0344e+01, 3.3878e+01,\n",
+ " 2.9817e+01, 3.2840e+01, 2.9952e+01, 3.3307e+01, 4.5159e+01,\n",
+ " 4.2817e+01, 4.3033e+01, 2.6685e+01, 4.3433e+01, 3.1618e+01,\n",
+ " 4.8200e+00, 3.4891e+01, 3.2132e+01, -2.2932e+01, 4.4017e+01,\n",
+ " -8.0810e+00, 3.3417e+01, -1.7652e+01, 3.7133e+01, 4.0400e+01,\n",
+ " 4.5367e+01, 3.3237e+01, 3.2667e+01, 4.0520e+01, 3.7500e+01,\n",
+ " 3.5781e+01, 3.9417e+01, 6.1650e+00, 4.5933e+01, 3.0476e+01]) longitude
(station)
float64
102.2 120.7 122.7 ... 126.6 -87.19
axis : X long_name : station longitude standard_name : longitude units : degrees_east array([ 102.183, 120.7 , 122.683, -54.487, -74.147, 119.933,\n",
+ " -98.484, -82.507, -79.884, -100.466, -99.682, 100.65 ,\n",
+ " -98.472, 116.467, -94.738, 116.585, -88.708, 113.417,\n",
+ " -117.783, -82.683, -72.926, -78.075, -71.728, -75.95 ,\n",
+ " -102.05 , -35.792, -51.13 , 120.783, 100.133, -38.331,\n",
+ " -75.74 , -74.204, -90.087, -86.983, 125.681, -99.521,\n",
+ " 98.483, -109.06 , -96.671, -106.8 , -97.022, -43.244,\n",
+ " -93.746, -91.03 , -97.667, -63.153, -80.433, 102.867,\n",
+ " -54.965, -90.472, -97.683, -69.936, -88.567, -82.038,\n",
+ " -85.683, -80.616, -81.775, 106.217, -102.654, -100.569,\n",
+ " 83.667, -67.444, -87.048, -101.505, 109.05 , -46.655,\n",
+ " -54.793, -99.223, -118.333, 120.717, -79.101, -93.376,\n",
+ " -67.894, -80.8 , -97.197, -78.488, 76.167, -80.283,\n",
+ " -68.073, -55.191, -47.965, -94.755, -81.417, -98.025,\n",
+ " -80.317, -117.433, -103.317, 112.4 , -95.242, -110.344,\n",
+ " -90.236, -95.949, -90.029, -95.657, -45.205, -93.183,\n",
+ " -83.8 , 77.267, -96.067, -97.45 , -86.519, 111.217,\n",
+ " -42.074, 131.983, -89.4 , -81.517, -97.4 , 116.55 ,\n",
+ " -97.717, 98.617, -81.757, -81.254, -70.933, -99.174,\n",
+ " -117.867, -98.737, -47.913, 120.45 , -80.948, -49.72 ,\n",
+ "...\n",
+ " -76.382, 108.517, -95.479, -102.917, 99.8 , -85.95 ,\n",
+ " -95.004, -100.283, -109.606, -49.176, -87.846, 123.483,\n",
+ " 114.133, -83.6 , -75.513, -56.106, 119.7 , 129.5 ,\n",
+ " 111.067, 120.9 , -57.03 , -69.359, 125.233, -47.335,\n",
+ " -54.112, -90.347, 88.167, 125.317, -92.533, -69.238,\n",
+ " 81.05 , 117.917, -81.324, -84.417, -67.606, 112. ,\n",
+ " -96.836, -82.345, -43.417, -101.823, -97.966, -84.196,\n",
+ " -48.4 , 127.967, -48.357, -96.98 , -97.973, -45.862,\n",
+ " -43.761, -51.425, -82.686, -82.55 , -104.809, -66.991,\n",
+ " 116.633, -78.39 , 105. , -97.199, -93.824, -111.767,\n",
+ " 123.918, -74.231, -81.667, 116.317, -43.385, -96.93 ,\n",
+ " 97.033, 104.15 , -85.45 , -90.261, -86.943, -91.147,\n",
+ " 121.917, -55.703, -60.05 , -97.308, 113.067, -97.656,\n",
+ " 102.833, -118.491, -93.553, -52.617, 112.9 , 99.083,\n",
+ " -89.822, -84.298, -90.017, -105.991, -94.026, -104.508,\n",
+ " -93.843, 93.517, 84.15 , -80.099, -83.867, -97.228,\n",
+ " -52.36 , -79.759, -110.956, -43.719, 115. , -79.109,\n",
+ " -112.383, -39.253, 79.933, 118.95 , 90.533, -107.268,\n",
+ " -114.6 , -90.652, 111.1 , -80.304, -77.383, -75.423,\n",
+ " 126.567, -87.186]) station
(station)
object
'526740-99999' ... '722223-13899'
array(['526740-99999', '542260-99999', '547760-99999', ..., '801120-99999',\n",
+ " '509530-99999', '722223-13899'], shape=(770,), dtype=object) time
(time)
datetime64[ns]
1970-01-01 ... 2023-12-31T23:00:00
long_name : time_of_measurement standard_name : time valid_min : 0.0 array(['1970-01-01T00:00:00.000000000', '1970-01-01T01:00:00.000000000',\n",
+ " '1970-01-01T02:00:00.000000000', ..., '2023-12-31T21:00:00.000000000',\n",
+ " '2023-12-31T22:00:00.000000000', '2023-12-31T23:00:00.000000000'],\n",
+ " shape=(473352,), dtype='datetime64[ns]') Data variables: (25)
cloud_base
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) long_name : Cloud base of lowest cloud layer standard_name : cloud_base_altitude units : meters valid_max : 22000.0 valid_min : 15.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
dewpoints
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -2e+30 long_name : Dew point temperature at screen height (~2m) standard_name : dew_point_temperature units : degree_Celsius valid_max : 25.0 valid_min : -44.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
flagged_obs
(station, time, flagged)
float64
dask.array<chunksize=(1, 29585, 3), meta=np.ndarray>
cell_methods : latitude: longitude: time: point long_name : Observation Values removed by QC flags temperatures dewpoints slp stnlp windspeeds winddirs total_cloud_cover low_cloud_cover mid_cloud_cover high_cloud_cover precip1_depth precip2_depth precip3_depth precip6_depth precip9_depth precip12_depth precip15_depth precip18_depth precip24_depth units : 1 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 51.60 GiB \n",
+ " 693.40 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352, 19) \n",
+ " (1, 29585, 3) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 86240 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 19 \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
high_cloud_cover
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (derived in priority order GA, GF, GD - see ISD documentation, nearest to reporting hour) flagged_value : -888 long_name : High cloud cover (oktas) standard_name : high_type_cloud_area_fraction units : 1 valid_max : 8 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
low_cloud_cover
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (derived in priority order GA, GF, GD - see ISD documentation, nearest to reporting hour) flagged_value : -888 long_name : Low cloud cover (oktas) standard_name : low_type_cloud_area_fraction units : 1 valid_max : 8 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
mid_cloud_cover
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (derived in priority order GA, GF, GD - see ISD documentation, nearest to reporting hour) flagged_value : -888 long_name : Mid cloud cover (oktas) standard_name : medium_type_cloud_area_fraction units : 1 valid_max : 8 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
past_sigwx1
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: point (interval: 1 day) long_name : Reported past significant weather phenomena units : 1 valid_max : 9 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip12_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 12 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip15_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 15 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip18_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 18 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip1_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 1 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip24_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 24 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip2_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 2 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip3_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 3 hours (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip6_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 6 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
precip9_depth
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: sum flagged_value : -2e+30 long_name : Depth of Precipitation Reported in 9 hour (from all four ISD fields) standard_name : lwe_thickness_of_precipitation_amount units : mm valid_max : 999.8 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
quality_control_flags
(station, time, test)
float64
dask.array<chunksize=(1, 29585, 5), meta=np.ndarray>
long_name : Quality Control status for individual obs units : 1 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 192.81 GiB \n",
+ " 1.13 MiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352, 71) \n",
+ " (1, 29585, 5) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 184800 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 71 \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
reporting_stats
(station, reporting_v, reporting_t, reporting_2)
float64
dask.array<chunksize=(1, 10, 1116, 2), meta=np.ndarray>
long_name : Reporting frequency and accuracy for each month and variable in following order: temperatures dewpoints slp stnlp windspeeds winddirs total_cloud_cover low_cloud_cover mid_cloud_cover high_cloud_cover precip1_depth precip2_depth precip3_depth precip6_depth precip9_depth precip12_depth precip15_depth precip18_depth precip24_depth units : 1 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 249.13 MiB \n",
+ " 174.38 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 19, 1116, 2) \n",
+ " (1, 10, 1116, 2) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 1540 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 770 \n",
+ " 1 \n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 2 \n",
+ " 1116 \n",
+ " 19 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
slp
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -2e+30 long_name : Reported Sea Level Pressure at screen height (~2m) standard_name : air_pressure_at_sea_level units : hPa valid_max : 1075.3 valid_min : 901.6 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
stnlp
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -2e+30 long_name : Reported Station Level Pressure at screen height (~2m) standard_name : surface_air_pressure units : hPa valid_max : 1075.3 valid_min : 901.6 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
temperatures
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -2e+30 long_name : Dry bulb air temperature at screen height (~2m) standard_name : surface_temperature units : degree_Celsius valid_max : 35.0 valid_min : -27.2 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
total_cloud_cover
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (derived in priority order GA, GF, GD - see ISD documentation, nearest to reporting hour) flagged_value : -888 long_name : Total cloud cover (oktas) standard_name : cloud_area_fraction units : 1 valid_max : 8 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
wind_gust
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) long_name : Wind Gust Speed at mast height (~10m) standard_name : wind_speed_of_gust units : meters per second valid_max : 200.0 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
winddirs
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -888 long_name : Wind Direction at mast height (~10m) standard_name : wind_from_direction units : degree valid_max : 360 valid_min : 0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
windspeeds
(station, time)
float64
dask.array<chunksize=(1, 59169), meta=np.ndarray>
cell_methods : latitude: longitude: time: point (nearest to reporting hour) flagged_value : -2e+30 long_name : Wind speed at mast height (~10m) standard_name : wind_speed units : meters per second valid_max : 72.0 valid_min : 0.0 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Array \n",
+ " Chunk \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Bytes \n",
+ " 2.72 GiB \n",
+ " 462.26 kiB \n",
+ " \n",
+ " \n",
+ " \n",
+ " Shape \n",
+ " (770, 473352) \n",
+ " (1, 59169) \n",
+ " \n",
+ " \n",
+ " Dask graph \n",
+ " 6160 chunks in 1541 graph layers \n",
+ " \n",
+ " \n",
+ " Data type \n",
+ " float64 numpy.ndarray \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " \n",
+ "\n",
+ " \n",
+ " 473352 \n",
+ " 770 \n",
+ " \n",
+ " \n",
+ " \n",
+ "
Indexes: (2)
PandasIndex
PandasIndex(Index(['526740-99999', '542260-99999', '547760-99999', '838270-99999',\n",
+ " '802220-99999', '507270-99999', '722530-12921', '722135-13870',\n",
+ " '842030-99999', '722192-23033',\n",
+ " ...\n",
+ " '512880-99999', '722710-93045', '722800-23195', '722157-04949',\n",
+ " '537640-99999', '722079-53888', '722081-13730', '801120-99999',\n",
+ " '509530-99999', '722223-13899'],\n",
+ " dtype='object', name='station', length=770)) PandasIndex
PandasIndex(DatetimeIndex(['1970-01-01 00:00:00', '1970-01-01 01:00:00',\n",
+ " '1970-01-01 02:00:00', '1970-01-01 03:00:00',\n",
+ " '1970-01-01 04:00:00', '1970-01-01 05:00:00',\n",
+ " '1970-01-01 06:00:00', '1970-01-01 07:00:00',\n",
+ " '1970-01-01 08:00:00', '1970-01-01 09:00:00',\n",
+ " ...\n",
+ " '2023-12-31 14:00:00', '2023-12-31 15:00:00',\n",
+ " '2023-12-31 16:00:00', '2023-12-31 17:00:00',\n",
+ " '2023-12-31 18:00:00', '2023-12-31 19:00:00',\n",
+ " '2023-12-31 20:00:00', '2023-12-31 21:00:00',\n",
+ " '2023-12-31 22:00:00', '2023-12-31 23:00:00'],\n",
+ " dtype='datetime64[ns]', name='time', length=473352, freq=None)) Attributes: (39)
Conventions : CF-1.6 Metadata_Conventions : Unidata Dataset Discovery v1.0, CF Discrete Sampling Geometries Conventions acknowledgement : RJHD was supported by the Joint BEIS/Defra Met Office Hadley Centre Climate Programme (GA01101). cdm_data_type : station creator_email : robert.dunn@metoffice.gov.uk creator_name : Robert Dunn creator_url : www.metoffice.gov.uk date_created : 2024-01-08, 22:06 featureType : timeSeries geospatial_lat_max : 38.467 geospatial_lat_min : 38.467 geospatial_lat_units : degrees geospatial_lon_max : 102.183 geospatial_lon_min : 102.183 geospatial_lon_units : degrees geospatial_vertical_max : 1676.0 geospatial_vertical_min : 1676.0 geospatial_vertical_units : m hadisd_time_coverage_end : 2024-01-01T00:00Z hadisd_time_coverage_start : 1931-01-01T00:00Z hadisd_version : 3.4.0.2023f history : Created by mk_netcdf_files.py \n",
+ "Duplicate Months Check 2024-01-08, 16:03 \n",
+ "Isolated Odd Cluster Check 2024-01-08, 16:03 \n",
+ "Frequent Values Check 2024-01-08, 16:03 \n",
+ "Diurnal Cycle Check 2024-01-08, 16:04 \n",
+ "Distributional Gap Check 2024-01-08, 16:04 \n",
+ "World Record Check 2024-01-08, 16:04 \n",
+ "Streak Check 2024-01-08, 16:04 \n",
+ "Climatological Check 2024-01-08, 16:04 \n",
+ "Spike Check 2024-01-08, 16:04 \n",
+ "Temperature-Humidity Cross Check 2024-01-08, 16:04 \n",
+ "Cloud - Logical Cross Check 2024-01-08, 16:04 \n",
+ "Excess Variance Check 2024-01-08, 16:05 \n",
+ "Pressure Cross Check 2024-01-08, 16:05 \n",
+ "Precipitation Cross Check 2024-01-08, 16:05 \n",
+ "Unflagging - temperatures 2024-01-08, 22:05 \n",
+ "Unflagging - dewpoints 2024-01-08, 22:05 \n",
+ "Unflagging - slp 2024-01-08, 22:06 \n",
+ "Neighbour Outlier Check 2024-01-08, 22:06 \n",
+ "Clean Up Months 2024-01-08, 22:06 \n",
+ "Masking 2024-01-08, 22:06 \n",
+ " institution : Met Office Hadley Centre, Exeter, UK isd_date_full : 6 February 2023 isd_date_update : 4 January 2024 isd_version : --- keywords : sub-daily, station, extremes, temperature, dewpoint, pressure, wind_speed, wind_direction, cloud_cover licence : HadISD is distributed under the Non Commercial Government Licence: http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/non-commercial-government-licence.htm. The data are available for non-commercial use with attribution to the data providers. Please cite Dunn et al (2012), Dunn et al (2014), Dunn et al (2016) and Smith et al (2011) and state the version used. This product may contain data which are governed by WMO Policy following WMO Resolution 40 Annex 1 alongside additional data that may have restrictions placed on their commercial use by the data owners. Any redistribution of this product should be accompanied by a similar statement of usage policy. processing_date : 08-Jan-2024 processing_level : Quality controlled timeseries at station level qc_code_version : 279 references : Dunn, 2019, Met Office Hadley Centre Technical Note #103; Dunn, Willett, Parker & Mitchell, 2016, Geosci. Instrum. Method. Data Syst., 5, 473-491 source : HadISD data product station_id : 526740-99999 station_information : Where station is a composite the station id refers to the primary source used in the timestep and does apply to all elements summary : Quality-controlled, sub-daily, station dataset containing temperature, dewpoint, pressure, wind speed & direction and cloud cover. time_coverage_end : 2002-05-13T09:00Z time_coverage_start : 1964-01-01T00:00Z title : HadISD "
+ ],
+ "text/plain": [
+ " Size: 327GB\n",
+ "Dimensions: (station: 770, time: 473352, flagged: 19, test: 71,\n",
+ " reporting_v: 19, reporting_t: 1116, reporting_2: 2)\n",
+ "Coordinates:\n",
+ " elevation (station) float64 6kB 1.676e+03 401.0 ... 117.7 36.0\n",
+ " latitude (station) float64 6kB 38.47 42.33 ... 45.93 30.48\n",
+ " longitude (station) float64 6kB 102.2 120.7 ... 126.6 -87.19\n",
+ " * station (station) object 6kB '526740-99999' ... '722223-13...\n",
+ " * time (time) datetime64[ns] 4MB 1970-01-01 ... 2023-12-3...\n",
+ "Dimensions without coordinates: flagged, test, reporting_v, reporting_t,\n",
+ " reporting_2\n",
+ "Data variables: (12/25)\n",
+ " cloud_base (station, time) float64 3GB dask.array\n",
+ " dewpoints (station, time) float64 3GB dask.array\n",
+ " flagged_obs (station, time, flagged) float64 55GB dask.array\n",
+ " high_cloud_cover (station, time) float64 3GB dask.array\n",
+ " low_cloud_cover (station, time) float64 3GB dask.array\n",
+ " mid_cloud_cover (station, time) float64 3GB dask.array\n",
+ " ... ...\n",
+ " stnlp (station, time) float64 3GB dask.array\n",
+ " temperatures (station, time) float64 3GB dask.array\n",
+ " total_cloud_cover (station, time) float64 3GB dask.array\n",
+ " wind_gust (station, time) float64 3GB dask.array\n",
+ " winddirs (station, time) float64 3GB dask.array\n",
+ " windspeeds (station, time) float64 3GB dask.array\n",
+ "Attributes: (12/39)\n",
+ " Conventions: CF-1.6\n",
+ " Metadata_Conventions: Unidata Dataset Discovery v1.0, CF Discrete ...\n",
+ " acknowledgement: RJHD was supported by the Joint BEIS/Defra M...\n",
+ " cdm_data_type: station\n",
+ " creator_email: robert.dunn@metoffice.gov.uk\n",
+ " creator_name: Robert Dunn\n",
+ " ... ...\n",
+ " station_id: 526740-99999\n",
+ " station_information: Where station is a composite the station id ...\n",
+ " summary: Quality-controlled, sub-daily, station datas...\n",
+ " time_coverage_end: 2002-05-13T09:00Z\n",
+ " time_coverage_start: 1964-01-01T00:00Z\n",
+ " title: HadISD"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"ds_combined = load_combined_dataset(zarr_output_dir)\n",
"ds_combined"
]
- },
- {
- "cell_type": "markdown",
- "id": "d448a05f",
- "metadata": {},
- "source": [
- "# Data Organization: NetCDF and Zarr stores\n",
- "\n",
- "To keep your workflow clear and reproducible, we recommend storing both the raw NetCDF files and the processed Zarr data in separate subfolders inside your main WMO directory. For example:\n",
- "\n",
- "- `HadISD_data/WMO_080000-099999/netcdf/` (raw NetCDF files)\n",
- "- `HadISD_data/WMO_080000-099999/zarr/` (processed Zarr stores with harmonized time coordinates)\n",
- "\n",
- "This makes it obvious which data is raw and which is ready for fast, parallel analysis."
- ]
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "pyearthtools",
"language": "python",
"name": "python3"
},
@@ -312,7 +3812,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.2"
+ "version": "3.13.5"
}
},
"nbformat": 4,
diff --git a/notebooks/tutorial/HadISD/3_HadISD_XGBoost_Pipeline.ipynb b/notebooks/tutorial/HadISD/3_HadISD_XGBoost_Pipeline.ipynb
index 8d2cf388..fc7dc079 100644
--- a/notebooks/tutorial/HadISD/3_HadISD_XGBoost_Pipeline.ipynb
+++ b/notebooks/tutorial/HadISD/3_HadISD_XGBoost_Pipeline.ipynb
@@ -19,8 +19,9 @@
"outputs": [],
"source": [
"import numpy as np\n",
- "import pandas as pd\n",
- "from pathlib import Path\n",
+ "import matplotlib.pyplot as plt\n",
+ "from xgboost import XGBClassifier\n",
+ "from sklearn.metrics import classification_report, confusion_matrix\n",
"\n",
"import pyearthtools.pipeline as petpipe\n",
"import pyearthtools.data as petdata\n",
@@ -36,10 +37,11 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
+ "# ruff: noqa: F821\n",
"%run Pipeline_Config.ipynb"
]
},
@@ -53,9 +55,17 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total number of stations: 770\n"
+ ]
+ }
+ ],
"source": [
"hadisd = HadISDIndex()\n",
"all_stations = hadisd.get_all_station_ids()\n",
@@ -65,13 +75,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "List of first ten stations: ['501360-99999', '502460-99999', '503530-99999', '504340-99999', '504420-99999', '504680-99999', '505270-99999', '505480-99999', '505570-99999', '505640-99999']\n"
+ ]
+ }
+ ],
"source": [
"# Select first n stations\n",
"first_ten_stations = all_stations_ordered[:10]\n",
- "print(f\"List of first ten stations:\", first_ten_stations)"
+ "print(\"List of first ten stations:\", first_ten_stations)"
]
},
{
@@ -90,16 +108,721 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
Pipeline\n",
+ "\tDescription `pyearthtools.pipeline` Data Pipeline\n",
+ "\n",
+ "\n",
+ "\tInitialisation \n",
+ "\t\t exceptions_to_ignore None\n",
+ "\t\t iterator None\n",
+ "\t\t sampler None\n",
+ "\tSteps \n",
+ "\t\t HadisdDataClass.HadISDIndex {'HadISDIndex': {'station': "['501360-99999', '502460-99999', '503530-99999', '504340-99999', '504420-99999', '504680-99999', '505270-99999', '505480-99999', '505570-99999', '505640-99999']", 'variables': 'None'}}\n",
+ "\t\t values.AddFlaggedObs {'AddFlaggedObs': {'flagged_labels': "['temperatures', 'dewpoints', 'slp', 'stnlp' ... 'precip12_depth', 'precip15_depth', 'precip18_depth', 'precip24_depth']"}}\n",
+ "\t\t values.SetMissingToNaN {'SetMissingToNaN': {'varname_val_map': {'total_cloud_cover': '-999.0', 'low_cloud_cover': '-999.0', 'mid_cloud_cover': '-999.0', 'high_cloud_cover': '-999.0', 'winddirs': '-999.0'}}}\n",
+ "\t\t variables.Drop {'Drop': {'__args': '()', 'variables': "'flagged_obs'"}}\n",
+ "\t\t coordinates.Drop {'Drop': {'__args': '()', 'coordinates': "['latitude', 'longitude', 'elevation']", 'ignore_missing': 'False'}}\n",
+ "\t\t __main__.TrainTestSplit {'TrainTestSplit': {}}\n",
+ "\t\t __main__.FeatureTargetSplit {'FeatureTargetSplit': {}}\n",
+ "\t\t conversion.ToNumpy {'ToNumpy': {'reference_dataset': 'None', 'run_parallel': 'False', 'saved_records': 'None', 'warn': 'True'}}\n",
+ "\t\t __main__.MedianImputePerStation {'MedianImputePerStation': {}}\n",
+ "\t\t __main__.TransposeAndFlattenX {'TransposeAndFlattenX': {}}\n",
+ "\t\t conversion.ToNumpy[1] {'ToNumpy': {'reference_dataset': 'None', 'run_parallel': 'False', 'saved_records': 'None', 'warn': 'True'}}\n",
+ "\t\t __main__.SelectAndFlattenY {'SelectAndFlattenY': {}}\n",
+ "\t\t __main__.FilterNaNSamples {'FilterNaNSamples': {}}\n",
+ "\t\t __main__.FeatureTargetSplit[1] {'FeatureTargetSplit': {}}\n",
+ "\t\t conversion.ToNumpy[2] {'ToNumpy': {'reference_dataset': 'None', 'run_parallel': 'False', 'saved_records': 'None', 'warn': 'True'}}\n",
+ "\t\t __main__.MedianImputePerStation[1] {'MedianImputePerStation': {}}\n",
+ "\t\t __main__.TransposeAndFlattenX[1] {'TransposeAndFlattenX': {}}\n",
+ "\t\t conversion.ToNumpy[3] {'ToNumpy': {'reference_dataset': 'None', 'run_parallel': 'False', 'saved_records': 'None', 'warn': 'True'}}\n",
+ "\t\t __main__.SelectAndFlattenY[1] {'SelectAndFlattenY': {}}\n",
+ "\t\t __main__.FilterNaNSamples[1] {'FilterNaNSamples': {}} Initialisation:
exceptions_to_ignore
None
None
iterator
None
None
sampler
None
None
Steps:
HadisdDataClass.HadISDIndex
{'HadISDIndex': {'station': ['501360-99999', '502460-99999', '503530-99999', '504340-99999', '504420-99999', '504680-99999', '505270-99999', '505480-99999', '505570-99999', '505640-99999'], 'variables': None}}
HadISDIndex : {'station': ['501360-99999', '502460-99999', '503530-99999', '504340-99999', '504420-99999', '504680-99999', '505270-99999', '505480-99999', '505570-99999', '505640-99999'], 'variables': None}
values.AddFlaggedObs
{'AddFlaggedObs': {'flagged_labels': ['temperatures', 'dewpoints', 'slp', 'stnlp', 'windspeeds', 'winddirs', 'total_cloud_cover', 'low_cloud_cover', 'mid_cloud_cover', 'high_cloud_cover', 'precip1_depth', 'precip2_depth', 'precip3_depth', 'precip6_depth', 'precip9_depth', 'precip12_depth', 'precip15_depth', 'precip18_depth', 'precip24_depth']}}
AddFlaggedObs : {'flagged_labels': ['temperatures', 'dewpoints', 'slp', 'stnlp', 'windspeeds', 'winddirs', 'total_cloud_cover', 'low_cloud_cover', 'mid_cloud_cover', 'high_cloud_cover', 'precip1_depth', 'precip2_depth', 'precip3_depth', 'precip6_depth', 'precip9_depth', 'precip12_depth', 'precip15_depth', 'precip18_depth', 'precip24_depth']}
values.SetMissingToNaN
{'SetMissingToNaN': {'varname_val_map': {'total_cloud_cover': -999.0, 'low_cloud_cover': -999.0, 'mid_cloud_cover': -999.0, 'high_cloud_cover': -999.0, 'winddirs': -999.0}}}
SetMissingToNaN : {'varname_val_map': {'total_cloud_cover': -999.0, 'low_cloud_cover': -999.0, 'mid_cloud_cover': -999.0, 'high_cloud_cover': -999.0, 'winddirs': -999.0}}
variables.Drop
{'Drop': {'__args': (), 'variables': 'flagged_obs'}}
Drop : {'__args': (), 'variables': 'flagged_obs'}
coordinates.Drop
{'Drop': {'__args': (), 'coordinates': ['latitude', 'longitude', 'elevation'], 'ignore_missing': False}}
Drop : {'__args': (), 'coordinates': ['latitude', 'longitude', 'elevation'], 'ignore_missing': False}
__main__.TrainTestSplit
{'TrainTestSplit': {}}
TrainTestSplit : {}
__main__.FeatureTargetSplit
{'FeatureTargetSplit': {}}
FeatureTargetSplit : {}
conversion.ToNumpy
{'ToNumpy': {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}}
ToNumpy : {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}
__main__.MedianImputePerStation
{'MedianImputePerStation': {}}
MedianImputePerStation : {}
__main__.TransposeAndFlattenX
{'TransposeAndFlattenX': {}}
TransposeAndFlattenX : {}
conversion.ToNumpy[1]
{'ToNumpy': {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}}
ToNumpy : {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}
__main__.SelectAndFlattenY
{'SelectAndFlattenY': {}}
SelectAndFlattenY : {}
__main__.FilterNaNSamples
{'FilterNaNSamples': {}}
FilterNaNSamples : {}
__main__.FeatureTargetSplit[1]
{'FeatureTargetSplit': {}}
FeatureTargetSplit : {}
conversion.ToNumpy[2]
{'ToNumpy': {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}}
ToNumpy : {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}
__main__.MedianImputePerStation[1]
{'MedianImputePerStation': {}}
MedianImputePerStation : {}
__main__.TransposeAndFlattenX[1]
{'TransposeAndFlattenX': {}}
TransposeAndFlattenX : {}
conversion.ToNumpy[3]
{'ToNumpy': {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}}
ToNumpy : {'reference_dataset': None, 'run_parallel': False, 'saved_records': None, 'warn': True}
__main__.SelectAndFlattenY[1]
{'SelectAndFlattenY': {}}
SelectAndFlattenY : {}
__main__.FilterNaNSamples[1]
{'FilterNaNSamples': {}}
FilterNaNSamples : {}
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "Graph "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ "\n",
+ "\n",
+ "HadISDIndex_8fcd7115-0d04-46ad-930b-ca03e14913a3 \n",
+ " \n",
+ "HadisdDataClass.HadISDIndex \n",
+ " \n",
+ "\n",
+ "\n",
+ "AddFlaggedObs_9b13e396-f451-47e2-bf2a-cd1fde1498a6 \n",
+ "\n",
+ "values.AddFlaggedObs \n",
+ " \n",
+ "\n",
+ "\n",
+ "HadISDIndex_8fcd7115-0d04-46ad-930b-ca03e14913a3->AddFlaggedObs_9b13e396-f451-47e2-bf2a-cd1fde1498a6 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "SetMissingToNaN_24f2948c-1801-416a-9800-63a82673caf7 \n",
+ "\n",
+ "values.SetMissingToNaN \n",
+ " \n",
+ "\n",
+ "\n",
+ "AddFlaggedObs_9b13e396-f451-47e2-bf2a-cd1fde1498a6->SetMissingToNaN_24f2948c-1801-416a-9800-63a82673caf7 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "Drop_3fcf5737-43ba-4619-b446-dd0ca4cd8f4a \n",
+ "\n",
+ "variables.Drop \n",
+ " \n",
+ "\n",
+ "\n",
+ "SetMissingToNaN_24f2948c-1801-416a-9800-63a82673caf7->Drop_3fcf5737-43ba-4619-b446-dd0ca4cd8f4a \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "Drop_3bb14fd5-7ee9-494f-966c-352afdf69348 \n",
+ "\n",
+ "coordinates.Drop \n",
+ " \n",
+ "\n",
+ "\n",
+ "Drop_3fcf5737-43ba-4619-b446-dd0ca4cd8f4a->Drop_3bb14fd5-7ee9-494f-966c-352afdf69348 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "TrainTestSplit_efda0281-ace4-45f9-97b6-c5a90ab7cef1 \n",
+ "\n",
+ "__main__.TrainTestSplit \n",
+ " \n",
+ "\n",
+ "\n",
+ "Drop_3bb14fd5-7ee9-494f-966c-352afdf69348->TrainTestSplit_efda0281-ace4-45f9-97b6-c5a90ab7cef1 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_18774330-4f23-463d-801a-a66de3b568a1 \n",
+ "\n",
+ "__main__.FeatureTargetSplit \n",
+ " \n",
+ "\n",
+ "\n",
+ "TrainTestSplit_efda0281-ace4-45f9-97b6-c5a90ab7cef1->FeatureTargetSplit_18774330-4f23-463d-801a-a66de3b568a1 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_891d48df-c84a-4c0f-b14f-1a5f1707d584 \n",
+ "\n",
+ "__main__.FeatureTargetSplit \n",
+ " \n",
+ "\n",
+ "\n",
+ "TrainTestSplit_efda0281-ace4-45f9-97b6-c5a90ab7cef1->FeatureTargetSplit_891d48df-c84a-4c0f-b14f-1a5f1707d584 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_607494ac-d92e-463b-936a-ce83b20b6187 \n",
+ "\n",
+ "conversion.ToNumpy \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_18774330-4f23-463d-801a-a66de3b568a1->ToNumpy_607494ac-d92e-463b-936a-ce83b20b6187 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_ca59c6d8-f1c6-4b20-9ef2-acc334da1ad5 \n",
+ "\n",
+ "conversion.ToNumpy \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_18774330-4f23-463d-801a-a66de3b568a1->ToNumpy_ca59c6d8-f1c6-4b20-9ef2-acc334da1ad5 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "MedianImputePerStation_bd3a0a4a-f8eb-4f00-9a2c-314c013ac8e0 \n",
+ "\n",
+ "__main__.MedianImputePerStation \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_607494ac-d92e-463b-936a-ce83b20b6187->MedianImputePerStation_bd3a0a4a-f8eb-4f00-9a2c-314c013ac8e0 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "TransposeAndFlattenX_fd90c437-479d-49fe-a223-54429c389000 \n",
+ "\n",
+ "__main__.TransposeAndFlattenX \n",
+ " \n",
+ "\n",
+ "\n",
+ "MedianImputePerStation_bd3a0a4a-f8eb-4f00-9a2c-314c013ac8e0->TransposeAndFlattenX_fd90c437-479d-49fe-a223-54429c389000 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "FilterNaNSamples_82e45d93-8672-4efd-bd48-7e2aaf5fb7b4 \n",
+ "\n",
+ "__main__.FilterNaNSamples \n",
+ " \n",
+ "\n",
+ "\n",
+ "TransposeAndFlattenX_fd90c437-479d-49fe-a223-54429c389000->FilterNaNSamples_82e45d93-8672-4efd-bd48-7e2aaf5fb7b4 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "SelectAndFlattenY_2ad4a151-252a-47cf-8d3d-e09727602866 \n",
+ "\n",
+ "__main__.SelectAndFlattenY \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_ca59c6d8-f1c6-4b20-9ef2-acc334da1ad5->SelectAndFlattenY_2ad4a151-252a-47cf-8d3d-e09727602866 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "SelectAndFlattenY_2ad4a151-252a-47cf-8d3d-e09727602866->FilterNaNSamples_82e45d93-8672-4efd-bd48-7e2aaf5fb7b4 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_036f6dbc-cd85-4f8c-bf7d-23e4a3f4d971 \n",
+ "\n",
+ "conversion.ToNumpy \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_891d48df-c84a-4c0f-b14f-1a5f1707d584->ToNumpy_036f6dbc-cd85-4f8c-bf7d-23e4a3f4d971 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_e4b5574b-2dff-4fe9-8edc-9dc90d46fa50 \n",
+ "\n",
+ "conversion.ToNumpy \n",
+ " \n",
+ "\n",
+ "\n",
+ "FeatureTargetSplit_891d48df-c84a-4c0f-b14f-1a5f1707d584->ToNumpy_e4b5574b-2dff-4fe9-8edc-9dc90d46fa50 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "MedianImputePerStation_876cb65b-1c97-4b0a-855d-607bf960730c \n",
+ "\n",
+ "__main__.MedianImputePerStation \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_036f6dbc-cd85-4f8c-bf7d-23e4a3f4d971->MedianImputePerStation_876cb65b-1c97-4b0a-855d-607bf960730c \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "TransposeAndFlattenX_6bcf84c0-b50d-4f66-b725-a8aa32ce6fd0 \n",
+ "\n",
+ "__main__.TransposeAndFlattenX \n",
+ " \n",
+ "\n",
+ "\n",
+ "MedianImputePerStation_876cb65b-1c97-4b0a-855d-607bf960730c->TransposeAndFlattenX_6bcf84c0-b50d-4f66-b725-a8aa32ce6fd0 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "FilterNaNSamples_c58d7fad-bd15-437d-a663-b7209d458754 \n",
+ "\n",
+ "__main__.FilterNaNSamples \n",
+ " \n",
+ "\n",
+ "\n",
+ "TransposeAndFlattenX_6bcf84c0-b50d-4f66-b725-a8aa32ce6fd0->FilterNaNSamples_c58d7fad-bd15-437d-a663-b7209d458754 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "SelectAndFlattenY_69d7fd56-8e65-4603-9b90-314f0b76a9f5 \n",
+ "\n",
+ "__main__.SelectAndFlattenY \n",
+ " \n",
+ "\n",
+ "\n",
+ "ToNumpy_e4b5574b-2dff-4fe9-8edc-9dc90d46fa50->SelectAndFlattenY_69d7fd56-8e65-4603-9b90-314f0b76a9f5 \n",
+ " \n",
+ " \n",
+ " \n",
+ "\n",
+ "\n",
+ "SelectAndFlattenY_69d7fd56-8e65-4603-9b90-314f0b76a9f5->FilterNaNSamples_c58d7fad-bd15-437d-a663-b7209d458754 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"data_prep_pipe = petpipe.Pipeline(\n",
" petdata.archive.hadisd(station = first_ten_stations), # Use all stations\n",
- " SqueezeStationCoordinates(),\n",
" petdata.transforms.values.AddFlaggedObs(flagged_labels),\n",
" petdata.transforms.values.SetMissingToNaN(varname_val_map),\n",
" petdata.transforms.variables.Drop(\"flagged_obs\"),\n",
+ " petdata.transforms.coordinates.Drop(['latitude', 'longitude', 'elevation']),\n",
" TrainTestSplit(test_size=0.2, random_state=42, dim='time'), # returns (ds_train, ds_test)\n",
" (\n",
" # branch 1: train\n",
@@ -114,7 +837,7 @@
" ),\n",
" # branch y_train\n",
" (\n",
- " petpipe.operations.xarray.conversion.ToNumpy(),\n",
+ " petpipe.operations.xarray.conversion.ToNumpy(),\n",
" SelectAndFlattenY(test_number=33),\n",
" ),\n",
" 'map'\n",
@@ -148,9 +871,18 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/joelmiller/Projects/Python/PyEarthTools_Fork/PyEarthTools/packages/data/src/pyearthtools/data/indexes/_indexes.py:487: IndexWarning: Could not find time in dataset to select on. Petdt('1969-01-01T00')\n",
+ " warnings.warn(\n"
+ ]
+ }
+ ],
"source": [
"# Select data based on date\n",
"(X_train, y_train),(X_test, y_test) = data_prep_pipe[\"1969-01-01T00\"] # Curretnly we have to select a date outside of the date range to select the entire dataset (fix coming soon)"
@@ -158,9 +890,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "X_train shape: (920121, 22)\n",
+ "y_train shape: (920121,)\n",
+ "X_test shape: (232093, 22)\n",
+ "y_test shape: (232093,)\n"
+ ]
+ }
+ ],
"source": [
"# Print the shapes of the resulting arrays\n",
"print(f\"X_train shape: {X_train.shape}\")\n",
@@ -178,12 +921,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/joelmiller/miniconda3/envs/pyearthtools/lib/python3.13/site-packages/xgboost/training.py:183: UserWarning: [17:41:03] WARNING: /Users/runner/work/xgboost/xgboost/src/learner.cc:738: \n",
+ "Parameters: { \"use_label_encoder\" } are not used.\n",
+ "\n",
+ " bst.update(dtrain, iteration=i, fobj=obj)\n"
+ ]
+ }
+ ],
"source": [
- "from xgboost import XGBClassifier\n",
- "\n",
"# Calculate scale_pos_weight for class imbalance\n",
"scale_pos_weight = (len(y_train) - np.sum(y_train)) / np.sum(y_train)\n",
"#scale_pos_weight = num_zeros / num_ones \n",
@@ -213,25 +965,71 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " precision recall f1-score support\n",
+ "\n",
+ " 0.0 0.99 0.97 0.98 223592\n",
+ " 1.0 0.53 0.76 0.63 8501\n",
+ "\n",
+ " accuracy 0.97 232093\n",
+ " macro avg 0.76 0.87 0.80 232093\n",
+ "weighted avg 0.97 0.97 0.97 232093\n",
+ "\n",
+ "[[217897 5695]\n",
+ " [ 2013 6488]]\n"
+ ]
+ }
+ ],
"source": [
"# compare predictions with true labels\n",
- "from sklearn.metrics import classification_report, confusion_matrix\n",
"print(classification_report(y_test, y_pred))\n",
- "print(confusion_matrix(y_test, y_pred)) \n",
- "\n",
- "# Plot confusion matrix\n",
- "import matplotlib.pyplot as plt\n",
- "import seaborn as sns\n",
+ "print(confusion_matrix(y_test, y_pred)) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot confusion matrix using only matplotlib\n",
"def plot_confusion_matrix(cm, classes, title='Confusion Matrix', cmap=plt.cm.Blues):\n",
" plt.figure(figsize=(8, 6))\n",
- " sns.heatmap(cm, annot=True, fmt='d', cmap=cmap,\n",
- " xticklabels=classes, yticklabels=classes)\n",
+ " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
+ " plt.colorbar()\n",
+ " tick_marks = np.arange(len(classes))\n",
+ " plt.xticks(tick_marks, classes)\n",
+ " plt.yticks(tick_marks, classes)\n",
+ "\n",
+ " # Annotate cells with counts\n",
+ " thresh = cm.max() / 2.\n",
+ " for i in range(cm.shape[0]):\n",
+ " for j in range(cm.shape[1]):\n",
+ " plt.text(j, i, format(cm[i, j], 'd'),\n",
+ " ha=\"center\", va=\"center\",\n",
+ " color=\"white\" if cm[i, j] > thresh else \"black\")\n",
+ "\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')\n",
+ " plt.tight_layout()\n",
" plt.show()\n",
"\n",
"cm = confusion_matrix(y_test, y_pred)\n",
@@ -241,7 +1039,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "pyearthtools",
"language": "python",
"name": "python3"
},
@@ -255,7 +1053,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.2"
+ "version": "3.13.5"
}
},
"nbformat": 4,
diff --git a/notebooks/tutorial/HadISD/Data_Config.ipynb b/notebooks/tutorial/HadISD/Data_Config.ipynb
index db28f31b..ad00c678 100644
--- a/notebooks/tutorial/HadISD/Data_Config.ipynb
+++ b/notebooks/tutorial/HadISD/Data_Config.ipynb
@@ -57,27 +57,42 @@
"metadata": {},
"outputs": [],
"source": [
- "# A sample list of WMO number ranges. Users can find more at the official HadISD download page.\n",
+ "# For any station ranges you don't want to download, you can comment them out here\n",
"wmo_id_ranges = [\n",
- " \"000000-029999\",\n",
- " \"080000-099999\",\n",
- " \"200000-249999\",\n",
- " \"720000-721999\",\n",
+ " #\"000000-029999\",\n",
+ " #\"030000-049999\",\n",
+ " #\"050000-079999\",\n",
+ " #\"080000-099999\",\n",
+ " #\"100000-149999\",\n",
+ " #\"150000-199999\",\n",
+ " #\"200000-249999\",\n",
+ " #\"250000-299999\",\n",
+ " #\"300000-349999\",\n",
+ " #\"350000-399999\",\n",
+ " #\"400000-449999\",\n",
+ " #\"450000-499999\",\n",
+ " \"500000-549999\",\n",
+ " #\"550000-599999\",\n",
+ " #\"600000-649999\",\n",
+ " #\"650000-699999\",\n",
+ " #\"700000-709999\",\n",
+ " #\"710000-714999\",\n",
+ " #\"715000-719999\",\n",
+ " #\"720000-721999\",\n",
+ " \"722000-722999\",\n",
+ " #\"723000-723999\",\n",
+ " #\"724000-724999\",\n",
+ " #\"725000-725999\",\n",
+ " #\"726000-726999\",\n",
+ " #\"727000-729999\",\n",
+ " #\"730000-799999\",\n",
+ " \"800000-849999\",\n",
+ " #\"850000-899999\",\n",
+ " #\"900000-949999\",\n",
+ " #\"950000-999999\",\n",
"]"
]
},
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "35617ad2",
- "metadata": {},
- "outputs": [],
- "source": [
- "\n",
- "# User sets the WMO number range to download\n",
- "wmo_id_range = \"080000-099999\" # Change this to the desired WMO range, either from the sample list or from the HadISD page."
- ]
- },
{
"cell_type": "markdown",
"id": "7aec321a",
@@ -97,15 +112,15 @@
"# Set the date range to reindex the time coordinate\n",
"DATE_RANGE = (\"1970-01-01T00\", \"2023-12-31T23\")\n",
"# Set the input directory to the folder with raw NetCDFs\n",
- "input_dir = download_dir / f\"WMO_{wmo_id_range}\" / \"netcdf\"\n",
+ "input_dir = download_dir / \"netcdf\"\n",
"# Set the Zarr output directory to a sibling folder under the same WMO directory\n",
- "zarr_output_dir = download_dir / f\"WMO_{wmo_id_range}\" / \"zarr\""
+ "zarr_output_dir = download_dir / \"zarr\""
]
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "pet_tutorial",
"language": "python",
"name": "python3"
},
@@ -119,7 +134,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.2"
+ "version": "3.11.11"
}
},
"nbformat": 4,
diff --git a/notebooks/tutorial/HadISD/HadISD_QC_Exploration.ipynb b/notebooks/tutorial/HadISD/HadISD_QC_Exploration.ipynb
index c26523fa..0b3694cf 100644
--- a/notebooks/tutorial/HadISD/HadISD_QC_Exploration.ipynb
+++ b/notebooks/tutorial/HadISD/HadISD_QC_Exploration.ipynb
@@ -15,10 +15,7 @@
"metadata": {},
"outputs": [],
"source": [
- "import datetime\n",
"import numpy as np\n",
- "import pandas as pd\n",
- "from pathlib import Path\n",
"\n",
"import pyearthtools.pipeline as petpipe\n",
"import pyearthtools.data as petdata\n",
@@ -27,12 +24,13 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": null,
"id": "4a7da841",
"metadata": {},
"outputs": [],
"source": [
- "# %run HadISD_config.ipynb"
+ "# ruff: noqa: F821\n",
+ "%run Pipeline_Config.ipynb"
]
},
{
@@ -89,17 +87,7 @@
"metadata": {},
"outputs": [],
"source": [
- "y = data_prep_pipe[\"1969-01-01T07\"]\n",
- "y"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "3d3819b9",
- "metadata": {},
- "outputs": [],
- "source": [
+ "x = data_prep_pipe[\"1969-01-01T07\"]\n",
"x"
]
},
@@ -110,7 +98,7 @@
"metadata": {},
"outputs": [],
"source": [
- "qc = y[\"quality_control_flags\"].values\n"
+ "qc = x[\"quality_control_flags\"].values\n"
]
},
{
@@ -214,21 +202,13 @@
"# for qc, test 12, time 826, station 0, print the value of the test\n",
"print(\"QC value for test 12, time 826, station 0:\", qc[0, 826, 12])"
]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "8c8f1bc9",
- "metadata": {},
- "outputs": [],
- "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "pyearthtools",
"language": "python",
- "name": "python3"
+ "name": "pyearthtools"
},
"language_info": {
"codemirror_mode": {
@@ -240,7 +220,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.13.2"
+ "version": "3.13.5"
}
},
"nbformat": 4,
diff --git a/notebooks/tutorial/HadISD/Pipeline_Config.ipynb b/notebooks/tutorial/HadISD/Pipeline_Config.ipynb
index e0dcc486..4b5298b3 100644
--- a/notebooks/tutorial/HadISD/Pipeline_Config.ipynb
+++ b/notebooks/tutorial/HadISD/Pipeline_Config.ipynb
@@ -2,12 +2,12 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"id": "1abab3c3",
"metadata": {},
"outputs": [],
"source": [
- "# import pyearthtools.pipeline as petpipe"
+ "import pyearthtools.pipeline as petpipe"
]
},
{
@@ -15,7 +15,7 @@
"id": "2307aa00",
"metadata": {},
"source": [
- "# Lists and Dictionaries Required For Sustom Pipeline Steps"
+ "# Lists and Dictionaries Required For Custom Pipeline Steps"
]
},
{
@@ -62,6 +62,16 @@
"source": [
"# Custom operation to remove redundent coordinates\n",
"class SqueezeStationCoordinates(petpipe.Operation):\n",
+ " \"\"\"\n",
+ " Squeeze singleton dimensions from specified station-based coordinates in an xarray.Dataset.\n",
+ "\n",
+ " This operation is useful for removing unnecessary singleton dimensions (e.g., shape (n, 1))\n",
+ " from coordinates like latitude, longitude, and elevation, ensuring they are 1D and indexed\n",
+ " by 'station'.\n",
+ "\n",
+ " Args:\n",
+ " coords (tuple of str): Names of coordinates to squeeze. Defaults to (\"latitude\", \"longitude\", \"elevation\").\n",
+ " \"\"\"\n",
" def __init__(self, coords=(\"latitude\", \"longitude\", \"elevation\")):\n",
" super().__init__()\n",
" self.coords = coords\n",
@@ -74,7 +84,7 @@
" # Undo function added otherwise pyearthtools will complain\n",
" def undo_func(self, ds):\n",
" # No undo operation needed for this operation\n",
- " return ds"
+ " return ds\n"
]
},
{
@@ -314,8 +324,6 @@
"metadata": {},
"outputs": [],
"source": [
- "import xarray as xr\n",
- "import numpy as np\n",
"from pyearthtools.data.transforms.values import AddFlaggedObs\n",
"\n",
"def test_add_flagged_obs():\n",
diff --git a/packages/data/src/pyearthtools/data/indexes/_indexes.py b/packages/data/src/pyearthtools/data/indexes/_indexes.py
index d08abd03..b4c358ff 100644
--- a/packages/data/src/pyearthtools/data/indexes/_indexes.py
+++ b/packages/data/src/pyearthtools/data/indexes/_indexes.py
@@ -66,7 +66,7 @@
LOG = logging.getLogger("pyearthtools.data")
-
+
class Index(CallRedirectMixin, CatalogMixin, metaclass=ABCMeta):
"""
Base Level Index to define the structure
diff --git a/packages/data/src/pyearthtools/data/indexes/utilities/fileload.py b/packages/data/src/pyearthtools/data/indexes/utilities/fileload.py
index 2ed6f9b9..eee5cf2f 100644
--- a/packages/data/src/pyearthtools/data/indexes/utilities/fileload.py
+++ b/packages/data/src/pyearthtools/data/indexes/utilities/fileload.py
@@ -83,7 +83,7 @@ def get_config(mf: bool = False):
return xr.open_mfdataset(
filter_files(location),
decode_timedelta=True, # TODO: should we raise a warning? It seems to be required for almost all our data.
- compat='override',
+ compat="override",
**get_config(True),
)
diff --git a/packages/data/src/pyearthtools/data/transforms/variables.py b/packages/data/src/pyearthtools/data/transforms/variables.py
index 93d0117e..fec0253f 100644
--- a/packages/data/src/pyearthtools/data/transforms/variables.py
+++ b/packages/data/src/pyearthtools/data/transforms/variables.py
@@ -87,11 +87,20 @@ def apply(self, dataset: xr.Dataset) -> xr.Dataset:
if self._variables is None:
return dataset
- var_included = set(dataset.data_vars).difference(set(self._variables))
+ # 3/9/2025 - old logic was replaced with a simple drop of the variables
+ # A new issue will be raised to review how coordinate protection should
+ # work because people need a way to drop coords when needed.
- if not var_included:
- return dataset
- return dataset[var_included]
+ # Calculate the difference between the data variables on the dataset
+ # and the variables requested for drop. This leaves coordinate variables
+ # unaffected
+ # var_included = set(dataset.data_vars).difference(set(self._variables))
+
+ # if not var_included:
+ # return dataset
+ # return dataset[var_included]
+
+ return dataset.drop_vars(self._variables)
class Select(Transform):
diff --git a/packages/data/tests/indexes/test_indexes.py b/packages/data/tests/indexes/test_indexes.py
index b8554205..14509f93 100644
--- a/packages/data/tests/indexes/test_indexes.py
+++ b/packages/data/tests/indexes/test_indexes.py
@@ -7,6 +7,7 @@
from pyearthtools.data.exceptions import DataNotFoundError
+
def test_Index(monkeypatch):
monkeypatch.setattr("pyearthtools.data.indexes.Index.__abstractmethods__", set())
diff --git a/packages/nci_site_archive/tests/test_radar_proj.py b/packages/nci_site_archive/tests/test_radar_proj.py
index 6a75f080..545323f2 100644
--- a/packages/nci_site_archive/tests/test_radar_proj.py
+++ b/packages/nci_site_archive/tests/test_radar_proj.py
@@ -24,13 +24,18 @@
import platform
import xarray as xr
-from site_archive_nci._Rainfields3 import (
- ErrorRadarProj,
- ProjErrorStatus,
- ProjKind,
- RadarProj,
- WarnRadarProj,
-)
+try:
+ from site_archive_nci._Rainfields3 import (
+ ErrorRadarProj,
+ ProjErrorStatus,
+ ProjKind,
+ RadarProj,
+ WarnRadarProj,
+ )
+
+except ImportError:
+ pytest.skip(allow_module_level=True)
+
PYPROJ_SAMPLE = pyproj.Proj("+proj=aea +lat_1=-36 +lat_2=-18 +lon_0=132 +units=m")
EXPECTED_KEYS = [
diff --git a/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/join.py b/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/join.py
index c4146509..b0e83742 100644
--- a/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/join.py
+++ b/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/join.py
@@ -46,15 +46,15 @@ def unjoin(self, sample: Any) -> tuple:
class LatLonInterpolate(Joiner):
- '''
+ """
Makes additional assumptions about how interpolation should work and
how the data is structured. In this case, interpolation is primarily
- expected to occur according to latitude and longitude, performing
+ expected to occur according to latitude and longitude, performing
no broadcasting, and iterating over other dimensions instead.
It assumed the dimensions 'latitude', 'longitude', 'time', and 'level' will
be present. 'lat' or 'lon' may also be used for convenience.
- '''
+ """
_override_interface = "Serial"
@@ -78,15 +78,15 @@ def __init__(
self._merge_kwargs = merge_kwargs
def raise_if_dimensions_wrong(self, dataset):
- '''
+ """
Raise exceptions if the supplied dataset does not meet requirements
- '''
+ """
- if not hasattr(self, 'required_dims'):
- if 'lat' in dataset.coords:
- self.required_dims = ['lat', 'lon']
+ if not hasattr(self, "required_dims"):
+ if "lat" in dataset.coords:
+ self.required_dims = ["lat", "lon"]
else:
- self.required_dims = ['latitude', 'longitude']
+ self.required_dims = ["latitude", "longitude"]
present_in_coords = [d in dataset.coords for d in self.required_dims]
if not all(present_in_coords):
@@ -100,12 +100,12 @@ def raise_if_dimensions_wrong(self, dataset):
# raise ValueError(f"Cannot perform a GeoMergePancake on the data variables {data_var} without {self.required_dims} as a dimension")
def maybe_interp(self, ds):
- '''
+ """
This method will only interpolate the datasets if the latitudes and longitudes don't already
match. This means, for example, you can't use it to interpolate between time steps
or vertical levels alone. The primary purpose here is lat/lon interpolation, not general
model interpolation or arbitrarily-dimensioned data interpolation.
- '''
+ """
ds_coords_ok = [ds[coord].equals(self.reference_dataset[coord]) for coord in self.required_dims]
@@ -115,7 +115,6 @@ def maybe_interp(self, ds):
return ds
-
def _join_two_datasets(self, sample_a: xr.Dataset, sample_b: xr.Dataset) -> xr.Dataset:
"""
Used to reduce a sequence of joinable items. Only called by the public interface join method.
@@ -144,7 +143,7 @@ def join(self, sample: tuple[Union[xr.Dataset, xr.DataArray], ...]) -> xr.Datase
return merged
def unjoin(self, sample: Any) -> tuple:
- raise NotImplementedError("Not Implemented")
+ raise NotImplementedError("Not Implemented")
class GeospatialTimeSeriesMerge(Joiner):
diff --git a/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/normalisation.py b/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/normalisation.py
index 3496dd79..68fe514f 100644
--- a/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/normalisation.py
+++ b/packages/pipeline/src/pyearthtools/pipeline/operations/xarray/normalisation.py
@@ -157,10 +157,10 @@ class Deviation(xarrayNormalisation):
"""Deviation Normalisation"""
def __init__(
- self,
- mean: FILE | xr.Dataset | xr.DataArray | float,
+ self,
+ mean: FILE | xr.Dataset | xr.DataArray | float,
deviation: FILE | xr.Dataset | xr.DataArray | float,
- debug=False
+ debug=False,
):
"""
Each argument take take a Dataset, DataArray, float or file object.
@@ -173,7 +173,9 @@ def __init__(
self.record_initialisation()
if debug:
- import pdb; pdb.set_trace()
+ import pdb
+
+ pdb.set_trace()
if isinstance(mean, xr.Dataset):
self.mean = mean
@@ -187,7 +189,7 @@ def __init__(
if isinstance(deviation, xr.Dataset):
self.deviation = deviation
elif isinstance(deviation, xr.DataArray):
- self.deviation = deviation
+ self.deviation = deviation
elif isinstance(deviation, float):
self.deviation = deviation
else:
diff --git a/packages/tutorial/src/pyearthtools/tutorial/HadisdDataClass.py b/packages/tutorial/src/pyearthtools/tutorial/HadisdDataClass.py
index 1fba6cf9..0a5921ba 100644
--- a/packages/tutorial/src/pyearthtools/tutorial/HadisdDataClass.py
+++ b/packages/tutorial/src/pyearthtools/tutorial/HadisdDataClass.py
@@ -136,62 +136,32 @@ def __init__(
self.record_initialisation()
- # def get_all_station_ids(self, root_directory: Path | str) -> list[str]:
- # """
- # Retrieve all station IDs by scanning the dataset directory.
-
- # Args:
- # root_directory (Path | str): The root directory containing station data.
-
- # Returns:
- # list[str]: A list of all station IDs.
- # """
- # root_directory = Path(root_directory)
- # station_ids = []
- # for folder in cached_iterdir(root_directory):
- # if folder.is_dir():
- # for file in cached_iterdir(folder):
- # if file.suffix == ".nc": # Check for NetCDF files
- # # Extract the station ID from the filename
- # station_id = file.stem.split("_")[-1] # Assuming station ID is the last part of the filename
- # station_ids.append(station_id)
- # return station_ids
-
def get_all_station_ids(self, root_directory: Path | str = None) -> list[str]:
"""
- Retrieve all station IDs by scanning the dataset directory.
+ Retrieve all station IDs by scanning the Zarr directory.
Args:
- root_directory (Path | str, optional): The root directory containing station data.
- Defaults to HADISD_HOME/netcdf.
+ root_directory (Path | str, optional): The directory containing Zarr files.
+ Defaults to HADISD_HOME/zarr.
Returns:
list[str]: A list of all station IDs.
"""
-
HADISD_HOME = self.ROOT_DIRECTORIES["hadisd"]
if root_directory is None:
- # Search all WMO folders for netcdf subfolders
- wmo_folders = [f for f in Path(HADISD_HOME).iterdir() if f.is_dir() and f.name.startswith("WMO_")]
- station_ids = []
- for wmo_folder in wmo_folders:
- netcdf_dir = wmo_folder / "netcdf"
- if cached_exists(netcdf_dir):
- for file in cached_iterdir(netcdf_dir):
- if file.suffix == ".nc":
- station_id = file.stem.split("_")[-1]
- station_ids.append(station_id)
- return station_ids
+ zarr_dir = Path(HADISD_HOME) / "zarr"
else:
- root_directory = Path(root_directory)
- if not cached_exists(root_directory):
- raise DataNotFoundError(f"Root directory does not exist: {root_directory}")
- station_ids = []
- for file in cached_iterdir(root_directory):
- if file.suffix == ".nc":
- station_id = file.stem.split("_")[-1]
- station_ids.append(station_id)
- return station_ids
+ zarr_dir = Path(root_directory)
+
+ if not cached_exists(zarr_dir):
+ raise DataNotFoundError(f"Zarr directory does not exist: {zarr_dir}")
+
+ station_ids = []
+ for file in cached_iterdir(zarr_dir):
+ if file.suffix == ".zarr":
+ station_id = file.stem.split("_")[-1]
+ station_ids.append(station_id)
+ return station_ids
def filesystem(self, *args, date_range=("1970-01-01T00", "2023-12-31T23"), **kwargs) -> dict[str, Path]:
"""
@@ -222,66 +192,18 @@ def filesystem(self, *args, date_range=("1970-01-01T00", "2023-12-31T23"), **kwa
if not isinstance(station_ids, list) or not all(isinstance(sid, str) for sid in station_ids):
raise TypeError(f"Expected station_ids to be a str or list[str], but got: {type(station_ids)}")
- # Define the station ranges and corresponding folders
- STATION_RANGES = [
- (0, 29999, "WMO_000000-029999"),
- (30000, 49999, "WMO_030000-049999"),
- (50000, 79999, "WMO_050000-079999"),
- (80000, 99999, "WMO_080000-099999"),
- (100000, 149999, "WMO_100000-149999"),
- (150000, 199999, "WMO_150000-199999"),
- (200000, 249999, "WMO_200000-249999"),
- (250000, 299999, "WMO_250000-299999"),
- (300000, 349999, "WMO_300000-349999"),
- (350000, 399999, "WMO_350000-399999"),
- (400000, 449999, "WMO_400000-449999"),
- (450000, 499999, "WMO_450000-499999"),
- (500000, 549999, "WMO_500000-549999"),
- (550000, 599999, "WMO_550000-599999"),
- (600000, 649999, "WMO_600000-649999"),
- (650000, 699999, "WMO_650000-699999"),
- (700000, 709999, "WMO_700000-709999"),
- (710000, 714999, "WMO_710000-714999"),
- (715000, 719999, "WMO_715000-719999"),
- (720000, 721999, "WMO_720000-721999"),
- (722000, 722999, "WMO_722000-722999"),
- (723000, 723999, "WMO_723000-723999"),
- (724000, 724999, "WMO_724000-724999"),
- (725000, 725999, "WMO_725000-725999"),
- (726000, 726999, "WMO_726000-726999"),
- (727000, 729999, "WMO_727000-729999"),
- (730000, 799999, "WMO_730000-799999"),
- (800000, 849999, "WMO_800000-849999"),
- (850000, 899999, "WMO_850000-899999"),
- (900000, 949999, "WMO_900000-949999"),
- (950000, 999999, "WMO_950000-999999"),
- ]
-
# Map station IDs to their file paths
paths = {}
for station_id in station_ids:
- wmo_number = station_id[:6] # Extract the first 6 digits of the station ID
- station_numeric = int(wmo_number) # Convert the WMO number to an integer
-
- # Find the parent folder dynamically
- parent_folder = None
- for start, end, folder in STATION_RANGES:
- if start <= station_numeric <= end:
- parent_folder = folder
- break
-
- if parent_folder is None:
- raise ValueError(f"Station ID {station_id} does not fall within any defined range.")
-
- # Construct the expected filename
- date_range = "19310101-20240101" # Hardcoded for now; adjust if dataset is updated
+ date_range_str = "19310101-20240101" # Hardcoded for now; adjust if dataset is updated
version = "hadisd.3.4.0.2023f"
- filename_nc = f"{version}_{date_range}_{station_id}.nc"
- filename_zarr = f"{version}_{date_range}_{station_id}.zarr"
+ filename_zarr = f"{version}_{date_range_str}_{station_id}.zarr"
+
+ # filename_nc = f"{version}_{date_range_str}_{station_id}.nc" # Uncomment to test with netcdf
+ # file_path_nc = Path(HADISD_HOME) / "netcdf" / filename_nc # Uncomment to test with netcdf
# Construct the full path
- _file_path_nc = Path(HADISD_HOME) / parent_folder / "netcdf" / filename_nc
- file_path_zarr = Path(HADISD_HOME) / parent_folder / "zarr" / filename_zarr
+ file_path_zarr = Path(HADISD_HOME) / "zarr" / filename_zarr
# Check if the file exists (comment out if testing with single netcdf)
if not file_path_zarr.exists():
@@ -290,6 +212,7 @@ def filesystem(self, *args, date_range=("1970-01-01T00", "2023-12-31T23"), **kwa
# Add the file path to the dictionary
paths[station_id] = (
file_path_zarr # Change to file_path_zarr to test with zarr files or remove "_zarr" to test with netcdf files
+ # file_path_nc # Uncomment to test with netcdf files
)
return paths
diff --git a/packages/utils/src/pyearthtools/utils/data/converter.py b/packages/utils/src/pyearthtools/utils/data/converter.py
index a8f2e0c2..e8bac483 100644
--- a/packages/utils/src/pyearthtools/utils/data/converter.py
+++ b/packages/utils/src/pyearthtools/utils/data/converter.py
@@ -158,9 +158,16 @@ def _distill_dataset(self, dataset: XR_OBJECT) -> dict[DISTILL_KEYS, Any]:
try:
dims[use_shape.index(size)] = coord
except ValueError as e:
- raise RuntimeError(
- "Cannot record coordinate, currently converter can only handle datasets with variables of the same dimensions."
- ) from e
+
+ msg = (
+ f"Cannot record coordinate '{coord}', currently the conversion can only handle data variables with "
+ f"the same dimensionality as the dataset coords {list(dataset.coords)}. "
+ f"Data variable {variables[0]} with dimensions of {dataset[variables[0]].dims} was used to estimate the shape required. "
+ f"You may need to drop unused coordinates, drop mismatching data variables, or broadcast your data variables onto the "
+ "coordinates of the dataset yourself as the proper approach is user-defined."
+ )
+
+ raise RuntimeError(msg) from e
use_shape[use_shape.index(size)] = 1e10
while None in dims: