Alberta Oil Sands Royalty Data

Introduction

This research aims to analyze Alberta Oil Sands Royalty Data to provide a comprehensive overview of oil sands projects undertaken by leading Canadian oil and gas companies, along with the revenue generated in 2023. The analysis will feature graphical illustrations to highlight trends in Alberta’s oil sands development.

About the Data

Data Source: This analysis uses publicly available data obtained from the Government of Alberta’s website, specifically under the Department of Economic Development and Trade. The data repositories can be accessed via the following link: Oil Production by Municipality URL: https://open.alberta.ca/opendata/alberta-oil-sands-royalty-data1

Installing R packages

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(dplyr)
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths

Loading Data

Oil_Sands_Data <- read_csv("Oil-Sands-Project-Data.csv")
## Rows: 113 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (6): Project, Project Name, Operator Name, Royalty Type, Payout Status,...
## dbl  (3): Reporting Year, Gross Revenue ($/bbl), Royalty Rate (%)
## num (12): Project Revenue ($), Diluent Cost ($), Gross Revenue ($), Cleaned ...
## lgl  (1): Operator ID
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
view(Oil_Sands_Data)
glimpse(Oil_Sands_Data) # Quick summary of the oil sands project
## Rows: 113
## Columns: 22
## $ Project                                   <chr> "CSR005", "CSR006", "CSR008"…
## $ `Project Name`                            <chr> "Peace River", "Wolf Lake Cr…
## $ `Operator ID`                             <lgl> NA, NA, NA, NA, NA, NA, NA, …
## $ `Operator Name`                           <chr> "CANADIAN NATURAL RESOURCES …
## $ `Reporting Year`                          <dbl> 2023, 2023, 2023, 2023, 2023…
## $ `Project Revenue ($)`                     <dbl> 25837165, 229424336, 8856406…
## $ `Diluent Cost ($)`                        <dbl> 9097452, 65475546, 14525368,…
## $ `Gross Revenue ($)`                       <dbl> 16739712, 163948789, 7403869…
## $ `Cleaned Crude Bitumen at RCP (barrels)`  <dbl> 268884, 2268273, 1012371, 25…
## $ `Gross Revenue ($/bbl)`                   <dbl> 62.26, 72.28, 73.13, 72.90, …
## $ `Operating Costs ($)`                     <dbl> 37590027, 168034391, 2697023…
## $ `Capital Costs ($)`                       <dbl> 4048846, 66288833, 16051177,…
## $ `Return Allowance ($)`                    <dbl> 935783096, 1145929647, 0, 87…
## $ `Other Costs ($)`                         <dbl> 836986, 4650117, 0, 945639, …
## $ `Other Net Proceeds ($)`                  <dbl> 13590212, 173267958, 386462,…
## $ `Net Revenue ($)`                         <dbl> 0, 0, 31403745, 0, 0, 828135…
## $ `Royalty Type`                            <chr> "GROSS", "GROSS", "NET", "GR…
## $ `Royalty Rate (%)`                        <dbl> 5.00, 2.84, 29.84, 5.00, 7.1…
## $ `Royalty Payable ($)`                     <dbl> 836986, 4650117, 9372203, 94…
## $ `Payout Status`                           <chr> "PRE", "PRE", "POST", "PRE",…
## $ `Unrecovered Balance/Net Loss at EOP ($)` <dbl> 10299745144, 12535377348, 0,…
## $ Footnote                                  <chr> NA, NA, NA, NA, NA, NA, NA, …
colnames(Oil_Sands_Data) # Viewing the data columns
##  [1] "Project"                                
##  [2] "Project Name"                           
##  [3] "Operator ID"                            
##  [4] "Operator Name"                          
##  [5] "Reporting Year"                         
##  [6] "Project Revenue ($)"                    
##  [7] "Diluent Cost ($)"                       
##  [8] "Gross Revenue ($)"                      
##  [9] "Cleaned Crude Bitumen at RCP (barrels)" 
## [10] "Gross Revenue ($/bbl)"                  
## [11] "Operating Costs ($)"                    
## [12] "Capital Costs ($)"                      
## [13] "Return Allowance ($)"                   
## [14] "Other Costs ($)"                        
## [15] "Other Net Proceeds ($)"                 
## [16] "Net Revenue ($)"                        
## [17] "Royalty Type"                           
## [18] "Royalty Rate (%)"                       
## [19] "Royalty Payable ($)"                    
## [20] "Payout Status"                          
## [21] "Unrecovered Balance/Net Loss at EOP ($)"
## [22] "Footnote"

The data has 113 rows and 22 columns

Cleaning the data

