HuracanPy

HuracanPy: A Python package for reading and analysing cyclone tracks - Published in JOSS (2025)

https://github.com/huracan-project/huracanpy

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    1 of 2 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Scientific Fields

Earth and Environmental Sciences Physical Sciences - 36% confidence
Last synced: 4 months ago · JSON representation

Repository

Package for working with various forms of feature tracking data

Basic Info
Statistics
  • Stars: 10
  • Watchers: 1
  • Forks: 6
  • Open Issues: 5
  • Releases: 9
Created over 1 year ago · Last pushed 6 months ago
Metadata Files
Readme License

README.md

HuracanPy logo, a yellow and blue python spiralling as a cyclone.

Documentation Status status Anaconda-Server Badge

A python package for working with various forms of feature tracking data, including but not restricted to cyclone tracks.

Why HuracanPy? The idea of this package is to provide a unified tool for working with cyclone track data. In particular, HuracanPy can read tracks from many different sources/trackers. It also provides useful functions to analyse these tracks, including many common diagnostics. Our goal is to make track data analysis more accessible, and to promote good reproducibility practices.

Getting started

You can follow user guide, try out some of the examples, or follow the steps below (taken from the user guide).

Install

You can install huracanpy with conda bash conda install -c conda-forge huracanpy or pip bash python -m pip install huracanpy

To install the most up-to-date version of huracanpy, you can install directly from the repository with bash python -m pip install "huracanpy@git+https://github.com/Huracan-project/huracanpy"

Basic usage

The first step is to load in some tracks. HuracanPy can load track data from various sources as an xarray.Dataset with a minimal number of assumed variables (track_id, lon, lat, time) e.g. ```python import huracanpy

tracks = huracanpy.load(huracanpy.examplecsvfile) print(tracks) ```

<xarray.Dataset> Size: 7kB Dimensions: (record: 99) Dimensions without coordinates: record Data variables: track_id (record) int64 792B 0 0 0 0 0 0 0 0 0 0 0 ... 2 2 2 2 2 2 2 2 2 2 i (record) int64 792B 482 476 476 477 478 ... 229 230 234 241 249 j (record) int64 792B 417 419 420 420 422 ... 501 509 517 528 542 lon (record) float64 792B 120.5 119.0 119.0 119.2 ... 58.5 60.25 62.25 lat (record) float64 792B -14.25 -14.75 -15.0 ... -39.25 -42.0 -45.5 slp (record) float64 792B 9.988e+04 9.981e+04 ... 9.747e+04 9.754e+04 zs (record) float64 792B -10.71 -16.11 -40.21 ... -218.5 -211.5 wind10 (record) float64 792B 14.65 13.99 13.7 17.98 ... 23.69 23.96 23.4 time (record) datetime64[ns] 792B 1980-01-06T06:00:00 ... 1980-01-30... Each "record" corresponds to a TC point (time, lon, lat).

Note that the data is one dimensional but represents multiple tracks. This is done rather than having track_id as an additional dimension to avoid having to add blank data to each track when they are not the same length. The groupby function, built in to xarray, allows us to easily loop over tracks in this format. ```python

Iterating over all tracks

Each track will be a subset of the xarray Dataset with a unique track_id

The track_id is not necessarily an integer, it follows whatever you have loaded

e.g. could be a string for IBTrACS

for trackid, track in tracks.groupby("trackid"): # Do something with the track print(track_id, len(track.time)) 0 31 1 20 2 48 ```

With the data loaded, we can apply the functions from HuracanPy. The example below is using the hrcn accessor from HuracanPy. See the accessor page for more details.

```python

Quickly view the tracks

tracks.hrcn.plottracks(intensityvar_name="wind10")

Add a new variable to the tracks and plot this instead

tracks = tracks.hrcn.addisland() tracks.hrcn.plottracks(intensityvarname="island") ``` Plot showing 3 tracks in the southern hemisphere with points coloured by wind speed Plot showing 3 tracks in the southern hemisphere with points coloured by whether they are over land or ocean

Contact

Please use GitHub's functions to communicate with HuracanPy's developers. - Use Issues for feature requests or bug reporting - Use the Discussions for Q&A and general feedback - Do not forget HuracanPy is an open-source project, and you can also contribute to it.

Subscribe for updates

  1. Most specific: Subscribe to this discussion for further updates.
  2. Less specific: "Watch" the repo by clicking the button on the top-right of this page. Select "custom" then tick "discussions". You can always go back if there turns out to be too much emails. (We wish there was a better way for you to subscribe to announcements. If you agree with us, please up this issue.)

Owner

  • Name: Huracan-project
  • Login: Huracan-project
  • Kind: organization

JOSS Publication

HuracanPy: A Python package for reading and analysing cyclone tracks
Published
July 08, 2025
Volume 10, Issue 111, Page 8174
Authors
Stella Bourdin ORCID
University of Oxford, Department of Physics, Oxford, UK
Leo Saffin ORCID
University of Reading, Department of Meteorology, Reading, UK
Editor
Hugo Ledoux ORCID
Tags
cyclones

GitHub Events

Total
  • Create event: 12
  • Issues event: 23
  • Release event: 6
  • Watch event: 7
  • Delete event: 5
  • Issue comment event: 33
  • Push event: 107
  • Pull request review event: 1
  • Pull request review comment event: 3
  • Pull request event: 115
  • Fork event: 1
Last Year
  • Create event: 12
  • Issues event: 23
  • Release event: 6
  • Watch event: 7
  • Delete event: 5
  • Issue comment event: 33
  • Push event: 107
  • Pull request review event: 1
  • Pull request review comment event: 3
  • Pull request event: 115
  • Fork event: 1

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 644
  • Total Committers: 2
  • Avg Commits per committer: 322.0
  • Development Distribution Score (DDS): 0.452
Past Year
  • Commits: 416
  • Committers: 2
  • Avg Commits per committer: 208.0
  • Development Distribution Score (DDS): 0.469
Top Committers
Name Email Commits
stella-bourdin s****n@p****k 353
Leo Saffin s****r@h****m 291
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 20
  • Total pull requests: 152
  • Average time to close issues: 5 days
  • Average time to close pull requests: about 6 hours
  • Total issue authors: 5
  • Total pull request authors: 3
  • Average comments per issue: 1.4
  • Average comments per pull request: 0.13
  • Merged pull requests: 129
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 19
  • Pull requests: 125
  • Average time to close issues: 5 days
  • Average time to close pull requests: about 5 hours
  • Issue authors: 5
  • Pull request authors: 3
  • Average comments per issue: 1.32
  • Average comments per pull request: 0.15
  • Merged pull requests: 106
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • stella-bourdin (9)
  • malmans2 (7)
  • nmstreethran (3)
  • leosaffin (2)
  • burcuboza (1)
Pull Request Authors
  • leosaffin (119)
  • stella-bourdin (61)
  • hugoledoux (6)
  • pmansito (1)
Top Labels
Issue Labels
enhancement (3) documentation (2) load (2) bug (1)
Pull Request Labels

Dependencies

.github/workflows/python-package.yaml actions
  • actions/checkout v4 composite
  • actions/setup-python v5 composite
pyproject.toml pypi
  • cftime *
  • numpy <2
  • parse *
  • xarray *
setup.py pypi