차밍이

[R프로그래밍] 실제 데이터를 사용한 데이터프레임과 그래프 활용 본문

R/데이터 사이언스

[R프로그래밍] 실제 데이터를 사용한 데이터프레임과 그래프 활용

2020. 2. 4. 10:00
반응형

이전 글에서는 기본적인 R 프로그래밍 문법과 패키지에 대해서 알아보았습니다.

2020/02/03 - [분류 전체보기] - R 프로그램 기초 문법, 기본 패키지 설치(ggplot,dplyr,readxl )

 

R 프로그램 기초 문법, 기본 패키지 설치(ggplot,dplyr,readxl )

R 프로그램 설치 2020/02/03 - [분류 전체보기] - R과 R Studio 설치하는 방법과 기본 환경 설정(한글 깨짐 방지, 기본 디렉토리 설정) R과 R Studio 설치하는 방법과 기본 환경 설정(한글 깨짐 방지, 기본 디렉..

chancoding.tistory.com

이번 글에서는 실제 데이터를 사용해서 R 프로그램의 데이터프레임을 다루는 연습을 진행해보겠습니다.

파일을 다운로드해서 직접 같이 해보실 분들은 아래의 엑셀파일과 csv 파일을 다운받아서 workspace에 넣어주시면 되겠습니다.

csv_exam.csv
0.00MB
excel_exam.xlsx
0.01MB

 

데이터 불러오기

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 프로그래밍하는 방법을 알아보았습니다.

반응형

관련된 글 보기

Comments