R语言学习:数据整理
2021年第51周。
这一周R语言学习,记录如下。
01
数据整理
在实际数据科学工作中,原始数据因为各种因素,通常是不符合或者不满足我们分析与建模需求的。此时,我们需要花费较多时间来做数据整理工作。
数据整理工作,会遇到这些内容:
1 数据的重塑
2 数据的合成
3 字符数据处理
4 日期数据处理
等
数据的重塑,可以理解为把数据重新格式化,便于开展后续工作。至于是长数据转换为宽数据,还是宽数据转换为长数据,我们需要具体问题具体分析了。
数据的合成,基于表之间的关系型,把数据做集成或者拼接操作。
字符数据处理,就是对字符格式的数据按着需求做处理;日期数据处理,就是对日期格式数据做处理。
数据整理工作,通过R语言的tidyverse包以及相关包,可以高效地完成。
现在,我们通过审核R语言代码,来学习R语言做数据整理的技能。
# 导入相关R包
library(tidyverse)
library(dslabs)
# 导入数据集
path <- system.file("extdata", package="dslabs")
filename <- file.path(path, "fertility-two-countries-example.csv")
wide_data <- read_csv(filename)
# 数据的元信息
wide_data %>% glimpse()
# 1 数据重塑操作
# 1)gather函数 长数据 --> 宽数据
new_tidy_data <- wide_data %>%
gather(year, fertility, `1960`:`2015`)
new_tidy_data %>%
slice_head(n = 10) %>%
View
# 等价于
new_tidy_data1 <- wide_data %>%
gather(year, fertility, -country)
new_tidy_data1 %>%
slice_head(n = 10) %>%
View
# 2) spread函数 宽数据 --> 长数据
new_long_data <- new_tidy_data %>%
spread(year, fertility)
new_long_data %>%
slice_head(n = 10) %>%
View
数据重塑函数理解
# 导入相关R包
library(tidyverse)
library(dslabs)
# 2 数据合并操作
# 导入数据集
data("murders")
data(polls_us_election_2016)
head(results_us_election_2016)
# left_join函数 左连接,常用的连接方式
tab <- murders %>%
left_join(results_us_election_2016,
by = "state") %>%
select(-others)
head(tab)
# 数据可视化分析 可视化的目的:发现或者沟通
library(ggrepel)
tab %>% ggplot(aes(population/10^6, electoral_votes, label = abb)) +
geom_point() +
geom_text_repel() +
scale_x_continuous(trans = "log2") +
scale_y_continuous(trans = "log2") +
geom_smooth(method = "lm", se = FALSE)
# inner_join函数 内连接
tab_1 <- slice(murders, 1:6) %>%
select(state, population)
tab_1
tab_2 <- results_us_election_2016 %>%
filter(state%in%c("Alabama", "Alaska", "Arizona",
"California", "Connecticut", "Delaware")) %>%
select(state, electoral_votes)
tab_2
inner_join(tab_1, tab_2, by = "state")
# 拓展:
# 观察下left_join操作,right_join操作,full_join操作,Semi_join操作,anti_join操作差异和功能
left_join(tab_1, tab_2, by = "state")
right_join(tab_1, tab_2, by = "state")
full_join(tab_1, tab_2, by = "state")
semi_join(tab_1, tab_2, by = "state")
anti_join(tab_1, tab_2, by = "state")
数据合并函数理解
字符处理,我们可以使用stringr包提供的丰富函数集来完成。
关于这些函数怎么使用,可以直接查看函数帮助文档以及函数的用例,以快速学习和掌握。
# 4 时间和日期处理
# 使用lubridate包
library(tidyverse)
library(dslabs)
library(lubridate)
data("polls_us_election_2016")
polls_us_election_2016$startdate %>% head
class(polls_us_election_2016$startdate)
as.numeric(polls_us_election_2016$startdate) %>% head
as.Date("1970-01-01") %>% as.numeric
polls_us_election_2016 %>% filter(pollster == "Ipsos" & state =="U.S.") %>%
ggplot(aes(startdate, rawpoll_trump)) +
geom_line()
set.seed(2002)
dates <- sample(polls_us_election_2016$startdate, 10) %>% sort
dates
# 使用lubridate包获取年、月、日信息,一种特征工程方法
data_frame(date = dates,
month = month(dates),
day = day(dates),
year = year(dates))
# 字符串转换为日期操作
x <- "09/01/02"
ymd(x)
mdy(x)
dmy(x)
dym(x)
now()
now() %>% hour()
now() %>% minute()
now() %>% second()
x <- "Nov/2/2012 12:34:56"
mdy_hms(x)
make_date(1970, 7, 6)
make_date(1980:1989)
polls_us_election_2016 %>%
mutate(week = round_date(startdate, "week")) %>%
group_by(week) %>%
summarize(margin = mean(rawpoll_clinton - rawpoll_trump)) %>%
qplot(week, margin, data = .)
数据整理,除了上述介绍的内容外,还会有其它工作。总之,为了后续的分析和建模需求所开展的一系列前期准备工作,都可以纳入到【数据整理】的范畴。
数据整理,是一项重要的数据工作技能,与数据可视化技能一样,都非常的重要。
我创建了R语言群,添加我的微信,备注:姓名-入群,我邀请你进群,一起学习R语言。
如果你想学习数据科学与人工智能,请关注下方公众号~
如果你想找数据工作,请关注下方公众号~
R语言学习专辑:
如果觉得本文不错,就顺手帮我转发到朋友圈和微信群哦,谢谢。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!