카테고리 없음

[패스트캠퍼스 수강 후기] R 인강 100% 환급 챌린지 12차 미션

열린세계 2020. 8. 21. 00:13

[패스트캠퍼스 수강 후기] R 인강 100% 환급 챌린지 12차 미션

 

패스트캠퍼스의 강의 중, 프로젝트와 함께 배우는 R 데이터 분석 올인원 패키지 Online를 수강하고 있습니다.

https://bit.ly/2DKMGNx 

내용을 복습도 할 겸, 미션에도 참가할 겸, 블로그에 매일 매일 정리해 보게 되었습니다.

 

오늘은 12회차 미션!

Part 2) [R로 하는 데이터 분석] 데이터 분석 기본기 익히기

  1. 04. Ch 06. 그래프 그리기 - 04. 집단 간 분포 차이를 표현하는 상자 그림

  2. 05. Ch 07. 데이터 정제하기 - 01. 결측치 정제하기

 

  1. 04. Ch 06. 그래프 그리기 - 04. 집단 간 분포 차이를 표현하는 상자 그림

    1. box plot

      1. 자주 써보기를 추천!

      2. 두 반의 평균이 동일하더라도 편차가 완전히 다를 수도 있다.

      3. 따라서 단순히 평균을 보기보다는 box plot으로 데이터의 분포를 확인해보는 것이 좋다. 

    2. 사용법

      1. ggplot(data = mpg, aes(x=drv, y=hwy))+geom_boxplot()

      2. 상자의 가운데 선분은 '중간값'

      3. 밑면은 1분위수, 윗면은 3분위수

      4. 상자의 최하점은 최소값, 최상점은 최대값

      5. 가운데에 점으로 표시된 건, '극단치'

        1. 1~3분위까지의 거리(IQR)의 1.5배 계산

          1. 1분위 - 1.5xIQR보다 작으면 극단치

          2. 3분위+1.5xIQR보다 크면 극단치

        2. 따라서 극단치가 있을 수도, 없을 수도 있음

      6. 참고: https://m.blog.naver.com/running_p/90178707051

      7. 즉, 위의 그림에서

        1. f구동이 연비 중간값이 제일 높다~ 그 후 r, 4 순서

        2. 상자의 폭을 보면.. r구동은 연비가 다양한 차량들이 있음

        3. f구동은 연비가 비슷비슷..

        4. box에서 중간값이 전체 상자의 중간인지, 위쪽인지, 아래쪽인지..

        5. 4륜이라면, 분포가 낮은 쪽으로 치우쳐 있다는 것을 알 수 있음

        6. 즉, 평균값만 보는 것보다 다양한 값을 알 수 있다. 

      8. 연습

        1. 여기서는 group_by + summarise 를 쓰면 안됨

          1. 이걸 쓰면 summarise에서 원자료가 사라지고, mean값만 남기에 Box_plot을 그릴 수 없게 됨

        2. 코드

          1. mpg_new <-mpg %>%

          2.   select(class, cty) %>%

          3.   filter(class %in% c("compact", "subcompact", "suv"))

          4. ggplot(data = mpg_new, aes(x=class, y=cty))+geom_boxplot()

  2. 05. Ch 07. 데이터 정제하기 - 01. 결측치 정제하기

    1. 앞서 자료는 오류가 없는 데이터였음.

      1. 하지만 실제 데이터는 대부분 오류가 존재

      2. 따라서 오류가 있는 데이터를 처리한 후 분석을 해야 함.

        1. 오류의 종류

          1. 자료가 빠진 것... (아예 없는 것)  -> 결측치

          2. 이상한 데이터가 있는 것.. (너무 큰 값이라든지.. 너무 작은 값이라든지) -> 이상치

    2. 결측치 (missing value)

      1. 누락된 값, 비어있는 값

      2. 함수 적용 불가, 분석 결과 왜곡

      3. 제거 후 분석 실시

    3. R에는 결측치를 표기할 때 NA로 표시

        1. df <- data.frame(sex=c("M", "F", NA, "M", "F"),

        2.                        score = c(5,4,3,4,NA))

        3. df                                           

        4. is.na(df)                       

        5. table(is.na(df))

      1. is.na

        1. 결측치면 TRUE 아니면 FALSE

      2. table(is.na(df))

        1. table함수를 통해 내가 가진 데이터에 결측치가 몇개 있는 지 확인하는 방법

        2. 전체 df에 몇개의 결측치가 있는 지 확인 

      3. 그러면 NA가 있는 값을 걸러내는 방법은?

        1. table(is.na(df$sex))

        2. table(is.na(df$score))                       

          1. 개별 변수에 대해 몇개의 결측치가 있는 지 확인

      4. 결측치가 있는 상태에서 연산하면 결과가 NA

        1. mean(df$score)

        2. sum(df$score)

    4. 결측치 제거하기

      1. filter함수와 is.na()를 사용

        1. df_nomiss <- df %>% filter(!is.na(score) & !is.na(sex))

        2. df_nomiss

        3. 하지만 이 방법은 변수 하나하나에 대해서 is.na를 써야해서 불편할 수 있음

      2. na.omit을 써보자!

        1. df_nomiss2 <-  na.omit(df)

        2. df_nomiss2

        3. 이건 편하긴 한데..

        4. 나는 성별-소득만 분석할거라서 지역의 결측치는 있든 없든 상관없음. 

          1. 따라서 omit을 쓰지 않음

          2. 이 때는 그냥 하나하나 is.na()를 사용.

    5. mean, sum 등의 함수에 결측치는 빼고 계산하는 파라미터가 있음! 오예~!

      1. mean(df$score, na.rm = T)

      2. sum(df$score, na.rm = T)

        1. 이 파라미터가 없는 함수도 있음

        2. 없으면 filter써야 함~

    6. summarise에서도 사용 가능

        1. exam <- read.csv("csv_exam.csv")

        2. exam[c(3,8,15), "math"] <- NA

        3. table(is.na(exam))

        4. exam %>% summarise(mean_math = mean(math))

        5. exam %>% summarise(mean_math = mean(math, na.rm = T))

      1. 위에서 

        1. exam[c(3,8,15), "math"]

          1. R 자체 함수의 데이터 추출방법

          2. 1번째 인자는 '행 조건'

            1. 3, 8, 15번째 행

          3. 2번째 인자는 '열 조건'

            1. math

    7. 위에서 설명한 건, 결측치는 그냥 '제외'...

      1. 데이터가 좀 아깝다~

      2. 따라서 결측치를 '대체해서 사용하는 방법'이 존재

        1. 요약통계량으로 집어넣음

          1. 평균값이나 최빈값을 채워넣어서 사용하기도 함

          2. 또는 머신러닝 등을 이용하여 주변값 등으로부터 예측해서 사용하기도 함.

          1. exam <- read.csv("csv_exam.csv")

          2. exam[c(3,8,15), "math"] <- NA

          3. table(is.na(exam))

          4. exam %>% summarise(mean_math = mean(math, na.rm = T))

          5. //55로 결측치 대체

          6. exam$math <- ifelse(is.na(exam$math), 55, exam$math)

          7. table(is.na(exam$math))

          8. exam

          9. mean(exam$math)

      3. 연습문제

          1. 코드

            1. mpg %>%

            2.   filter(!is.na(mpg$drv) & !is.na(mpg$hwy)) %>%

            3.   group_by(drv) %>%

            4.   summarise(mean_hwy = mean(hwy)) %>%

            5.   arrange(desc(mean_hwy))

 

 

상자 그림에 대한 설명

상자 그림을 앞으로 종종 활용해봐야할 듯~

결측치 역시 실제로 데이터를 다루면 많이 발생하는 케이스.. is.na를 이용하는 것도 잘 기억해 두어야할 듯~