Introduction

This craft beer data comes from Kaggle and contains informations such as type of beer, ABV/IBU measurements, and the name and geographic information of the brewery it came from spread across two .csv files.

library(tidyverse)
library(plotly)
library(knitr)
beer <- read.csv("C:/Users/Evan/Documents/craft-cans/beers.csv")
brewery <- read.csv("C:/Users/Evan/Documents/craft-cans/breweries.csv")
glimpse(beer)
## Observations: 2,410
## Variables: 8
## $ X          <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1...
## $ abv        <dbl> 0.050, 0.066, 0.071, 0.090, 0.075, 0.077, 0.045, 0....
## $ ibu        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ id         <int> 1436, 2265, 2264, 2263, 2262, 2261, 2260, 2259, 225...
## $ name       <fctr> Pub Beer, Devil's Cup, Rise of the Phoenix, Sinist...
## $ style      <fctr> American Pale Lager, American Pale Ale (APA), Amer...
## $ brewery_id <int> 408, 177, 177, 177, 177, 177, 177, 177, 177, 177, 1...
## $ ounces     <dbl> 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12....
glimpse(brewery)
## Observations: 558
## Variables: 4
## $ X     <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16...
## $ name  <fctr> NorthGate Brewing , Against the Grain Brewery, Jack's A...
## $ city  <fctr> Minneapolis, Louisville, Framingham, San Diego, San Fra...
## $ state <fctr>  MN,  KY,  MA,  CA,  CA,  SC,  CO,  MI,  MI,  MI,  MI, ...

Many of the IBU values are missing, so for this analysis we will remove those beers with NA values before joining the tables together for analysis.

brewery$brewery_id <- brewery$X
df <- merge(beer, brewery, by="brewery_id")
df <- na.omit(df)

Exploratory Analysis

Initially, we choose to use a dot plot to view the relationship between two of the main continuous variables of ABV and IBUs, noting a moderately positive relationship.

ggplotly(ggplot(df, aes(x = ibu,y=abv)) + 
  geom_point() + 
  geom_smooth() +
  labs(x = "IBUs", y = "ABV", title = "ABV by IBUs"))

Jittering by ounces also displays the even distribution of ABV for the values of 12 and 16 ounces, also revealing the lack of higher values of ounces beyond the common sizes.

ggplotly(ggplot(df, aes(x = factor(ounces), y =abv)) + 
  geom_jitter() + 
  labs(x = "Ounces", y="ABV", title="ABV by Ounces"))

By State

Creating a table grouped by state gives us the breweries with the most unique breweries, as well as the mean IBU and ABV for each (unsurprisingly, Colorado comes out on top.) We can also view the relationship graphically in the form of a barplot.

kable(df %>% 
  group_by(state) %>% 
  summarise(n_unique = n_distinct(name.y), 
  mean_abv = mean(abv), mean_ibu = mean(ibu)) %>% 
  arrange(desc(n_unique)))
state n_unique mean_abv mean_ibu
CO 34 0.0648356 47.43151
CA 31 0.0628889 46.28148
TX 23 0.0603258 40.39326
OR 21 0.0567011 47.94253
IN 17 0.0637692 42.98901
WA 16 0.0577907 44.97674
MI 15 0.0576579 36.73684
VA 13 0.0574857 45.37143
MA 12 0.0563137 38.00000
NY 12 0.0604565 46.00000
PA 12 0.0606170 42.44681
NC 11 0.0639333 43.30000
FL 10 0.0628378 46.75676
IL 10 0.0597949 41.46154
MN 10 0.0604348 49.95652
MO 9 0.0527586 32.48276
OH 9 0.0605000 44.18750
WI 9 0.0539524 26.54762
VT 7 0.0568824 42.29412
AK 6 0.0561765 40.88235
AZ 6 0.0610417 35.20833
GA 5 0.0585714 46.28571
ID 5 0.0598235 55.11765
OK 5 0.0595455 40.72727
IA 4 0.0603200 33.20000
MD 4 0.0588000 36.80000
ME 4 0.0612857 52.85714
MT 4 0.0572174 41.69565
RI 4 0.0560500 31.55000
AL 3 0.0622222 51.22222
CT 3 0.0638333 40.83333
HI 3 0.0542222 32.66667
KS 3 0.0554211 36.68421
LA 3 0.0539000 33.00000
NJ 3 0.0573750 46.37500
NM 3 0.0623333 57.00000
TN 3 0.0544000 41.60000
WY 3 0.0542500 32.08333
KY 2 0.0645714 40.71429
MS 2 0.0589091 46.45455
NE 2 0.0547778 30.66667
NV 2 0.0612500 46.50000
SC 2 0.0516000 30.20000
UT 2 0.0560000 45.54545
AR 1 0.0400000 39.00000
DC 1 0.0650000 55.25000
DE 1 0.0550000 52.00000
ND 1 0.0540000 40.33333
NH 1 0.0465000 48.50000
WV 1 0.0620000 57.50000
ggplotly(df %>% 
  group_by(state) %>% 
  summarise(n_unique = n_distinct(name.y)) %>% 
  ggplot(aes(x = reorder(state, desc(n_unique)), y = n_unique)) + 
  geom_bar(stat="identity") + 
  theme_bw() + 
  labs(x = "State",y = "Unique Breweries", 
  title = "Number of Unique Breweries per State"))

