Tutorial: Predicción de precios de aguacate con R
En este artículo se muestra un ejemplo completo del uso de R para analizar, visualizar los precios de aguacate en Estados Unidos y predecir los precios futuros de aguacate.
Importante
Microsoft Fabric está en versión preliminar.
Requisitos previos
Una suscripción de Microsoft Fabric. O regístrese para obtener una Evaluación gratuita de Microsoft Fabric (versión preliminar).
Inicie sesión en Microsoft Fabric.
Cambie a la experiencia de ciencia de datos con el icono del selector de experiencias en la esquina izquierda de la página principal.
Abra o cree un cuaderno. Para obtener información sobre cómo hacerlo, consulte Uso de cuadernos de Microsoft Fabric.
Cambie el idioma principal estableciendo la opción de idioma en SparkR (R).
Adjunte el cuaderno a un almacén de lago. 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)
library(hms)
Carga de los datos
Lea los precios del aguacate desde un archivo .csv en Internet.
df <- read.csv('https://synapseaisolutionsa.blob.core.windows.net/public/AvocadoPrice/avocado.csv', header = TRUE)
head(df,5)
Manipulación de los datos.
En primer lugar, cambie el nombre de los datos para que tengan nombres más descriptivos.
# to lower case
names(df) <- tolower(names(df))
# to 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 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 un nuevo paquete
Use la instalación del paquete insertado para agregar nuevos paquetes a la sesión.
install.packages(c("repr","gridExtra","fpp2"))
Cargue las bibliotecas que se van a usar.
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(outlier.shape = NA, alpha = 0.5, size = 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 Non-organic Avocado Prices",
subtitle = "Visual aids: \n(1) Black dots are average price of individual avocado by city \n between Jan-2015 to Mar-2018, \n (2) the plot has been ordered descendingly,\n (3) Body of violin become 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))
Mire específicamente 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: non-organic avocado weekly prices in Houston",
y = "$") +
geom_point(colour = "brown", shape = 21) +
geom_path(colour = "brown")
Entrenar un modelo de Machine Learning
Cree un modelo de predicción de precios para el área de Houston.
conv_houston_ts_arima <- auto.arima(conv_houston_ts,
d = 1,
approximation = F,
stepwise = F,
trace = T)
checkresiduals(conv_houston_ts_arima)
Muestra un gráfico de previsiones del modelo 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 non-organic avocado in Houston",
y = "$") +
geom_hline(yintercept = 2.5, linetype = 2, colour = "blue")
Pasos siguientes
Comentarios
Enviar y ver comentarios de