먼저 특정 폴더 내에서 여러 개의 파일을 한번에 불러오는 방법은 여러가지가 있습니다. 따라서 불러올 데이터가 어떤 형식인지, 어떠한 데이터로 구성되어 있는지 파악해야 합니다.
제가 불러오고자 하는 파일은 ‘dat’파일 형식이며, 사내 온라인 시스템에 적용한 머신러닝 모델에 활용하는 데이터로써 로그 데이터의 일부를 다듬어서 저장한 것으로 데이터프레임의 한 개의 행(row)에 대한 데이터로 구성되어 있습니다.
사내 내부망으로 인하여 외부망으로 자료 유출이 불가능하여 임의로 예시 데이터를 작성하였습니다.
예시 데이터
고객번호^고객분류^성별^나이^지역대구분주소^신용등급^결혼유무^자녀유무^직업^당월입금금액^당월출금금액^당월이체금액^당월평잔^당행카드실적금액^타행카드실적금액^거래건수^통신요금
S18101126^21^여^24^인천시^1^N^N^회사원^3,510,200^1,770,000^370,000^71,100,030^1,110,000^1,260,000^19^71,000
위와 같은 데이터가 ‘dat’형식으로 임의의 폴더에 있을 경우, R로 불러오도록 하겠습니다.
먼저 R 라이브러리와 파일 디렉토리를 설정합니다.
# 라이브러리 및 디렉토리 설정
setwd("C:\\Users\\wi.sim\\Desktop\\dat_basket")
library(data.table); library(rlist);
지정한 폴더에서 모든 파일을 불러옵니다. 파일 형식이 ‘csv’라면, pattern = “csv”라고 입력하면 됩니다.
# 로그 파일 형태: dat
import_files <- dir(pattern = "dat")
“dat” 확장자를 가진 파일들을 잘 불러왔는지 확인합니다. 약 170여개의 파일을 확인할 수 있습니다.
head(import_files, 50)
> head(import_files, 50)
[1] "l2001810016548453.dat" "l2001810020684656.dat" "l2001810021765415.dat" "l2001810033124894.dat" "l2001810034741510.dat"
[6] "l2001810035498485.dat" "l2001810044127863.dat" "l2001810049798651.dat" "l2001810079651202.dat" "l2001810097986532.dat"
[11] "l2001810099451223.dat" "l2001810106484153.dat" "l2001810107896513.dat" "l2001810108795641.dat" "l2001810110701351.dat"
[16] "l2001810117096853.dat" "l2001810118068532.dat" "l2001810119785120.dat" "l2001810123486532.dat" "l2001810127894132.dat"
[21] "l2001810154844652.dat" "l2001810168643253.dat" "l2001810171985151.dat" "l2001810179513253.dat" "l2001810179865132.dat"
[26] "l2001810181315320.dat" "l2001810181654152.dat" "l2001810196874520.dat" "l2001810197851202.dat" "l2001810198452122.dat"
[31] "l2001810200187454.dat" "l2001810206798653.dat" "l2001810208979865.dat" "l2001810209784550.dat" "l2001810216784521.dat"
[36] "l2001810219875121.dat" "l2001810220354847.dat" "l2001810220649801.dat" "l2001810221897498.dat" "l2001810234894152.dat"
[41] "l2001810240894653.dat" "l2001810247984512.dat" "l2001810251898743.dat" "l2001810254586521.dat" "l2001810259874532.dat"
[46] "l2001810276158953.dat" "l2001810279854122.dat" "l2001810298751210.dat" "l2001810309968760.dat" "l2001810313784120.dat"
str(import_files)
> str(import_files)
chr [1:170] "l2001810016548453.dat" "l2001810020684656.dat" "l2001810021765415.dat" "l2001810033124894.dat" ...
이는 폴더 내의 파일명을 나타내므로, 분석 가능한 객체로 만들기 위한 작업을 합니다. 하나의 파일을 데이터셋으로 각각 만들어도 되지만, 170개의 데이터셋 보다는 하나의 데이터셋이 분석하기 편리하므로 하나의 데이터셋으로 만들어줍니다.
total_data <- lapply(import_files, fread, sep = "^", fill = TRUE, na.strings = c("NULL", ""), header = TRUE, encoding = "UTF-8")
마지막으로 해당 리스트 형식의 파일을 데이터프레임 형식으로 변경합니다.
total_data <- rbindlist(total_data, fill = TRUE)
전체 코드
# 라이브러리 및 디렉토리 설정
setwd("C:\\Users\\wi.sim\\Desktop\\dat_basket")
library(data.table); library(rlist);
# 로그 파일 형태: dat
import_files <- dir(pattern = "dat")
head(import_files, 50)
str(import_files)
# 분석에 용이한 데이터 셋으로 변경
total_data <- lapply(import_files, fread, sep = "^", fill = TRUE, na.strings = c("NULL", ""), header = TRUE, encoding = "UTF-8")
total_data <- rbindlist(total_data, fill = TRUE)
# 파일 저장
write.csv(total_data, "dat_data.csv") # fileEncoding = "UTF-8"
이외 더 자세한 사항은 http://rfriend.tistory.com/219 해당 블로그 글에 자세하게 나와있습니다.