Εκμάθηση: χρήση 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")