본문 바로가기
프로그래밍 언어/R

R 4. 데이터 파악하기

by Jinger 2024. 1. 27.

서론

     데이터 분석의 첫 단계 현재 내가 가진 데이터의 전반적인 구조 파악하는 일이다. 어떤 변수들이 있는지, 몇 행으로 구성되어 있는지 등을 알아보고 데이터의 특징에 대한 감을 잡는 과정이다. 이 과정에서 분석 방향에 대한 힌트를 얻게 된다.


데이터 파악하기

    데이터를 파악할 때 기본적으로 사용하는 여섯 가지 함수 head(), tail(), View(), dim(), str(), summary()가 있다. 이 함수들에 대해 자세히 살펴보자.

더보기
exam <- read.csv("csv_exam.csv")

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

    데이터의 내용을 확인하려면 데이터 프레임명을 입력해 실행하면 되지만 화면에 너무 많은 내용이 출력되기 때문에 알아보기 힘들다. 데이터의 일부만 출력해 데이터의 형태를 확인할 때 "head()"를 이용한다. "head()" 함수는 괄호 안에 데이터 프레임 이름을 입력하고 실행하면 앞에서부터 여섯 번째 행까지 출력한다. 데이터 프레임 이름 뒤에 쉼표를 쓰고 숫자를 입력하면 입력한 행까지의 데이터를 출력한다.

head(exam)

##   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)

##   id class math english science
## 1  1     1   50      98      50
## 2  2     1   60      97      60
## 3  3     1   45      86      78
...
## 8  8     1   90      78      25
## 9  9     3   20      98      15
## 10 10    3   50      98      45

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

    "tail()"은 데이터의 뒷부분을 출력하는 기능을 한다. 괄호 안에 데이터 프레임 이름을 입력하면 뒤에서부터 여섯 행을 출력한다. head()와 마찬가지로 숫자를 입력하면 원하는 만큼의 행을 출력할 수 있다.

tail(exam)

##     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      48

tail(exam, 10)

##     id class math english science
## 11  11     3   65      65      65
## 12  12     3   45      85      32
## 13  13     4   46      98      65
...
## 18 18      5   80      78      90
## 19 19      5   89      68      87
## 20 20      5   78      83      48

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

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

View(exam)

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

    "dim()"은 데이터 프레임이 몇 행, 몇 열로 되어 있는 지 알아볼 때 사용한다. 예시의 exam은 20행, 5열로 구성되어 있다. dim() 함수에서 출력되는 결과의 앞은 '행', 뒤는 '열'을 의미한다.

dim(exam)

# [1] 20 5

str() - 속성 파악하기

    "str()"은 데이터에 들어 있는 변수들의 속성을 보여준다. 모든 변수의 속성을 한눈에 파악하고 싶을 때 사용한다.

str(exam)

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

    "summary()"는 변수의 값을 요약한 '요약 통계량'을 산출하는 함수이다. 요약 통계량을 보면 변수의 특성을 파악하는 데 도움이 된다.

summary(exam)

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

변수명 바꾸기

    데이터의 전반적인 특징을 파악하고 나면 본격적으로 분석하기 전에 변수명을 수정하는 작업을 해야 한다. 변수명을 이해하기 쉬운 단어로 바꾸면 데이터를 수월하게 다룰 수 있다. "rename()"을 이용해 변수명을 바꿀 수 있다. 괄호 앞에 '데이터 프레임명, 새 변수명 = 기존 변수명'을 입력하면 해당 데이터 프레임의 기존 변수명을 새로운 변수명으로 수정할 수 있다.("rename()" 함수를 사용하기 위해 "dplyr"패키지를 설치하고 로드해야 한다.)

install.packages("dplyr")
library(dplyr)

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

df_new <- rename(df_new, v2 = var2)

df_raw

##   var1 var2
## 1    1    2
## 2    2    3
## 3    1    2

df_new

##   var1 v2
## 1    1  2
## 2    2  3
## 3    1  2

파생 변수 만들기

    데이터 들어 있는 변수만 이용해 분석할 수도 있지만, 변수를 조합하거나 함수를 적용해 새 변수를 만들어 분석할 수도 있다. 기존 변수를 변행해 만든 변수를 '파생변수(Derived Variable)'라고 한다.

df <- data.frame(var1 = c(4, 3, 8), var2 = c(2, 6, 1))
df$var_sum <- df$var1 + df$var2
df$var_mean <- (df$var1 + df$var2)/2
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

조건문 활용하기

    변수를 조합할 수도 있지만 함수를 이용해서 파생변수를 만들 수도 있다. 이번에는 조건에 따라 서로 다른 값을 반환하는 '조건문 함수'를 이용해 파생변수를 만드는 방법을 알아보자.

    조건문의 기준을 정하기 위해 "summary()"함수와 "hist()"함수(히스토그램)를 이용해 보자. cty와 hwy의 연비를 통합하여 통합 연비 변수를 만들었다.

