Tutorial: uso de R para predecir los precios del aguacate

Este tutorial presenta un ejemplo completo de un flujo de trabajo de Ciencia de Datos en Microsoft Fabric. Utiliza R para analizar y visualizar los precios del aguacate en Estados Unidos, y para construir un modelo de aprendizaje automático que predice los precios futuros del aguacate.

En este tutorial se describen estos pasos:

  • Carga de bibliotecas predeterminadas
  • Carga de los datos
  • Personalización de los datos
  • Adición de nuevos paquetes a la sesión
  • Analice y visualice los datos
  • Entrenamiento del modelo

Captura de pantalla de los aguacates.

Requisitos previos

  • Abra o cree un cuaderno. Para obtener información sobre cómo hacerlo, consulte Uso de cuadernos de Microsoft Fabric.

  • Establezca la opción de lenguaje en SparkR (R) para cambiar el lenguaje principal.

  • Adjunta tu cuaderno de notas a un lakehouse. En el lado izquierdo, seleccione Añadir para añadir un almacén de lago existente o crear uno.

Cargar bibliotecas

Use bibliotecas del runtime de R predeterminado:

library(tidyverse)
library(lubridate)

Carga de los datos

Lee los precios del aguacate de un archivo CSV que descargaste de internet:

df <- read.csv('https://synapseaisolutionsa.z13.web.core.windows.net/data/AvocadoPrice/avocado.csv', header = TRUE)
head(df,5)

Manipulación de los datos.

Primero, asigna nombres más claros a las columnas.

# To use lowercase
names(df) <- tolower(names(df))

# To use snake case
avocado <- df %>% 
  rename("av_index" = "x",
         "average_price" = "averageprice",
         "total_volume" = "total.volume",
         "total_bags" = "total.bags",
         "amount_from_small_bags" = "small.bags",
         "amount_from_large_bags" = "large.bags",
         "amount_from_xlarge_bags" = "xlarge.bags")

# Rename codes
avocado2 <- avocado %>% 
  rename("PLU4046" = "x4046",
         "PLU4225" = "x4225",
         "PLU4770" = "x4770")

head(avocado2,5)

Cambie los tipos de datos, quite las columnas no deseadas y agregue el consumo total:

# Convert data
avocado2$year = as.factor(avocado2$year)
avocado2$date = as.Date(avocado2$date)
avocado2$month  = factor(months(avocado2$date), levels = month.name)
avocado2$average_price =as.numeric(avocado2$average_price)
avocado2$PLU4046 = as.double(avocado2$PLU4046)
avocado2$PLU4225 = as.double(avocado2$PLU4225)
avocado2$PLU4770 = as.double(avocado2$PLU4770)
avocado2$amount_from_small_bags = as.numeric(avocado2$amount_from_small_bags)
avocado2$amount_from_large_bags = as.numeric(avocado2$amount_from_large_bags)
avocado2$amount_from_xlarge_bags = as.numeric(avocado2$amount_from_xlarge_bags)


# Remove unwanted columns
avocado2 <- avocado2 %>% 
  select(-av_index,-total_volume, -total_bags)

# Calculate total consumption 
avocado2 <- avocado2 %>% 
  mutate(total_consumption = PLU4046 + PLU4225 + PLU4770 + amount_from_small_bags + amount_from_large_bags + amount_from_xlarge_bags)

Instalar nuevos paquetes

Utilice la instalación de paquetes en línea para añadir nuevos paquetes a la sesión:

install.packages(c("repr","gridExtra","fpp2"))

Cargue las bibliotecas necesarias.

library(tidyverse) 
library(knitr)
library(repr)
library(gridExtra)
library(data.table)

Analice y visualice los datos

Compare los precios del aguacate convencional (no ecológico) por regiones:

options(repr.plot.width = 10, repr.plot.height =10)
# filter(mydata, gear %in% c(4,5))
avocado2 %>% 
  filter(region %in% c("PhoenixTucson","Houston","WestTexNewMexico","DallasFtWorth","LosAngeles","Denver","Roanoke","Seattle","Spokane","NewYork")) %>%  
  filter(type == "conventional") %>%           
  select(date, region, average_price) %>% 
  ggplot(aes(x = reorder(region, -average_price, na.rm = T), y = average_price)) +
  geom_jitter(aes(colour = region, alpha = 0.5)) +
  geom_violin(alpha = 0.5, linewidth = 1) +
  geom_hline(yintercept = 1.5, linetype = 2) +
  geom_hline(yintercept = 1, linetype = 2) +
  annotate("rect", xmin = "LosAngeles", xmax = "PhoenixTucson", ymin = -Inf, ymax = Inf, alpha = 0.2) +
  geom_text(x = "WestTexNewMexico", y = 2.5, label = "My top 5 cities!", hjust = 0.5) +
  stat_summary(fun = "mean") +
  labs(x = "US city",
       y = "Avocado prices", 
       title = "Figure 1. Violin plot of nonorganic avocado prices",
       subtitle = "Visual aids: \n(1) Black dots are average prices of individual avocados by city \n     between January 2015 and March 2018. \n(2) The plot is ordered descendingly.\n(3) The body of the violin becomes fatter when data points increase.") +
  theme_classic() + 
  theme(legend.position = "none", 
        axis.text.x = element_text(angle = 25, vjust = 0.65),
        plot.title = element_text(face = "bold", size = 15)) +
  scale_y_continuous(lim = c(0, 3), breaks = seq(0, 3, 0.5))

Captura de pantalla que muestra un gráfico de precios no orgánicos.

Céntrese en la región de Houston.

library(fpp2)
conv_houston <- avocado2 %>% 
  filter(region == "Houston",
         type == "conventional") %>% 
  group_by(date) %>% 
  summarise(average_price = mean(average_price))
  
# Set up ts   

conv_houston_ts <- ts(conv_houston$average_price,
                 start = c(2015, 1),
                 frequency = 52) 
# Plot

autoplot(conv_houston_ts) +
  labs(title = "Time plot: nonorganic avocado weekly prices in Houston",
       y = "$") +
  geom_point(colour = "brown", shape = 21) +
  geom_path(colour = "brown")

Captura de pantalla de un gráfico de precios de aguacate en Houston.

Entrenar un modelo de Machine Learning

Cree un modelo de predicción de precios para el área de Houston, basado en la media móvil integrada autorregresiva (ARIMA):

conv_houston_ts_arima <- auto.arima(conv_houston_ts,
                                    d = 1,
                                    approximation = F,
                                    stepwise = F,
                                    trace = T)
checkresiduals(conv_houston_ts_arima)

Captura de pantalla que muestra un gráfico de valores residuales.

Mostrar un gráfico de previsiones del modelo ARIMA de Houston:

conv_houston_ts_arima_fc <- forecast(conv_houston_ts_arima, h = 208)

autoplot(conv_houston_ts_arima_fc) + labs(subtitle = "Prediction of weekly prices of nonorganic avocados in Houston",
       y = "$") +
  geom_hline(yintercept = 2.5, linetype = 2, colour = "blue")

Captura de pantalla que muestra un gráfico de previsiones del modelo ARIMA.