• Home
  • About
    • INCHEONY photo

      INCHEONY

      in my twenties.. immersing myself in every single thing possible!

    • Learn More
    • Email
    • Facebook
    • Instagram
  • Contents
    • Categories
    • All Tags
  • Posts
    • Mathematics
    • Statistics
    • Machine Learning
    • Deep Learning
    • R
    • Python
    • SQL
  • Projects
  • Photographs

폴더 내 여러 파일 일괄 불러오기

10 Jan 2019

Reading time ~2 minutes

먼저 특정 폴더 내에서 여러 개의 파일을 한번에 불러오는 방법은 여러가지가 있습니다. 따라서 불러올 데이터가 어떤 형식인지, 어떠한 데이터로 구성되어 있는지 파악해야 합니다.

제가 불러오고자 하는 파일은 ‘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 해당 블로그 글에 자세하게 나와있습니다.



R로그 Share Tweet +1
Read More

first post

깃허브 가입한 게 20일 전인데.. 드디어 올리는 첫 글!처음 다뤄본 웹 언어들 ㅠㅠ 이제 jekyll 그만 수정해야지(수정한 것도 없지만 ㅎㅎ)자주 글 올릴 수 있도록 열심히 공부하겠습니다..!!… Continue reading

Moon Jekyll Theme

Published on April 06, 2016

Markdown Syntax

Published on March 15, 2016

MathJax Example

Published on August 10, 2015