Forecasts submitted to the Ecological Forecasting Initiative's NEON Challenge
In development, experimental
At this time, canonical sources are still hosted on data.ecoforecast.org.
Resources
Quickstart
Arrow provides an easy way to access remote parquet files from most languages widely used in data science. Here we access all forecasts submitted to a particular theme. (Users looking to load only a single model should specify that on the path for faster access. The STAC catalog can be used to explore available models).
The examples below show 'cloud-native' connections to the data -- 'lazy' connections that do not download the entire asset, but allow us to filter, subset, and operate directly on the remote data product.
R Access
1 library(arrow)
2 base = "s3://anonymous@us-west-2.opendata.source.coop"
3 repo = "eco4cast/neon4cast-forecasts"
4 theme = "aquatics"
5 uri = glue::glue("{base}/{repo}/parquet/{theme}?region=us-west-2")
6
7 open_dataset(uri)
8
1 library(arrow)
2 base = "s3://anonymous@us-west-2.opendata.source.coop"
3 repo = "eco4cast/neon4cast-forecasts"
4 theme = "aquatics"
5 uri = glue::glue("{base}/{repo}/parquet/{theme}?region=us-west-2")
6
7 open_dataset(uri)
8
Python Access
1 import pyarrow.dataset as ds
2
3 base = "s3://anonymous@us-west-2.opendata.source.coop"
4 repo = "eco4cast/neon4cast-forecasts"
5 theme = "aquatics"
6 uri = f"{base}/{repo}/parquet/{theme}?region=us-west-2"
7
8 ds.dataset(uri, format="parquet")
1 import pyarrow.dataset as ds
2
3 base = "s3://anonymous@us-west-2.opendata.source.coop"
4 repo = "eco4cast/neon4cast-forecasts"
5 theme = "aquatics"
6 uri = f"{base}/{repo}/parquet/{theme}?region=us-west-2"
7
8 ds.dataset(uri, format="parquet")
duckdb
At this time, duckdb access substantially faster than arrow.
R + duckdb
R users can get a dplyr-compatible lazy remote tibble as follows:
1 # remotes::install_github("cboettig/duckdbfs")
2 library(duckdbfs)
3
4 base = "s3://anonymous@us-west-2.opendata.source.coop"
5 repo = "eco4cast/neon4cast-forecasts"
6 theme = "aquatics"
7 uri = glue::glue("{base}/{repo}/parquet/{theme}?region=us-west-2")
8
9 df = open_dataset(uri)
1 # remotes::install_github("cboettig/duckdbfs")
2 library(duckdbfs)
3
4 base = "s3://anonymous@us-west-2.opendata.source.coop"
5 repo = "eco4cast/neon4cast-forecasts"
6 theme = "aquatics"
7 uri = glue::glue("{base}/{repo}/parquet/{theme}?region=us-west-2")
8
9 df = open_dataset(uri)
Python + duckdb
ibis provides a more Pythonic interface to SQL:
1 import ibis
2 con = ibis.duckdb.connect()
3
4 base = "s3://us-west-2.opendata.source.coop"
5 repo = "eco4cast/neon4cast-forecasts"
6 theme = "aquatics"
7 uri = f"{base}/{repo}/parquet/{theme}/**"
8
9 con.raw_sql(f"""
10 INSTALL httpfs;
11 LOAD httpfs;
12 SET s3_region='us-west-2';
13 """)
14
15 db = con.read_parquet(uri)
1 import ibis
2 con = ibis.duckdb.connect()
3
4 base = "s3://us-west-2.opendata.source.coop"
5 repo = "eco4cast/neon4cast-forecasts"
6 theme = "aquatics"
7 uri = f"{base}/{repo}/parquet/{theme}/**"
8
9 con.raw_sql(f"""
10 INSTALL httpfs;
11 LOAD httpfs;
12 SET s3_region='us-west-2';
13 """)
14
15 db = con.read_parquet(uri)