R ํ๋ก๊ทธ๋๋ฐ๋ ํ๊ต ๊ฐ์๋ก ๊ณต๋ถํ๊ณ ์๋ ์์ฆ, ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๋ฐ ์๊ฐํ ํจ์๋ค์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค!
์ ๋ฆฌ ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ธ ํจ์ ์ ๋ฆฌ ๋ฐ ์ค์ต ๋ฌธ์ ํ์ด ์ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ ๊ณํ์ด๋ค!
dplyr : ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
ggplot2 : ์๊ฐํ ์ ์ฌ์ฉ
ggthemes : ggplot์ผ๋ก ์์ฑ๋ ์๊ฐํ ํจ์๋ค์ ํ ๋ง ๋ณ๊ฒฝ
reshape : ๋ณ์๋ช ๋ณ๊ฒฝ ๋ฑ์ ์ฌ์ฉ
haven : sav ํ์ผ read ์ ์ฌ์ฉ
readxl : csv, excel ํ์ผ read ์ ์ฌ์ฉ
wordcloud : wordcloud ์๊ฐํ์ ์ฌ์ฉ
RClorBrewer : color ๊ทธ๋ผ๋ฐ์ด์ ์ ํ์ฉ
1) excel
install.packages('readxl')
library(readxl)
df <- read_excel('exam.xlsx)
๋ง์ผ, ์์ ์ ์ฒซ๋ฒ์งธ ํ์ด ๋ณ์๋ช ์ด ์๋ ๊ฒฝ์ฐ
df <-read_excel('exam.xlsx', col_names = F)2) csv
df <- read.csv('exam.csv')
๋ฌธ์๊ฐ ์๋ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ
df <- read.csv('exma.csv', stringAsFactors = F)3) sav ํ์ผ์ ๊ฒฝ์ฐ 'haven' ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
library(haven)
df <- read_sav(file = '.sav', encoding = 'UTF-8')
df <- as.data.frame(ggplot::mpg)
R ์์๋ <- OR =์ ํตํด ๋ณ์ ์ค์ ๊ฐ๋ฅ! ๋๊ฐ <-๋ก ๋ณ์ ์ค์ ํจ
ํจ์๋ ํจ์๋ช ๊ณผ ๊ดํธ๋ก ๊ตฌ์ฑ, ํจ์์ ์ ๋ฌํ ์ธ์(๋ฐ์ดํฐ)๋ ํจ์์ ๋์์ ์ ์ดํ ํ๋ผ๋ฏธํฐ๊ฐ ์กด์ฌ
mean() : ์ธ์๋ก ๋ฐ์ ๋ฐ์ดํฐ์ ํ๊ท ์ ๊ตฌํ๋ ํจ์
max() : ์ธ์๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ค์ ์ต๋๊ฐ ์ถ๋ ฅ
min() : ์ธ์๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ค์ ์ต์๊ฐ ์ถ๋ ฅ
ex) x<- c(1,2,3)
mean(x)
max(x)
min(x)
paste() : ์ธ์๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ค์ ํ๋์ ๋ฌธ์ฅ์ผ๋ก ๊ฒฐํฉ
ex) str1 <- paste('Hello!', 'world!', 'is', 'good')
paste(str1)
paste(str1, collaspe= ' ')
< ๊ฒฐ๊ณผ >
mycal2 <- function(a, b) {
c <- a + b
d <- a * b
return(list(sum = c, mul = d))
}
result <- mycal2(2,10)
result
result$sum
result$mu
< ๊ฒฐ๊ณผ >
x <- c(10, 11, 12, NA, 15, NA, NA)
### R์ ์ธ๋ฑ์ค๊ฐ 1๋ถํฐ ์์!
x[1]
### NA ๊ฐ์ 0์ผ๋ก ๋์ฒด
x[is.na(x)] <- 0
### NA ์ ์ธํ๊ณ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
mean(x, na.rm = T)
### ๊ฒฐ์ธก์น๋ฅผ ํ๊ท ๊ฐ์ผ๋ก ์ฒ๋ฆฌ
x[is.na(x)] <- mean(x, na.rm = T)
y <- c(10, 9, NA, NA, 6, 4, NA, 1, NA)
### y ๋ฒกํฐ์์ NA ์ ์ธํ๊ณ ๋ฒกํฐํ
z <- as.vector(na.omit(y))
z
x <- c(2, 5, 3, 9, 4, 8, 1)
# ์ซ์ ํฌ๊ธฐ ์์ผ๋ก๋ง ์ ๋ ฌ (๋ํดํธ๊ฐ์ ์ค๋ฆ์ฐจ์)
order(x, na.last = TRUE, decreading = TRUE)
์ฃผ์ด์ง ๋ฒกํฐ ์์ฒด๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
y1 <- sort(x)
df <- data.frame(var1 = c(1,2,3), var2 = c(4,5,6))
dplyrํจํค์ง์ rename ํจ์ ์ฌ์ฉ
df <- rename(df, '๋ฐ๊ฟ ๋ณ์๋ช ' = '๊ธฐ์กด ๋ณ์๋ช ')
- filter : ํ ์ถ์ถ
exam <- read.csv('exam.csv')
exam %>% filter('์ปฌ๋ผ๋ช ' == ์กฐ๊ฑด)
exam %>% filter ('์ปฌ๋ผ๋ช ' %in% c(1,2,3,4))
- select : ์ด ์ถ์ถ
df %>% select('๋ณ์๋ช ')
'ํน์ ๋ณ์ ์ ๊ฑฐํ๊ณ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ'
df %>% select(-'๋ณ์๋ช ')
- arrange : ์ ๋ ฌ
์ค๋ฆ์ฐจ์์ธ ๊ฒฝ์ฐ : df %>% arrange('๋ณ์๋ช ')
๋ด๋ฆผ์ฐจ์์ธ ๊ฒฝ์ฐ : df %>% arrange(desc('๋ณ์๋ช '))
- mutate : ๋ณ์(์ด) ์ถ๊ฐ
df %>% mutate(total = ifelse(score >= 60, 'pass', ifelse(score >= 40, 'fail', 'Not Yet'))) %>% head(10)
- summarise : ํต๊ณ์น ์ฐ์ถ
df %>% summarise(mean_score = mean(score))
df %>% group_by('๋ณ์๋ช ') %>% summarise(mean_score = mean(score)) %>% head(5)
๋น๋์๋ฅผ ์๊ณ ์ถ๋ค๋ฉด?
df %>% group_by('๋ณ์๋ช ') %>% summarise(mean_score = mean(score), n = n()) %>% head(5)
- group_by : ์ง๋จ ๋ณ๋ก ๋๋๊ธฐ
- left_join() : ๋ฐ์ดํฐ ํฉ์น๊ธฐ (์ด)
- bind_rows() : ๋ฐ์ดํฐ ํฉ์น๊ธฐ (ํ)
< ์ฐ์ฐ์ >
์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ง ์ถ์ถ
%>% (ํ์ดํ ์ฐ์ฐ์) : ๋จ์ถํค ++
%in% (๋งค์น ์ฐ์ฐ์) : ์กฐ๊ฑด ๋ชฉ๋ก ์ ๋ ฅ์ ํตํด ์ฌ์ฉ
AND ์ฐ์ฐ( & ) : ๋ ๊ฐ์ ์กฐ๊ฑด์ด ๋ชจ๋ ์ฐธ์ธ ํ์ ์ถ์ถ
OR ์ฐ์ฐ( | ) : ๋ ๊ฐ์ ์กฐ๊ฑด ์ค ํ๋๋ง ์ฐธ์ด๋ผ๋ ์ถ์ถ
์ด๋ ๊ฒ ์ถ์ถํ ๊ฐ์ ์๋ก์ด ๋ณ์์ ์ ์ฅ ๊ฐ๋ฅ
exam %>% filter(class %in% c(1, 3, 5))
๋ฐ์ดํฐ ๋ถ์ ํํธ์์ ์ข์ ๊ทธ๋ํ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ข์ ์ด์ .
R์์๋ ๋ฐ์ด๋ ๊ทธ๋ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋ฒ ์ด์ค ์์คํ
๊ณผ ggplot2 ํจํค์ง๋ฅผ ํตํด ๊ตฌํ ๊ฐ๋ฅ!
์๋ฃ ์ข
๋ฅ
1. ๋ฒ์ฃผํ ์๋ฃ - ํ์กํ, ์ฑ๋ณ, ํ๊ณผ ๋ฑ (categorical)
2. ์ฐ์ํ ์๋ฃ - ๋ชธ๋ฌด๊ฒ, ํค, ๊ฐ์๋, ์๋ฃํ (numerical)
3. ๋ณ์ ๊ฐ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ
3-1) ๋จ์ผ๋ณ์ ์๋ฃ - ๋ฒกํฐ์ ์ ์ฅ
3-2) ๋ค์ค๋ณ์ ์๋ฃ - ๋ฐ์ดํฐํ๋ ์์ ์ฃผ๋ก ์ ์ฅ
uni.bloodtype <- c('A', 'B', 'A', 'O', 'AB', 'A', 'O', 'B', 'B', 'B')
uni.bloodtype
table(uni.bloodtype)
table(uni.bloodtype) / length(uni.bloodtype)
barplot(table(uni.bloodtype))
barplot(table(uni.bloodtype), main = 'Blood Type')
pie(table(uni.bloodtype), main = 'Blood Type')
colors <- c('red', 'yellow', 'blue', 'green')
barplot(table(uni.bloodtype), main = 'Blood Type', col = colors)
table(๋ณ์๋ช
) : ํด๋น ๋ฒกํฐ์ ์กด์ฌํ๋ uniqueํ ๋ฐ์ดํฐ ๊ฐ์ ํ๋ก ์ถ๋ ฅ
barplot() : ๋ง๋๊ทธ๋ํ ํ์ฑ
pie() : ์ํ๊ทธ๋ํ ํ์ฑ
main='๊ทธ๋ํ ์ ๋ชฉ', col = 'colors'๋ก ์๊น ์ง์ ๋ ๊ฐ๋ฅ!
weight <- c( 75, 72, 60, 65, 67, 70, 72, 63, 60, 64)
weight1 <- c(weight, 250)
weight
weight1
mean(weight)
median(weight)
mean(weight1)
median(weight1)
mean(weight, trim= 0.1)
mean(weight1, trim= 0.1)
๋ถํฌ๋(distribution ํ์ธ)
data <- c( 100, 50, 55, 75, 60, 80, 6, 88, 92, 82)
๋ถ์ฐ : var(data)
ํ์คํธ์ฐจ : sd(data)
๋ฒ์ : range(data)
max, min ๊ฐ์ ์ฐจ์ด : diff(range(data)
4๋ถ์์ (quantile)
data <- c( 100, 50, 55, 75, 60, 80, 6, 88, 92, 82)
quantile(data)
# ์ํ๋ % ๋งํผ์ ๋ถํฌ ํ์ธ๋ ๊ฐ๋ฅ!
quantile(data, (0:10)/10)
# min, max ํฌํจํ ์ฌ๋ถ์์ ์ถ๋ ฅ
summary(data)
์ฃผ์ด์ง ๋ฐ์ดํฐ์ ์ด์์น๊ฐ ๋ง์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ๊ท ๋ณด๋ค ์ค์๊ฐ์ ๋ง์ด ์ฌ์ฉ
trim = % ํจ์ : ์ํ์ ๊ฐ %๋งํผ ์ญ์ ํ ๊ฐ ๊ณ์ฐ
ํธํฅ
# ์๋ก์ด ์คํฌ๋ฆฝํธ ์ด์ด์ ํ์ธ ๊ฐ๋ฅ
View(cars)
# ํ, ์ด ์ถ๋ ฅ
dim(cars)
summary(cars)
# ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ ๋ณด ์ถ๋ ฅ
help(cars)
# cars ๋ฐ์ดํฐํ๋ ์์ 2๋ฒ์งธ ์ด๋ง ๊ฐ์ ธ์ค๊ธฐ
data <- cars[,2]
hist(data)
hist(data, main = "์๋์ฐจ ์ ๋ ๊ฑฐ๋ฆฌ", xlab = "์ ๋๊ฑฐ๋ฆฌ", ylab = "๋น๋์",
border="red", col = "yellow", las = 2, breaks = 5
ํ์คํ ๊ทธ๋จ์ ๊ฒฝ์ฐ ๋ง๋๊ทธ๋ํ์ ์ ์ฌํ ํํ, ์ฐ์ํ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ์๊ฐํ ์ ์ฌ์ฉ
๊ตฌ๊ฐ์ ๋๋๊ณ , ๊ตฌ๊ฐ์ ์ํ ์๋ฃ์ ๊ฐ์๋ฅผ ์ธ์ด์ ํํ!!
plot(wt, mpg, main = '๋ฌด๊ฒ์ ์ฐ๋น์ ๊ด๊ณ', xlab = '๋ฌด๊ฒ', 'ylab' = '์ฐ๋น', col = 'blue', pch = 21)
# ๋ค์ค ์ฐ์ ๋
vars <- c('mpg', 'disp', 'drat', 'wt')
multi_var <- mtcars[,vars]
pairs(multi_var, main = 'Multi scatter')
์๊ด ๋ถ์ - ๊ด์ธก๊ฐ๋ค์ ๋ถํฌ๊ฐ ์ผ๋ง๋ ๋ ๊ฐํ ์ ํ์ธ ๊ด๊ณ์ ์๋์ง ์์น์์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ
์๊ด ๊ณ์ - ์ ํ์ฑ์ ์ ๋๋ฅผ ๋ํ๋ด๋ ์ฒ๋data.a <- c(5,2,9,8,3,7,3,5,3,5) data.b <- c(1, 0.3, 1.9, 1.2, 0.4, 0.095, 0.7, 0.6, 0.2, 0.5) tbl <- data.frame(data.a, data.b) tbl plot(tbl) plot(data.b~data.a) plot(data.b~data.a, data=tbl) ๊ทธ๋ํ์์ ์ ํธ ๊ฐ๋ค ์ ์ ์์ lm(data.b~data.a, data=tbl) res <- lm(data.b~data.a, data=tbl) # ์์ ๊ทธ๋ฆฐ ๊ทธ๋ํ์ ์ ์ถ๊ฐํด์ฃผ๊ธฐ abline(res) # ๋ ๋ณ์ ๊ฐ ์ ํ์ฑ (์๊ด๊ณ์ ๊ฐ ํ์ธ) cor(data.a, data.b)
### ์ ๊ทธ๋ํ
month = 1:12
rain <- c(10, 15, 30, 25, 40, 50, 120, 100, 30, 10, 20, 30)
plot(month, rain, main= '๊ฐ์๋ ํต๊ณ', type = 'l', lty = 1, lwd = 1,
xlab = '์๋ณ', 'ylab' = '๊ฐ์๋')
### ์ฌ๋ฌ๊ฐ์ ์ ๊ทธ๋ํ
rain1 = c(23, 8, 15, 40, 55, 60, 125, 120, 40,30,40,20)
lines(month, rain1, type = 'b', col = 'blue')
plot ์ผ๋ก ๋จผ์ ๊ทธ๋ํ ๊ทธ๋ฆฐ ํ, lines()๋ก ์ ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐ!!
4๋ถ์์, ์ด์์น๋ฅผ ์ ์ ์๋ ์๊ฐํ ๊ทธ๋ํ ํจ์
๊ทธ๋ํ 2ํ 3์ด๋ก ๋ง๋ค๊ธฐ
par(mfrow = c(2,3))
์ฐ์ ๋
plot(df$weight, df$height)
plot(df$age, df$height)
๋ง๋๊ทธ๋ํ
barplot(table(df$bloodtype))
4๋ถ์์, ์ด์์น ๋์ค๋๋ก ํ๋ boxplot
boxplot(df$height)
boxplot(df$height ~ df$bloodtype)
ํ์คํ ๊ทธ๋จ
hist(df$height, breaks=10)
par(mfrow = c(1,1)) ์ ์ํ๋ก ๋ณต๊ท
# enterํค ์น๋ฉด์ ๋๊ธฐ๋ฉด์ ์๊ฐํ ํ์ธ
plot(df$weight ~ df$height + df$age + df$grade + df$absence)