stemflow


Namestemflow JSON
Version 1.1 PyPI version JSON
download
home_pagehttps://github.com/chenyangkang/stemflow
SummaryA package for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM) in python
upload_time2024-02-22 01:38:13
maintainer
docs_urlNone
authorYangkang Chen
requires_python>=3.8.0
license
keywords python spatial-temporal model ebird citizen science spatial temporal exploratory model stem adastem abundance phenology
VCS
bugtrack_url
requirements joblib matplotlib numpy pandas plotly scikit_learn scipy setuptools tqdm
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# **stemflow** :bird:
<p align="center">
  <img src="https://chenyangkang.github.io/stemflow/assets/logo_with_words.png" alt="stemflow logo" width="600"/>
</p>
<!--  -->
<p align="center">
  <em>A Python Package for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM)</em>
</p>

![GitHub](https://img.shields.io/github/license/chenyangkang/stemflow)
![Anaconda version](https://anaconda.org/conda-forge/stemflow/badges/version.svg)
![Anaconda downloads](https://anaconda.org/conda-forge/stemflow/badges/downloads.svg)
![PyPI version](https://img.shields.io/pypi/v/stemflow)
![PyPI downloads](https://img.shields.io/pypi/dm/stemflow)
![GitHub last commit](https://img.shields.io/github/last-commit/chenyangkang/stemflow)
[![codecov](https://codecov.io/gh/chenyangkang/stemflow/graph/badge.svg?token=RURPF6NKIJ)](https://codecov.io/gh/chenyangkang/stemflow)
[![status](https://joss.theoj.org/papers/50a385b3283faf346fc16484f50f6add/status.svg)](https://joss.theoj.org/papers/50a385b3283faf346fc16484f50f6add)
 <!--  -->

-----

## Documentation :book:
[stemflow Documentation](https://chenyangkang.github.io/stemflow/)
<!-- stemflow -->

-----


## Installation  :wrench:

```py
pip install stemflow
```

Or using conda:

```py
conda install -c conda-forge stemflow
```

-----

## Brief introduction :information_source:
**stemflow** is a toolkit for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM \[[1](https://ojs.aaai.org/index.php/AAAI/article/view/8484), [2](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1002/eap.2056)\]) in Python. Typical usage is daily abundance estimation using [eBird](https://ebird.org/home) citizen science data (survey data). 

**stemflow** adopts ["split-apply-combine"](https://vita.had.co.nz/papers/plyr.pdf) philosophy. It 

1. Splits input data using [Quadtree](https://en.wikipedia.org/wiki/Quadtree#:~:text=A%20quadtree%20is%20a%20tree,into%20four%20quadrants%20or%20regions.) or [Sphere Quadtree](https://ieeexplore.ieee.org/abstract/document/146380).
1. Trains each spatiotemporal split (called stixel) separately.
1. Aggregates the ensemble to make the prediction.


The framework leverages the "adjacency" information of surroundings in space and time to model/predict the values of target spatiotemporal points. This framework ameliorates the **long-distance/long-range prediction problem** [[3](https://esajournals.onlinelibrary.wiley.com/doi/abs/10.1890/09-1340.1)], and has a good spatiotemporal smoothing effect.

For more information, please see [an introduction to stemflow](https://chenyangkang.github.io/stemflow/A_brief_introduction/A_brief_introduction.html) and [learning curve analysis](https://chenyangkang.github.io/stemflow/Examples/02.AdaSTEM_learning_curve_analysis.html)

-----

## Model and data  :slot_machine:

| Main functionality of `stemflow` | Supported indexing | Supported tasks |
| :-- | :-- | :-- |
| :white_check_mark: Spatiotemporal modeling & prediction<br> | :white_check_mark: User-defined 2D spatial indexing (CRS)<br> | :white_check_mark: Binary classification task<br> |
| :white_check_mark: Calculate overall feature importances<br> | :white_check_mark: 3D spherical indexing <br> | :white_check_mark: Regression task<br> |
| :white_check_mark: Plot spatiotemporal dynamics<br> | :white_check_mark: User-defined temporal indexing<br> | :white_check_mark: Hurdle task (two step regression – classify then regress the non-zero part)<br> |
| | :white_check_mark: Spatial-only modeling<br> | |
| For details see [AdaSTEM Demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) | For details and tips see [Tips for spatiotemporal indexing](https://chenyangkang.github.io/stemflow/Tips/Tips_for_spatiotemporal_indexing.html) | For details and tips see [Tips for different tasks](https://chenyangkang.github.io/stemflow/Tips/Tips_for_different_tasks.html) |



<!-- column 1 -->
<!-- | Main functionality of `stemflow` 
| -- 
| :white_check_mark: Spatiotemporal modeling & prediction<br> 
| :white_check_mark: Calculate overall feature importances<br> 
| :white_check_mark: Plot spatiotemporal dynamics<br> 
| For details see [AdaSTEM Demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html)  -->


<!-- column 2 -->
<!-- | Supported indexing
| -- 
| :white_check_mark: User-defined 2D spatial indexing (CRS)<br>
| :white_check_mark: 3D Spherical indexing <br>
| :white_check_mark: User-defined temporal indexing<br> 
| :white_check_mark: Spatial-only modeling<br> 
| For details and tips see [Tips for spatiotemporal indexing](https://chenyangkang.github.io/stemflow/Tips/Tips_for_spatiotemporal_indexing.html)  -->

<!-- column 3 -->
<!-- | Supported tasks
| --
| :white_check_mark: Binary classification task<br> 
| :white_check_mark: Regression task<br> 
| :white_check_mark: Hurdle task (two step regression – classify then regress the non-zero part)<br> 
| For details and tips see [Tips for different tasks](https://chenyangkang.github.io/stemflow/Tips/Tips_for_different_tasks.html)  -->


| Supported data types | Supported base models |
| -- | -- |
| :white_check_mark: Both continuous and categorical features (prefer one-hot encoding)<br> | :white_check_mark: sklearn style `BaseEstimator` classes ([you can make your own base model](https://scikit-learn.org/stable/developers/develop.html)), for example [here](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html)<br> |
| :white_check_mark: Both static (e.g., yearly mean temperature) and dynamic features (e.g., daily temperature)<br> |  :white_check_mark: sklearn style Maxent model. [Example here](https://chenyangkang.github.io/stemflow/Examples/03.Binding_with_Maxent.html). |
| For details and tips see [Tips for data types](https://chenyangkang.github.io/stemflow/Tips/Tips_for_data_types.html) |  For details see [Base model choices](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html) |

<!-- column 4 -->
<!-- | Supported data types
| -- 
| :white_check_mark: Both continuous and categorical features (prefer one-hot encoding)<br> 
| :white_check_mark: Both static (e.g., yearly mean temperature) and dynamic features (e.g., daily temperature)<br>
| For details and tips see [Tips for data types](https://chenyangkang.github.io/stemflow/Tips/Tips_for_data_types.html)  -->


<!-- column 5 -->
<!-- | Supported base models 
| --
| :white_check_mark: sklearn style `BaseEstimator` classes ([you can make your own base model](https://scikit-learn.org/stable/developers/develop.html)), for example [here](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html)<br> 
|  :white_check_mark: sklearn style Maxent model. [Example here](https://chenyangkang.github.io/stemflow/Examples/03.Binding_with_Maxent.html). 
|  For details see [Base model choices](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html) -->



## Usage :star:

Use Hurdle model as the base model of AdaSTEMRegressor:

```py
from stemflow.model.AdaSTEM import AdaSTEM, AdaSTEMClassifier, AdaSTEMRegressor
from stemflow.model.Hurdle import Hurdle
from xgboost import XGBClassifier, XGBRegressor

## "hurdle in Ada"
model = AdaSTEMRegressor(
    base_model=Hurdle(
        classifier=XGBClassifier(tree_method='hist',random_state=42, verbosity = 0, n_jobs=1),
        regressor=XGBRegressor(tree_method='hist',random_state=42, verbosity = 0, n_jobs=1)
    ),                                      # hurdel model for zero-inflated problem (e.g., count)
    save_gridding_plot = True,
    ensemble_fold=10,                       # data are modeled 10 times, each time with jitter and rotation in Quadtree algo
    min_ensemble_required=7,                # Only points covered by > 7 ensembles will be predicted
    grid_len_upper_threshold=25,            # force splitting if the grid length exceeds 25
    grid_len_lower_threshold=5,             # stop splitting if the grid length fall short 5         
    temporal_start=1,                       # The next 4 params define the temporal sliding window
    temporal_end=366,                            
    temporal_step=20,                       # The window takes steps of 20 DOY (see AdaSTEM demo for details)
    temporal_bin_interval=50,               # Each window will contain data of 50 DOY
    points_lower_threshold=50,              # Only stixels with more than 50 samples are trained and used for prediction
    Spatio1='longitude',                    # The next three params define the name of 
    Spatio2='latitude',                     # spatial coordinates shown in the dataframe
    Temporal1='DOY',
    use_temporal_to_train=True,             # In each stixel, whether 'DOY' should be a predictor
    njobs=1
)
```


Fitting and prediction methods follow the style of sklearn `BaseEstimator` class:

```py
## fit
model = model.fit(X_train.reset_index(drop=True), y_train)

## predict
pred = model.predict(X_test)
pred = np.where(pred<0, 0, pred)
eval_metrics = AdaSTEM.eval_STEM_res('hurdle',y_test, pred_mean)
print(eval_metrics)
```

Where the `pred` is the mean of the predicted values across ensembles.

See [AdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) for further functionality.<br>
See [Optimizing stixel size](https://chenyangkang.github.io/stemflow/Examples/07.Optimizing_stixel_size.html) for why and how you should tune the important gridding parameters.

-----

## Plot QuadTree ensembles :evergreen_tree:


```py
model.gridding_plot
# Here, the model is a AdaSTEM class, not a hurdle class
```

![QuadTree example](https://chenyangkang.github.io/stemflow/assets/QuadTree.png)

Here, each color shows an ensemble generated during model fitting. In each of the 10 ensembles, regions (in terms of space and time) with more training samples were gridded into finer resolution, while the sparse one remained coarse. Prediction results were aggregated across the ensembles (that is, in this example, data were modeled 10 times).

If you use `SphereAdaSTEM` module, the gridding plot is a `plotly` generated interactive object by default:


<p align="center">
  <img src="https://chenyangkang.github.io/stemflow/assets/Sphere_gridding.png" width="500"/>
</p>



See [SphereAdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/04.SphereAdaSTEM_demo.html) and [Interactive spherical gridding plot](https://chenyangkang.github.io/stemflow/assets/Sphere_gridding.html).



----
## Example of visualization :world_map:

Daily Abundance Map of Barn Swallow

![GIF visualization](https://github.com/chenyangkang/stemflow/raw/main/docs/assets/pred_gif.gif)

See section [AdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) for how to generate this GIF.

----

## Contribute to stemflow :purple_heart:

We welcome pull requests. Contributors should follow [contributor guidelines](https://github.com/chenyangkang/stemflow/blob/main/docs/CONTRIBUTING.md).

Application-level cooperation is also welcomed. We recognized that stemflow may consume large computational resources especially as data volume boosts in the future. We always welcome research collaboration of all kinds.


-----
References:

1. [Fink, D., Damoulas, T., & Dave, J. (2013, June). Adaptive Spatio-Temporal Exploratory Models: Hemisphere-wide species distributions from massively crowdsourced eBird data. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 27, No. 1, pp. 1284-1290).](https://ojs.aaai.org/index.php/AAAI/article/view/8484)

1. [Fink, D., Auer, T., Johnston, A., Ruiz‐Gutierrez, V., Hochachka, W. M., & Kelling, S. (2020). Modeling avian full annual cycle distribution and population trends with citizen science data. Ecological Applications, 30(3), e02056.](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1002/eap.2056)

1. [Fink, D., Hochachka, W. M., Zuckerberg, B., Winkler, D. W., Shaby, B., Munson, M. A., ... & Kelling, S. (2010). Spatiotemporal exploratory models for broad‐scale survey data. Ecological Applications, 20(8), 2131-2147.](https://esajournals.onlinelibrary.wiley.com/doi/abs/10.1890/09-1340.1)

1. [Johnston, A., Fink, D., Reynolds, M. D., Hochachka, W. M., Sullivan, B. L., Bruns, N. E., ... & Kelling, S. (2015). Abundance models improve spatial and temporal prioritization of conservation resources. Ecological Applications, 25(7), 1749-1756.](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1890/14-1826.1)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/chenyangkang/stemflow",
    "name": "stemflow",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8.0",
    "maintainer_email": "",
    "keywords": "python,spatial-temporal model,ebird,citizen science,spatial temporal exploratory model,STEM,AdaSTEM,abundance,phenology",
    "author": "Yangkang Chen",
    "author_email": "chenyangkang24@outlook.com",
    "download_url": "https://files.pythonhosted.org/packages/96/ef/ab7180f4db8ee0c42e42b20fcb8f9443c894231f6eb4ff89f006ea1d458a/stemflow-1.1.tar.gz",
    "platform": "any",
    "description": "\n# **stemflow** :bird:\n<p align=\"center\">\n  <img src=\"https://chenyangkang.github.io/stemflow/assets/logo_with_words.png\" alt=\"stemflow logo\" width=\"600\"/>\n</p>\n<!--  -->\n<p align=\"center\">\n  <em>A Python Package for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM)</em>\n</p>\n\n![GitHub](https://img.shields.io/github/license/chenyangkang/stemflow)\n![Anaconda version](https://anaconda.org/conda-forge/stemflow/badges/version.svg)\n![Anaconda downloads](https://anaconda.org/conda-forge/stemflow/badges/downloads.svg)\n![PyPI version](https://img.shields.io/pypi/v/stemflow)\n![PyPI downloads](https://img.shields.io/pypi/dm/stemflow)\n![GitHub last commit](https://img.shields.io/github/last-commit/chenyangkang/stemflow)\n[![codecov](https://codecov.io/gh/chenyangkang/stemflow/graph/badge.svg?token=RURPF6NKIJ)](https://codecov.io/gh/chenyangkang/stemflow)\n[![status](https://joss.theoj.org/papers/50a385b3283faf346fc16484f50f6add/status.svg)](https://joss.theoj.org/papers/50a385b3283faf346fc16484f50f6add)\n <!--  -->\n\n-----\n\n## Documentation :book:\n[stemflow Documentation](https://chenyangkang.github.io/stemflow/)\n<!-- stemflow -->\n\n-----\n\n\n## Installation  :wrench:\n\n```py\npip install stemflow\n```\n\nOr using conda:\n\n```py\nconda install -c conda-forge stemflow\n```\n\n-----\n\n## Brief introduction :information_source:\n**stemflow** is a toolkit for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM \\[[1](https://ojs.aaai.org/index.php/AAAI/article/view/8484), [2](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1002/eap.2056)\\]) in Python. Typical usage is daily abundance estimation using [eBird](https://ebird.org/home) citizen science data (survey data). \n\n**stemflow** adopts [\"split-apply-combine\"](https://vita.had.co.nz/papers/plyr.pdf) philosophy. It \n\n1. Splits input data using [Quadtree](https://en.wikipedia.org/wiki/Quadtree#:~:text=A%20quadtree%20is%20a%20tree,into%20four%20quadrants%20or%20regions.) or [Sphere Quadtree](https://ieeexplore.ieee.org/abstract/document/146380).\n1. Trains each spatiotemporal split (called stixel) separately.\n1. Aggregates the ensemble to make the prediction.\n\n\nThe framework leverages the \"adjacency\" information of surroundings in space and time to model/predict the values of target spatiotemporal points. This framework ameliorates the **long-distance/long-range prediction problem** [[3](https://esajournals.onlinelibrary.wiley.com/doi/abs/10.1890/09-1340.1)], and has a good spatiotemporal smoothing effect.\n\nFor more information, please see [an introduction to stemflow](https://chenyangkang.github.io/stemflow/A_brief_introduction/A_brief_introduction.html) and [learning curve analysis](https://chenyangkang.github.io/stemflow/Examples/02.AdaSTEM_learning_curve_analysis.html)\n\n-----\n\n## Model and data  :slot_machine:\n\n| Main functionality of `stemflow` | Supported indexing | Supported tasks |\n| :-- | :-- | :-- |\n| :white_check_mark: Spatiotemporal modeling & prediction<br> | :white_check_mark: User-defined 2D spatial indexing (CRS)<br> | :white_check_mark: Binary classification task<br> |\n| :white_check_mark: Calculate overall feature importances<br> | :white_check_mark: 3D spherical indexing <br> | :white_check_mark: Regression task<br> |\n| :white_check_mark: Plot spatiotemporal dynamics<br> | :white_check_mark: User-defined temporal indexing<br> | :white_check_mark: Hurdle task (two step regression \u2013 classify then regress the non-zero part)<br> |\n| | :white_check_mark: Spatial-only modeling<br> | |\n| For details see [AdaSTEM Demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) | For details and tips see [Tips for spatiotemporal indexing](https://chenyangkang.github.io/stemflow/Tips/Tips_for_spatiotemporal_indexing.html) | For details and tips see [Tips for different tasks](https://chenyangkang.github.io/stemflow/Tips/Tips_for_different_tasks.html) |\n\n\n\n<!-- column 1 -->\n<!-- | Main functionality of `stemflow` \n| -- \n| :white_check_mark: Spatiotemporal modeling & prediction<br> \n| :white_check_mark: Calculate overall feature importances<br> \n| :white_check_mark: Plot spatiotemporal dynamics<br> \n| For details see [AdaSTEM Demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html)  -->\n\n\n<!-- column 2 -->\n<!-- | Supported indexing\n| -- \n| :white_check_mark: User-defined 2D spatial indexing (CRS)<br>\n| :white_check_mark: 3D Spherical indexing <br>\n| :white_check_mark: User-defined temporal indexing<br> \n| :white_check_mark: Spatial-only modeling<br> \n| For details and tips see [Tips for spatiotemporal indexing](https://chenyangkang.github.io/stemflow/Tips/Tips_for_spatiotemporal_indexing.html)  -->\n\n<!-- column 3 -->\n<!-- | Supported tasks\n| --\n| :white_check_mark: Binary classification task<br> \n| :white_check_mark: Regression task<br> \n| :white_check_mark: Hurdle task (two step regression \u2013 classify then regress the non-zero part)<br> \n| For details and tips see [Tips for different tasks](https://chenyangkang.github.io/stemflow/Tips/Tips_for_different_tasks.html)  -->\n\n\n| Supported data types | Supported base models |\n| -- | -- |\n| :white_check_mark: Both continuous and categorical features (prefer one-hot encoding)<br> | :white_check_mark: sklearn style `BaseEstimator` classes ([you can make your own base model](https://scikit-learn.org/stable/developers/develop.html)), for example [here](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html)<br> |\n| :white_check_mark: Both static (e.g., yearly mean temperature) and dynamic features (e.g., daily temperature)<br> |  :white_check_mark: sklearn style Maxent model. [Example here](https://chenyangkang.github.io/stemflow/Examples/03.Binding_with_Maxent.html). |\n| For details and tips see [Tips for data types](https://chenyangkang.github.io/stemflow/Tips/Tips_for_data_types.html) |  For details see [Base model choices](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html) |\n\n<!-- column 4 -->\n<!-- | Supported data types\n| -- \n| :white_check_mark: Both continuous and categorical features (prefer one-hot encoding)<br> \n| :white_check_mark: Both static (e.g., yearly mean temperature) and dynamic features (e.g., daily temperature)<br>\n| For details and tips see [Tips for data types](https://chenyangkang.github.io/stemflow/Tips/Tips_for_data_types.html)  -->\n\n\n<!-- column 5 -->\n<!-- | Supported base models \n| --\n| :white_check_mark: sklearn style `BaseEstimator` classes ([you can make your own base model](https://scikit-learn.org/stable/developers/develop.html)), for example [here](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html)<br> \n|  :white_check_mark: sklearn style Maxent model. [Example here](https://chenyangkang.github.io/stemflow/Examples/03.Binding_with_Maxent.html). \n|  For details see [Base model choices](https://chenyangkang.github.io/stemflow/Examples/06.Base_model_choices.html) -->\n\n\n\n## Usage :star:\n\nUse Hurdle model as the base model of AdaSTEMRegressor:\n\n```py\nfrom stemflow.model.AdaSTEM import AdaSTEM, AdaSTEMClassifier, AdaSTEMRegressor\nfrom stemflow.model.Hurdle import Hurdle\nfrom xgboost import XGBClassifier, XGBRegressor\n\n## \"hurdle in Ada\"\nmodel = AdaSTEMRegressor(\n    base_model=Hurdle(\n        classifier=XGBClassifier(tree_method='hist',random_state=42, verbosity = 0, n_jobs=1),\n        regressor=XGBRegressor(tree_method='hist',random_state=42, verbosity = 0, n_jobs=1)\n    ),                                      # hurdel model for zero-inflated problem (e.g., count)\n    save_gridding_plot = True,\n    ensemble_fold=10,                       # data are modeled 10 times, each time with jitter and rotation in Quadtree algo\n    min_ensemble_required=7,                # Only points covered by > 7 ensembles will be predicted\n    grid_len_upper_threshold=25,            # force splitting if the grid length exceeds 25\n    grid_len_lower_threshold=5,             # stop splitting if the grid length fall short 5         \n    temporal_start=1,                       # The next 4 params define the temporal sliding window\n    temporal_end=366,                            \n    temporal_step=20,                       # The window takes steps of 20 DOY (see AdaSTEM demo for details)\n    temporal_bin_interval=50,               # Each window will contain data of 50 DOY\n    points_lower_threshold=50,              # Only stixels with more than 50 samples are trained and used for prediction\n    Spatio1='longitude',                    # The next three params define the name of \n    Spatio2='latitude',                     # spatial coordinates shown in the dataframe\n    Temporal1='DOY',\n    use_temporal_to_train=True,             # In each stixel, whether 'DOY' should be a predictor\n    njobs=1\n)\n```\n\n\nFitting and prediction methods follow the style of sklearn `BaseEstimator` class:\n\n```py\n## fit\nmodel = model.fit(X_train.reset_index(drop=True), y_train)\n\n## predict\npred = model.predict(X_test)\npred = np.where(pred<0, 0, pred)\neval_metrics = AdaSTEM.eval_STEM_res('hurdle',y_test, pred_mean)\nprint(eval_metrics)\n```\n\nWhere the `pred` is the mean of the predicted values across ensembles.\n\nSee [AdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) for further functionality.<br>\nSee [Optimizing stixel size](https://chenyangkang.github.io/stemflow/Examples/07.Optimizing_stixel_size.html) for why and how you should tune the important gridding parameters.\n\n-----\n\n## Plot QuadTree ensembles :evergreen_tree:\n\n\n```py\nmodel.gridding_plot\n# Here, the model is a AdaSTEM class, not a hurdle class\n```\n\n![QuadTree example](https://chenyangkang.github.io/stemflow/assets/QuadTree.png)\n\nHere, each color shows an ensemble generated during model fitting. In each of the 10 ensembles, regions (in terms of space and time) with more training samples were gridded into finer resolution, while the sparse one remained coarse. Prediction results were aggregated across the ensembles (that is, in this example, data were modeled 10 times).\n\nIf you use `SphereAdaSTEM` module, the gridding plot is a `plotly` generated interactive object by default:\n\n\n<p align=\"center\">\n  <img src=\"https://chenyangkang.github.io/stemflow/assets/Sphere_gridding.png\" width=\"500\"/>\n</p>\n\n\n\nSee [SphereAdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/04.SphereAdaSTEM_demo.html) and [Interactive spherical gridding plot](https://chenyangkang.github.io/stemflow/assets/Sphere_gridding.html).\n\n\n\n----\n## Example of visualization :world_map:\n\nDaily Abundance Map of Barn Swallow\n\n![GIF visualization](https://github.com/chenyangkang/stemflow/raw/main/docs/assets/pred_gif.gif)\n\nSee section [AdaSTEM demo](https://chenyangkang.github.io/stemflow/Examples/01.AdaSTEM_demo.html) for how to generate this GIF.\n\n----\n\n## Contribute to stemflow :purple_heart:\n\nWe welcome pull requests. Contributors should follow [contributor guidelines](https://github.com/chenyangkang/stemflow/blob/main/docs/CONTRIBUTING.md).\n\nApplication-level cooperation is also welcomed. We recognized that stemflow may consume large computational resources especially as data volume boosts in the future. We always welcome research collaboration of all kinds.\n\n\n-----\nReferences:\n\n1. [Fink, D., Damoulas, T., & Dave, J. (2013, June). Adaptive Spatio-Temporal Exploratory Models: Hemisphere-wide species distributions from massively crowdsourced eBird data. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 27, No. 1, pp. 1284-1290).](https://ojs.aaai.org/index.php/AAAI/article/view/8484)\n\n1. [Fink, D., Auer, T., Johnston, A., Ruiz\u2010Gutierrez, V., Hochachka, W. M., & Kelling, S. (2020). Modeling avian full annual cycle distribution and population trends with citizen science data. Ecological Applications, 30(3), e02056.](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1002/eap.2056)\n\n1. [Fink, D., Hochachka, W. M., Zuckerberg, B., Winkler, D. W., Shaby, B., Munson, M. A., ... & Kelling, S. (2010). Spatiotemporal exploratory models for broad\u2010scale survey data. Ecological Applications, 20(8), 2131-2147.](https://esajournals.onlinelibrary.wiley.com/doi/abs/10.1890/09-1340.1)\n\n1. [Johnston, A., Fink, D., Reynolds, M. D., Hochachka, W. M., Sullivan, B. L., Bruns, N. E., ... & Kelling, S. (2015). Abundance models improve spatial and temporal prioritization of conservation resources. Ecological Applications, 25(7), 1749-1756.](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1890/14-1826.1)\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A package for Adaptive Spatio-Temporal Exploratory Model (AdaSTEM) in python",
    "version": "1.1",
    "project_urls": {
        "Homepage": "https://github.com/chenyangkang/stemflow"
    },
    "split_keywords": [
        "python",
        "spatial-temporal model",
        "ebird",
        "citizen science",
        "spatial temporal exploratory model",
        "stem",
        "adastem",
        "abundance",
        "phenology"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8260e898653b8316de215dc703c5cc6608cb3ad2e8695bbf8e364dfef5abdc3f",
                "md5": "14706962cfb29335415f6c682a7136e8",
                "sha256": "db6edd9f79b091d65a1a7b98dcc1f80634f33ef1a4edbf017ec9647c3ae8bc1d"
            },
            "downloads": -1,
            "filename": "stemflow-1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "14706962cfb29335415f6c682a7136e8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8.0",
            "size": 72313,
            "upload_time": "2024-02-22T01:38:10",
            "upload_time_iso_8601": "2024-02-22T01:38:10.331375Z",
            "url": "https://files.pythonhosted.org/packages/82/60/e898653b8316de215dc703c5cc6608cb3ad2e8695bbf8e364dfef5abdc3f/stemflow-1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "96efab7180f4db8ee0c42e42b20fcb8f9443c894231f6eb4ff89f006ea1d458a",
                "md5": "e5179f17dd01eb126613a5adb6fa9398",
                "sha256": "9d4d7a71e7d9983905c23b173d9bfb4e1b1f36f147753d4a15408c0a2237d5d8"
            },
            "downloads": -1,
            "filename": "stemflow-1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "e5179f17dd01eb126613a5adb6fa9398",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8.0",
            "size": 312036,
            "upload_time": "2024-02-22T01:38:13",
            "upload_time_iso_8601": "2024-02-22T01:38:13.220436Z",
            "url": "https://files.pythonhosted.org/packages/96/ef/ab7180f4db8ee0c42e42b20fcb8f9443c894231f6eb4ff89f006ea1d458a/stemflow-1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-22 01:38:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chenyangkang",
    "github_project": "stemflow",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "joblib",
            "specs": [
                [
                    ">=",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    ">=",
                    "3.7.1"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.24.3"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    ">=",
                    "1.5.3"
                ]
            ]
        },
        {
            "name": "plotly",
            "specs": [
                [
                    ">=",
                    "5.9.0"
                ]
            ]
        },
        {
            "name": "scikit_learn",
            "specs": [
                [
                    ">=",
                    "1.2.2"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.10.1"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "68.2.0"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    ">=",
                    "4.65.0"
                ]
            ]
        }
    ],
    "lcname": "stemflow"
}
        
Elapsed time: 0.22757s