在資料科學的領域中,資料的處理大致是下圖的流程,從匯入資料、資料前處理(TidyTransform)、資料的探勘(視覺化:visualise、建模:model)、數據呈現。

 

1.jpg

 

筆者接下來就根據資料處理的流程介紹Tidyverse在處理這些流程會用到的package,首先是Import:匯入資料

(一 )readr:常見的匯入資料函數如下

  1. read_csv(): comma-separated values (CSV) files
  2. read_tsv(): tab-separated values (TSV) files
  3. read_delim(): delimited files (CSV and TSV are important special cases)
  4. read_fwf(): fixed-width files (匯入固定欄位長度分隔的檔案)
  5. read_table(): whitespace-separated files (匯入空白分隔的檔案)
  6. 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常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用。

 

2.jpg

 

(二)表格轉換 tidyr

Tidyr最常用的函數有以下幾個

1.把表格做長寬的轉置

  • pivot_longer(): pivot_longer(data, cols(指定要轉換的column), names_to = "name", values_to = "value")

 

3.jpg

 

  • pivot_wider():pivot_wider(data, id_cols = NULL, names_from = name,values_from = value,)

4.jpg

 

2.欄位分割跟合併

  • 欄位分割會使用separate()extract()欄位內容為文字的,分成好幾欄,如下圖所示

5.jpg

 

  • 除了欄位分割,也可以透過unite()將多個欄位資料合併成一欄,如下圖所示

6.jpg

 

3.遺漏值的處理

  • 全部遺漏complete(),當value1有遺漏(NA)的話,value2沒遺漏也會被當成遺漏(NA),如下圖所示

7.jpg

 

當資料有遺漏時,使用drop_na(),會將遺漏的資料整列去除,只保留都沒遺漏的資料,如下圖所示

 

8.jpg

 

官網也有提供Tidyr常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用,讀者可以詳見以下的圖形

 

9.jpg

 

(三)資料處理-dplyr,常用函數如下:

  1. mutate() adds new variables that are functions of existing variables:新增變數
  2. select() picks variables based on their names:選擇變數
  3. filter() picks cases based on their values:篩選符合條件的觀察值
  4. summarise() reduces multiple values down to a single summary:聚合變數,例如:計算某一年度的人口總合
  5. 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常用函數的說明及圖像化的說明,讓使用者可以再使用的時候做查詢,可以快速找到需要的函數做使用,讀者可以詳見以下的圖形。

 

10.jpg

 

參考資料

  1. https://r4ds.had.co.nz/introduction.html
  2. https://www.tidyverse.org/
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 晨晰部落格新站 的頭像
    晨晰部落格新站

    晨晰統計部落格新站(統計、SPSS、BIG DATA討論園地)

    晨晰部落格新站 發表在 痞客邦 留言(0) 人氣()