在資料科學的領域中,資料的處理大致是下圖的流程,從匯入資料、資料前處理(Tidy、Transform)、資料的探勘(視覺化:visualise、建模:model)、數據呈現。
筆者接下來就根據資料處理的流程介紹Tidyverse在處理這些流程會用到的package,首先是Import:匯入資料
(一 )readr:常見的匯入資料函數如下
- read_csv(): comma-separated values (CSV) files
- read_tsv(): tab-separated values (TSV) files
- read_delim(): delimited files (CSV and TSV are important special cases)
- read_fwf(): fixed-width files (匯入固定欄位長度分隔的檔案)
- read_table(): whitespace-separated files (匯入空白分隔的檔案)
- read_log(): web log files
除了匯入檔案外,當然也可以透過write()將檔案匯出到電腦。
語法範例:
#宣告此資料來源,無欄位,第一欄就是資料,非欄位名稱(No header)
read_csv(data, col_names = FALSE)
#給定欄位名稱 Provide header
read_csv(data, col_names = c("x", "y", "z"))
#給定不處理的欄位 Skip lines
read_csv(data, skip = 1)
#給定處理資料筆數 Read in a subset
read_csv(data, n_max = 1) #Maximum number of records to read.
#直接給定哪一些內容是Missing Values
read_csv(data, na = c("1","3"))
官網也有提供readr常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用。
(二)表格轉換 tidyr
Tidyr最常用的函數有以下幾個
1.把表格做長寬的轉置
- pivot_longer(): pivot_longer(data, cols(指定要轉換的column), names_to = "name", values_to = "value")
- pivot_wider():pivot_wider(data, id_cols = NULL, names_from = name,values_from = value,)
2.欄位分割跟合併
- 欄位分割會使用separate()跟extract()欄位內容為文字的,分成好幾欄,如下圖所示
- 除了欄位分割,也可以透過unite()將多個欄位資料合併成一欄,如下圖所示
3.遺漏值的處理
- 全部遺漏complete(),當value1有遺漏(NA)的話,value2沒遺漏也會被當成遺漏(NA),如下圖所示
當資料有遺漏時,使用drop_na(),會將遺漏的資料整列去除,只保留都沒遺漏的資料,如下圖所示
官網也有提供Tidyr常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用,讀者可以詳見以下的圖形
(三)資料處理-dplyr,常用函數如下:
- mutate() adds new variables that are functions of existing variables:新增變數
- select() picks variables based on their names:選擇變數
- filter() picks cases based on their values:篩選符合條件的觀察值
- summarise() reduces multiple values down to a single summary:聚合變數,例如:計算某一年度的人口總合
- arrange() changes the ordering of the rows:根據變數排序觀察值
語法範例:
#將資料依照股票代碼(code)從小排到大,且依日期(date)從大排到小
stockData %>% arrange(code,-date)
#從資料中依序選出股票代碼(code)、產業別(ind)、以及收盤價(close)欄位
stockData %>% select(close,code,ind)
#從資料中篩選出收盤價(close)高於1000元的股票
stockData %>% filter(close>= 1000)
#將資料中的最高價(high)減去最低價(low),形成最大價差(maxDif)欄位,並將其取log
stockData %>% mutate(maxDif = high-low,
log_maxDif = log(maxDif))
#查看每個產業(ind)的收盤價(close)平均數(mean)
stockData %>% group_by(ind) %>% summarise(sum_close = mean(close))
官網也有提供dplyr常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用,讀者可以詳見以下的圖形。
參考資料
- https://r4ds.had.co.nz/introduction.html
- https://www.tidyverse.org/