차밍이
[R프로그래밍] 실제 데이터를 사용한 데이터프레임과 그래프 활용 본문
이전 글에서는 기본적인 R 프로그래밍 문법과 패키지에 대해서 알아보았습니다.
2020/02/03 - [분류 전체보기] - R 프로그램 기초 문법, 기본 패키지 설치(ggplot,dplyr,readxl )
이번 글에서는 실제 데이터를 사용해서 R 프로그램의 데이터프레임을 다루는 연습을 진행해보겠습니다.
파일을 다운로드해서 직접 같이 해보실 분들은 아래의 엑셀파일과 csv 파일을 다운받아서 workspace에 넣어주시면 되겠습니다.
데이터 불러오기
R 에서 데이터를 불러와서 변수에 선언을 하였습니다.
데이터프레임의 형태와 모습을 아래서 확인할 수 있습니다.
head명령어를 통해서 10개의 데이터만 확인해볼 수 있습니다.
실행
df <- read.csv('r/Data/csv_exam.csv')
# 10개의 데이터를 불러오기
head(df,10)
결과
# A tibble: 10 x 5
id class math english science
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
4 4 1 30 98 58
5 5 2 25 80 65
6 6 2 50 89 98
7 7 2 80 90 45
8 8 2 90 78 25
9 9 3 20 98 15
10 10 3 50 98 45
데이터 쓰기
데이터를 파일로 작성하고 싶은 경우 write 함수를 사용하면됩니다.
실행
write.csv(df, file='mydf.csv')
DataFrame을 시각적으로 보기
View 함수를 사용해서 데이터를 새로운 스크립트창에 한눈에 확인할 수 있습니다.
실행
View(df)
결과
데이터프레임 만들기
원하는 데이터프레임을 직접 설정할 수 있습니다.
실행
df2 <- data.frame(v1=c(1,2,1),v2=c(2,3,2))
df2
결과
v1 v2
1 1 2
2 2 3
3 1 2
Column명 바꾸기
rename 함수를 사용해서 column명을 바꿀 수 있습니다.
실행
df2 <- rename(df2, var1=v1)
df2
결과
var1 v2
1 1 2
2 2 3
3 1 2
새로운 열 추가하기
파이썬과 마찬가지로 데이터프레임에 새로운 열을 만들고 싶으면 원하는 이름으로 선언한 후 값을 넣어주면 자동으로 생성됩니다.
실행
df2$vsum <- df2$var1 + df2$v2
df2
결과
var1 v2 vsum
1 1 2 3
2 2 3 5
3 1 2 3
특징값 추출
summary함수를 사용해서 해당 데이터프레임의 통계적 특징되는 값들을 자동으로 한번에 구할 수 있습니다.
실행
mpg$total <- (mpg$hwy + mpg$cty)/2
summary(mpg$total)
결과
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.50 15.50 20.50 20.15 23.50 39.50
조건문
ifelse 라는 조건문을 사용해서 해당 조건을 만족하는 경우와 그렇지 않은 경우에 따라 특정한 값을 줄 수 있습니다.
table 함수를 사용하면 해당 데이터가 카테고리화된 경우 바로 개수를 출력해줍니다.
실행
mpg$test <- ifelse(mpg$total>=20,'pass','fail')
head(mpg$test,20)
table(mpg$test)
결과
> head(mpg$test,20)
[1] "pass" "pass" "pass" "pass" "pass" "pass" "pass" "pass" "pass" "pass" "pass"
[12] "pass" "pass" "pass" "pass" "fail" "pass" "fail" "fail" "fail"
fail pass
106 128
qplot 그래프 사용하기
ifelse문으로 사용해 A,B,C,D 점수를 나누고 해당부분 데이터를 데이터프래임의 새로운 열로 생성하였습니다.
이후 그 값을 qplot으로 그래프화했습니다.
실행
mpg$grade <- ifelse(mpg$total>30,'A',ifelse(mpg$total>20,'B',ifelse(mpg$total>10,'C','D')))
qplot(mpg$grade)
결과
Chain Operator %>%
데이터를 다루는것에 있어 R을 매우 유연하고 편리한 도구로 만들어준 부분이 바로 이 부분이라 생각합니다.
Chain Operator를 통해서 데이터프래임임 안에서 원하는 데이터를 선택하는 것에 매우 편리합니다.
단축기를 사용해서 바로 기호를 넣을 수 있습니다.
실행
exam = read.csv('r/Data/csv_exam.csv')
# ctrl + shift + M => %>%
exam %>% filter(class==1) %>% filter(math>=60)
exam이라는 데이터 내에서 filter를 통해 class가 1인 값을 불러옵니다.
여기에 이어 수학점수가 60점 이상인 대상만을 출력합니다.
결과
id class math english science
1 2 1 60 97 60
exam에서 class==2 인 애들을 뽑고 그 안에서 영어 점수가 80점 이상인 애들을 뽑았습니다.
이러한 경우는 & 연산자를 사용해도됩니다.
실행
exam %>% filter(class==2) %>% filter(english>=80)
exam %>% filter(class==2 & english>=80)
결과
id class math english science
1 5 2 25 80 65
2 6 2 50 89 98
3 7 2 80 90 45
id class math english science
1 5 2 25 80 65
2 6 2 50 89 98
3 7 2 80 90 45
select함수를 사용해서 특정 열을 선택할 수 있습니다.
반대로 특정열을 제외하기 위해서 열 이름에 '-'를 붙이면됩니다.
실행
exam %>% select(-math, -class)
결과
id english science
1 1 98 50
2 2 97 60
3 3 86 78
4 4 98 58
5 5 80 65
6 6 89 98
7 7 90 45
8 8 78 25
실행
#class가 1인 행에 대해 english를 추출하라
exam %>%
filter(class==1) %>%
select(english)
결과
english
1 98
2 97
3 86
4 98
Chain Operator 활용
다양한 방법으로 Chain Operator를 활용할 수 있습니다.
실행
# desending 내림차순 정렬
exam %>% arrange(desc(math))
# class 기준 오름차순 정력
exam %>% arrange(class)
# class 기준 정렬 후 그 다음 인자는 math로 정렬하기
exam %>% arrange(class,math)
#science가 60점 이상 pass, 미만 fail
# test 열을 추가
exam$test = ifelse(exam$science >= 60,'pass','fail')
exam
exam %>%
mutate(test2=ifelse(exam$science >= 60,'pass','fail'))
exam$total_score = exam$english + exam$science + exam$math
exam %>% arrange(total_score) %>% head(6)
Mutate
mutate를 사용하여 새로운 열을 생성하고 데이터를 넣는 것이 편리해집니다.
실행
exam %>%
mutate(test2=ifelse(exam$science >= 60,'pass','fail'))
>
id class math english science test2
1 1 1 50 98 50 fail
2 2 1 60 97 60 pass
3 3 1 45 86 78 pass
4 4 1 30 98 58 fail
지금까지 데이터를 사용해서 R 프로그래밍하는 방법을 알아보았습니다.
'R > 데이터 사이언스' 카테고리의 다른 글
[R] 선형회귀 모델과 상관관계를 통한 의료비 예측모델 : P-value와 R-squared (0) | 2020.02.25 |
---|---|
[R] 딥러닝 neuralnet 라이브러리 활용 인공신경망 모델 생성 및 예측 (2) | 2020.02.19 |
[R, kaggle실습] 영화 평점 감성 분석 - 텍스트 전처리에서 베이지안 필터기 적용까지 (0) | 2020.02.14 |
[R] 나이브 베이즈를 활용한 스팸메일 분류와 텍스트 마이닝 (1) | 2020.02.11 |
[R] 나이브 베이즈 분류(Naive Bayes Classifier) 활용 데이터 분석 및 실습 - 독버섯 분류하기 (2) | 2020.02.11 |
[R] 머신러닝 - KNN을 사용한 암, 악성 종양 진단모델 (0) | 2020.02.06 |
[R] 연관 분석 Association analysis 과 Pruning (0) | 2020.02.06 |