BC Beer Sales Analysis: Commercial, Regional, Micro Brew 2016-2023

liquor stats
reporting
analysis
Author

John Yuill

Published

June 30, 2024

Modified

August 4, 2024

Code
# refine data for current purposes
# save orig lmr_data
lmr_data_orig <- lmr_data
# add filter for Canadian categorized beer only
lmr_data <- lmr_data %>% filter(str_starts(category, 'Domestic'))
# clean-up, simplify cat/subcat names
lmr_data <- lmr_data %>% mutate(
  category = str_remove_all(category, "Domestic - "),
  category = str_remove(category, " Beer"),
  subcategory = str_remove_all(subcategory, "Domestic - "),
  subcategory = str_remove_all(subcategory, "BC "),
  subcategory = str_remove(subcategory, "Other Province "),
  subcategory = str_remove_all(subcategory, " Beer")
) 
# further renaming for simplification - easier to work with category code carried 
# over from previous (and arguably 'source' and 'category' more applicable)
lmr_data <- lmr_data %>% rename(
  source = category,
  category = subcategory
)

Intro

A look at data on BC beer sales by brewery type for Canadian breweries, taken from the quarterly British Columbia Liquor Distribution BoardLiquor Market Review’. This is a continuation of a previous analysis of annual liquor sales in British Columbia and quarter-of-year patterns in BC liquor sales, and BC Liquor Sales Analysis: Beer. Focus for this analysis is specifically on the brewery categories broken out in the report:

  • ‘commercial’
  • ‘regional’
  • ‘micro brew’

Data shown here goes back to beginning of 2016 (BC LDB fiscal yr 2016 Q4).

Note

As mentioned in previous articles: my expertise is in data analysis, not the liquor industry, so the emphasis is on exploring what the data can tell us. Industry-insider context may be lacking. In the interest of promoting data analysis and learning, I am sharing most of the R code used to process the data - hence the expandable ‘Code’ options.

Sales by Category by Source

Let’s see how things break-out by source (BC or other province) for these categories.

Code
## % share of categories by src -> see what composition is by source
## get annual ttls by src (all categories)
trend_yr_src_ttl <- lmr_data %>% group_by(year, source) %>% summarize(
    ttl_src_netsales=sum(netsales),
    ttl_src_litres=sum(litres)
    )

## get data for category by source
trend_yr_src_cat <- lmr_data %>% 
  group_by(year, source, category) %>% summarize(
    netsales=sum(netsales),
    litres=sum(litres))

# calc % of yr sales by category
# join with trend_yr_cat to get yr total cols
trend_yr_src_cat <- left_join(trend_yr_src_cat, trend_yr_src_ttl, 
                              by=c('year','source'))
# calc %
trend_yr_src_cat <- trend_yr_src_cat %>% mutate(
  litres_pc=litres/ttl_src_litres,
  netsales_pc=netsales/ttl_src_netsales
)

# ungroup for % chg calcs over lag
# set lag based on how far to look back for comp
lag <- 6
trend_yr_src_cat <- trend_yr_src_cat %>% ungroup %>% mutate(
  pc_chg_sales=netsales/lag(netsales, n=lag)-1,
  pc_chg_litres=litres/lag(litres, n=lag)-1,
  dollar_per_litre=netsales/litres,
  pc_chg_d_per_l=dollar_per_litre/lag(dollar_per_litre, n=lag)-1
)

Category Breakdown by Source

Sales in all the categories are driven by BC producers, with out-of-province producers only having an noticeable impact on commercial brewery sales.

  • Notably, beer from other province commercial breweries appears to have taken share from BC commercial breweries.
  • Presumably due to geographical reallocation of production by large multi-national breweries?

Year-over-Year % Changes by Category, Source

Breaking out the year-over-year % changes, we see that:

  • BC commercial beer has small but steady declines.
  • Other province commercial beer has had some surges in recent yrs, although stabilized in the last couple of years.
  • BC regional breweries have had some good growth years without much negative growth.
  • BC micro brews had some strong years in 2017-18 and 2021 (after 2020 pandemic) and growth has slowed/ended.
  • Other province regional and micro brews have had some large swings (mostly declines), but these are relative to a base too small to matter.
Code
trend_yr_src_cat %>% ggplot(aes(x=year, y=pc_chg_litres, fill=category))+
  geom_col(show.legend = FALSE)+
  facet_grid(source~.~category)+
  scale_y_continuous(labels=percent_format())+
  geom_hline(yintercept=0)+
  labs(title='Year-over-Year % change in Litre Sales', x="", y="Litre sales - % chg")+
  theme_bw()+
  theme(panel.grid = element_blank(),
        strip.background = element_rect(fill="lightblue"))

Cumulative % Change over the Years

Code
# calculate cumulative change across available yrs
# need to lag by n yrs in dataset x n categories (or items to be more general)
n_yrs <- max(trend_yr_src_cat$year)-min(trend_yr_src_cat$year)
n_items <- length(unique(trend_yr_src_cat$category)) # no. of categories
n_items <- n_items*length(unique(trend_yr_src_cat$source)) # x no. of sources
# lag calculation based on n_yrs x n_items
trend_yr_src_cat <- trend_yr_src_cat %>% mutate(
  pc_chg_lt_cum =  litres/lag(litres, n=(n_yrs*n_items))-1
)

Here we see the biggest cumulative change in other province commercial beer, more than doubling in litre sales during the period, accompanied by drop-off in BC commercial beer volume.

  • meanwhile, strong growth overall for BC regional and micro brew beers.
Code
ch_title <- paste0("Total % chg: ", min(trend_yr_src_cat$year), " - ", 
                   max(trend_yr_src_cat$year))
# bar chart
trend_yr_src_cat %>% ggplot(aes(x=category, y=pc_chg_lt_cum, fill=category))+geom_col()+
  scale_y_continuous(labels=percent_format())+
  geom_hline(yintercept=0, linetype='solid')+
  facet_grid(source~.)+
  #coord_flip()+
  labs(title=ch_title, x="", y="")+
  theme(axis.ticks.x = element_blank(),
        legend.position = "none")

Conclusion

Nothing too surprising or dramatic here, but a good overview of the dynamics of the BC beer market across 3 categories identified by BC LDB for Canadian producers.

Next

No further plans to explore the BC LDB data in this format, at least not for a while. Planning to turn my attention to a more interactive, sustainable dashboard that folks can use to explore the LDB Quarterly Market Review as they see fit. Stay tuned!

Footnotes

Notes on ‘net $ sales’:

  • the report says “Net dollar value is based on the price paid by the customer and excludes any applicable taxes.”
  • calculating average net dollar value per litre for beverage categories gives unrealistically low numbers compared to retail prices in BC liquor stores. (Beer at average $4/litre? Not even the cheapest beer on the BC Liquor Stores website.)
  • there is likely additional factors related to BC LDB pricing structure, wholesaling, etc.
  • best to consider average net dollar value per litre referred to below as relative indicator.