sapply(Oil_Sands_Data, function (x) sum(is.na(x))) # Checking for the missing variables
##                                 Project                            Project Name 
##                                       0                                       0 
##                             Operator ID                           Operator Name 
##                                     113                                       0 
##                          Reporting Year                     Project Revenue ($) 
##                                       0                                       0 
##                        Diluent Cost ($)                       Gross Revenue ($) 
##                                       0                                       0 
##  Cleaned Crude Bitumen at RCP (barrels)                   Gross Revenue ($/bbl) 
##                                       0                                       0 
##                     Operating Costs ($)                       Capital Costs ($) 
##                                       0                                       0 
##                    Return Allowance ($)                         Other Costs ($) 
##                                       0                                       0 
##                  Other Net Proceeds ($)                         Net Revenue ($) 
##                                       0                                       0 
##                            Royalty Type                        Royalty Rate (%) 
##                                       0                                       0 
##                     Royalty Payable ($)                           Payout Status 
##                                       0                                       0 
## Unrecovered Balance/Net Loss at EOP ($)                                Footnote 
##                                       0                                      98

From the columns “Operator ID” has 113 variables missing; whilst “Footnote” has 98 variables missing.

Oil_Sands_Data_Cleaned <- Oil_Sands_Data %>%
  select(-`Operator ID`)

Understanding the projects executed in the year 2023; the Gross Revenue, Royalty Type & Rates, as well as the operators assigned to them respectively

Checking the minimum and maximum gross revenue generated in the reporting year 2023 by the Operators

Oil_Sand_Gross_Revenue <- Oil_Sands_Data_Cleaned %>%
  select(`Project Name`, `Operator Name`, `Gross Revenue ($/bbl)`)

# Checking operator with the maximum revenue in $.bbl
max_revenue <- Oil_Sand_Gross_Revenue %>%
  filter(`Gross Revenue ($/bbl)` == max(`Gross Revenue ($/bbl)`)) %>%
  drop_na()

# Checking operator with the minimum royalty rate
min_revenue <- Oil_Sand_Gross_Revenue %>%
  filter(`Gross Revenue ($/bbl)` == min(`Gross Revenue ($/bbl)`)) %>%
  drop_na()

# Checking operator with the top ten(10) highest gross revenue
top_10_cutoff <- quantile(Oil_Sand_Gross_Revenue$`Gross Revenue ($/bbl)`, 0.90, na.rm = TRUE)
Top_10_Percent <- Oil_Sand_Gross_Revenue %>%
  filter(`Gross Revenue ($/bbl)` >= top_10_cutoff) %>%
  arrange(-`Gross Revenue ($/bbl)`)
print(max_revenue)
## # A tibble: 1 × 3
##   `Project Name`         `Operator Name`                  Gross Revenue ($/bbl…¹
##   <chr>                  <chr>                                             <dbl>
## 1 North Murphy Lindbergh CANADIAN NATURAL RESOURCES LIMI…                   74.5
## # ℹ abbreviated name: ¹​`Gross Revenue ($/bbl)`
print(min_revenue)
## # A tibble: 11 × 3
##    `Project Name`                    `Operator Name`      Gross Revenue ($/bbl…¹
##    <chr>                             <chr>                                 <dbl>
##  1 Elk Point                         CANADIAN NATURAL RE…                      0
##  2 Frog Lake                         WEST LAKE ENERGY CO…                      0
##  3 Seal-Northern Cadotte Block II    BAYTEX ENERGY LTD.                        0
##  4 Seal South                        CAVALIER ENERGY INC.                      0
##  5 Germain Commercial Demonstration  CANADIAN NATURAL RE…                      0
##  6 Pelican Lake Project Grand Rapids CANADIAN NATURAL RE…                      0
##  7 Algar Lake SAGD                   GRIZZLY OIL SANDS U…                      0
##  8 Cliffdale                         BAYTEX ENERGY LTD.                        0
##  9 Saleski                           CANADIAN NATURAL RE…                      0
## 10 Sawn Lake Pilot                   ANDORA ENERGY CORPO…                      0
## 11 Pike 1 Project                    CANADIAN NATURAL RE…                      0
## # ℹ abbreviated name: ¹​`Gross Revenue ($/bbl)`
print(Top_10_Percent)
## # A tibble: 12 × 3
##    `Project Name`            `Operator Name`              Gross Revenue ($/bbl…¹
##    <chr>                     <chr>                                         <dbl>
##  1 North Murphy Lindbergh    CANADIAN NATURAL RESOURCES …                   74.5
##  2 Burnt Lake                CANADIAN NATURAL RESOURCES …                   73.9
##  3 Fire Tower                CANADIAN NATURAL RESOURCES …                   73.8
##  4 Goodlow                   CANADIAN NATURAL RESOURCES …                   73.6
##  5 North Pelican Lake        CANADIAN NATURAL RESOURCES …                   73.4
##  6 Edward Lake               CANADIAN NATURAL RESOURCES …                   73.4
##  7 Bonnyville                CANADIAN NATURAL RESOURCES …                   73.3
##  8 West Marwayne             CANADIAN NATURAL RESOURCES …                   73.3
##  9 Brintnell                 CANADIAN NATURAL RESOURCES …                   73.2
## 10 Passage Elk Project       GEAR ENERGY LTD.                               73.2
## 11 End Lake Project          CANADIAN NATURAL RESOURCES …                   73.2
## 12 Lindbergh Crown Agreement CANADIAN NATURAL RESOURCES …                   73.1
## # ℹ abbreviated name: ¹​`Gross Revenue ($/bbl)`

