☆ 강의 내용 요약 ☆
arrange : 데이터 정렬 함수
filter : 한 열에서, 지정한 데이터만 추출하는 함수
select : 지정한 컬럼 데이터 추출 함수
mutate : 새로운 데이터 추가 함수
summarize : 전체 데이터에서 연산한 값을 새로운 열로 추가해줌
mutate = 어떤 연산에 대한 학생들의 전체 데이터 값을 보여줌. ( ex) 학생 각각의 총 점수의 합 )
summarize = 전체 데이터에서 어떤 연산의 값을 보여줌. ( ex) 반 별로 총점의 평균 )
group_by : ~별로 분리. 행에 추가됨 (summarize랑 세트)
_join : 데이터 합성 함수
is.na : 결측치(NA)가 있는지 검사하는 함수
na.rm : 결측치를 제거하는 함수
na.omit : 결측치를 한번에 제거
# exam 자료 활용하기library(dplyr) library(ggplot2) getwd() setwd("f:\\r_workspace\\Data") exam = read.csv("csv_exam.csv")
반별로 정렬 후 수학 성적순 정렬 / 총점 구하고 반별 등수세우기
# mpg 자료 활용하기
audi 차종 hwy순으로 정렬하기
mpg %>% filter(manufacturer=='audi') %>%
arrange(desc(hwy)) %>%
select(manufacturer,hwy) %>%
head(6)
* select로 원하는 열만 골라서 추출하기 가능
# mutate 활용하기
* mutate : 새로운 변수를 추가하는 함수
exam %>%
mutate(total = math + english + science) %>%
head(3)
반 별로, 총점 높은 순으로 정렬하기
exam %>%
mutate(total = math + english + science) %>%
arrange(class, desc(total)) %>%
head(6)
hwy와 cty의 평균을 구하고 30이상 A, 20이상 B, 나머지 C
mpg %>% mutate(avg = (hwy+cty)/2,
grade = ifelse(avg>=30,"A",ifelse(avg>=20,"B","C"))) %>%
select(hwy,cty,avg,grade) %>%
head(6)
과목별 평균 구하기
exam %>% summarize( mean_math = mean(math),
mean_science = mean(science),
mean_eng= mean(english))
* summarize( ) : 열 기준 통계 구하기
반 별로 과목별 평균, 학생 수 구하기
exam %>% group_by(class) %>%
summarize( mean_math = mean(math),
mean_science = mean(science),
mean_eng= mean(english),
studentcnt = n())
* group_by로 추가된 필드가 행, summarize로 추가된 필드가 열이 된다 ! (둘이세트임)
반 별로 수학 평균, 분산, 표준 편차 구하기
exam %>% group_by(class) %>%
summarize(mean_math=mean(math), var_m=var(math), sd_m=sd(math))
회사별, 구동방식별로 cty 평균 구하기
mpg %>%
group_by(manufacturer, drv) %>% # 회사별, 구동방식별 분리
summarise(mean_cty = mean(cty)) %>% # cty 평균 산출
head(10)
class가 suv인 차들의 manufacturer별로 cty와 hwy 평균의 평균 값 구하기
mpg %>% filter(class=="suv") %>% # 차종 suv 분류
mutate(tot = (cty+hwy)/2) %>% # cty와 hwy 평균 구하기
group_by(manufacturer) %>% # manufacturer 별로 분류
summarize( mean_tot = mean(tot)) %>% # manufacturer 별로 tot 평균 구함
arrange( desc(mean_tot)) %>% # 정렬
head(5)
class별 cty 평균 구해서 줄세우기
mpg %>% group_by(class) %>% # class 별로 분류
summarize(m=mean(cty)) %>% # cty 평균 구하기
arrange(desc(m)) # 줄세우기
iris의 각 종류별 암술높이길이 수술높이길이 평균구하기
iris %>% group_by(Species) %>%
summarize(sl=mean(Sepal.Length), sw=mean(Sepal.Width),
pl=mean(Petal.Length), p2=mean(Petal.Width))
class가 compact인 manufacturer이 몇개인가
mpg %>% filter(class=="compact") %>%
group_by(manufacturer) %>%
summarize( count = n() ) %>%
arrange(desc(count))
# Left_join 활용하기 / 행 합성하기
* left_join(a, b) : 데이터를 추가하는 함수 => a의 데이터 수 만큼만 b 값을 보여줌.
* right_join(a, b) : b의 데이터수에 맞춰서 a 값이 나옴.
Q) a랑 b의 수가 맞지 않는다면?
left_join : b가 NULL
right_join : a가 NULL
-> 초과되는 값은 그냥 버려진다
중간고사와 기말고사 데이터 합치기
#중간고사 데이터 생성
test1 <- data.frame(id=1:5, midterm=c(60, 80, 70, 90, 85))
#기말고사 데이터 생성
test2 <- data.frame(id=1:7, final=c(70,83,65,95, 80, 90, 100))
test3 <- left_join(test1, test2, by="id")
test3
test4 <- right_join(test1, test2, by="id")
test4
inner_join(a, b) : 둘중하나라도 일치되지 않는 값은 삭제됨
full_join(a, b) : 매칭 여부 상관없이 합쳐짐
반 별로 선생님 추가하기
teacher <- data.frame(class=1:5, teacher=c("홍길동", "임꺽정", "장길산", "홍경래", "강감찬"))
exam2 <- left_join(exam, teacher, by="class") # class 별로 exam에 teacher 붙이기
# bind_rows( ) : 열을 합성하는 함수 / 열 합성하기
# 데이터 생성
group_a <- data.frame(id=1:5, test=c(60,80,70,90,85))
group_b <- data.frame(id=6:10, test=c(70,70,70,90,85))
group_c <- data.frame(id=11:20, test=c(70,70,70,90,85,60,60,60,60,50),
test2=sample(40:100, replace=T, 10))
# 행 합성
group_all <- bind_rows(group_a, group_b, group_c)
# stringsAsFactors => 들어오는 데이터를 factor타입으로
fuel <- data.frame(fl = c("c", "d", "e", "p", "r"), # 이름
price_fl = c(2.35, 2.38, 2.11, 2.76, 2.22), # 가격
stringsAsFactors = F) # factor로 가져오기
mpg2 = left_join( mpg, fuel, by="fl") # mpg값에 f1별로 fuel합성하기
mpg2[1:20,] # 20개만 나오게
select로 원하는 컬럼 내용 추출
mpg2 %>% select(model, fl, price_fl ) %>% head(5)
midwest 자료 활용하기
미성년 백분율 높은 순위 5개
midwest %>% mutate( popchild = (poptotal-popadults)/poptotal*100,
popadultsper=(popadults)/poptotal*100) %>%
# 미성년 비율 구하기
select( popadults, poptotal, popchild, popadultsper) %>%
# 나타나게할 컬럼 선택
arrange(desc(popchild)) %>% # 정렬
head(5) # 5개만
미성년 비율 등급 변수 추가 / 각 등급에 몇개지역이 있는지
mid <- midwest %>% mutate( popchild = (poptotal-popadults)/poptotal*100,
popadultsper=(popadults)/poptotal*100) # 미성년 비율 변수 추가
# 미성년 비율에 따른 등급 추가
mid<- mid %>% mutate(grade= ifelse(popchild>=40, "large",
ifelse(popchild>=30, 'middle', 'small')))
# 빈도수 확인
table(mid$grade)
전체 인구 대비 아시아인 백분율 변수 추가 / 하위 10개 지역의 state, country, 아시아인 백분율
midwest %>% mutate(asian_per=popasian/poptotal*100) %>% # 아시아인 비율 변수 추가
arrange(asian_per) %>% # 아시아인 비율 역순으로 정렬
head(10) %>% # 10개 고르기
select(state, county, asian_per) # 컬럼 선택
# diamonds 자료 활용하기
cut, clarity 별로 가격 평균 요약하기
dia %>% group_by(cut,clarity) %>%
summarize(mean_p=mean(price)) # mean_p 컬럼 추가
데이터 정제 ( 결측치 제거하기 )
#결측치가 들어간 데이터를 강제로 만들어보자
df <- data.frame( gender=c("M", "F", NA, "M", "F"),
score = c(5,4,3,4,NA))
# is.na = 각 필드별로 데이터마다 NA면 T, 아니면 F를 데이터 프레임으로 보여줌
# na.rm = NA를제거
- 연산 실행 전에 항상 결측치가 있는지 확인해볼것!
is.na( df ) # NA 찾기
table( is.na( df ) ) # NA 빈도수 찾기
table( is.na( df$gender ) )
table( is.na( df$score ) )
score 평균 구하기
df_nomiss <- df %>% filter ( is.na(score) ==F & is.na(gender)==F) # 결측지 제거
mean(df_nomiss$score) # 평균 구하기
na.omit( ) = 결측치를 한번에 제거
exam3 <- na.omit(exam2)
table( is.na(exam3) )
값 대체하기
m1 <- mean(exam2$math, na.rm=T) # 평균값 구하기
exam2$math <- ifelse( is.na(exam2$math), m1, exam$math )
# 만약 math 값이 NA면, math의 평균 값으로 데이터를 대체한다
결측치 제외하고, drv의 hwy 평균 구하기
mpg %>%
filter(!is.na(hwy) & !is.na(drv)) %>% # 결측치 제외
group_by(drv) %>% # drv 분리
summarize(h_avg=mean(hwy)) # hwy 평균구하기
~ 후기 ~
[ filter - select ] [ mutate - summarize ]
얘네가 서로 무슨 차이인지 수업을 들으면서 너무 헷갈렸다..
이번에 복습하면서 확실히 그 차이를 이해했다!
※ 사용한 교재 : 쉽게 배우는 R 데이터 분석 / 저자 : 김영우
'R > 강의복습' 카테고리의 다른 글
[22.08.17] 7일차 텍스트마이닝 / 워드클라우드만들기 (0) | 2022.08.21 |
---|---|
[22.08.16] 6일차 (ggplot, 산포도, 막대그래프, 선그래프, 데이터분석하기, 전처리) (0) | 2022.08.21 |
[22.08.12] 5일차 차트그리기(plot, barplot, pie) (0) | 2022.08.20 |
[22.08.10] 3일차 ( 함수만들기 / ls / rm / head / table / order / rename / function / sapply ) (0) | 2022.08.14 |
[22.08.09] 2일차 강의 (0) | 2022.08.13 |