In a similar vein, we can determine the states with the highest amount of unique styles (again, Colorado seems the be the state to live in for quality craft beer drinking)

df %>% 
  group_by(state) %>% 
  summarise(n_unique = n_distinct(style)) %>% 
  arrange(desc(n_unique))
## # A tibble: 50 x 2
##     state n_unique
##    <fctr>    <int>
##  1     CO       43
##  2     TX       40
##  3     IN       37
##  4     CA       33
##  5     PA       30
##  6     NY       25
##  7     MN       23
##  8     MA       22
##  9     OR       20
## 10     IL       19
## # ... with 40 more rows
ggplotly(df %>% 
  group_by(state) %>% 
  summarise(n_unique = n_distinct(style)) %>% 
  ggplot(aes(x = reorder(state, desc(n_unique)), y = n_unique)) + 
  geom_bar(stat="identity") + 
  theme_bw() + 
  labs(x = "State", y = "Unique Styles", 
  title = "Number of Unique Styles per State"))

We can also group by both state and style, returning a table of the most common state/style combinations - since IPAs are by far the most common beer in the dataset, they appear frequently in the table.

df %>% 
  group_by(state, style) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n))
## # A tibble: 657 x 3
## # Groups:   state [50]
##     state                   style     n
##    <fctr>                  <fctr> <int>
##  1     CA            American IPA    38
##  2     CO American Pale Ale (APA)    25
##  3     CO            American IPA    23
##  4     OR            American IPA    19
##  5     IN            American IPA    18
##  6     FL            American IPA    17
##  7     WA            American IPA    17
##  8     OR American Pale Wheat Ale    14
##  9     CA American Pale Ale (APA)    13
## 10     MA            American IPA    13
## # ... with 647 more rows

Boxplots allow us the view the mean and variation of ABVs and IBU by state with ease.

ggplotly(df %>% 
  ggplot(aes(x = fct_reorder(state, abv, fun = median, .desc = TRUE), y = abv)) + 
  geom_boxplot() + 
    labs(x = "State", y = "ABV",
    title = "ABV by State"))
ggplotly(df %>% 
  ggplot(aes(x = fct_reorder(state, ibu, fun = median, .desc = TRUE), y = ibu)) + 
  geom_boxplot() + 
  labs(x = "State", y = "IBUs", 
  title = "IBUs by State"))

Finally, an interactive jitter plot can help visualize which states produce which styles the most.

ggplotly(df %>%
  ggplot(aes(x = state, y = style, col = ounces)) + 
  geom_jitter() + 
  labs(x = "State",y = "Style", 
  title = "Styles by State"))

By City

Like for states above, by city plots allow us to determine and plot unique breweries per city - looks like Portlanders are in luck!

df %>% 
  group_by(city) %>% 
  summarise(n_unique = n_distinct(name.y), 
  mean_abv = mean(abv), mean_ibu = mean(ibu)) %>% 
  arrange(desc(n_unique))
