본문 바로가기
R/R Language

[tidyverse] readr 패키지 사용법 (read_csv, write_csv)

by Gom Guard 2018. 6. 12.





readr 패키지 

  • readr 패키지는 데이터사이언스를 위해 구성된 Tidyverse 라는 패키지 중 하나입니다. readr 패키지는 csv 나 tsv, fwf 같은 격자형의 데이터를 쉽고 편하게 읽기 위해 만들어졌습니다.

  • 본 포스트는 rstudio 에서 제공하는 readr 패키지 cheetsheet 에 나오는 내용을 바탕으로 구성하였습니다.





설치 및 사용법 


  • 위에서도 설명했던 것 처럼 readr 패키지는 tidyverse 패키지의 일부 입니다. 따라서 tidyverse 패키지 전체를 설치하셔도 되고 readr 패키지만 따로 설치하셔도 됩니다. 이후에 사용할 때도 tidyverse 패키지를 불러와도 되고 readr 패키지만 불러와도 됩니다.



정형화된 데이터 불러오기 


  • 먼저 Tabular Data 라고 불리는 정형화된 데이터를 불러오는 방법부터 살펴보겠습니다. 정형화된 데이터에는 csv, xls, tsv 등 여러가지가 있고 각각의 데이터 형식에 맞춰 다른 함수를 사용합니다.


  • , 로 데이터가 구분되어 있는 경우 csv, ; 으로 구분되어 있는 경우는 csv2, 기타 특별한 구분자로 되어있으면 delim, 탭 으로 구분되어 있는 경우 tsv 이며 각각에 맞는 명령어를 사용합니다. read_* 함수를 더 자세히 살펴보겠습니다.


  • read_* 함수에 들어가는 모든 속성과 기본값입니다. * 에는 파일의 형식이 들어가며 read_csv, read_csv2 같이 사용됩니다. 하나씩 살펴보겠습니다.

  • col_names 가 TRUE 일 경우에는 데이터에서 가장 첫 줄을 head 로 인식합니다. FALSE 일 경우에는 head 가 데이터에 포함되어 있지 않다고 판단하며 자동으로 열이름을 부여합니다. 벡터를 사용해서 열 이름을 직접 지정하는 것도 가능합니다.

  • col_types 는 열의 데이터 형식을 지정하는 파라메터 입니다. 기본값은 NULL 이며 NULL 일 경우에는 1000번째 까지 데이터를 검색한 뒤에 형을 결정합니다. cols() 함수를 통해서도 직접 지정하는 것이 가능합니다.

  • cols() 함수 안에 들어갈 알파벳들은 다음과 같은 의미를 갖고 있습니다. c = 문자, i = 정수, n = 숫자, d = double, l = 논리, D = 날짜, T = 날짜 시간, t = 시간, ? = 추측 또는 _ / - 을 사용하여 열을 건너 뛰기.

  • na 파라메터는 어떤 문자열을 NA (결측값) 으로 판단할지를 정하는 파라메터 입니다. 예시로는 하나의 문자열만 지정했지만 c() 함수를 통해 여러 문자열을 지정하는 것도 가능합니다.

  • ex - na = c("abc", "def")

  • comment 는 data 에서 주석처리할 부분을 지정합니다. cmt 라고 지정했을 경우 9 뒤에 있는 cmt:this is comment 라는 부분을 주석처리하고 9 만 읽어 오는 것을 확인할 수 있습니다.

  • trim_ws 는 data 를 읽어오기 전에 앞 뒤 공백을 제거할지 결정합니다. "  1" 과 "  trim" 의 경우에 trim_ws 를 F 로 하면 둘다 chr 형태로 읽어오는 것을 알 수 있습니다. 하지만 trim_ws 를 T 로 지정한 뒤 읽어오면 "  1" 을 1 로 읽어 int 형으로 읽어오는 것을 확인할 수 있습니다.

  • skip 은 data 의 몇 번째 줄까지 제외할 것인지를 지정합니다.


  • read_* 의 여러 파라메터 중 자주 사용하는 것만 따로 간단히 보겠습니다.

  • Header 관련 parameter 인 col_names 는 가장 자주 사용하는 parameter 입니다. col_names 를 T, F, c() 로 지정할 경우 각각 어떻게 읽어오는지 정확히 이해할 필요가 있습니다.

  • 데이터에서 일정 행을 skip 하는 일도 많고, 형태를 확인하고 코드를 테스트 하기 위해 일정 부분만 읽어오는 일은 거의 항상 있는 일입니다. 또한 특정 값을 data 에서 제외하는 일 또한 빈번합니다.

  • skip, n_max, na parameter 또한 익숙해질 필요가 있습니다.


