[비정형 데이터] 02. Tidyverse 패키지 다루기

2020. 4. 29. 12:38데이터 분석/비정형데이터분석

Tidyverse 패키지

  • 여러 패키지를 공통된 규칙 안에서 사용할 수 있게 모아놓은 패키지

  • Tidyverse패키지 이용과정

    • data import -> tidy -> transform &visaulise & model (explore) -> communication
      • data가 import되고 각 관측치가 하나의 행에 기록되고 각 변수에 의해 특성화되도록 tidy data형태로 변환 후 시각화와 요약, 모델링을 통해 탐색한 후 의사결정에 활용
  • tidy data 형태로 변환

    • 같은 속성의 변수들이 여러 개이면 분석을 하는데 시간이 오래걸리고 자동화시키기 복잡하기 때문에 같은 의미의 변수는 하나로 합쳐지는 것이 좋음.
      • 회사 내 DB에서 컬럼을 추가하기 위해서는 테이블 설계를 다시해야하고 데이터 정의서 및 관련 문서들을 업데이터시켜야되기 때문에 일의 번거로움이 발생할 수 있기 때문. 하지만 DB는 기록하기 위해 만들어진 것이기 때문에 업데이트 기록만 알려준다면 행을 추가한다고해서 문제될 것은 없음.
    • 데이터를 경제적으로 저장할 수 있어 메모리 효율면에서 좋음.
    • 시각화하기 좋음
      • 요약된 데이터 형태로 만들어내는 것이기 때문에 좀 더 수월하게 시각화를 할 수 있음.

tidyverse 패키지 실습

  • read_csv
    • data를 불러올 때 컬럼별로 type을 지정할 수 있음.
    • col_names를 이용하여 변수명을 지정할 수 있고 row data를 직접 입력하여 읽어올 수 있음.
    • 컬럼명을 지정해주지 않으면 첫 행을 컬럼명으로 인식
library(tidyverse)

flights = read_csv('flights.csv')
read_csv("1,2,3\n4,5,6",col_names = c('x','y','z'))

read_csv("1,2,3\n4,5",na='.') # .을 na라고 선언 
  • placeholder를 이용하여 컬럼 추출
    • %>%.을 placeholder라고 함
  • 컬럼을 추출하라 때는 %>%.$ 컬럼명과 %>%.[["컬럼명"]]은 동일하게 사용됨.
# AIRLINE컬럼만 가져오도록함 
flights%>%.$AIRLINE
flights%>%.[["AIRLINE"]]
  • group_by를 이용하여 그룹핑 후 요약
# flights에서 destination_airport별로 그룹핑
by_dest = group_by(flights,DESTINATION_AIRPORT)
delay = summarise(by_dest,count = n(),dist=mean(DISTANCE,na.rm=TRUE),delay=mean(ARRIVAL_DELAY,na.rm = TRUE))
  • contains함수를 이용하여 변수 추출
    • contains 함수를 이용하면 보다 간편하게 특정 글자가 포함된 변수를 추출할 수 있음.
# data.frame에서는 flights%>%select(names(flights)[str_detect(names(flights),"TIME")])로 다루지만 
select(flights,contains("TIME"))
  • 시작 특정단어 또는 끝나는 단어로 변수 추출
    • ends_with 함수를 이용하여 특정 단어로 끝나는 변수를 추출할 수 있음.
# select: 컬럼 추출
flghts_sml = select(flights,YEAR:DAY, ends_with("DELAY"))  # :를 이용하여 여러 변수를 한 번에 추출+ ends_with을 통해 DELAY로 끝나는 변수 추출 

# filter: 조건에 맞는 행 추출 
flights%>%filter(between(ARRIVAL_TIME))
  • 데이터 저장
    • write_rds를 이용하여 테이블 부분 저장
    • save.image를 이용하여 RData형식으로 저장
# 각 테이블 따로 저장 
write_rds(flights,'flights.csv')   # data.frame에서는 save.rds(data명,'경로')
read_rds('flights.csv')             # read.rds('경로')

# 전체 데이터 저장
save.image('class1.RData')
load('class1.RData')
  • 데이터 재구조화(reshape)
    • gather: long형 데이터를 wide형으로 변환 (cast함수 생각)
    • spread: wide형 데이터를 long형으로 변환 (melt함수 생각)
# 연습용 데이터 table4a사용
- gather 
table4a%>%gather(`1999`,`2000`,key = "year",value="cases")

#spread
key:변수화할 컬럼 
table4a%>%gather("1999","2000",key = "year",value="cases")%>%
  spread(key='year',value='cases')
  • 두 변수를 합쳐서 하나의 변수로 만들기
    • unite를 이용하여 두 변수를 합친 후 하나의 변수로 만들게 되면 기존의 변수는 삭제가 됨.
    • 사용법: unite(기존컬럼1, 기존컬럼2, 새로운 컬럼)
table5%>%unite(new,century,year) # entury와 year변수가 합쳐져서 new변수로 만들고 기존의 변수 삭제 
  • complete를 이용하여 변수의 수준을 모든 데이터에 대해 표현
    • 사용법: complete(기준변수들)
stocks = tibble(year=c(2015,2015,2015,2015,2016,2016,2016),ctr=c(1,2,3,4,2,3,4),return=c(1.88,0.59,0.35,NA,0.92,0.17,2.66))
# ctr과 return의 개수는 같아야함

stocks%>%complete(year,ctr)   

year가 2015, 2016 두 가지 값을 가지고 있고 ctr은 1,2,3,4 네 가지 값을 가지고 있는데 이때 ctr이 1,2,3,4,2,3,4로 2016년에는 1의 값을 가지고 있지 않는데 complete함수를 이용하면 해당 변수에 NA값을 가지는 관측치가 생성됨.

  • 결측치에 이전 값을 채워넣기
stocks %>% fill(return)    # 이전 값을 채워넣음 
728x90