## # A tibble: 281 x 4
##            city n_unique   mean_abv mean_ibu
##          <fctr>    <int>      <dbl>    <dbl>
##  1     Portland       10 0.05265854 41.17073
##  2      Boulder        8 0.06203846 37.50000
##  3    San Diego        7 0.06225714 54.20000
##  4      Seattle        7 0.05541667 40.83333
##  5       Austin        5 0.05630769 39.07692
##  6      Chicago        5 0.05647059 33.88235
##  7       Denver        5 0.06676471 53.05882
##  8         Bend        4 0.06166667 45.66667
##  9 Indianapolis        4 0.06883333 45.47222
## 10    Anchorage        3 0.05610000 40.40000
## # ... with 271 more rows
df %>% 
  group_by(city) %>% 
  summarise(n_unique = n_distinct(name.y)) %>%
  filter(n_unique > 2) %>% 
  ggplot(aes(x = reorder(city, desc(n_unique)), y = n_unique)) + 
  geom_bar(stat="identity") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 55, hjust = 1)) + 
  labs(x = "City", y = "Unique Breweries", 
  title = "Number of Unique Breweries by State")

Let’s determine the cities with the most unique styles as well. Perhaps surprisingly, Indianapolis comes out on top.

df %>% 
  group_by(city) %>% 
  summarise(n_unique = n_distinct(style)) %>%
  arrange(desc(n_unique))
## # A tibble: 281 x 2
##             city n_unique
##           <fctr>    <int>
##  1  Indianapolis       20
##  2      Brooklyn       18
##  3       Boulder       17
##  4      Portland       16
##  5        Aurora       15
##  6   Minneapolis       14
##  7     San Diego       14
##  8    Louisville       12
##  9 San Francisco       12
## 10     Davenport       11
## # ... with 271 more rows
df %>% 
  group_by(city) %>% 
  summarise(n_unique = n_distinct(style)) %>%
  filter(n_unique > 8) %>% 
  ggplot(aes(x = reorder(city, desc(n_unique)), y = n_unique)) + 
  geom_bar(stat="identity") + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 55, hjust = 1)) + 
  labs(x = "City", y = "Unique Styles", 
  title = "Number of Unique Styles by State")

The table grouped by city and style shows that, among other things, Portlanders really love their wheat beers!

df %>% 
  group_by(city, style) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n))
## # A tibble: 1,032 x 3
## # Groups:   city [281]
##             city                          style     n
##           <fctr>                         <fctr> <int>
##  1      Portland        American Pale Wheat Ale    14
##  2     San Diego                   American IPA    11
##  3         Tampa                   American IPA    11
##  4   Los Angeles                   American IPA     9
##  5      Longmont        American Pale Ale (APA)     8
##  6       Seattle                   American IPA     8
##  7       Ashland        American Pale Ale (APA)     7
##  8  Indianapolis                   American IPA     7
##  9 Stevens Point         American Adjunct Lager     7
## 10      Longmont American Double / Imperial IPA     6
## # ... with 1,022 more rows

By Style

What styles are present in the dataset? (Quite a few, in fact!)

