[Data Science With R] 5. readr로 파일 읽기 (202503)

2023. 3. 31. 21:16·Data Science/Manipulation

1. 데이터 분석을 위한 디렉토리 설정하기

데이터 분석을 하려면 분석에 필요한 데이터를 불러오는 것이 필수적입니다.
이때, 데이터를 불러오기 전에 먼저 현재 작업 환경(작업 디렉터리)을 확인하거나 변경하는 작업이 필요합니다.

📌 현재 작업환경(디렉터리) 확인하기

현재 어떤 폴더에서 작업하고 있는지 알고 싶다면 getwd() 함수를 사용하면 됩니다.

getwd()  # 현재 작업 디렉터리 경로 출력

 

📌 작업환경(디렉터리) 변경하기

작업하는 디렉터리를 변경하려면 setwd() 함수를 사용하면 됩니다. 이때, 절대경로 또는 상대경로 모두 사용할 수 있습니다.

  • 절대경로: 전체 경로를 명시 (예시: "C:/Users/user/Desktop/project")
  • 상대경로:
    • "~" : 사용자의 홈 디렉터리
    • "." : 현재 디렉터리
    • ".." : 상위 디렉터리
setwd("C:/Users/user/Desktop/project")  # 절대경로
setwd("../project")  # 상대경로 (상위 디렉터리에서 project로 이동)

 

📌 디렉터리 내의 파일 목록 확인하기

특정 폴더 안에 어떤 파일이나 하위 디렉터리들이 있는지 알고 싶다면, 다음과 같은 함수들을 사용하면 쉽게 확인할 수 있습니다.

  • 파일 목록 확인하기: list.files(patterns, full.names)
list.files(pattern=".+\\.csv")  # 현재 디렉터리의 파일 중 ".csv"로 끝나는 파일 목록 출력
  • 하위 디렉터리 목록 확인하기: list.dirs()
list.dirs()  # 현재 디렉터리의 하위 디렉터리 목록 출력

 

📌 RStudio 사용자라면?

RStudio 환경에서는 화면 우측 하단의 Files 탭을 클릭하여 쉽게 작업 디렉터리와 파일 목록을 확인할 수 있습니다. 디렉터리 경로를 클릭하여 직관적으로 이동하거나 확인하는 것이 가능합니다.

 


 

2. 주요 readr 함수

R의 readr 패키지는 데이터를 손쉽게 불러오는 다양한 함수를 제공합니다. 파일의 형식과 구분자에 따라 적절한 함수를 선택하여 사용할 수 있습니다.

함수명 설명
read_csv 쉼표(,)로 구분된 CSV 파일
read_csv2 세미콜론(;)으로 구분된 CSV 파일
read_tsv 탭(Tab)으로 구분된 파일
read_table 공백으로 구분된 파일
read_delim 임의의 구분자(delimiter)로 구분된 파일
read_fwf 고정 너비 파일
read_lines 파일을 한 줄씩 읽어 여러 개의 벡터로 반환
read_file 파일 전체를 하나의 긴 문자열로 읽기
(인코딩 문제나 파일 읽기 오류에 유용)

 

가장 많이 사용하는 함수 중 하나인 read_csv는 아래와 같이 사용할 수 있습니다.

df <- read_csv("data.csv") # 현재 디렉토리에 있는 data.csv 파일을 로드

 


 

3. read_csv 함수의 주요 파라미터 정리

R의 readr 패키지에서 가장 많이 사용하는 함수인 read_csv()의 주요 파라미터를 정리하여 설명합니다.

