dplyr 1.0.0 介紹應用 & 新工作感想
不知不覺這裡也是很久沒更新了呢......
筆者經歷了幾次職涯轉換,現在任職於科技業裡的人資單位,並加入其數位轉型小組擔任資料分析師,
努力一陣子,也終於過了試用期。
不過工作內容並非以AI演算法做預測,很多時候我必須使用程式語言進行資料的讀取甚至是整理充滿文字與代碼的資料,
因此會用上不少text-mining / data tidying的技巧,讀取資料則是簡單地設計ODBC的讀取匝道來連接各系統的資料庫,有時完成一個BI Dashboard會牽上N個資料庫與資料集,
我覺得自己就像遊戲王裡的決鬥者一樣,蒐集著黑暗大法師的四肢,拼起來後做出最好的呈現....
之後或許會分享一下自己在工作上的點點滴滴,不過這篇文章主要介紹一下我在工作上常用的Tidy技巧,後續的文章可能也不會像以前一樣找主題套用演算法寫預測的方式進行,而是以實用的技術為主了。
dplyr 1.0.0
為筆者認為其撰寫的方式更加直覺也更加方便,以下還請看我為娓娓道來,
1.選擇行:
(1) 跟SQL很像地,只需要用select(),可以選擇打出行名或者打上第n行,或者過運算子(&, | , !)等來進行篩選。
(2) everything() : 全部
last_col(n) : 倒數第n列
(3) 透過column name選擇,也能搭配regex作運用
starts_with(): 以某開頭的列名
ends_with(): 以某結尾的列名
contains(): 包含某字符串的列名
matches(): 匹配正則表達式的列名
num_range(): 匹配數值範圍的列名,如num_range("x", 1:3) 匹配x1, x2, x3
(4) where()
where(): 應用函數到所有列,選擇返回結果為TRUE 的列
#選擇column
iris %>%
select(Sepal.Length, Sepal.Width) # 或者 select( 1 , 2 )
2. across() 與mutate() 連用
mutate() 除了基礎的新增變數,也能可以搭配function(x) 一起使用
iris %>%
mutate(across(everything(), as.numeric)) #將每一個變數變為numeric
rescale <- function(x) {
rng <- range(x, na.rm = TRUE)
(x - rng[1]) / (rng[2] - rng[1])
}
iris %>% select(1:4) %>%
mutate(across(where(is.numeric), rescale))
3. across() 與summarise() 連用
彙總方便
iris %>% group_by(Species) %>%
summarise(across(contains("Sepal"), mean))
A <- iris %>% group_by(Species) %>%
summarise(across(where(is.numeric),
list(sum=sum, mean=mean, min=min)))
A %>% pivot_longer(-Species,
names_to = c("Vars", ".value"),
names_sep = "_") #長寬對調看
3. across() 與filter() 連用
iris %>% select(1:4) %>%
filter(across(everything(), ~ .x > 1))
以上主要為Columnwise, 以column為主,而這裡也有rowwise為主的語法,
iris %>%
rowwise() %>%
mutate(total = sum(c(Sepal.Length,Sepal.Width,Petal.Length,Petal.Width)))
4. Group by 後建模
by_species <- iris %>% nest_by(Species)
by_species = by_species %>%
mutate(model = list(lm(Sepal.Length ~ Sepal.Width, data = data)),
pred = list(predict(model, data)))
by_species %>%
summarise(glance(model))
這次的介紹大概是降,非常有效率地能處理數據。
留言
張貼留言