---
Title: NY County Deer Harvest Folio Sample
output:
  flexdashboard::flex_dashboard:
    source_code: embed
    theme:
      version: 4
      bg: "#101010"
      fg: "#FDF7F7" 
      primary: "#B6FFBB"
      navbar-bg: "#3ADAC6"
      base_font: 
        google: Prompt
      heading_font:
        google: Sen
      code_font:
        google: 
          # arguments to sass::font_google() 
          family: JetBrains Mono
          local: false
---

Sample 1: NY County Deer Harvest Trends
================================
<h4 style="text-align: center;">
Note: This document was created as part of a job application folio by the author, and is not intended for any other use.
<br> Author: Todd Kautz
<br> NY County-level Deer Harvest Summary: 2020–2023
</h4>
```{r setup, include=FALSE}
#Load required packages
library(flexdashboard)
library(leaflet)
library(htmltools)
library(htmlwidgets)
library(crosstalk)
library(tidyr)
library(readr)
library(pdftools)
library(stringr)
library(rvest)
library(scales)
library(plotly)
library(DT)
library(sf)

#Scrape county-level deer harvest data from web-published summary PDFs (NYSDEC)
Years <- c(2020:2023)

pdf_data <- lapply(c("https://extapps.dec.ny.gov/docs/wildlife_pdf/2020deerrpt.pdf",
                     "https://extapps.dec.ny.gov/docs/wildlife_pdf/2021deerrpt.pdf",
                     "https://extapps.dec.ny.gov/docs/wildlife_pdf/2022deerrpt.pdf",
                     "https://dec.ny.gov/sites/default/files/2024-05/2023deerrpt.pdf"
                     
), pdftools::pdf_text)

SA_deer <- data.frame(matrix(ncol = 10))
colnames(SA_deer) <- c("County",
                       "Male Adult",
                       "Male Fawn",
                       "Female Adult",
                       "Female Fawn",
                       "Total", 
                       "Adult Male per Square Mile",
                       "Adult Female per Square Mile",
                       "Antlerless Deer per square mile",
                       "Year")

for (i in 1:length(pdf_data)) {
  df <- pdf_data[[i]] %>% 
    read_lines() %>%
    .[grep("Albany",.):
        grep("Yates",.)] %>%
    str_split_fixed(., "\\s\\s+", 9) %>%
    as.data.frame()
  
  
  df[,10] <- Years[i]
  SA_deer <- as.data.frame(mapply(c,SA_deer,df))
}

#Clean and format a few variables to be used in the summary
SA_deer <- na.omit(SA_deer)

SA_deer$Total <- as.numeric(gsub(",", "", 
                     SA_deer$Total))

SA_deer$Year <- as.numeric(SA_deer$Year)

#Query/analysis: linear regression to calculate annual rate of change in deer harvest by county
harvest_trend_reg <- SA_deer %>%
  group_by(County) %>%
  mutate(mx = lm(Total ~ Year)$coefficients[2]) %>% 
  filter(Year == 2020) %>% 
  mutate(mx_p = ((mx)/Total) * 100)

```
    
Column {.tabset}
-------------------------------------
    