read_csv(
  file,
  col_names = TRUE,
  col_types = NULL,
  col_select = NULL,
  id = NULL,
  locale = default_locale(),
  na = c("", "NA"),
  quoted_na = TRUE,
  quote = "\"",
  comment = "",
  trim_ws = TRUE,
  skip = 0,
  n_max = Inf,
  guess_max = min(1000, n_max),
  name_repair = "unique",
  num_threads = readr_threads(),
  progress = show_progress(),
  show_col_types = should_show_types(),
  skip_empty_rows = TRUE,
  lazy = should_read_lazy()
)
  • file : 파일의 경로와 파일명을 지정
    • file.choose 함수로 컴퓨터 파일을 직접 선택하거나 clipboard 함수로 클립보드에 있는 값을 사용할 수 있음
    • .gz, .bz2, .xz, .zip로 된 파일은 자동으로 압축 해제함
    • http 또는 https로 시작하면 해당 서버에서 데이터를 다운로드하여 읽음
  • skip : 처음 몇 줄을 건너뛰고 읽을지 결정 (기본값 0)
  • quote : 문자열을 감싸는 문자 지정 (기본값 "\"")
  • comment : 지정된 문자로 시작하는 줄 무시 (기본값 : "")

  • col_names : 열(변수)명 관련 파라미터
    • col_names = T : 첫 행을 열 이름으로 사용 (default)
    • col_names = F : 첫 행을 열 이름으로 사용하지 않고 X1, X2, X3, ... 와 같이 자동 열 이름 생성
    • col_names = 문자벡터 : 열 이름을 직접 입력하여 사용 

  • col_type : 열의 타입을 지정하는 파라미터
    • NULL : 모든 열의 유형을 자동으로 추론 (default)
    •  list( ), cols( ) : 각 열의 유형을 지정 (일부의 열만 지정하고 싶으면 cols_only 함수 사용)
    • 문자열 : 열 순서대로 각 문자가 의미하는 유형으로 지정
      • c = character / i = integer / n = number / d = double / l = logical / f = factor
      • D = date / T = date time / t = time / ? = guess / - = skip
  • col_select : 결과에 포함할 변수를 지정할 수 있으며 dplyr::select와 유사한 역할을 수행한다.
  • na : 결측값으로 처리할 문자 지정 
  • n_max  : 파일에서 읽을 최대 줄의 수
  • guess_max : 열의 유형을 추측하기 위해서 확인할 행의 수 (col_type과 연관)
  • progress : 진행 상황을 표시하는 바 (대규모 데이터 셋이면 data.table::fread를 사용)

 

[+ 여러 파일을 한번에 읽는 방법 ]

여러 개의 파일이 동일한 형식을 가지고 있을 때는 개별적으로 파일을 읽지 않고, 벡터를 활용하여 한 번에 읽을 수 있습니다.

# Code from R for data science 2/e
sales_files <- c(
  "https://pos.it/r4ds-01-sales",
  "https://pos.it/r4ds-02-sales",
  "https://pos.it/r4ds-03-sales")
  
read_csv(sales_files, id = "file")

 

위 코드에서 id = "file" 옵션을 사용하면, 각 행이 어느 파일에서 읽혀왔는지 파일명을 별도의 열로 표시해줍니다.

 


 

4.  base::read.csv와 readr::read_csv의 차이

  1. read_csv가 베이스 함수보다 10배 이상 빠르다 (단, data.table::fread가 훨씬 빠름)
  2. read_csv는 티블(tibble), 베이스 함수는 데이터프레임(dataframe)으로 제공
  3. read_csv가 베이스함수보다 재현성이 좋다

 


 

5. readr 유용한 함수 

  • format_csv : write_csv의 결과와 동일하지만 디스크에 저장하는 것이 아닌 문자열로 반환
  • tokenize : 파일이나 문자열 토큰화 (토크나이저에 따른 문자열 분리 및 리스트 반환)
  • type_convert : 문자형 열을 가진 데이터 프레임 객체를 자동으로 변환
저작자표시 비영리 변경금지 (새창열림)

'Data Science > Manipulation' 카테고리의 다른 글

[Data Science With R] 7. 데이터 변형 with tidyr (202405)  (1) 2023.04.01
[Data Science With R] 6. 파싱(Parsing) (202405)  (0) 2023.03.31
[Data Science With R] 4. 티블(Tibble) (202406)  (1) 2023.03.30
[Data Science With R] 3. 탐색적 데이터 분석 (Exploratory Data Analysis) (202405)  (0) 2023.03.29
[Data Science With R] 2. 데이터 변형 (202405)  (1) 2023.03.29
'Data Science/Manipulation' 카테고리의 다른 글
  • [Data Science With R] 7. 데이터 변형 with tidyr (202405)
  • [Data Science With R] 6. 파싱(Parsing) (202405)
  • [Data Science With R] 4. 티블(Tibble) (202406)
  • [Data Science With R] 3. 탐색적 데이터 분석 (Exploratory Data Analysis) (202405)
임파카
임파카
[ML & Statistics] 모바일 버전에서 수식 오류가 있어 PC 환경에서 접속하는 것을 권장합니다.
  • 임파카
    무기의 스탯(Stat)
    임파카
  • 전체
    오늘
    어제
    • Study (149)
      • Data Science (44)
        • Modeling (18)
        • Manipulation (21)
        • Visualization (4)
      • Statistics (59)
        • Mathmetical Statistics (53)
        • Categorical DA (1)
      • Web Programming (17)
      • AI (26)
        • Machine Learning (16)
        • Deep Learning (10)
      • 활동 및 프로젝트 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
임파카
[Data Science With R] 5. readr로 파일 읽기 (202503)
상단으로

티스토리툴바