Självstudie: Avokadoprisförutsägelse med R
Den här artikeln visar ett heltäckande exempel på hur du använder R för att analysera, visualisera avokadopriserna i USA och förutsäga framtida avokadopriser.
Viktigt
Microsoft Fabric är en förhandsversion.
Förutsättningar
En Microsoft Fabric-prenumeration. Eller registrera dig för en kostnadsfri utvärderingsversion av Microsoft Fabric (förhandsversion).
Logga in på Microsoft Fabric.
Växla till Datavetenskap med hjälp av upplevelseväxlingsikonen i det vänstra hörnet på startsidan.
Öppna eller skapa en notebook-fil. Mer information finns i Så här använder du Microsoft Fabric-notebook-filer.
Ändra det primära språket genom att ange språkalternativet till SparkR (R).
Bifoga anteckningsboken i ett sjöhus. Till vänster väljer du Lägg till för att lägga till ett befintligt sjöhus eller skapa ett sjöhus.
Läsa in bibliotek
Använd bibliotek från R-standardkörningen.
library(tidyverse)
library(lubridate)
library(hms)
Läsa in data
Läs avokadopriserna från en .csv fil på internet.
df <- read.csv('https://synapseaisolutionsa.blob.core.windows.net/public/AvocadoPrice/avocado.csv', header = TRUE)
head(df,5)
Ändra data
Byt först namn på data till mer användarvänliga namn.
# 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)
Ändra datatyperna, ta bort oönskade kolumner och lägg till total förbrukning.
# 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)
Installera nytt paket
Använd den infogade paketinstallationen för att lägga till nya paket i sessionen.
install.packages(c("repr","gridExtra","fpp2"))
Läs in biblioteken som ska användas.
library(tidyverse)
library(knitr)
library(repr)
library(gridExtra)
library(data.table)
Analysera och visualisera data
Jämför konventionella (icke-oorganiska) avokadopriser efter region.
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))
Titta specifikt på Houston-regionen.
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")
Träna en maskininlärningsmodell
Skapa en prisförutsägelsemodell för Houston-området.
conv_houston_ts_arima <- auto.arima(conv_houston_ts,
d = 1,
approximation = F,
stepwise = F,
trace = T)
checkresiduals(conv_houston_ts_arima)
Visa ett diagram över prognoser från Houston-modellen.
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")
Nästa steg
Feedback
Skicka och visa feedback för