Maximum Gross Revenue of 74.64 $/bbl was generated from the project name “North Murphy Lindbergh” by the Operator “CANADIAN NATURAL RESOURCES LIMITED”. The minimum revenue generated is 0.

Checking the percentages of the royalty rates index for the Operators

Oil_Sand_Royalty_Rates <- Oil_Sands_Data_Cleaned %>%
  select(`Project Name`, `Operator Name`, `Royalty Rate (%)`) %>%
  drop_na() 

# Checking operator with the maximum royalty rate in percentage
max_royalty <- Oil_Sand_Royalty_Rates %>%
  filter(`Royalty Rate (%)` == max(`Royalty Rate (%)`)) %>%
  drop_na()

# Checking operator with the minimum royalty rate in percentage
min_royalty <- Oil_Sand_Royalty_Rates %>%
  filter(`Royalty Rate (%)` == min(`Royalty Rate (%)`)) %>%
  drop_na()

# Checking operator with the top ten(10) royalty rate
top_10_cutoff <- quantile(Oil_Sand_Royalty_Rates$`Royalty Rate (%)`, 0.90, na.rm = TRUE)
Top_10_Percent <- Oil_Sand_Royalty_Rates %>%
  filter(`Royalty Rate (%)` >= top_10_cutoff) %>%
  arrange(-`Royalty Rate (%)`)

print(max_royalty)
## # A tibble: 1 × 3
##   `Project Name` `Operator Name`    `Royalty Rate (%)`
##   <chr>          <chr>                           <dbl>
## 1 Murphy Seal    BAYTEX ENERGY LTD.               36.6
print(min_royalty)
## # A tibble: 11 × 3
##    `Project Name`                    `Operator Name`          `Royalty Rate (%)`
##    <chr>                             <chr>                                 <dbl>
##  1 Elk Point                         CANADIAN NATURAL RESOUR…                  0
##  2 Frog Lake                         WEST LAKE ENERGY CORP.                    0
##  3 Seal-Northern Cadotte Block II    BAYTEX ENERGY LTD.                        0
##  4 Seal South                        CAVALIER ENERGY INC.                      0
##  5 Germain Commercial Demonstration  CANADIAN NATURAL RESOUR…                  0
##  6 Pelican Lake Project Grand Rapids CANADIAN NATURAL RESOUR…                  0
##  7 Algar Lake SAGD                   GRIZZLY OIL SANDS ULC                     0
##  8 Cliffdale                         BAYTEX ENERGY LTD.                        0
##  9 Saleski                           CANADIAN NATURAL RESOUR…                  0
## 10 Sawn Lake Pilot                   ANDORA ENERGY CORPORATI…                  0
## 11 Pike 1 Project                    CANADIAN NATURAL RESOUR…                  0
print(Top_10_Percent)
## # A tibble: 42 × 3
##    `Project Name`    `Operator Name`                    `Royalty Rate (%)`
##    <chr>             <chr>                                           <dbl>
##  1 Murphy Seal       BAYTEX ENERGY LTD.                               36.6
##  2 Seibert Lake      CANADIAN NATURAL RESOURCES LIMITED               36.6
##  3 Brintnell         CANADIAN NATURAL RESOURCES LIMITED               36.6
##  4 John Lake         CANADIAN NATURAL RESOURCES LIMITED               36.6
##  5 Ashmont           CANADIAN NATURAL RESOURCES LIMITED               36.6
##  6 CNRL Cold Lake    CANADIAN NATURAL RESOURCES LIMITED               36.6
##  7 Fishing Lake      CANADIAN NATURAL RESOURCES LIMITED               36.6
##  8 Foster Creek      CENOVUS ENERGY INC.                              36.6
##  9 Edward Lake       CANADIAN NATURAL RESOURCES LIMITED               36.6
## 10 Elk Point Project CANADIAN NATURAL RESOURCES LIMITED               36.6
## # ℹ 32 more rows

