본문 바로가기

데이터/R 프로그래밍

R 프로그래밍 기초(2)

1. 데이터 파악하기 

 

1) 데이터를 파악할 때 사용하는 함수들

 

함수 기능
head() 데이터 앞부분 출력
tail() 데이터 뒷부분 출력
View() 뷰어 창에서 데이터 확인
dim() 데이터 차원 출력
str() 데이터 속성 출력
summary() 요약 통계량 출력

 

● head() - 데이터 앞부분 확인하기 

 

- 데이터의 일부만 출력해 데이터의 형태를 확인할 떄 head()를 이용 

- head()는 데이터의 앞부분을 출력하는 기능 

 head(exam) #앞에서부터 6행까지 출력
 
  id class math english science
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

- 데이터 프레임 이름 뒤에 쉼표를 쓰고 숫자를 입력하면 입력한 행까지의 데이터를 출력

head(exam,10) #앞에서부터 10행까지 출력

   id class math english science
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

 

● tail() - 데이터 뒷부분 확인하기 

 

- tail()은 데이터의 뒷부분을 출력하는 기능 

- 괄호 안에 데이터 프레임 이름을 입력하면 뒤에서부터 여섯 행을 출력

tail(exam) # 뒤에서부터 6행까지 출력

   id class math english science
15 15     4   75      56      78
16 16     4   58      98      65
17 17     5   65      68      98
18 18     5   80      78      90
19 19     5   89      68      87
20 20     5   78      83      58

 

- 숫자를 입력하면 원하는 만큼의 행을 출력

 tail(exam,10) #뒤에서부터 10행까지 출력
 
   id class math english science
11 11     3   65      65      65
12 12     3   45      85      32
13 13     4   46      98      65
14 14     4   48      87      12
15 15     4   75      56      78
16 16     4   58      98      65
17 17     5   65      68      98
18 18     5   80      78      90
19 19     5   89      68      87
20 20     5   78      83      58

 

● View() - 뷰어 창에서 데이터 확인하기 

 

- View()는 엑셀과 유사하게 생긴 '뷰어 창'에 원자료를 직접 보여주는 기능 

- View(exam)을 실행하면 exam이라는 이름의 데이터 뷰어 창이 생성 

 

# 데이터 뷰어 창에서 exam 데이터 확인
View(exam)

 

 

● dim() -  데이터가 몇 행, 몇열로 구성되어 있는지 알아보기 

 

- dim()은 데이터 프레임이 몇 행, 몇 열로 되어 잇는지 알아볼 때 사용

dim(exam) # 행, 열 출력

#[1] 20  5

 

● str() - 속성 파악하기 

 

- str()은 데이터에 들어있는 변수들의 속성들을 보여줌

- 출력 결과의 첫 번째 행에는 데이터의 속성이 무엇인지, 몇 개의 관측치와 변수로 구성되어 있는지 표시 

  -> 20개의 관측치(Observation), 5개 변수 (variables)로 구성 

str(exam) # 데이터 속성 확인


'data.frame':	20 obs. of  5 variables:
 $ id     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ class  : int  1 1 1 1 2 2 2 2 3 3 ...
 $ math   : int  50 60 45 30 25 50 80 90 20 50 ...
 $ english: int  98 97 86 98 80 89 90 78 98 98 ...
 $ science: int  50 60 78 58 65 98 45 25 15 45 ...

 

● summary() - 요약 통계랑 산출하기 

 

- summary()는 '평균'처럼, 변수의 값을 요약한 '요약 통계량'을 산출하는 함수 

 

summary(exam) #요약 통계량 출력

       id            class        math          english        science     
 Min.   : 1.00   Min.   :1   Min.   :20.00   Min.   :56.0   Min.   :12.00  
 1st Qu.: 5.75   1st Qu.:2   1st Qu.:45.75   1st Qu.:78.0   1st Qu.:45.00  
 Median :10.50   Median :3   Median :54.00   Median :86.5   Median :62.50  
 Mean   :10.50   Mean   :3   Mean   :57.45   Mean   :84.9   Mean   :59.45  
 3rd Qu.:15.25   3rd Qu.:4   3rd Qu.:75.75   3rd Qu.:98.0   3rd Qu.:78.00  
 Max.   :20.00   Max.   :5   Max.   :90.00   Max.   :98.0   Max.   :98.00

 

출력값 통계량 설명
MIn 최솟값(Minimum) 가장 작은 값
1st Qu 1사분위수 (1st Quantile) 하위 25%(4분의 1) 지점에 위치하는 값
Median 중앙값(Median) 중앙에 위치하는 값
Mean 평균(mean) 모든 값을 더해 값의 개수로 나눈값
3rd Qu 3사분위수 (3rd Quantile) 하위 75%(4분의 3) 지점에 위치하는 값
Max 최댓값(Maximum) 가장 큰 값

 

 

