Source code for huracanpy._data._load
from . import _csv
from . import _TRACK
from . import _netcdf
from . import ibtracs
from huracanpy import utils
[docs]
def load(
filename=None,
tracker=None,
add_info=False,
ibtracs_online=False,
ibtracs_subset="ALL",
ibtracs_clean=True,
**kwargs,
):
"""
Parameters
----------
filename : str
tracker : str
add_info : bool, default=False
ibtracs_online : bool, default=False
* False: Use a small subset of the IBTrACS data included in this package
* True: Download the IBTrACS data
ibtracs_subset : str, default="ALL"
IBTrACS subset. Can be one of
* ACTIVE: TCs currently active
* ALL: Entire IBTrACS database
* Specific basins: EP, NA, NI, SA, SI, SP, WP
* last3years: self-explanatory
* since1980: Entire IBTrACS database since 1980 (advent of satellite era, considered reliable from then on)
ibtracs_clean : bool, default=True
If downloading IBTrACS data, this parameter says whether to delete the
downloaded file after loading it into memory.
**kwargs
Returns
-------
xarray.Dataset
"""
# If tracker is not given, try to derive the right function from the file extension
if tracker is None:
if filename.split(".")[-1] == "csv":
data = _csv.load(filename)
elif filename.split(".")[-1] == "nc":
data = _netcdf.load(filename, **kwargs)
else:
raise ValueError(f"{tracker} is set to None and file type is not detected")
# If tracker is given, use the relevant function
else:
if tracker.lower() == "track":
data = _TRACK.load(filename, **kwargs)
elif tracker.lower() in ["csv", "te", "tempestextremes", "uz"]:
data = _csv.load(filename)
elif tracker.lower() == "ibtracs":
if ibtracs_online:
if filename is None:
filename = "ibtracs.csv"
with ibtracs.online(ibtracs_subset, filename, ibtracs_clean) as f:
data = _csv.load(
f,
read_csv_kws=dict(
header=0,
skiprows=[1],
na_values=["", " "],
converters={
"SID": str,
"SEASON": int,
"BASIN": str,
"SUBBASIN": str,
"LON": float,
"LAT": float,
},
),
)
else:
data = _csv.load(ibtracs.offline(ibtracs_subset))
else:
raise ValueError(f"Tracker {tracker} unsupported or misspelled")
if add_info: # TODO : Manage potentially different variable names
data["hemisphere"] = utils.geography.get_hemisphere(data.lat)
data["basin"] = utils.geography.get_basin(data.lon, data.lat)
data["season"] = utils.time.get_season(data.track_id, data.lat, data.time)
if "wind10" in list(data.keys()): # If 'wind10' is in the attributes
data["sshs"] = utils.category.get_sshs_cat(data.wind10)
if "slp" in list(data.keys()): # If 'slp' is in the attributes
data["pres_cat"] = utils.category.get_pressure_cat(data.slp)
return data