Sample met data for testing ModVege#
Data used: Met Eireann daily data for Valentia Observatory, Co. Kerry (https://data.gov.ie/dataset/valentia-observatory-daily-data)
import os
from datetime import datetime, timezone
import pandas as pd
import pooch
DATA_DRIVE = "data"
URL = "https://cli.fusio.net/cli/climate_data/webdata/dly2275.csv"
SUB_DIR = os.path.join(DATA_DRIVE, "met", "MetEireann")
KNOWN_HASH = None
os.makedirs(SUB_DIR, exist_ok=True)
FILE_NAME = "dly2275.csv"
# download data if it doesn't exist
if not os.path.isfile(os.path.join(SUB_DIR, FILE_NAME)):
pooch.retrieve(
url=URL, known_hash=KNOWN_HASH, fname=FILE_NAME, path=SUB_DIR
)
with open(
os.path.join(SUB_DIR, f"{FILE_NAME[:-4]}.txt"), "w", encoding="utf-8"
) as outfile:
outfile.write(
f"Data downloaded on: {datetime.now(tz=timezone.utc)}\n"
f"Download URL: {URL}"
)
val = pd.read_csv(
os.path.join(SUB_DIR, FILE_NAME), skiprows=24, parse_dates=["date"]
)
val.head()
| date | ind | maxtp | ind.1 | mintp | igmin | gmin | ind.2 | rain | cbl | ... | ind.5 | hg | sun | glorad | soil | pe | evap | smd_wd | smd_md | smd_pd | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1942-01-01 | 0 | 11.1 | 0 | 9.8 | 0.0 | 8.0 | 0 | 1.7 | 1026.2 | ... | 0 | 32.0 | NaN | NaN | NaN | 0.9 | 1.1 | NaN | NaN | NaN |
| 1 | 1942-01-02 | 0 | 11.6 | 0 | 10.0 | 0.0 | 8.6 | 0 | 4.6 | 1023.8 | ... | 0 | 33.0 | NaN | NaN | NaN | 0.6 | 0.8 | NaN | NaN | NaN |
| 2 | 1942-01-03 | 0 | 12.1 | 0 | 9.8 | 0.0 | 9.4 | 0 | 16.7 | 1014.5 | ... | 0 | 39.0 | NaN | NaN | NaN | 0.3 | 0.5 | NaN | NaN | NaN |
| 3 | 1942-01-04 | 0 | 9.9 | 0 | 4.0 | 0.0 | 6.7 | 0 | 3.5 | 1012.0 | ... | 0 | 37.0 | NaN | NaN | NaN | 0.5 | 0.7 | NaN | NaN | NaN |
| 4 | 1942-01-05 | 0 | 4.9 | 0 | 1.4 | 0.0 | 0.4 | 0 | 0.0 | 1022.5 | ... | 0 | 45.0 | NaN | NaN | NaN | 0.9 | 1.1 | NaN | NaN | NaN |
5 rows × 25 columns
# filter data for 2019 - 2021
val = val[(val["date"].dt.year >= 2019) & (val["date"].dt.year <= 2021)]
val.sort_values(by=["date"], inplace=True)
val.reset_index(inplace=True)
# keep only min and max air temps, rainfall, global radiation, PET
val = val[["date", "maxtp", "mintp", "rain", "glorad", "pe"]]
val.head()
| date | maxtp | mintp | rain | glorad | pe | |
|---|---|---|---|---|---|---|
| 0 | 2019-01-01 | 11.4 | 8.3 | 0.0 | 272.0 | 0.3 |
| 1 | 2019-01-02 | 10.8 | 7.9 | 0.1 | 299.0 | 0.5 |
| 2 | 2019-01-03 | 10.0 | 7.9 | 0.9 | 171.0 | 0.8 |
| 3 | 2019-01-04 | 9.2 | 7.5 | 0.0 | 207.0 | 1.0 |
| 4 | 2019-01-05 | 10.8 | 8.3 | 0.0 | 122.0 | 0.9 |
# calculate mean air temperature
val["T"] = val[["maxtp", "mintp"]].mean(axis=1)
# convert global radiation units to MJ m-2 from J cm-2
# see Allen et al. (1998)
val["RG"] = val["glorad"].astype(float) / 100.0
# convert global radiation to PAR
# see Papaioannou et al. (1993)
val["PAR"] = val["RG"] * 0.473
# rainfall
val["PP"] = val["rain"].astype(float)
# potential evapotranspiration
val["PET"] = val["pe"].astype(float)
val["time"] = val["date"]
# keep only relevant columns
val = val[["time", "T", "PAR", "PET", "PP", "RG"]]
val.head()
| time | T | PAR | PET | PP | RG | |
|---|---|---|---|---|---|---|
| 0 | 2019-01-01 | 9.85 | 1.28656 | 0.3 | 0.0 | 2.72 |
| 1 | 2019-01-02 | 9.35 | 1.41427 | 0.5 | 0.1 | 2.99 |
| 2 | 2019-01-03 | 8.95 | 0.80883 | 0.8 | 0.9 | 1.71 |
| 3 | 2019-01-04 | 8.35 | 0.97911 | 1.0 | 0.0 | 2.07 |
| 4 | 2019-01-05 | 9.55 | 0.57706 | 0.9 | 0.0 | 1.22 |
val.tail()
| time | T | PAR | PET | PP | RG | |
|---|---|---|---|---|---|---|
| 1091 | 2021-12-27 | 9.60 | 1.71699 | 0.3 | 0.9 | 3.63 |
| 1092 | 2021-12-28 | 9.65 | 0.70004 | 0.6 | 7.7 | 1.48 |
| 1093 | 2021-12-29 | 12.60 | 1.19669 | 0.5 | 9.9 | 2.53 |
| 1094 | 2021-12-30 | 12.70 | 0.30272 | 0.3 | 22.2 | 0.64 |
| 1095 | 2021-12-31 | 13.20 | 0.44462 | 0.7 | 2.0 | 0.94 |
# save as a CSV file
val.to_csv(os.path.join(SUB_DIR, "valentia.csv"), index=False)