共用方式為


使用 Tidyverse

Tidyverse 是一組 R 套件,數據科學家通常會在日常數據分析中使用。 它包含數據匯入的套件(readr)、數據視覺效果(ggplot2)、數據操作(dplyrtidyr)、功能性程序設計(purrr)和模型建置(tidymodels) 等。中的 tidyverse 套件設計成順暢地一起運作,並遵循一組一致的設計原則。

Microsoft Fabric 會使用每個運行時間版本散發 的最新穩定版本 tidyverse 。 匯入並開始使用您熟悉的 R 套件。

必要條件

  • 開啟或建立筆記本。 若要瞭解如何,請參閱 如何使用 Microsoft Fabric 筆記本

  • 將語言選項設定為 SparkR (R) 以變更主要語言。

  • 將筆記本附加至 Lakehouse。 在左側,選取 [新增 ] 以新增現有的 Lakehouse 或建立 Lakehouse。

負荷 tidyverse

# load tidyverse
library(tidyverse)

資料匯入

readr 是 R 套件,提供讀取矩形資料檔的工具,例如 CSV、TSV 和固定寬度檔案。 readr 提供快速且易記的方式來讀取矩形數據檔,例如提供函 read_csv() 式,以及 read_tsv() 分別讀取 CSV 和 TSV 檔案。

讓我們先建立 R data.frame,使用 readr::write_csv() 將它寫入 Lakehouse,並使用 將它讀回 readr::read_csv()

注意

若要使用 readr存取 Lakehouse 檔案,您必須使用 檔案 API 路徑。 在 Lakehouse 總管中,以滑鼠右鍵按下您想要存取的檔案或資料夾,並從內容功能表複製其 檔案 API 路徑

# create an R data frame
set.seed(1)
stocks <- data.frame(
   time = as.Date('2009-01-01') + 0:9,
   X = rnorm(10, 20, 1),
   Y = rnorm(10, 20, 2),
   Z = rnorm(10, 20, 4)
 )
stocks

接著,讓我們使用 檔案 API 路徑將數據寫入 Lakehouse。

# write data to lakehouse using the File API path
temp_csv_api <- "/lakehouse/default/Files/stocks.csv"
readr::write_csv(stocks,temp_csv_api)

從 Lakehouse 讀取數據。

# read data from lakehouse using the File API path
stocks_readr <- readr::read_csv(temp_csv_api)

# show the content of the R date.frame
head(stocks_readr)

數據整理

tidyr 是一種 R 套件,提供使用混亂數據的工具。 中 tidyr 的主要函式旨在協助您將數據重新塑造成一個整潔的格式。 Tidy 數據具有特定的結構,其中每個變數都是數據行,而每個觀察都是一個數據列,這可讓您更輕鬆地在 R 和其他工具中使用數據。

例如,中的 tidyrgather()式可用來將寬數據轉換成長數據。 以下是範例:

# convert the stock data into longer data
library(tidyr)
stocksL <- gather(data = stocks, key = stock, value = price, X, Y, Z)
stocksL

函式程式設計

purrr 是一個 R 套件,提供一組完整的且一致的工具來處理函式和向量,藉此增強 R 的功能程式設計工具組。 最好的起點 purrr 是函式系列 map() ,可讓您以更簡潔且更容易閱讀的程式代碼取代許多 for 迴圈。 以下是使用 map() 函式套用至清單每個元素的範例:

# double the stock values using purrr
library(purrr)
stocks_double = map(stocks %>% select_if(is.numeric), ~.x*2)
stocks_double

資料操作

dplyr 是一個 R 套件,提供一組一致的動詞,可協助您解決最常見的數據操作問題,例如根據名稱選取變數、根據值挑選案例、減少多個值到單一摘要,以及變更數據列的順序等等。以下是一些範例:

#  pick variables based on their names using select() 
stocks_value <- stocks %>% select(X:Z)
stocks_value
# pick cases based on their values using filter()
filter(stocks_value, X >20)
# add new variables that are functions of existing variables using mutate()
library(lubridate)

stocks_wday <- stocks %>% 
    select(time:Z) %>%
    mutate(
        weekday = wday(time)
    )

stocks_wday
# change the ordering of the rows using arrange()
arrange(stocks_wday, weekday)

# reduce multiple values down to a single summary using summarise()
stocks_wday %>% 
    group_by(weekday) %>%
    summarize(meanX = mean(X), n= n())

資料視覺效果

ggplot2 是以圖形文法為基礎,以宣告方式建立圖形的 R 套件。 您提供數據、說明 ggplot2 如何將變數對應至美學、要使用的圖形基本類型,以及其會處理詳細數據。 以下列出一些範例:

# draw a chart with points and lines all in one

ggplot(stocksL, aes(x=time, y=price, colour = stock)) + 
  geom_point()+
  geom_line()

Graph of plot line.

# draw a boxplot

ggplot(stocksL, aes(x=time, y=price, colour = stock)) + 
  geom_boxplot()

Graph of plot box.

模型建置

tidymodels 架構是使用 tidyverse 原則建立模型和機器學習的套件集合。 它涵蓋各種模型建置工作的核心套件清單,例如rsample定型/測試數據集範例分割、parsnip模型規格、數據前置處理、 recipes workflows模型工作流程、超參數微調yardsticktune模型評估、broom潮汐模型輸出,以及dials管理微調參數。 您可以流覽 tidymodels 網站來深入瞭解套件。 以下是建置線性回歸模型的範例,可根據汽車重量(wt):預測每加侖(mpg)的英里數:

# look at the relationship between the miles per gallon (mpg) of a car and its weight (wt)
ggplot(mtcars, aes(wt,mpg))+
geom_point()

Graph of mpg and wt.

從散佈圖,關聯性看起來大約是線性的,而變異數看起來是常數。 讓我們嘗試使用線性回歸來建立此模型。

library(tidymodels)

# split test and training dataset
set.seed(123)
split <- initial_split(mtcars, prop = 0.7, strata = "cyl")
train <- training(split)
test <- testing(split)


# config the linear regression model
lm_spec <- linear_reg() %>%
  set_engine("lm") %>%
  set_mode("regression")

# build the model
lm_fit <- lm_spec %>%
  fit(mpg ~ wt, data = train)

tidy(lm_fit)

套用線性回歸模型來預測測試數據集。

# using the lm model to predict on test dataset
predictions <- predict(lm_fit, test)
predictions

讓我們看看模型結果。 我們可以將模型繪製為折線圖,並將測試地面真相數據繪製為相同圖表上的點。 模型看起來不錯。

# draw the model as a line chart and the test data groundtruth as points 
lm_aug <- augment(lm_fit, test) 
ggplot(lm_aug, aes(x = wt, y = mpg)) +
  geom_point(size=2,color="grey70") +
  geom_abline(intercept = lm_fit$fit$coefficients[1], slope = lm_fit$fit$coefficients[2], color = "blue")

Graph of model result.