4.3 readr
패키지
기본적으로 4.1.1 절에서 학습했던
read.table()
,read.csv()
와 거의 동일하게 작동하지만, 읽고 저장하는 속도가 base R에서 제공하는 기본 입출력 함수보다 월등히 뛰어남. 최근 readr 패키지에서 제공하는 입출력 함수보다 더 빠르게 데이터 입출력이 가능한 feather 패키지 (Wickham 2019a) 제공데이터를 읽는 동안 사소한 문제가 있는 경우 해당 부분에 경고 표시 및 행, 관측 정보를 표시해줌 \(\rightarrow\) 데이터 디버깅에 유용
주요 함수8
read_table()
,write_table()
read_csv()
,write_csv()
readr vignette을 통해 더 자세한 예시를 살펴볼 수 있음
read_csv(
file, # 파일 명
col_names = TRUE, # 첫 번째 행를 변수명으로 처리할 것인지 여부
# read.table(), read.csv()의 header 인수와 동일
col_types = NULL, # 열(변수)의 데이터 형 지정
# 기본적으로 데이터 유형을 자동으로 감지하지만,
# 입력 텍스트의 형태에 따라 데이터 유형을
# 잘못 추측할 수 있기 때문에 간혹 해당 인수 입력 필요
# col_* 함수 또는 campact string으로 지정 가능
# c=character, i=integer, n=number, d=double,
# l=logical, f=factor, D=date, T=date time, t=time
# ?=guess, _/- skip column
progress, # 데이터 읽기/쓰기 진행 progress 표시 여부
)
- 예시
Parsed with column specification:
cols(
pclass = col_double(),
survived = col_double(),
name = col_character(),
sex = col_character(),
age = col_double(),
sibsp = col_double(),
parch = col_double(),
ticket = col_character(),
fare = col_double(),
cabin = col_character(),
embarked = col_character(),
boat = col_character(),
body = col_double(),
home.dest = col_character()
)
# column type을 변경
titanic2 <- read_csv("dataset/titanic3.csv",
col_types = "iicfdiicdcfcic")
titanic2
# 특정 변수만 불러오기
titanic3 <- read_csv("dataset/titanic3.csv",
col_types = cols_only(
pclass = col_integer(),
survived = col_integer(),
sex = col_factor(),
age = col_double()
))
titanic3
필요한 패키지를 로딩중입니다: feather
사용자 시스템 elapsed
20.19 0.00 20.19
사용자 시스템 elapsed
0.08 0.00 0.08
Parsed with column specification:
cols(
.default = col_double()
)
See spec(...) for full column specifications.
사용자 시스템 elapsed
15.86 0.11 15.99
사용자 시스템 elapsed
0.20 0.02 0.21
4.3.1 Excel 파일 입출력
- R에서 기본적으로 제공하는 파일 입출력 함수는 대부분 텍스트 파일(
*.txt
,*.csv
,*.tsv
9)을 대상으로 하고 있음 - readr 패키지에서도 이러한 원칙은 유지됨
- Excel 파일을 R로 읽어오기(과거 방법)
*.xls
또는*.xlsx
파일을 엑셀로 읽은 후 해당 데이터를 위 텍스트 파일 형태로 내보낸 후 해당 파일을 R로 읽어옴- xlsx 패키지 등을 이용해 엑셀 파일을 직접 읽어올 수 있으나, Java 기반으로 개발된 패키지이기 때문에 Java Runtime Environment를 운영체제에 설치해야만 작동
- 최근 tidyverse 중 하나인 readxl 패키지를 이용해 간편하게 R 작업환경에 엑셀 파일을 읽어오는 것이 가능(Hadley Wickham이 개발…)
- tidyverse의 한 부분임에도 불구하고 tidyverse 패키지 번들에는 포함되어 있지 않기 때문에 별도 설치 필요
readxl 패키지 구성 주요 함수
read_xls()
,read_xlsx()
,read_excel
: 엑셀 파일을 읽어오는 함수로 각각 Excel 97 ~ 2003, Excel 2007 이상, 또는 버전 상관 없이 저장된 엑셀 파일에 접근함excel_sheets()
: 엑셀 파일 내 시트 이름 추출 \(\rightarrow\) 한 엑셀 파일의 복수 시트에 데이터가 저장되어 있는 경우 활용- 예시: 2020년 4월 23일 COVID-19 유병률 데이터 (Our World in Data)
read_xlsx(
path, # Excel 폴더 및 파일 이름
sheet = NULL, # 불러올 엑셀 시트 이름
# default = 첫 번째 시트
col_names = TRUE, # read_csv()의 인수와 동일한 형태 입력
col_types = NULL # read_csv()의 인수와 동일한 형태 입력
)
# 2020년 4월 21일자 COVID-19 국가별 유별률 및 사망률 집계 자료
# dataset/owid-covid-data.xlsx 파일 불러오기
# install.packages("readxl")
require(readxl)
필요한 패키지를 로딩중입니다: readxl
# 여러 시트를 동시에 불러올 경우
# dataset/datR4CTDA.xlsx 의 모든 시트 불러오기
path <- "dataset/datR4CTDA.xlsx"
sheet_name <- excel_sheets(path)
dL <- lapply(sheet_name, function(x) read_xlsx(path, sheet = x))
names(dL) <- sheet_name
# Tidyverse 에서는? (맛보기)
path %>%
excel_sheets %>%
set_names %>%
map(~read_xlsx(path = path, sheet = .x)) -> dL2
4.3.2 tibble 패키지
- readr 또는 readxl 패키지에서 제공하는 함수를 이용해 외부 데이터를 읽어온 후, 확인할 때 기존 데이터 프레임과 미묘한 차이점이 있다는 것을 확인
- 프린트된 데이터의 맨 윗 부분을 보면
A tibble: 데이터 차원
이 표시된 부분을 볼 수 있음 tibble
은 tidyverse 생태계에서 사용되는 데이터 프레임 \(\rightarrow\) 데이터 프레임을 조금 더 빠르고 사용하기 쉽게 수정한 버전의 데이터 프레임
tibble 생성하기
- 기본 R 함수에서 제공하는
as.*
계열 함수 처럼as_tibble()
함수를 통해 기존 일반적인 형태의 데이터 프레임을 tibble 로 변환 가능
- 개별 벡터로부터 tibble 생성 가능
- 방금 생성한 변수 참조 가능
- 문자형 변수가 입력된 경우 데이터 프레임과 다르게 별다른 옵션이 없어도 강제로 factor로 형 변환을 하지 않음
Error in data.frame(x = letters, y = rnorm(26), z = y^2): 객체 'y'를 찾을 수 없습니다
# 데이터 프레임과 마찬가지로 비정상적 문자를 변수명으로 사용 가능
# 역따옴표(``)
tibble(`2000` = "year",
`:)` = "smile",
`:(` = "sad")
tribble()
함수 사용: transposed (전치된) tibble의 약어로 데이터를 직접 입력 시 유용
tibble()
과 data.frame()
의 차이점
- 가장 큰 차이점은 데이터 처리의 속도 및 데이터의 프린팅
- tibble이 데이터 프레임 보다 간결하고 많은 정보 확인 가능
str()
에서 확인할 수 있는 데이터 유형 확인 가능
References
Wickham, Hadley. 2019a. Feather: R Bindings to the Feather ’Api’. https://CRAN.R-project.org/package=feather.