Motivação Link para o cabeçalho
Um dia pensei em descobrir qual drink da Starbucks aqui em Mendoza é mais barato em relação ao seu volume. A ideia geral é verificar qual aumenta de preço de forma proporcionalmente menor quando o volume do copo aumenta.
Para isso, tirei uma foto do cardápio que estava na parede da cafeteria:

Para extrair os dados da imagem, utilizei o Gemini, do Google. Dei uma instrução simples, porém detalhada, para criar um conjunto de dados estruturados a partir da foto:

O resultado foi exatamente o que eu desejava e, a partir dele, fiz a análise a seguir.
Análise dos Dados Link para o cabeçalho
Primeiro carrego todos os pacotes que necessito:
library(tidyverse)
theme_set(theme_minimal())
library(janitor)
library(gghighlight)
library(broom)
Em seguida, leio o arquivo criado pelo Gemini, corrigindo no processo o nome das colunas e os valores dos drinks para milhares de pesos. Também transformo a coluna tamanho em ml, para que a modelagem faça mais sentido numericamente, e retiro da análise os drinks que possuem apenas um tamanho.
sb <-
read_csv(file = "dados/sb.csv") |>
clean_names()
sb <-
sb |>
filter(tamanho != "Único") |>
mutate(preco = preco * 1000) |>
mutate(tamanho = case_when(
tamanho == "Alto" ~ 355,
tamanho == "Grande" ~ 475,
.default = 590
)) |>
mutate(tamanho = as.numeric(tamanho))
A primeira visualização obtida é a seguinte:
ggplot(sb, aes(x = tamanho, y = preco, group = nome_do_drink)) +
geom_point() +
geom_line() +
labs(x = "Tamanho", y = "Preço (ARS)") +
scale_x_continuous(breaks = c(355, 475, 590), minor_breaks = NULL, labels = c("Alto", "Grande", "Venti"))
Como era de se esperar, quanto maior o drink, maior seu preço. Entretanto, a inclinação da reta dos preços é o fator importante aqui. Quanto menos inclinada essa reta for, menor é o aumento proporcional do preço dos drinks.
Sendo assim, eu ajusto uma regressão linear a cada drink da loja. Aquele que tiver o menor valor para o coeficiente angular é o drink cujo preço aumenta de forma menos intensa com o aumento da porção.
sb |>
group_by(nome_do_drink) |>
group_modify(~ broom::tidy(lm(preco ~ tamanho, data = .x))) |>
filter(term != "(Intercept)") |>
arrange(estimate)
## # A tibble: 17 × 6
## # Groups: nome_do_drink [17]
## nome_do_drink term estimate std.error statistic p.value
## <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Vainilla Latte / Skinny Vainilla tama… 2.99 0.700 4.27 0.147
## 2 Refreshers (Mango Dragon / Frutil… tama… 3.41 0.449 7.59 0.0834
## 3 Americano tama… 3.83 0.293 13.1 0.0486
## 4 Pink Drink / Dragon Drink tama… 3.83 0.199 19.3 0.0330
## 5 Shaken Espresso (Avellana / Choc.… tama… 3.84 0.690 5.56 0.113
## 6 Flat White / Latte Macchiato tama… 4.25 0.0523 81.4 0.00782
## 7 Frappuccino (Todos os sabores bás… tama… 4.27 0.930 4.59 0.137
## 8 Caramel Macchiato tama… 4.67 0.794 5.88 0.107
## 9 Dulce de Leche Latte tama… 4.67 0.794 5.88 0.107
## 10 Mocha / Mocha Blanco tama… 4.67 0.794 5.88 0.107
## 11 Caramel Brulée Latte tama… 4.68 0.303 15.4 0.0412
## 12 Red Velvet Latte tama… 4.68 0.303 15.4 0.0412
## 13 Chocolate / Chocolate Blanco tama… 5.52 0.805 6.86 0.0921
## 14 Nuestras Perlas (Refreshers com P… tama… 5.53 0.178 31.1 0.0204
## 15 Matcha Latte / Chai Latte tama… 5.96 0.418 14.3 0.0446
## 16 Sweet Vainilla Cold Brew tama… 6.39 0.167 38.2 0.0167
## 17 Café del Día con Leche tama… 7.68 1.87 4.11 0.152
Portanto, os drinks Vainilla Latte / Skinny Vainilla são aqueles cujo preço menos aumenta em média, 2.99 pesos a cada ml a mais de drink. Por outro lado, Café del Día con Leche é o drink cujo preço aumenta mais, com 7.68 pesos de aumento, em média, a cada ml a mais que é pedido.
Portanto, quem quiser fazer seu dinheiro render mais, a pedida é escolher um Vainilla Latte para beber.
Abaixo mostro como é o comportamento do preço de ambos os drinks quando comparados com os demais. Veja como é possível perceber o grande aumento do Café del Dia con Leche, enquanto o Vainilla Latte possui uma taxa de aumento bastante inferior a todas as outras opções.
ggplot(sb, aes(x = tamanho, y = preco, group = nome_do_drink)) +
geom_point() +
geom_line() +
labs(x = "Tamanho", y = "Preço (ARS)") +
scale_x_continuous(breaks = c(355, 475, 590), minor_breaks = NULL, labels = c("Alto", "Grande", "Venti")) +
gghighlight(nome_do_drink %in%
c("Vainilla Latte / Skinny Vainilla",
"Café del Día con Leche"),
keep_scales = TRUE)