levels(df$style)
##   [1] ""                                   
##   [2] "Abbey Single Ale"                   
##   [3] "Altbier"                            
##   [4] "American Adjunct Lager"             
##   [5] "American Amber / Red Ale"           
##   [6] "American Amber / Red Lager"         
##   [7] "American Barleywine"                
##   [8] "American Black Ale"                 
##   [9] "American Blonde Ale"                
##  [10] "American Brown Ale"                 
##  [11] "American Dark Wheat Ale"            
##  [12] "American Double / Imperial IPA"     
##  [13] "American Double / Imperial Pilsner" 
##  [14] "American Double / Imperial Stout"   
##  [15] "American India Pale Lager"          
##  [16] "American IPA"                       
##  [17] "American Malt Liquor"               
##  [18] "American Pale Ale (APA)"            
##  [19] "American Pale Lager"                
##  [20] "American Pale Wheat Ale"            
##  [21] "American Pilsner"                   
##  [22] "American Porter"                    
##  [23] "American Stout"                     
##  [24] "American Strong Ale"                
##  [25] "American White IPA"                 
##  [26] "American Wild Ale"                  
##  [27] "Baltic Porter"                      
##  [28] "Belgian Dark Ale"                   
##  [29] "Belgian IPA"                        
##  [30] "Belgian Pale Ale"                   
##  [31] "Belgian Strong Dark Ale"            
##  [32] "Belgian Strong Pale Ale"            
##  [33] "Berliner Weissbier"                 
##  [34] "Bière de Garde"                    
##  [35] "Bock"                               
##  [36] "Braggot"                            
##  [37] "California Common / Steam Beer"     
##  [38] "Chile Beer"                         
##  [39] "Cider"                              
##  [40] "Cream Ale"                          
##  [41] "Czech Pilsener"                     
##  [42] "Doppelbock"                         
##  [43] "Dortmunder / Export Lager"          
##  [44] "Dubbel"                             
##  [45] "Dunkelweizen"                       
##  [46] "English Barleywine"                 
##  [47] "English Bitter"                     
##  [48] "English Brown Ale"                  
##  [49] "English Dark Mild Ale"              
##  [50] "English India Pale Ale (IPA)"       
##  [51] "English Pale Ale"                   
##  [52] "English Pale Mild Ale"              
##  [53] "English Stout"                      
##  [54] "English Strong Ale"                 
##  [55] "Euro Dark Lager"                    
##  [56] "Euro Pale Lager"                    
##  [57] "Extra Special / Strong Bitter (ESB)"
##  [58] "Flanders Oud Bruin"                 
##  [59] "Flanders Red Ale"                   
##  [60] "Foreign / Export Stout"             
##  [61] "Fruit / Vegetable Beer"             
##  [62] "German Pilsener"                    
##  [63] "Gose"                               
##  [64] "Grisette"                           
##  [65] "Hefeweizen"                         
##  [66] "Herbed / Spiced Beer"               
##  [67] "Irish Dry Stout"                    
##  [68] "Irish Red Ale"                      
##  [69] "Kölsch"                            
##  [70] "Keller Bier / Zwickel Bier"         
##  [71] "Kristalweizen"                      
##  [72] "Light Lager"                        
##  [73] "Low Alcohol Beer"                   
##  [74] "Märzen / Oktoberfest"              
##  [75] "Maibock / Helles Bock"              
##  [76] "Mead"                               
##  [77] "Milk / Sweet Stout"                 
##  [78] "Munich Dunkel Lager"                
##  [79] "Munich Helles Lager"                
##  [80] "Oatmeal Stout"                      
##  [81] "Old Ale"                            
##  [82] "Other"                              
##  [83] "Pumpkin Ale"                        
##  [84] "Quadrupel (Quad)"                   
##  [85] "Radler"                             
##  [86] "Rauchbier"                          
##  [87] "Roggenbier"                         
##  [88] "Russian Imperial Stout"             
##  [89] "Rye Beer"                           
##  [90] "Saison / Farmhouse Ale"             
##  [91] "Schwarzbier"                        
##  [92] "Scotch Ale / Wee Heavy"             
##  [93] "Scottish Ale"                       
##  [94] "Shandy"                             
##  [95] "Smoked Beer"                        
##  [96] "Tripel"                             
##  [97] "Vienna Lager"                       
##  [98] "Wheat Ale"                          
##  [99] "Winter Warmer"                      
## [100] "Witbier"

Let’s dig into the styles some more and determine/plot the counts of each. As mentioned earlier, American IPAs are the most represented by far, which makes sense considering the data was scraped from an American website.

kable(df %>% 
  group_by(style) %>% 
  summarise(n = n(), mean_abv = mean(abv), 
  mean_ibu = mean(ibu), mean_oz = mean(ounces)) %>% 
  arrange(desc(n)))