2. 변수명 바꾸기 

 

- 변수명을 이해하기 쉬운 단어로 바꾸면 데이터를 수월하게 다룰 수 있음 

 

1) 변수명 바꾸기 

 

- dplyr 패키지rename()을 이용해 변수명을 바꾸는 방법

 

● 데이터 프레임 생성

 

df_raw<-data.frame(var1=c(1,2,1), var2=c(2,3,2))
> df_raw

  var1 var2
1    1    2
2    2    3
3    1    2

 

● dplyr 패키지 설치하고 로드 

 

install.packages("dplyr") # dplyr 설치
libaray(dplyr) # dplyr 로드

 

● 데이터 프레임 복사본 만들기 

 

- 변수명을 바꾸기 전에 원본을 보유하기 위해 df_new라는 데이터 프레임 복사본을 만듬

- 새로운 변수명 df_new에 df_raw를 할당하는 형태로 코드를 작성하면 됨 

df_new<-df_raw # 복사본 생성
df_new  # 출력

  var1 var2
1    1    2
2    2    3
3    1    2

 

● 변수명 바꾸기 

 

- rename()에 '데이터 프레임명, 새 변수명 = 기존 변수명'을 입력하면 됨 

- 순서가 바뀌면 실행되지 않음

 

df_new <- rename(df_new,v2=var2) #var2를 v2로 수정
df_new

  var1 v2
1    1  2
2    2  3
3    1  2

 

 

3. 파생 변수 만들기 

 

- 데이터에 들어 있는 변수만 이용해 분석할 수도 있지만, 변수를 조합하거나 함수를 적용해 새 변수를 만들어 분석할 수도 있음

- 파생 변수 (Derived Variable)

  -> 기존의 변수를 변형해 만든 변수 

 

1) 변수를 조합해 파생변수 만들기 

 

● 데이터 프레임 생성

 

df<-data.frame(var1=c(4,3,8), var2=c(2,6,1))
df

  var1 var2
1    4    2
2    3    6
3    8    1

 

● var_sum 만들기 

 

- var1과 var2 변수의 값을 더한 var_sum이라는 파생변수를 만들어 df에 추가 

- 데이터 프레임명에 $을 붙여 새로 만들 변수명을 입력하고, <-로 계산공식을 할당하는 형태 

 

df$var_sum <- df$var1 + df$var2 # var_sum 파생변수 생성
df

  var1 var2 var_sum
1    4    2       6
2    3    6       9
3    8    1       9

 

● var_mean 만들기 

 

- var1과 var2를 더한 후 2로 나눠 var_mean이라는 파생변수를 만들어 df에 추가 

- 변수명 앞에 데이터프레임명을 반복해서 입력해야 함

 

df$var_mean <- (df$var1+df$var2)/2 #var_mean 파생변수 생성
df

  var1 var2 var_sum var_mean
1    4    2       6      3.0
2    3    6       9      4.5
3    8    1       9      4.5

 

 

2) 조건문을 활용해 파생 변수 만들기 

 

- 조건에 따라 서로 다른 값을 반환하는 '조건문 함수'를 이용해 파생변수를 만드는 방법

 

ex) 연비 기준을 충족해  '고연비 합격 판정'을 받은 자동차가 몇 대나 되는지 알아보는 상황

연비가 기준치를 넘기면 합격, 넘기지 못하면 불합격을 부여하도록 변수 만들기 

 

● 기준값 정하기 

 

- summay()을 이용해 통합 연비변수 total의 평균과 중앙값을 확인

summary(mpg$total) # 요약 통계량 산출

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.50   15.50   20.50   20.15   23.50   39.50

 

- 히스토그램을 생성해 자동차들의 연비 분포 확인

- hist()를 이용하면 히스토그램을 그릴 수 있음

hist(mpg$total) #히스토그램 생성

 -> total 연비의 평균과 중앙값이 약 20

 -> total 연비가 20~25 사잉에 해당하는 자동차 모델이 가장 많음

 -> 대부분 25 이하이고, 25를 넘기는 자동차는 많지 않음

 

- 요약 통계량과 히스토그램을 종합하면 연비가 20을 넘기는 자동차에 고연비 합격 판정을 내리면 적당할 것으로 판단

 

 

● 합격 판정 변수 만들기 

 

- ifelse()는 가장 많이 사용하는 조건문 함수 

- 지정한 조건에 맞을 때와 맞지 않을 때 서로 다른 값을 반환하는 기능을 함 

 

