Ανάγνωση στα Αγγλικά

Κοινή χρήση μέσω


Εκμάθηση: χρήση R για την πρόβλεψη τιμών αβοκάντο

Αυτό το εκπαιδευτικό βοήθημα παρουσιάζει ένα τελικό παράδειγμα μιας ροής εργασιών Synapse Data Science στο Microsoft Fabric. Χρησιμοποιεί την R για να αναλύσει και να απεικονίσει τις τιμές αβοκάντο στις Ηνωμένες Πολιτείες, για να δημιουργήσει ένα μοντέλο εκμάθησης μηχανής που προβλέπει μελλοντικές τιμές αβοκάντο.

Αυτό το εκπαιδευτικό βοήθημα καλύπτει τα εξής βήματα:

  • Φόρτωση προεπιλεγμένων βιβλιοθηκών
  • Φόρτωση των δεδομένων
  • Προσαρμογή των δεδομένων
  • Προσθήκη νέων πακέτων στην περίοδο λειτουργίας
  • Ανάλυση και απεικόνιση των δεδομένων
  • Εκπαίδευση του μοντέλου

Στιγμιότυπο οθόνης με αβοκάντο.

Προαπαιτούμενα στοιχεία

  • Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.

  • Εισέλθετε στο Microsoft Fabric.

  • Χρησιμοποιήστε την εναλλαγή εμπειρίας στην αριστερή πλευρά της αρχικής σελίδας σας για να μεταβείτε στην εμπειρία Synapse Data Science.

    Στιγμιότυπο οθόνης του μενού εναλλαγής εμπειρίας, που εμφανίζει πού μπορείτε να επιλέξετε Επιστήμη δεδομένων.

  • Ανοίξτε ή δημιουργήστε ένα σημειωματάριο. Για να μάθετε τον τρόπο, ανατρέξτε στο θέμα Τρόπος χρήσης σημειωματάριων Microsoft Fabric.

  • Ορίστε την επιλογή γλώσσας σε SparkR (R) για να αλλάξετε την κύρια γλώσσα.

  • Επισυνάψτε το σημειωματάριό σας σε ένα lakehouse. Στην αριστερή πλευρά, επιλέξτε Προσθήκη για να προσθέσετε μια υπάρχουσα λίμνη ή για να δημιουργήσετε μια λίμνη.

Φόρτωση βιβλιοθηκών

Χρησιμοποιήστε βιβλιοθήκες από τον προεπιλεγμένο χρόνο εκτέλεσης R:

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

Φόρτωση των δεδομένων

Διαβάστε τις τιμές αβοκάντο από ένα . Αρχείο CSV, που λήφθηκε από το Internet:

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

Χειρισμός των δεδομένων

Πρώτα, δώστε στις στήλες πιο φιλικά ονόματα.

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

Αλλάξτε τους τύπους δεδομένων, καταργήστε ανεπιθύμητες στήλες και προσθέστε συνολική κατανάλωση:

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

Εγκατάσταση νέων πακέτων

Χρησιμοποιήστε την εγκατάσταση ενσωματωμένου πακέτου για να προσθέσετε νέα πακέτα στην περίοδο λειτουργίας:

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

Φορτώστε τις απαραίτητες βιβλιοθήκες.

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

Ανάλυση και απεικόνιση των δεδομένων

Συγκρίνετε συμβατικές (μη ανοργάνωτες) τιμές αβοκάντο ανά περιοχή:

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

Στιγμιότυπο οθόνης που εμφανίζει ένα γράφημα μη ανοργάνωων τιμών.

Εστιάστε στην περιοχή του Χιούστον.

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

Στιγμιότυπο οθόνης ενός γραφήματος τιμών αβοκάντο στο Χιούστον.

Εκπαίδευση μοντέλου εκμάθησης μηχανής

Δημιουργήστε ένα μοντέλο πρόβλεψης τιμών για την περιοχή Χιούστον, με βάση τον ενσωματωμένο κινητό μέσο όρο αυτόματης παλινδρόμησης (ARIMA):

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

Στιγμιότυπο οθόνης που εμφανίζει ένα γράφημα υπολειμμάτων.

Εμφάνιση ενός γραφήματος προβλέψεων από το μοντέλο ARIMA του Χιούστον:

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

Στιγμιότυπο οθόνης που εμφανίζει ένα γράφημα προβλέψεων από το μοντέλο ARIMA.