히스토그램을 보면 x축에는 5 간격으로 total 변수의 값이 표현되어 있고,  y축에는 각 계급 구간의 빈도가 표현되어 있다. 요약 통계량과 히스토그램을 통해 아래와 같은 사실을 알 수 있다.

  • total 연비 평균과 중앙값이 약 20이다.
  • total 연비가 20~25 사이에 해당하는 자동차 모델이 가장 많다.
  • 대부분 25 이하이고, 25를 넘기는 자동차는 많지 않다.

    이를 기반으로 연비가 20을 넘기는 자동차에 고연비 합격 판정을 내리는 판단 기준으로 적합해 보인다. 합격 판정 변수를 만들어 보자. 조건에 따라 서로 다른 값을 반환하는 함수를 '조건문(Conditional Statments) 함수'라고 한다. 조거문을 이용하면 특정 조건을 만족했는지의 여부에 따라 서로 다른 값을 부여해 변수를 생성할 수 있다. "ifelse()"는 가장 많이 사용하는 조건문 함수이다. 지정한 조건에 맞을 때와 맞지 않을 때 서로 다른 값을 반환하는 기능을 한다. 괄호 안에 '조건, 조건에 맞을 대 부여할 값, 조건에 맞지 않을 때 부여할 값'순으로 작성하면 된다.

mpg$test <- ifelse(mpg$total >= 20, "pass", "fail")

    빈도표는 변수의 각 값들이 몇 개씩 존재하는지, 데이터의 개수를 나타낸 표이다. "table()"을 이용해 빈도표를 만들면 합격한 자동차와 불합격한 자동차가 각각 몇 대인지 확인할 수 있다. 혹은 "ggplot2" 패키지에 내장된 "qplot()"은 값의 개수를 막대그래프로 표현할 수 있다.

중첩 조건문

     중첩 조건문을 이용하여 이번엔 합격과 불합격 분류하는 변수가 아닌 연비 등급을 매기는 변수를 만들어 보자. 중첩 조건문을 만드는 방법은 ifelse() 안에 다시 ifelse()를 넣는 형식으로 조건문을 중첩해 작성한다. 즉, 괄호 안에 '조건, 조건에 맞을 대 부여할 값, ifelse문' 을 작성하면 된다.

mpg$grade <- ifelse(mpg$total >= 30, "A",
                    ifelse(mpg$total >= 20, "B", "C"))


주섬주섬

  • 함수명은 소문자로만 되어 있는 경우도 있지만 대소문자가 섞여 있는 경우가 있으니 주의하자.
  • 매개변수 순서에 유의하자.
  • 아래는 배운 내용 정리이다.
더보기
# 1. 데이터 준비, 패키지 준비
mpg <- as.data.frame(ggplot2::mpg)	# 데이터 불러오기
library(dplyr)		# dplyr 로드
library(ggplot2)	# ggplot2 로드

# 2. 데이터 파악
head(mpg)		# Raw 데이터 앞부분
tail(mpg)		# Raw 데이터 뒷부분
View(mpg)		# Raw 데이터 뷰어 창에서 확인
dim(mpg)		# 차원
str(mpg)		# 속성
summary(mpg)	# 요약 통계량

# 3. 변수명 수정
mpg <- rename(mpg, company = manufacturer)

# 4. 파생 변수 생성
mpg$total <- (mpg$city + mpg$hwy)/2	# 변수 조합
mpg$test <- ifelse(mpg%total >= 20, "pass", "fail")	# 조건문 활용

# 5. 빈도 확인
table(mpg)	# 빈도표 출력
qplot(mpg)	# 막대 그래프 생성
  • 아래 접은 글은 위 내용을 연습할 예제이다.
더보기

    "ggplot2"패키지에 내장된 mpg 데이터를 이용하여 데이터를 파악해보자.

install.packages("ggplot2")
# as.data.frame()함수는 데이터 속성을 데이터 프레임 형태로 바꾸는 함수이다.
mpg <- as.data.frame(ggplot2::mpg)	# ggplot2에 들어 잇는 mpg 데이터를 지칭하는 코드​
변수명 내용
manufacturer 제조 회사
displ 배기량(displacement)
cyl 실린더 개수(cylinders)
drv 구동 방식(drive wheel)
hwy 고속도로 연비(highway)
class 자동차 종류
model 자동차 모델명
year 생산 연도
trans 변속기 종류(transmission)
cty 도시 연비(city)
fl 연료 종류(fuel)

참고

 

GitHub - youngwoos/Doit_R: <Do it! 쉽게 배우는 R 데이터 분석> 저장소

<Do it! 쉽게 배우는 R 데이터 분석> 저장소. Contribute to youngwoos/Doit_R development by creating an account on GitHub.

github.com

 

반응형

'프로그래밍 언어 > R' 카테고리의 다른 글

R 6. 데이터 정제하기  (0) 2024.01.30
R 5. 데이터 가공하기  (0) 2024.01.29
R 3. 데이터 프레임  (1) 2024.01.26
R 2. 데이터 분석 이전 기본 개념  (2) 2024.01.25
R 1. R 들어가기 앞서  (0) 2024.01.23

댓글