### County Harvest Map: 2020–23
```{r}

#GIS functions
#Read county polygons from JSON link to the State of NY ESRI data portal
d = read_sf("https://services6.arcgis.com/EbVsqZ18sv1kVJ3k/arcgis/rest/services/NYS_Civil_Boundaries/FeatureServer/2/query?outFields=*&where=1%3D1&f=geojson")

#Add deer harvest data to county polygons
#linear regression rate of change in total harvest
d$change <- harvest_trend_reg[match(d$NAME, harvest_trend_reg$County),]$mx_p %>%
  round(., digits = 2)

#Average total harvest
TH_ave <- aggregate(as.numeric(
  gsub(",", "", 
       SA_deer$Total)), 
  list(SA_deer$County), mean)

d$total <- TH_ave[match(d$NAME, TH_ave[,1]),]$x 
d$total [is.na(d$total)] <- 0

#Average annual harvest density
d$harvest_density <- (d$total/d$CALC_SQ_MI) %>%
  round(., digits = 2)

#Average annual harvest per county resident (2020 census)
d$harvest_capita <- (d$total/d$POP2020 * 100) %>%
  round(., digits = 2)

#Color palettes for legend
palt = colorBin(colorRamp(c('white', 'red', 'orange', 'yellow', 'green', 'blue')), 
                as.numeric(d$total),
                bins = c(0,1,3000,5000,7000,max(d$total)))
pald = colorBin(colorRamp(c('white', 'red', 'orange', 'yellow', 'green', "blue")), 
                d$harvest_density,
                bins = c(0,.1,1,3,5,10,max(d$harvest_density)))
palc = colorBin(colorRamp(c('white', 'red', 'orange', 'yellow', 'green', "blue", 'purple')), 
                d$harvest_capita,
                bins = c(0,.01,1,3,5,10,max(d$harvest_capita)))
palr = colorBin(colorRamp(c('maroon', 'red', 'orange', 'yellow', 'green', "blue")), 
                d$change,
                bins = c(-15,-10,-5,0,5,10))

#Insert leaflet map
leaflet() %>% 
  addProviderTiles(leaflet::providers$Esri.WorldTopoMap, group = "Topo") %>% 
  addProviderTiles(leaflet::providers$Esri.WorldImagery, group = "World Imagery") %>%
  addPolygons(data = d, 
              group = "Annual Deer Harvest",
              fillOpacity = 0.5,
              weight = 1,
              stroke = TRUE,
              fillColor = palt(d$total),
              color = 'black',
              opacity = 1,
              popup= paste("County: ", d$NAME,"<br>", 
                           "Deer Harvest/Year (2020-23 Average):", d$total),
              layerId = ~OBJECTID) %>%
  addLegend("bottomright", 
            group = "Annual Deer Harvest",
            pal = palt, 
            values = d$total,
            title = "Annual Deer Harvest",
            opacity = 1) %>% 
  addPolygons(data = d, 
              group = "Deer Harvest/Sq. mi",
              fillOpacity = 0.5,
              weight = 1,
              stroke = TRUE,
              fillColor = pald(d$harvest_density),
              color = 'black',
              opacity = 1,
              popup= paste("County: ", d$NAME,"<br>", 
                           "Deer harvested/ Sq.mi:", d$harvest_density),
              layerId = ~OBJECTID) %>%
  addLegend("bottomright", 
            group = "Deer Harvest/Sq. mi",
            pal = pald, 
            values = d$harvest_density,
            title = "Deer Harvest/Sq. mi",
            opacity = 1) %>% 
  addPolygons(data = d, 
              group = "Deer Harvest/100 Residents",
              fillOpacity = 0.5,
              weight = 1,
              stroke = TRUE,
              color = 'black',
              fillColor = palc(d$harvest_capita),
              opacity = 1,
              popup= paste("County: ", d$NAME,"<br>", 
                           "Deer harvest/100 Residents:", d$harvest_capita),
              layerId = ~OBJECTID) %>%
  addLegend("bottomright", 
            group = "Deer Harvest/100 Residents",
            pal = palc, 
            values = d$harvest_capita,
            title = "Deer Harvest/100 Residents",
            opacity = 1)  %>%
  addPolygons(data = d, 
              group = "2020-23 Harvest Trend (% Change/Year)",
              fillOpacity = 0.5,
              weight = 1,
              stroke = TRUE,
              color = 'black',
              fillColor = palr(d$change),
              opacity = 1,
              popup= paste("County: ", d$NAME,"<br>", 
                           "Average Annual Change in Deer Harvest (%):", d$change),
              layerId = ~OBJECTID) %>%
  addLegend("bottomright", 
            group = "2020-23 Harvest Trend (% Change/Year)",
            pal = palr, 
            values = d$harvest_capita,
            title = "2020-23 Harvest Trend (% Change/Year)",
            opacity = 1)  %>%
  addLayersControl(overlayGroups = c("World Imagery", "Topo", 
                                     "Annual Deer Harvest", 
                                     "Deer Harvest/Sq. mi",
                                     "Deer Harvest/100 Residents",
                                     "2020-23 Harvest Trend (% Change/Year)"),
                                           options = layersControlOptions(collapsed = FALSE)) %>% 
  hideGroup(c("World Imagery",
              "Annual Deer Harvest",
              "Deer Harvest/100 Residents",
              "2020-23 Harvest Trend (% Change/Year)"))

```

### County Harvest Records Download
```{r}
  datatable(SA_deer,
    extensions = 'Buttons',
    
    options = list(
      paging = TRUE,
      searching = TRUE,
      fixedColumns = TRUE,
      autoWidth = TRUE,
      ordering = TRUE,
      dom = 'Bfrtip',
      buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
    )
  )
```  

### Data Sources

The data used in this page is scraped directly from the annual deer harvest reports publicly posted in .pdf format on the New York DEC website (e.g., <https://dec.ny.gov/sites/default/files/2024-05/2023deerrpt.pdf>). County spatial data is scraped directly from the State of New York public spatial repository (<https://data.gis.ny.gov/datasets/sharegisny::nys-civil-boundaries/about?layer=2>).