style n mean_abv mean_ibu mean_oz
American IPA 301 0.0648073 67.634552 13.47243
American Pale Ale (APA) 153 0.0549739 44.941176 13.00915
American Amber / Red Ale 77 0.0571948 36.298701 13.45455
American Double / Imperial IPA 75 0.0876933 93.320000 14.01600
American Blonde Ale 61 0.0501475 20.983607 13.31148
American Pale Wheat Ale 61 0.0475574 20.688525 13.57377
American Porter 39 0.0603333 31.923077 14.15385
American Brown Ale 38 0.0578421 29.894737 13.36842
Fruit / Vegetable Beer 30 0.0513333 14.200000 13.20000
Hefeweizen 27 0.0516296 17.592593 13.18519
Kölsch 27 0.0484444 21.777778 12.88889
Witbier 24 0.0504167 16.208333 13.00000
Saison / Farmhouse Ale 23 0.0580870 28.391304 14.08696
Märzen / Oktoberfest 21 0.0570952 22.904762 13.33333
American Black Ale 20 0.0731500 68.900000 13.60000
Cream Ale 18 0.0531111 20.333333 13.77778
German Pilsener 17 0.0527059 34.176471 13.88235
American Amber / Red Lager 16 0.0480625 23.250000 13.25000
American Pale Lager 16 0.0510625 26.750000 13.75000
American Stout 16 0.0613750 41.312500 14.75000
Czech Pilsener 16 0.0524375 33.812500 14.20000
American Pilsner 14 0.0481429 23.285714 12.85714
Extra Special / Strong Bitter (ESB) 14 0.0575000 45.714286 12.85714
Vienna Lager 14 0.0504286 24.357143 12.85714
Scotch Ale / Wee Heavy 13 0.0756923 24.230769 14.76923
American Strong Ale 12 0.0760833 65.416667 14.33333
Munich Helles Lager 12 0.0492500 17.916667 12.33333
American Adjunct Lager 11 0.0465455 11.000000 12.36364
Oatmeal Stout 11 0.0576364 28.090909 13.81818
Pumpkin Ale 11 0.0604545 24.818182 14.18182
Scottish Ale 11 0.0714545 26.909091 13.45455
English Brown Ale 10 0.0526000 23.200000 13.60000
Rye Beer 9 0.0661111 52.000000 15.55556
Altbier 8 0.0546250 34.125000 13.00000
Belgian Pale Ale 8 0.0540000 23.875000 13.50000
Irish Red Ale 8 0.0527500 28.000000 14.50000
Russian Imperial Stout 8 0.0995000 86.500000 13.00000
Winter Warmer 8 0.0695000 24.625000 13.00000
English India Pale Ale (IPA) 7 0.0621429 54.714286 13.14286
Gose 7 0.0451429 9.428571 13.14286
American White IPA 6 0.0620000 48.833333 12.66667
Milk / Sweet Stout 6 0.0548333 25.166667 15.33333
American Dark Wheat Ale 5 0.0522000 27.600000 13.60000
Berliner Weissbier 5 0.0390000 7.800000 15.20000
Dortmunder / Export Lager 5 0.0538000 23.800000 15.20000
English Pale Ale 5 0.0518000 31.400000 13.60000
Herbed / Spiced Beer 5 0.0560000 22.200000 13.60000
Euro Dark Lager 4 0.0552500 27.000000 13.00000
Schwarzbier 4 0.0470000 31.000000 13.00000
Tripel 4 0.0897500 23.500000 13.22500
American Double / Imperial Stout 3 0.0966667 62.000000 15.73333
American India Pale Lager 3 0.0626667 63.333333 13.33333
Baltic Porter 3 0.0936667 54.000000 13.33333
Belgian Dark Ale 3 0.0780000 29.666667 14.66667
Belgian IPA 3 0.0710000 57.000000 14.66667
Bock 3 0.0633333 25.000000 14.66667
English Barleywine 3 0.1076667 66.666667 16.00000
English Bitter 3 0.0443333 30.666667 14.66667
English Strong Ale 3 0.0823333 54.000000 13.33333
Foreign / Export Stout 3 0.0656667 38.666667 12.00000
Irish Dry Stout 3 0.0566667 38.666667 14.66667
Keller Bier / Zwickel Bier 3 0.0503333 24.333333 14.66667
Light Lager 3 0.0363333 11.666667 13.33333
Munich Dunkel Lager 3 0.0570000 20.333333 12.00000
Radler 3 0.0403333 19.666667 13.33333
2 0.0565000 24.000000 12.00000
Abbey Single Ale 2 0.0490000 22.000000 12.00000
American Barleywine 2 0.0990000 96.000000 10.20000
American Wild Ale 2 0.0715000 27.000000 19.20000
Belgian Strong Pale Ale 2 0.0835000 25.000000 12.00000
Bière de Garde 2 0.0690000 23.000000 12.00000
California Common / Steam Beer 2 0.0535000 41.000000 14.00000
Chile Beer 2 0.0545000 24.000000 14.00000
Doppelbock 2 0.0785000 24.500000 14.00000
Dubbel 2 0.0745000 21.000000 14.00000
Dunkelweizen 2 0.0560000 16.000000 12.00000
English Dark Mild Ale 2 0.0400000 22.000000 14.00000
Maibock / Helles Bock 2 0.0565000 27.500000 14.00000
American Double / Imperial Pilsner 1 0.0750000 85.000000 12.00000
Belgian Strong Dark Ale 1 0.0920000 72.000000 12.00000
English Pale Mild Ale 1 0.0500000 16.000000 12.00000
English Stout 1 0.0800000 66.000000 16.00000
Euro Pale Lager 1 0.0530000 22.000000 12.00000
Flanders Oud Bruin 1 0.0630000 23.000000 16.00000
Grisette 1 0.0560000 25.000000 12.00000
Old Ale 1 0.0720000 40.000000 12.00000
Other 1 0.0480000 16.000000 12.00000
Quadrupel (Quad) 1 0.0900000 24.000000 16.00000
Roggenbier 1 0.0500000 20.000000 16.00000
Smoked Beer 1 0.0510000 35.000000 16.00000
Wheat Ale 1 0.0600000 24.000000 16.00000
df %>% 
  group_by(style) %>% 
  summarise(n = n()) %>% 
  filter(n > 25) %>% 
  arrange(desc(n)) %>% 
  ggplot(aes(x = reorder(style, desc(n)), y = n)) +
  geom_bar(stat="identity") + 
  theme(axis.text.x = element_text(angle = 55, hjust = 1)) + 
  labs(x = "Style", y = "Count", 
  title = "Count of Styles")