- total 이 20 이상이면 "pass"를 부여하고 그렇지 않으면 "fail"을 부여해 test라는 변수를 생성

#20 이상이면 pass, 그렇지 않으면 fail 부여 
mpg$test<-ifelse(mpg$total >=20, "pass", "fail")
head(mpg,20) #데이터 확인

# A tibble: 20 × 13
   manufacturer model         displ  year   cyl trans drv     cty   hwy fl    class total test 
   <chr>        <chr>         <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> <dbl> <chr>
 1 audi         a4              1.8  1999     4 auto… f        18    29 p     comp…  23.5 pass 
 2 audi         a4              1.8  1999     4 manu… f        21    29 p     comp…  25   pass 
 3 audi         a4              2    2008     4 manu… f        20    31 p     comp…  25.5 pass 
 4 audi         a4              2    2008     4 auto… f        21    30 p     comp…  25.5 pass 
 5 audi         a4              2.8  1999     6 auto… f        16    26 p     comp…  21   pass 
 6 audi         a4              2.8  1999     6 manu… f        18    26 p     comp…  22   pass

 

● 빈도표로 합격 판정 자동차수 살펴보기 

 

- 빈도표는 변수의 각 값들이 몇 개씩 존재하는지, 데이터의 개수를 나타낸 표 

- table()을 이용해 빈도표를 만들면 합격한 자동차와 불합격한 자동차가 각각 몇대인지 알 수 있음

 

table(mpg$test) # 연비 합격 빈도표 생성

#fail pass 
#106  128

 

 

● 막대 그래프로 빈도 표현하기 

 

- ggplot2 패키지에 내장된 qplot()은 값의 개수로 막대의 길이를 표현하는 기능을 함 

- ggplot2 패키지를 로드한 후 qplot()을 이용해 test 변수의 빈도를 막대 그래프로 표현

 

library(ggplot2) #ggplot2 로드
qplot(mpg$test) #연비 합격 빈도 막대 그래프 생성

 

 

3) 중첩 조건문 활용하기 

 

-  A,B,C 세 종류의 연비 등급으로 분류하는 변수 

- total이 30 이상이면 A, 20~29는 B, 20 미만이면 C 등급으로 분류 

- 세 가지 이상의 범주로 값을 부여하려면 ifelse() 안에 ifelse()를 넣는 형식으로 조건문을 중첩해 작성

 

연비에 따라 세가지 종류의 등급을 부여해 grade 변수를 생성

 - ifelse()안에 또 다른 ifelse()가 들어 있는 형태로 구성

 

#total을 기준으로 A,B,C 등급 부여 
mpg$grade<-ifelse(mpg$total>=30,"A", ifelse(mpg$total>=20,"B","C"))
head(mpg,20) # 데이터 확인


# A tibble: 20 × 14
   manufacturer model   displ  year   cyl trans drv     cty   hwy fl    class total test  grade
   <chr>        <chr>   <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> <dbl> <chr> <chr>
 1 audi         a4        1.8  1999     4 auto… f        18    29 p     comp…  23.5 pass  B    
 2 audi         a4        1.8  1999     4 manu… f        21    29 p     comp…  25   pass  B    
 3 audi         a4        2    2008     4 manu… f        20    31 p     comp…  25.5 pass  B    
 4 audi         a4        2    2008     4 auto… f        21    30 p     comp…  25.5 pass  B    
 5 audi         a4        2.8  1999     6 auto… f        16    26 p     comp…  21   pass  B    
 6 audi         a4        2.8  1999     6 manu… f        18    26 p     comp…  22   pass  B    
 7 audi         a4        3.1  2008     6 auto… f        18    27 p     comp…  22.5 pass  B

 

● 빈도표, 막대그래프로 연비 등급 살펴보기 

 

table(mpg$grade) #등급 빈도표 생성

 # A   B   C 
 #10 118 106 

qplot(mpg$grade) #등급 빈도 막대 그래프 생성

 

● 원하는 만큼 범주 만들기 

 

- ifelse()를 더 중첩하면 원하는 만큼 범주의 수를 늘릴 수 있음 

- 3개의 ifelse()를 중첩해 4개의 범주의 등급을 부여하는 코드 

 

# A,B,C,D 등급 부여 
mpg$grade2 <-ifelse(mpg$total>=30,"A",
               ifelse(mpg$total>=25, "B", 
            	  ifelse(mpg$total>=20,"C","D")))

'데이터 > R 프로그래밍' 카테고리의 다른 글

R 프로그래밍 기초 (4)  (0) 2023.10.16
R 프로그래밍 기초 (3)  (0) 2023.10.13
R 프로그래밍 기초 (1)  (0) 2023.10.12