The maximum royalty rate is 36.62% from the project name “Murphy Seal”, by the Operator “BAYTEX ENERGY LTD.” whilst minimum rate is 0%

Sorting the project by the operator name with royalty_rates greater & less than 10% and its corresponding royalty type

Oil_Sand_Royalty_Summary <- Oil_Sands_Data_Cleaned %>%
  select(`Project Name`, `Operator Name`, `Royalty Type`, `Royalty Rate (%)`) %>%
  arrange(desc(`Royalty Type`)) %>%  
  drop_na() 

print(Oil_Sand_Royalty_Summary)
## # A tibble: 113 × 4
##    `Project Name`            `Operator Name`   `Royalty Type` `Royalty Rate (%)`
##    <chr>                     <chr>             <chr>                       <dbl>
##  1 Lindbergh Crown Agreement CANADIAN NATURAL… NET                          29.8
##  2 Seibert Lake              CANADIAN NATURAL… NET                          36.6
##  3 Brintnell                 CANADIAN NATURAL… NET                          36.6
##  4 Elk Point                 CANADIAN NATURAL… NET                           0  
##  5 John Lake                 CANADIAN NATURAL… NET                          36.6
##  6 Ashmont                   CANADIAN NATURAL… NET                          36.6
##  7 Frog Lake                 WEST LAKE ENERGY… NET                           0  
##  8 CNRL Cold Lake            CANADIAN NATURAL… NET                          36.6
##  9 Fishing Lake              CANADIAN NATURAL… NET                          36.6
## 10 Foster Creek              CENOVUS ENERGY I… NET                          36.6
## # ℹ 103 more rows

Project names and the corresponding operator names with the royalty rate greater than 10%; all shared same royalty type “NET”, except for the “Frog Lake & Elk Point” project that have 0%. Conversely, project names and the corresponding operator names with the royalty rate less than 10%; all shared same royalty type “GROSS”.

Sorting the project by the Payout Status for each Operator

Oil_Sand_Payout_Status <- Oil_Sands_Data_Cleaned %>%
  select(`Project Name`, `Operator Name`, `Payout Status`) %>%
  arrange(`Payout Status`) %>%
  drop_na()
print(Oil_Sand_Payout_Status)
## # A tibble: 113 × 3
##    `Project Name`            `Operator Name`                    `Payout Status`
##    <chr>                     <chr>                              <chr>          
##  1 Lindbergh Crown Agreement CANADIAN NATURAL RESOURCES LIMITED POST           
##  2 Seibert Lake              CANADIAN NATURAL RESOURCES LIMITED POST           
##  3 Ft. Kent                  CANADIAN NATURAL RESOURCES LIMITED POST           
##  4 Brintnell                 CANADIAN NATURAL RESOURCES LIMITED POST           
##  5 Frog Lake                 CANADIAN NATURAL RESOURCES LIMITED POST           
##  6 Elk Point                 CANADIAN NATURAL RESOURCES LIMITED POST           
##  7 John Lake                 CANADIAN NATURAL RESOURCES LIMITED POST           
##  8 Ashmont                   CANADIAN NATURAL RESOURCES LIMITED POST           
##  9 Frog Lake                 WEST LAKE ENERGY CORP.             POST           
## 10 Lindbergh North           CANADIAN NATURAL RESOURCES LIMITED POST           
## # ℹ 103 more rows

68 projects exhibit the “POST” payout status, whilst 45 projects exhibit the “PRE” payout status!

Sorting the project by the footnote/comments made by each Operator

Oil_Sand_Footnote <- Oil_Sands_Data_Cleaned %>%
  select(`Project Name`, `Operator Name`, Footnote) %>%
  arrange(Footnote) %>%
  drop_na()
view(Oil_Sand_Footnote)

Data Visualization

Visualizing the project name and Operator name by the footnote

ggplot(data = Oil_Sand_Footnote) +
  geom_bar(mapping = aes(x = `Project Name`, fill = `Operator Name`,, alpha = 0.7))+
  facet_wrap(~ `Operator Name`, scales = "free_x")+
  labs(
    title = "Project Distribution by Operator", subtitle = "bar plots showing number of projects per operator", x = "Project Name", y = "Count")

The graphical illustrations above indicate that Canadian Natural Resources has undertaken the highest number of projects to date and also recorded the highest gross revenue in 2023.

Conclusion

Analysis from this data indicates that Canadian Natural Resources is a leading player in the Alberta oil sands industry, demonstrating both a high level of activity and significant financial success in the year 2023.