We can also do some large-scale boxplots like for state to determine differences in ABV/ABU among the different styles, first filtering to ensure the style has at least 5 observations to keep the plot from getting out of hand.

df.filter <- df %>% 
  group_by(style) %>%
  mutate(n = n()) %>% 
  filter(n >= 5)

df.filter %>% 
  ggplot(aes(x = fct_reorder(style, abv, fun = median, .desc = TRUE), y = abv)) + 
  geom_boxplot() + 
  theme(axis.text.x = element_text(angle = 55, hjust = 1)) + 
  labs(x = "Style (n > 5)", y = "ABV", 
  title = "ABV by Style (n > 5)")

df.filter %>% 
  ggplot(aes(x = fct_reorder(style, ibu, fun = median, .desc = TRUE), y = ibu)) + 
  geom_boxplot() + 
  theme(axis.text.x = element_text(angle = 55, hjust = 1)) + 
  labs(x = "Style (n > 5)", y = "IBU", 
  title = "IBU by Style (n > 5)") 

We also thought it would be fun to use a 3D dot plot involving the three continuous variables in the dataset ounces, ABV, and IBU colored by style. Ounces as the z-axis gives the plot an interesting vertical style, and we can see the lighter colored beers such as fruit/vegetables and cream beers grouping towards the x and y axis given their low ABV and IBU values. Once again, the styles were filtered by their count before being used for the plot, this time with a limiting value of 25 to keep the plot from getting too cluttered.

library(RColorBrewer)
beer_popular <- beer %>% 
  group_by(style) %>% 
  mutate(n = n()) %>% 
  filter(n >= 25, !(style %in% c("Kölsch","Märzen / Oktoberfest")))
plot_ly(beer_popular, x = ~abv, y = ~ibu, z = ~ounces, color = ~style, 
        colors = colorRampPalette(brewer.pal(11,"Spectral"))(100), hoverinfo = 'text', text = ~paste('</br>Beer: ', name,
        '</br>Style: ', style,
        '</br> ABV: ', abv,
        '</br> IBUs: ', ibu,
        '</br> Ounces: ', ounces)) %>%
  add_markers() %>%                                                          
  layout(scene = list(xaxis = list(title = 'ABV'),
        yaxis = list(title = 'IBU'),
        zaxis = list(title = 'Ounces')))

Conclusion

We performed analysis on a merged dataset of craft beers and the breweries that made them, focusing on by state, by city, and by style variation. Overall, we were able to get a good sense of the distribution of styles, as well as determine which states and cities were most represented in the dataset.