custdata_folder_items

custdata_folder_items

Custdata 폴더 아래에 custdata.tsv 파일이 있는지 꼭 확인하고 진행하세요. 저는 Project 기능을 사용하고 있어서 작업 디렉토리(Working directory, getwd() 를 이용해 확인 가능)를 따로 지정하거나, 전체 경로를 적을 필요가 없었습니다. Project 기능을 사용하지 않는다면, setwd() 를 이용해서 작업 디렉토리를 변경하시거나, 파일을 찾을 수 있는 전체 경로를 적어주면 됩니다.

# 필요한 라이브러리 불러오기
library(ggplot2)

# 예제 파일 불러오기
custdata <- read.table("./Custdata/custdata.tsv", header = TRUE, sep = "\t")

데이터 확인하기

# 데이터 구조 확인
str(custdata)
## 'data.frame':    1000 obs. of  11 variables:
##  $ custid      : int  2068 2073 2848 5641 6369 8322 8521 12195 14989 15917 ...
##  $ sex         : Factor w/ 2 levels "F","M": 1 1 2 2 1 1 2 2 2 1 ...
##  $ is.employed : logi  NA NA TRUE TRUE TRUE TRUE ...
##  $ income      : int  11300 0 4500 20000 12000 180000 120000 40000 9400 24000 ...
##  $ marital.stat: Factor w/ 4 levels "Divorced/Separated",..: 2 2 3 3 3 3 3 2 2 1 ...
##  $ health.ins  : logi  TRUE TRUE FALSE FALSE TRUE TRUE ...
##  $ housing.type: Factor w/ 4 levels "Homeowner free and clear",..: 1 4 4 3 4 2 1 4 4 1 ...
##  $ recent.move : logi  FALSE TRUE TRUE FALSE TRUE FALSE ...
##  $ num.vehicles: int  2 3 3 0 1 1 1 3 2 1 ...
##  $ age         : num  49 40 22 22 31 40 39 48 44 70 ...
##  $ state.of.res: Factor w/ 50 levels "Alabama","Alaska",..: 22 9 10 31 9 32 12 22 13 33 ...

str() 함수를 이용해서 값을 살펴보면, 총 11개의 column 이 있습니다. custid 는 고객 번호이기 때문에 분석에 사용하진 않을 겁니다. 나머지 10개의 변수 중에서 범주형 자료는 sex, is.employed, marital.stat, health.ins, housing.type, recent.move, state.of.res 총 7개이며, 연속형(int, num) 변수는 income, num.vehicles, age 3개임을 알 수 있습니다.

요약 통계량

# 요약 통계량 보기
summary(custdata)
##      custid        sex     is.employed         income      
##  Min.   :   2068   F:440   Mode :logical   Min.   : -8700  
##  1st Qu.: 345667   M:560   FALSE:73        1st Qu.: 14600  
##  Median : 693403           TRUE :599       Median : 35000  
##  Mean   : 698500           NA's :328       Mean   : 53505  
##  3rd Qu.:1044606                           3rd Qu.: 67000  
##  Max.   :1414286                           Max.   :615000  
##                                                            
##              marital.stat health.ins     
##  Divorced/Separated:155   Mode :logical  
##  Married           :516   FALSE:159      
##  Never Married     :233   TRUE :841      
##  Widowed           : 96                  
##                                          
##                                          
##                                          
##                        housing.type recent.move      num.vehicles  
##  Homeowner free and clear    :157   Mode :logical   Min.   :0.000  
##  Homeowner with mortgage/loan:412   FALSE:820       1st Qu.:1.000  
##  Occupied with no rent       : 11   TRUE :124       Median :2.000  
##  Rented                      :364   NA's :56        Mean   :1.916  
##  NA's                        : 56                   3rd Qu.:2.000  
##                                                     Max.   :6.000  
##                                                     NA's   :56     
##       age              state.of.res
##  Min.   :  0.0   California  :100  
##  1st Qu.: 38.0   New York    : 71  
##  Median : 50.0   Pennsylvania: 70  
##  Mean   : 51.7   Texas       : 56  
##  3rd Qu.: 64.0   Michigan    : 52  
##  Max.   :146.7   Ohio        : 51  
##                  (Other)     :600

우리가 관심있어하는 변수는 건강보험의 가입 여부에 대한 정보인 healt.ins 입니다. 나머지 변수들은 이를 예측하기 위해 사용할 수 있는 예측 변수들이라고 할 수 있습니다. 그 중에서 housing.type, recent.move, num.vehicles 에는 모두 똑같이 56개의 결측치(NA’s)가 있고, is.employed 에는 전체의 30%에 달하는 328개의 결측치가 있습니다. is.employed 를 모델링에 이용하려면 결측치에 대한 문제를 해결해야겠지만, housing.type, recent.move, num.vehicles 에 대한 결측치는 많지 않으니 무시하기 진행하겠습니다.

연속형 변수를 이용한 시각화

ggplot(data = custdata, aes(x = income)) +
    geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

가장 기본적인 ggplot() 함수의 문법입니다. ggplot 함수 내부에 인자로 데이터를 받고, aes 내부에서는 x, y, color, size, fill 등에 이용할 column 이름을 받을 수 있습니다. 그리고 + 연산자로 다음 레이어를 추가해줍니다. geom_histogram 함수 내에서 bins 또는 binwidth 인자로 bin 의 갯수나 크기를 조절할 수 있습니다. 기본 설정은 bins = 30 인데, 이를 bins = 20 으로 바꿔서 히스토그램을 그려보세요.

# bins = 20 으로 히스토그램 그리기

연속형 변수와 범주형 변수를 같이 나타내는 도표를 그려보도록 하겠습니다. 우리의 관심사인 건강보험 가입 여부에 따라 수입은 어떻게 분포되어 있는지를 살펴봅시다. 여기서 사용할 함수는 facet_wrap() 입니다. 따로 보고자 하는 범주형 변수를 ~ 을 이용해서 지정해주면 그 변수의 갯수만큼 동일한 그래프를 그려줍니다.

ggplot(custdata, aes(x = income)) +
    geom_histogram() +
    facet_wrap(~ health.ins)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

그러면 결혼 상태에 따른 수입의 분포를 볼 수 있는 그래프를 그려주세요.

# 결혼 상태에 따른 수입

범주형 변수를 이용한 시각화

결혼 상태에 대한 막대 그래프는 아래와 같이 나타낼 수 있으며, aes 내에 fill 인자로 health.ins 를 선언해주면 각 결혼 상태별 건강보험 가입 여부를 확인할 수도 있습니다. 마지막으로 geom_bar() 에서 position = "fill" 인자를 추가하면 비율 그래프로 바꿀 수 있습니다. 기본값은 position = "dodge" 입니다.

ggplot(custdata, aes(x = marital.stat)) +
    geom_bar()

ggplot(custdata, aes(x = marital.stat, fill = health.ins)) +
    geom_bar()

ggplot(custdata, aes(x = marital.stat, fill = health.ins)) +
    geom_bar(position = "fill")

거주 지역에 대한 빈도를 수평 막대 그래프로 나타내기 위해서는 아래와 같은 코드를 실행하면 됩니다.

ggplot(custdata, aes(x = state.of.res)) +
    geom_bar() +
    coord_flip()

그렇다면 거주 지역별로 건강보험 가입 비율의 그래프를 수평으로 나타내보세요.

# 거주 지역별 건강보험 가입 비율을 보여주는 수평 막대 그래프