비정형 데이터 불러오기 

  • 비정형 데이터로는 text 나 binary data, image 등이 있습니다. 각각의 비정형데이터에 맞는 read 함수를 사용해야합니다.

  • text 는 read_file, read_lines 가 있고 이외의 raw data 들에는 read_file_raw, read_lines_raw 함수를 사용해야 제대로 읽어올 수 있습니다. R 을 사용하다 보면 워드클라우드를 만들거나 자연어 처리를 위해 다른 파일들 보다 text 파일을 불러오는 경우가 많습니다. 이를 위해 read_file 함수는 read_lines 함수를 사용하는데 이 둘의 차이점을 살펴보겠습니다.



  • read_file 함수는 text 파일을 하나의 문자열로 읽어냅니다. 하지만 read_lines 함수는 줄바꿈을 기준으로 분할하여 문자열 배열로 파일을 반환합니다. 사용목적에 맞는 함수를 사용하는 것이 중요하겠죠.



파일 저장하기 

  • 일반적으로 tabular 데이터를 저장할 경우에는 csv 로 저장합니다. readr 에는 여러 write_* 함수가 있지만 가장 많이 사용하는 write_csv, write_file, write_lines 함수를 살펴보겠습니다.

  • write_* 함수 예제를 진행하기 위해 raw_ved 이라는 dataframe 을 만들었습니다. write 함수를 사용할 때 저장할 데이터의 형식은 dataframe 형태여야 합니다.

  • write_csv 에서 append parameter 에 대해 자세히 보겠습니다. append parameter 는 기존 파일이 있을 경우에 덮어쓸지 추가할지를 결정하는 parameter 입니다.


  • write_csv() 를 두번 반복 실행한 뒤 결과 입니다. append 가 F 이기 때문에, 다시 말해 새로 쓰기 상태이기 때문에 한 번 실행한 것과 다름 없는 결과를 얻을 수 있습니다.

  • wirte_csv() append 를 T 로 한 뒤 반복 실행 하였습니다. col_names 가 없이 데이터만 2회 추가되어 있는 모습입니다. 이는 col_names 의 기본값이 !append 이기 때문입니다. append 가 T 이기 때문에 !append 는 F 이겠죠. 따라서 열이름을 추가하지 않는 상태로 데이터를 추가하는 모습입니다.

  • 그렇다면 append 와 col_names 를 모두 T 로 한 뒤 반복 실행하면 어떤 결과를 얻을 수 있을까요. 열이름과 데이터 가 모두 두 번 추가되어 총 8 행이 기록됩니다.

  • write_file 은 줄바꿈 없이 바로 이어서 text 를 기록합니다.

  • write_lines 는 줄바꿈 문자도 추가로 기록합니다.



2018/06/13 - [R/R Language] - [R 기본] tidyr 패키지 사용법 (split, reshape, combine)

2018/06/16 - [R/R Language] - [R 기본] stringr 패키지 사용법 (detect, mutate, manage string)

2018/06/20 - [R/R Language] - [R] 꼭 얄아야 할 R 기본 개념 part.1 (help, install.package, getwd, setwd)

2018/06/20 - [R/R Language] - [R] 꼭 얄아야 할 R 기본 개념 part.2 (행렬곱, t, rbind, cbind, seq, rep)







부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^


댓글2