Skip to content

Tools for working with wildland hydrology.

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

joshualerickson/wildlandhydRo

Repository files navigation


wildlandhydRo

Intro

The goal of wildlandhydRo is to create wrapper functions around commonly used packages like streamstats, snotelr and dataRetrieval and prepare them for chunk-based parallelism, data munging and reporting. Basically, a package for me but worth sharing with others.

Installation

You can install the development version from GitHub with:

#due to GH issue #1
install.packages("lmomRFA")
install.packages("lfstat", repos="http://R-Forge.R-project.org")

#now install
install.packages('devtools')
devtools::install_github("joshualerickson/wildlandhydRo")

Examples

Below are some common examples that I routinely use with the package.

Parallel

With {wildlandhydRo} it is really easy to get station data in parallel. The functions use the {furrr} framework and will work by planning a session prior to calling the function. Below is a quick benchmark between the options; regular (np) or parallel (para).

library(wildlandhydRo)
library(microbenchmark)
library(dataRetrieval)

sites <- dataRetrieval::whatNWISsites(stateCd='MT', parameterCd = '00060') %>% 
  filter(nchar(site_no) <= 8)

tm <- microbenchmark(
 'np' = {
   batch_USGSdv(sites = sites[1:50,]$site_no, parallel = FALSE)},
 'para' = {
   future::plan('multisession')
   batch_USGSdv(sites = sites[1:50,]$site_no, parallel = TRUE)},
 times = 10
)

tm

autoplot(tm)

You can do this for most functions in the package, e.g. batch_*(), wym*(), ym*(), get_Basin(), etc.

Annual and Monthly Stats

With the package you can get monthly, annual and monthly-annual statistics for a snotel or usgs sites. You can provide a previously create batch_*() data.frame or the station id. This creates/mungs the results of the daily values to generate mean, maximum, median and standard deviation per water year or per water year per month. It also includes peaks from dataRetrieval::readNWISpeak(); annual base-flow (tp = 0.9, window = 5) and Base-flow Index (BFI) (total-flow/base-flow) from baseflow; annual coefficient of variance (sd of flow/mean of flow); and normalization methods Flow/drainage area, Flow/(all time mean flow) and Flow/log(standard deviation). The window for all the methods are annual, e.g. 1. This leaves it up to the user to explore different windows if inclined. Monthly stats

water_year <- wyUSGS(sites = '12304500')
ggplot(water_year, aes(peak_dt, Peak)) + 
  geom_line() +
  labs(title = 'Peak Flow per Water Year', 
       subtitle = paste0(water_year %>% slice(n=1) %>% .$Station))
#> Error : The fig.showtext code chunk option must be TRUE

monthly <- wymUSGS(sites = '12304500')
ggplot(monthly, aes(year_month, coef_var)) +
  geom_line() +
  labs(title = 'Monthly Coefficient of Variance', 
       subtitle = paste0(monthly %>% slice(n=1) %>% .$Station))
#> Error : The fig.showtext code chunk option must be TRUE

Get Percentiles for Reporting

You can also just generate percentiles for daily values or months.

  • Daily
yaak_dv <- batch_USGSdv(sites = '12304500')

usgs_rep <- reportUSGSdv(procDV = yaak_dv, days = 60)

plot_reportUSGS(usgs_rep)
#> Error : The fig.showtext code chunk option must be TRUE

  • Monthly
usgs_rep_month <- reportUSGSmv(procDV = yaak_dv)

plot_reportUSGS(usgs_rep_month %>% filter(year_nu >2020), time = 'month')
#> Error : The fig.showtext code chunk option must be TRUE

Get a Drain Point

Sometimes you just want to get the drainage area above a point and then do some other things. With get_Basin() function you just have to provide a sf point and it will return the basin. If you want zonal stats associated with that drainage area then just use get_BasinStats().

  • Basin
pt <- tibble(lon = -114.36, lat = 48.92)
pt <- sf::st_as_sf(pt, coords = c('lon', 'lat'))

basin <- get_Basin(pt)

ggplot() + geom_sf(data = basin)
#> Error : The fig.showtext code chunk option must be TRUE

  • Basin Stats
basin_stats <- get_BasinStats(basin)

basin_stats %>% sf::st_drop_geometry() %>% 
  pivot_longer(cols = c('TOT_PET', 'TOT_BFI', 'TOT_TWI')) %>% 
  select(name, value, comid) %>% 
  right_join(basin_stats, by ='comid') %>% sf::st_as_sf() %>% 
  ggplot() + 
  geom_sf(aes(fill = value)) +
    facet_wrap(~name, nrow = 3) + theme_void()
#> Error : The fig.showtext code chunk option must be TRUE

About

Tools for working with wildland hydrology.

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages