數(shù)據(jù)科學是一門激動人心的學科,它可以將原始數(shù)據(jù)轉(zhuǎn)化為認識、見解和知識。本書目的是幫你學習使用 R 語言中最重要的數(shù)據(jù)科學工具。讀完本書后,你將掌握 R 語言的精華,并能夠熟練使用多種工具來解決各種數(shù)據(jù)科學難題?!禦 數(shù)據(jù)科學》 說實話,我最開始學習 R 語言是從《R 語言實戰(zhàn)》開始的。這本書從變量類型、數(shù)據(jù)結(jié)構(gòu)等基本概念切入,再介紹統(tǒng)計分析方法,最后是高階技能拓展。這種方式是很考驗人的,需要不斷地練習代碼,但又不知道怎么用。與《R 語言實戰(zhàn)》不同,《R 數(shù)據(jù)科學》,讓我們在最短時間內(nèi)學會數(shù)據(jù)處理與可視化,其理念就是不談向量、矩陣、數(shù)據(jù)框、因子、流程控制等概念,直接從數(shù)據(jù)地實操入手,盡可能在最短時間內(nèi)學會數(shù)據(jù)處理與可視化。 在數(shù)據(jù)科學中,首先是進行數(shù)據(jù)導(dǎo)入和整理;然后通過一個反復(fù)迭代的過程來理解數(shù)據(jù),包括轉(zhuǎn)換、可視化和建模;最后,將處理結(jié)果有效地傳達給其他人。一旦你導(dǎo)入了數(shù)據(jù),最好對其進行整理。整潔的數(shù)據(jù)意味著,每一列都是一個變量,每一行都是一個觀察值。 一旦有了整潔數(shù)據(jù),知識生成的兩個主要引擎是可視化和建模。數(shù)據(jù)科學的最后是溝通,這是任何數(shù)據(jù)分析項目中絕對關(guān)鍵的一部分。如果你無法將結(jié)果傳達給其他人,那么你對模型和可視化圖表的理解再好也沒有用。 在所有這些工具周圍是編程。編程是一種橫跨工具,在數(shù)據(jù)科學項目的幾乎每個部分都會使用。這里有一個大致的80/20規(guī)則:可以使用本書中學到的工具解決大約80%的項目,但需要其他工具來解決剩下的20%。其中,tidyverse包可提供非常優(yōu)秀的數(shù)據(jù)清理、整合和可視化的“一站式服務(wù)”。
tidyverse出自 R 大神Hadley Wickham之手,是他將自己所寫的包整理成了一整套數(shù)據(jù)處理的方法,包括ggplot2,dplyr,tidyr,readr,purrr,tibble,stringr, forcats。這是一套數(shù)據(jù)分析的邏輯和方法,甚至是一種思想! ########--------數(shù)據(jù)清洗,10個高頻操作--------######## 姓名 <- c('張三', '李四', '王五', '趙六') 日期 <- c('2024-10-08', '2024-10-28', '2024-12-01', '2023-10-26') 城市 <- c('北京', '上海', '廣州', '深圳') 收入 <- c('8000', '6000', '5000', '10000') 年齡 <- c(32, 45, NA, 39) 性別 <- c('M', 'F', 'F', 'M')
data <- data.frame(姓名, 日期, 城市, 收入, 年齡,性別, stringsAsFactors=FALSE)
library(tidyverse)
## Warning: 程序包'ggplot2'是用R版本4.4.2 來建造的
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ── ## ? dplyr 1.1.4 ? readr 2.1.5 ## ? forcats 1.0.0 ? stringr 1.5.1 ## ? ggplot2 3.5.1 ? tibble 3.2.1 ## ? lubridate 1.9.3 ? tidyr 1.3.1 ## ? purrr 1.0.2 ## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ── ## ? dplyr::filter() masks stats::filter() ## ? dplyr::lag() masks stats::lag() ## ? Use the conflicted package (<http://conflicted./>) to force all conflicts to become errors
library(janitor)
## ## 載入程序包:'janitor' ## ## The following objects are masked from 'package:stats': ## ## chisq.test, fisher.test
library(lubridate)
# 重命名rename data <- data %>% rename(name = 姓名, date = 日期, country = 城市, income = 收入, age = 年齡, gender = 性別)
data <- data %>% clean_names()
# 數(shù)據(jù)格式轉(zhuǎn)換 data <- data %>% mutate(income = as.numeric(income), date = as.Date(date))
# 處理缺失值 data <- data %>% mutate(age = replace_na(age, mean(age, na.rm = TRUE)))
# 增加新列,mutate # options(knitr.duplicate.label = 'allow') data <- data %>% mutate(data, score = income*0.006 + age*0.4)
# 妙用 data <- data %>% mutate(category = case_when( income < 6000 ~ 'low', income >= 6000 & income < 8000 ~ 'middle', income >= 8000 ~ 'high') )
# 排序,arrange data <- data %>% arrange(gender,score)
data <- data %>% arrange(gender,desc(score))
# 選取特定列,select data2 <- data %>% select(name,income,age,score)
# 篩選特定數(shù)據(jù),filter data2 <- data %>% filter(gender == 'M' & score > 60)
(data2 <- filter(data, gender == 'M' & income > 6000))
## name date country income age gender score category ## 1 趙六 2023-10-26 深圳 10000 39 M 75.6 high ## 2 張三 2024-10-08 北京 8000 32 M 60.8 high
# 數(shù)據(jù)合并,merge data_merge <- data %>% left_join(data2, by = 'name')
# 刪除含有缺失值的行 data_merge <- data_merge %>% drop_na() 以上就是R語言數(shù)據(jù)清洗的10個高頻操作。這些技巧涵蓋了數(shù)據(jù)清洗過程中的多個方面,主要來自tidyverse包。希望這些技巧能夠幫助你更好地處理數(shù)據(jù),提高工作效率。記住,數(shù)據(jù)清洗是一個需要不斷練習和積累經(jīng)驗的過程。請不要害怕嘗試新的方法,也不要忘記查閱文檔和尋求幫助(摘自公眾號BioGenius班,特別好的總結(jié))。參考資料:https://mp.weixin.qq.com/s/AiMpK46l5V0Eexp8kVdK7g
|