Jaa


Opetusohjelma: avokadon hintojen ennustaminen R:n avulla

Tässä opetusohjelmassa esitellään päästä päähän -esimerkki Synapse Data Science -työnkulusta Microsoft Fabricissa. Se analysoi ja visualisoi avokadon hintoja Yhdysvalloissa R:n avulla rakentaakseen koneoppimismallin, joka ennustaa avokadon tulevat hinnat.

Tässä opetusohjelmassa käsitellään seuraavat vaiheet:

  • Lataa oletuskirjastot
  • Lataa tiedot
  • Mukauta tietoja
  • Uusien pakettien lisääminen istuntoon
  • Tietojen analysointi ja visualisointi
  • Sinun täytyy harjoittaa malli.

Näyttökuva avokadoista.

Edellytykset

  • Avaa muistikirja tai luo se. Lisätietoja on artikkelissa Microsoft Fabric -muistikirjojen käyttäminen.

  • Muuta ensisijaista kieltä määrittämällä kieliasetukseksi SparkR (R ).

  • Liitä muistikirjasi Lakehouseen. Valitse vasemmalla puolella Lisää lisätäksesi olemassa olevan lakehousen tai luodaksesi lakehousen.

Lataa kirjastot

Käytä kirjastoja oletusarvoisesta R-suorituspalvelusta:

library(tidyverse)
library(lubridate)
library(hms)

Lataa tiedot

Lue avokadon hinnat kohdasta . CSV-tiedosto, ladattu Internetistä:

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

Tietojen käsitteleminen

Anna ensin sarakkeille ystävällisempiä nimiä.

# 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)

Muuta tietotyyppejä, poista ei-toivotut sarakkeet ja lisää kokonaiskulutus:

# 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)

Asenna uudet paketit

Sisäisen paketin asennuksen avulla voit lisätä uusia paketteja istuntoon:

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

Lataa tarvittavat kirjastot.

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

Tietojen analysointi ja visualisointi

Vertaa tavanomaisen (ei-orgaanisen) avokadon hintoja alueittain:

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 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))

Näyttökuvassa näkyy ei-epäorgaanisten hintojen kaavio.

Keskity Houstonin alueeseen.

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")

Näyttökuva avokadon hintojen kaaviosta Houstonissa.

Koneoppimismallin harjoittaminen

Luo Houstonin alueelle hintaennustemalli automaattisen regressivisen integroidun liukuvan keskiarvon (ARIMA) perusteella:

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

Näyttökuvassa näkyy kaavio jäljellä olevista jäännöksistä.

Näytä kaavio Houston ARIMA -mallin ennusteista:

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")

Näyttökuvassa näkyy kaavio ARIMA-mallin ennusteista.