Skip to content

Commit 71ec302

Browse files
author
Stephanie Owen
committed
add commercial vignette
1 parent fca8a0a commit 71ec302

64 files changed

Lines changed: 443 additions & 126 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

R/get_commercial_data.R

Lines changed: 71 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434
#' @export
3535
#'
3636

37-
library(ROracle)
38-
library(DBI)
39-
library(fredr)
40-
library(tidyverse)
41-
library(DescTools) # For Winsorize
37+
# library(ROracle)
38+
# library(DBI)
39+
# library(fredr)
40+
# library(tidyverse)
41+
# library(DescTools) # For Winsorize
4242

4343
get_commercial_data <- function(
4444
ora_id,
@@ -62,6 +62,7 @@ get_commercial_data <- function(
6262
#source("//nefscdata/SOE_ESP_Data/ESPs/connect_socioeco_oracle.R")
6363
source(here::here('data-raw/scripts/connect_socioeco_oracle.R'))
6464

65+
6566
# Using the name consistent with your loop
6667
nefscusers.connect.string <- paste0(
6768
"(DESCRIPTION=",
@@ -70,19 +71,19 @@ get_commercial_data <- function(
7071
)
7172

7273
# 3. Connect ONCE outside the loop
73-
drv <- dbDriver("Oracle")
74-
conn <- dbConnect(drv, ora_id, password = oraprod_pw, dbname = nefscusers.connect.string)
74+
drv <- DBI::dbDriver("Oracle")
75+
conn <- DBI::dbConnect(drv, ora_id, password = oraprod_pw, dbname = nefscusers.connect.string)
7576

7677
##### 4. Price deflator
7778

78-
gdp_deflator <- fredr(
79+
gdp_deflator <- fredr::fredr(
7980
series_id = "GDPDEF",
8081
observation_start = as.Date(paste0(START.YEAR, "-01-01")),
8182
observation_end = as.Date(paste0(END.YEAR, "-12-31")),
8283
frequency = "a" # Annual
83-
) %>%
84-
mutate(YEAR = as.numeric(format(date, "%Y"))) %>%
85-
select(YEAR, GDPDEF = value)
84+
) |>
85+
dplyr::mutate(YEAR = as.numeric(format(date, "%Y"))) |>
86+
dplyr::select(YEAR, GDPDEF = value)
8687

8788

8889
# 1. Build the query string using your R variables
@@ -97,22 +98,22 @@ get_commercial_data <- function(
9798
)
9899

99100
# 2. Execute the query
100-
landings_data <- dbGetQuery(conn, query_landings)
101+
landings_data <- DBI::dbGetQuery(conn, query_landings)
101102

102103
# 3. View the result
103104
print(head(landings_data))
104105

105106

106107
# Standardize the data frame to match the required indicator format
107-
landings_final <- landings_data %>%
108-
mutate(
108+
landings_final <- landings_data |>
109+
dplyr::mutate(
109110
CATEGORY = "Commercial",
110111
INDICATOR_NAME = paste0("Commercial_", spp_name, "_Landings_LBS"),
111112
INDICATOR_TYPE = "Socioeconomic"
112-
) %>%
113+
) |>
113114
# Rename the sum column to DATA_VALUE (Equivalent to Stata rename)
114-
rename(DATA_VALUE = !!paste0("TOTAL_", spp_name)) %>%
115-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
115+
dplyr::rename(DATA_VALUE = !!paste0("TOTAL_", spp_name)) |>
116+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
116117

117118
#
118119

@@ -130,20 +131,20 @@ get_commercial_data <- function(
130131
)
131132

132133
# 2. Execute the query
133-
Nvessels_data <- dbGetQuery(conn, query_Nvessels)
134+
Nvessels_data <- DBI::dbGetQuery(conn, query_Nvessels)
134135

135136
# 3. Format to match Stata indicators
136-
Nvessels_final <- Nvessels_data %>%
137-
mutate(
137+
Nvessels_final <- Nvessels_data |>
138+
dplyr::mutate(
138139
CATEGORY = "Commercial",
139140
# This creates the long name you want in the final table
140141
INDICATOR_NAME = paste0("N_Commercial_Vessels_Landing_", spp_name),
141142
INDICATOR_TYPE = "Socioeconomic"
142-
) %>%
143+
) |>
143144
# Now this rename will work because the SQL alias matches 'N_VESSELS'
144145
# Note: Oracle often returns names in UPPERCASE, so we check for both.
145-
rename(DATA_VALUE = any_of(c("N_VESSELS", "N_vessels"))) %>%
146-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
146+
dplyr::rename(DATA_VALUE = any_of(c("N_VESSELS", "N_vessels"))) |>
147+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
147148

148149
# 4. View the result
149150
print(head(Nvessels_final))
@@ -158,42 +159,42 @@ get_commercial_data <- function(
158159
" AND YEAR BETWEEN ", START.YEAR, " AND ", END.YEAR
159160
)
160161

161-
price_raw <- dbGetQuery(conn, query_price)
162+
price_raw <- DBI::dbGetQuery(conn, query_price)
162163

163164
#--- 2. Calculate Average Annual Prices (Manual Winsorize) ---
164-
price_annual <- price_raw %>%
165-
mutate(price_lb = SPPVALUE / SPPLNDLB) %>%
165+
price_annual <- price_raw |>
166+
dplyr::mutate(price_lb = SPPVALUE / SPPLNDLB) |>
166167
# Remove Infinity or NA if pounds were 0
167-
filter(is.finite(price_lb)) %>%
168-
group_by(YEAR) %>%
169-
mutate(
168+
dplyr::filter(is.finite(price_lb)) |>
169+
dplyr::group_by(YEAR) |>
170+
dplyr::mutate(
170171
# Calculate the 1st and 99th percentiles for this year
171-
p01 = quantile(price_lb, 0.01, na.rm = TRUE),
172-
p99 = quantile(price_lb, 0.99, na.rm = TRUE),
172+
p01 = stats::quantile(price_lb, 0.01, na.rm = TRUE),
173+
p99 = stats::quantile(price_lb, 0.99, na.rm = TRUE),
173174
# "Squish" values outside that range (This is Winsorizing!)
174-
price_lb_w = case_when(
175+
price_lb_w = dplyr::case_when(
175176
price_lb < p01 ~ p01,
176177
price_lb > p99 ~ p99,
177178
TRUE ~ price_lb
178179
)
179-
) %>%
180-
summarise(AVG_NOMINAL_PRICE = mean(price_lb_w, na.rm = TRUE)) %>%
181-
ungroup()
180+
) |>
181+
dplyr::summarise(AVG_NOMINAL_PRICE = mean(price_lb_w, na.rm = TRUE)) |>
182+
dplyr::ungroup()
182183

183184
# --- 3. Adjust for Inflation (Deflate) ---
184185
# (Keep this the same as before)
185186

186-
base_index_val <- gdp_deflator$GDPDEF[gdp_deflator$YEAR == deflate_yr]
187+
base_index_val <- DBI::gdp_deflator$GDPDEF[gdp_deflator$YEAR == deflate_yr]
187188

188-
price_final <- price_annual %>%
189-
left_join(gdp_deflator, by = "YEAR") %>%
190-
mutate(
189+
price_final <- price_annual |>
190+
dplyr::left_join(gdp_deflator, by = "YEAR") |>
191+
dplyr::mutate(
191192
DATA_VALUE = (AVG_NOMINAL_PRICE / GDPDEF) * base_index_val,
192193
CATEGORY = "Commercial",
193194
INDICATOR_NAME = paste0("AVGPRICE_", spp_name, "_", deflate_yr, "_DOLlb"),
194195
INDICATOR_TYPE = "Socioeconomic"
195-
) %>%
196-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
196+
) |>
197+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
197198

198199
# --- 4. Cleanup ---
199200

@@ -216,43 +217,43 @@ get_commercial_data <- function(
216217
" AND YEAR BETWEEN ", START.YEAR, " AND ", END.YEAR,
217218
" GROUP BY YEAR ORDER BY YEAR"
218219
)
219-
revs_raw <- dbGetQuery(conn, query_revs)
220+
revs_raw <- DBI::dbGetQuery(conn, query_revs)
220221

221222
# 2. Deflate and Format
222-
revs_final <- revs_raw %>%
223-
left_join(gdp_deflator, by = "YEAR") %>%
224-
mutate(
223+
revs_final <- revs_raw |>
224+
dplyr::left_join(gdp_deflator, by = "YEAR") |>
225+
dplyr::mutate(
225226
DATA_VALUE = (TOTAL_REV / GDPDEF) * base_index_val,
226227
CATEGORY = "Commercial",
227228
INDICATOR_NAME = paste0("TOTALANNUALREV_", spp_name, "_", deflate_yr, "Dols"),
228229
INDICATOR_TYPE = "Socioeconomic"
229-
) %>%
230-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
230+
) |>
231+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
231232

232233
################## Fuel Prices ##################
233234

234235
# 1. Pull Diesel Price from FRED with Year Range
235-
fuel_raw <- fredr(
236+
fuel_raw <- fredr::fredr(
236237
series_id = "DDFUELNYH",
237238
observation_start = as.Date(paste0(START.YEAR, "-01-01")),
238239
observation_end = as.Date(paste0(END.YEAR, "-12-31")),
239240
frequency = "a"
240-
) %>%
241-
mutate(YEAR = as.numeric(format(date, "%Y"))) %>%
241+
) |>
242+
dplyr::mutate(YEAR = as.numeric(format(date, "%Y"))) |>
242243
# Stata 'drop if missing(DDFUELNYH)' equivalent:
243-
filter(!is.na(value)) %>%
244-
select(YEAR, DDFUELNYH = value)
244+
dplyr::filter(!is.na(value)) |>
245+
dplyr::select(YEAR, DDFUELNYH = value)
245246

246247
# 2. Deflate and Format
247-
fuel_final <- fuel_raw %>%
248-
left_join(gdp_deflator, by = "YEAR") %>%
249-
mutate(
248+
fuel_final <- fuel_raw |>
249+
dplyr::left_join(gdp_deflator, by = "YEAR") |>
250+
dplyr::mutate(
250251
DATA_VALUE = (DDFUELNYH / GDPDEF) * base_index_val,
251252
CATEGORY = "Commercial",
252253
INDICATOR_NAME = paste0("AVGANNUAL_DIESEL_PRICE", deflate_yr, "dols"),
253254
INDICATOR_TYPE = "Socioeconomic"
254-
) %>%
255-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
255+
) |>
256+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
256257

257258
############ Average Revenue Per Vessel ##################
258259

@@ -264,23 +265,23 @@ get_commercial_data <- function(
264265
" AND YEAR BETWEEN ", START.YEAR, " AND ", END.YEAR,
265266
" GROUP BY YEAR, PERMIT"
266267
)
267-
ves_rev_raw <- dbGetQuery(conn, query_ves_rev)
268+
ves_rev_raw <- DBI::dbGetQuery(conn, query_ves_rev)
268269

269270
# 2. Calculate Mean per Year and Deflate
270-
av_ves_rev_final <- ves_rev_raw %>%
271-
group_by(YEAR) %>%
272-
summarise(AVG_VESSEL_REV = mean(VESSEL_TOTAL_REV, na.rm = TRUE)) %>%
273-
left_join(gdp_deflator, by = "YEAR") %>%
274-
mutate(
271+
av_ves_rev_final <- ves_rev_raw |>
272+
dplyr::group_by(YEAR) |>
273+
dplyr:: summarise(AVG_VESSEL_REV = mean(VESSEL_TOTAL_REV, na.rm = TRUE)) |>
274+
dplyr::left_join(gdp_deflator, by = "YEAR") |>
275+
dplyr::mutate(
275276
DATA_VALUE = (AVG_VESSEL_REV / GDPDEF) * base_index_val,
276277
CATEGORY = "Commercial",
277278
INDICATOR_NAME = paste0("AVGVESREVperYr_", spp_name, "_", deflate_yr, "_DOLlb"),
278279
INDICATOR_TYPE = "Socioeconomic"
279-
) %>%
280-
select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
280+
) |>
281+
dplyr::select(YEAR, DATA_VALUE, CATEGORY, INDICATOR_NAME, INDICATOR_TYPE)
281282

282283
##disconnect from oracle
283-
dbDisconnect(conn)
284+
DBI::dbDisconnect(conn)
284285
################## MASTER APPEND ##################
285286

286287
# 1. Create a list of all your final data frames
@@ -296,12 +297,12 @@ get_commercial_data <- function(
296297

297298
# 2. Use bind_rows to stack them into one long file
298299
# This is identical to running 'append' multiple times in Stata
299-
final_master_file <- bind_rows(indicator_list)
300+
final_master_file <- dplyr::bind_rows(indicator_list)
300301

301302
# 3. Final Quality Check (Filtering by your start/end years)
302-
final_master_file <- final_master_file %>%
303-
filter(YEAR >= START.YEAR & YEAR <= END.YEAR) %>%
304-
arrange(INDICATOR_NAME, YEAR)
303+
final_master_file <- final_master_file |>
304+
dplyr::filter(YEAR >= START.YEAR & YEAR <= END.YEAR) |>
305+
dplyr::arrange(INDICATOR_NAME, YEAR)
305306

306307
# 4. Save the file (Equivalent to Stata's 'save ..., replace')
307308
# Use file.path to make sure the folder and filename are joined correctly

_pkgdown.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ navbar:
3737
href: articles/using_mrip_data.html
3838
- text: "Using {survdat} for Bottom Trawl Indicators"
3939
href: articles/using_survdat_data.html
40+
- text: "Pull Commercial Fisheries Data from Oracle"
41+
href: articles/create-commercial-indicators.html
4042
- text: "Functions"
4143
href: reference/index.html
4244
- text: "News"

docs/404.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/LICENSE-text.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/articles/accessing-survdat-data.html

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)