Based on the market shares computed by units sold, we can infer that consumers prefer the 64 oz. buying option relative to the 96 oz. In the 64 oz. category, Tropicana Premium and Minute Maid lead the market both in units sold and revenue. There is a particularly tight race between the two brands in terms of units sold and it will be interesting to quantify the impact of cannibalization across Tropicana's three product offerings in the orange juice category. Futhermore, Dominick's private label brand follows close behind, placing third in terms of units sold. The fact that Dominick's consumers are signaling a preference for a private label product with relatively little brand name recognition relative to its competitors implies that they somewhat price sensitive. Thus, demand for orange juice is relatively elastic with respect to price.
#dir()
ojdata = read.csv("oj_scanner.csv", header=TRUE, sep=",")
#head(ojdata)
#1. Tropicana Premium 64 oz
#2. Tropicana Premium 96 oz
#3. Tropicana 64 oz
#4. Minute Maid 64 oz
#5. Dominick’s 64 oz private label
attach(ojdata)
#MARKET SHARE: UNIT LEVEL - sales are in ounces, needs to be units sold
#======================================================================
trop_pre64_sales = round(mean(sales1)/64.0)
trop_pre96_sales = round(mean(sales2)/96.0)
trop64_sales = round(mean(sales3)/64.0)
MM64_sales = round(mean(sales4)/64.0)
dom64_sales = round(mean(sales5)/64.0)
library(plotrix)
par(mfrow=c(1,2))
slices = c(trop_pre64_sales, trop_pre96_sales, trop64_sales, MM64_sales, dom64_sales)
labels = c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz.")
percent = round(slices/sum(slices)*100, 1)
# add percents to labels
labels = paste(percent)
# add % to labels
labels = paste(labels,"%",sep="")
Cols = c("red", "green", "blue", "orange", "grey")
plot1 = pie3D(slices, labels = labels, col=Cols, main="Market Share: Units Sold \n Orange Juice Product Category", explode=0.1, cex.main=1.5)
legend(x="topright", c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), fill=Cols, bty="n", cex=.85)
#===================================================================================================
#MARKET SHARE: REVENUE - avg. sales in ounces * avg. price per ounce
#======================================================================
trop_pre64_rev = round((mean(sales1) * mean(price1)), 2)
trop_pre96_rev = round((mean(sales2) * mean(price2)), 2)
trop64_rev = round((mean(sales3) * mean(price3)), 2)
MM64_rev = round((mean(sales4) * mean(price4)), 2)
dom64_rev = round((mean(sales5) * mean(price5)), 2)
slices_rev = c(trop_pre64_rev, trop_pre96_rev, trop64_rev, MM64_rev, dom64_rev)
percent_rev = round(slices_rev/sum(slices_rev)*100, 1)
# add percents to labels
labels_rev = paste(percent_rev)
# add % to labels
labels_rev = paste(labels_rev,"%",sep="")
Cols = c("red", "green", "blue", "orange", "grey")
plot2 = pie3D(slices_rev, labels = labels_rev, col=Cols, main="Market Share: Revenue \n Orange Juice Product Category", explode=0.1, cex.main=1.5)
legend(x="topright", c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), fill=Cols, bty="n", cex=.85)
As evidenced by the plots below, not all brands compete in an identical way. While all of the brands in the 64 oz. category leveraged in-store product displays almost equally, they differed with respect to their use of product features in weekly brochures. Most notably, the category leader, Tropicana Premium 64 oz., utilized this promotion strategy less than its closest competitors. However, Tropicana Premium 64 oz. represented the most variability in price per ounce over the 116 week period, which implies that Tropicana (or Dominick's) believes that price has a greater effect on sales than promotion for this particular product. In order to determine the efficacy of the pricing and promotion strategies with respect to each brand, we'll need to assess both the effect of price and promotion on demand for each.
par(mfrow=c(1,1))
#PRICE VARIABILITY
boxplot(ojdata[,7:11], main="Variability in Price per Ounce", col=Cols, labels=c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), cex.main=1.5, cex.lab=1.5, cex.axis=1.5)
legend(x="topright", c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), fill=Cols, bty="n", cex=1)
#FEATURE ACTIVITY
y = c(sum(feat1), sum(feat2), sum(feat3), sum(feat4), sum(feat5))
barplot(y, ylim=c(0, max(y)*1.5), col=Cols, main="Number of Times Product Featured", cex.axis=1.5, cex.main=1.5)
legend(x="topright", c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), fill=Cols, bty="n", cex=1)
#DISPLAY ACTIVITY
z = c(sum(disp1), sum(disp2), sum(disp3), sum(disp4), sum(disp5))
barplot(z, ylim=c(0, max(z)*1.5), col=Cols, main="Number of Times Product Displayed", cex.axis=1.5, cex.main=1.5)
legend(x="topright", c("Tropicana Premium 64 oz.", "Tropicana Premium 96 oz.", "Tropicana 64 oz.", "Minute Maid 64 oz.", "Dominick's Private Label 64 oz."), fill=Cols, bty="n", cex=1)