본문 바로가기
Data·AI/R 데이터분석

R. 데이터셋 로딩하기 - 플레인 텍스트 파일

by hyun-am 2020. 8. 21.

데이터셋 로딩하기

 

먼저 아래와 같은 명령어를 통해 현재 작업 경로를 확인하고 변경하겠습니다.

 

getwd()
setwd('현재 작업하고 있는 경로')

저는 setwd에 제가 작업하는 주소가 /Users/hyeon-am/Desktop/DataAnalysis/R/R_Test여서 이 주소를 넣었습니다.

 

그 후 로딩대상 플레인 텍스트 셋의 파일 인코딩 형식을 파악하기위해 다음과 같은 패키지를 설치한 후 메모리에 로드했습니다.

 

install.packages('readr')
library(readr)

그러면 guess_encoding('파일명') 이라는 명령어를 통해 해당 파일의 정보를 확인할 수 있습니다.

 

먼저 customer.csv라는 파일을 기본 로딩하겠습니다. 

cs <- read.table(file = 'customer.csv',
                 header = TRUE, sep = ',',fileEncoding = 'EUC-kr')
cs

그러면 다음과 같은 값이 나오는 것을 확인할 수 있습니다. 그리고 class()로 데이터 타입을 확인하면 data.frame타입이 나옵니다.

 

다음은 str(cs)로 구조를 확인하겠습니다. 

str(cs)

다음과 같이 Factor요소들로 된 것을 확인할 수 있습니다. 하지만 자료형으로 표시될 때도 있습니다. 

 

다음은 로드할때 노이즈 처리 및 다양한 옵션들로 로딩하겠습니다.

 

cs <- read.table(file = 'customer.csv', 
                 header = TRUE, sep = ',',
                 fileEncoding = 'euc-kr',
                 stringsAsFactors = FALSE, 
                 strip.white = TRUE,
                 na.strings = c('.', '?', ' '))

cs

위에 코드를 설명하자면 header는 제목을 출력할지 아닌지에 대해 설정하는 것이고 sep = ','는 csv파일의 구분자가 어떤 것인지에 따라 값이 달라질 수도 있습니다.

fileEncoding은 아까 guess_encoding으로 확인한 파일의 encoding을 적는 항목입니다.

strip.white는 문자 앞에 공백이 있을경우 이를 처리할거면 TRUE 아니면 FALSE를 입력하면 됩니다.

마지막으로 na.strings = c('여러문자들')은 안에 있는 여러 문자가 올경우 NA를 집어 넣으라는 항목입니다. 

 

다음은 header가 FALSE일때 어떤 값이 오는지에 대해 확인하겠습니다.

 

먼저 다음과 같은 명령어를 통해 cs2라는 데이터 프레임을 생성하겠습니다.

 

cs2 <- read.table(file = 'customer2.csv', 
                  header = FALSE, sep = '\t',
                  fileEncoding = 'euc-kr',
                  stringsAsFactors = FALSE, 
                  strip.white = TRUE, 
                  na.strings = c('.', '?', ' '),
                  skip = 3)

여기서 위에와는 다르게 변수 컬럼명이 다음과 같은것을 확인 할 수 있습니다.

"V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8"

 

이것을 위에 있는 변수명을 입력해서 사용하고 싶으면 다음과 같은 명령어를 입력하면 됩니다.

names(cs2) <- c('name', 'gender', 'job', 'age', 
                'grade', 'survey', 'total', 'result')
cs

이렇게 컬럼명이 잘 변경된 것을 확인할 수 있습니다. 

 

⭐️ 여기서 의문점인게 cs를 생성할때와는 다르게 skip=3이 추가된 것을 확인할 수 있습니다. 이것은 파일의 3번째 줄까지 스킵하고 4번째 줄부터 불러오라는 뜻입니다.

파일의 원래 값들은 다음과 같이 되어있습니다.

위에 3줄은 필요 없는 값들이 온 것이므로 skip을 통해 제거하고 header값이 없으므로 header값을 FALSE로 설정한 것이였습니다.

 

최신함수로 플레인 텍스트 파일을 로드하기

먼저 readr::read_delim()함수를 통해 다양한 특성을 가진 플레인 텍스트 파일을 빠르게 메모리로 로딩하겠습니다.

 

1. col_names가 있을 경우

 

다음과 같은 명령어를 통해 플레인 텍스트 파일을 로드하겠습니다. 

cs_tb <- read_delim(file = 'customer.csv', col_names = TRUE, 
                    delim = ',', trim_ws = TRUE, na = c('.', '?'),  
                    locale = locale(encoding = 'EUC-KR')) 
cs_tb

그러면 다음과 같이 tibble 객체 형식으로 로딩된 파일을 확인할 수 있습니다.

 

2. col_names가 없는 경우

 

col_names가 없는 경우는 다음과 같이 dplyr::rename을 통해 임의로 지정된 변수 컬럼 이름을 변경해 줍니다.

 

# 플레인텍스트파일에 부가사항이 있을 때 로딩방법
# --------------------------------------------------
cs2_tb <- read_delim(file = 'customer2.csv', col_names = FALSE, 
                     delim = '\t', trim_ws = TRUE, na = c('.', '?'), 
                     skip = 3, locale = locale(encoding = 'EUC-KR')) 
cs2_tb
class(cs2_tb)
str(cs2_tb)


# cs2_tb 데이터프레임 변수컬럼명 확인과 변경
names(cs2_tb)
cs2_tb <- dplyr::rename(cs2_tb, 'name' = X1, 'gender' = X2, 
                        'job' = X3, 'age' = X4, 'grade' = X5, 
                        'survey' = X6, 'total' = X7, 'result' = X8)
names(cs2_tb)              

그러면 아래와 같이 잘 변경되는 것을 확인 할 수 있습니다. 

⭐️  여기서 주의해야 할 사항은 일반 프로그래밍 처럼 a=10와 같이 a에 10을 넣는것과 반대로 'name' = X1로 하는것만 주의하면 되겠습니다.

 

 

 

다음은 data.table::fread()를 이용하여 빠르게 메모리로 로딩하겠습니다.

 

먼저 data.table을 설치하고 메모리로 로드하겠습니다.

install.packages('data.table')
library(data.table)

그 후 다음과 같은 명령어를 통해 테이블을 생성하겠습니다.

cs_dt <- fread(input = 'customer.csv', header = TRUE, sep = ',', 
               stringsAsFactors = FALSE, 
               strip.white = TRUE,
               na.strings = c('.', '?'))
cs_dt

그러면 다음과 같은 값이 나오는데 맥북에서는 글자가 깨지므로 사진으로 대체하겠습니다.


이 자료는 https://www.youtube.com/channel/UChPuesN49tcqQqYRQHrLCuw를 참조하여 작성하였습니다.

 

K-ICT 빅데이터센터

판교 K-ICT 빅데이터센터 공식 유튜브 채널입니다.

www.youtube.com

 

댓글