
Terkadang dalam mengolah sebuah dataset yang besar terdiri dari jutaan record, bisa kita siasati dengean teknik agregasi agar menghindari proses looping yang dikenal agak lambat untuk sebuah scripting, namun ada juga datase tersebut malah terdiri dari ratusan/ribuan file, hal ini biasa terjadi pada dataset yang bersifat data logger. Data logger tersimpan dalam format *.txt dengan nama file ss:mm:hh dd-mm-yyyy.txt bahkan sampai menit detik. Data tersebut berasal dari sebuah mikrokontroler yang disimpan ke sebuah media penyimpanan SD.
Pada topik ini kita akan bahas sedikit mengenai cara membaca sebuah file yang banyak dalam 1 folder seperti diatas yang sangat mudah dilakukan di R, cukup menggunakan perintah list.files(), misalkan kita mempunyai beberapa file *.txt yang berada di folder dataset, agar dapat mendapatkan lokasi absolut path, maka gabungkan saja antar work direktori+folder tujuan menggunakan perintah paste(). Terkadang ada logger yang menyimpan data satu-persatu berikut
work_direktori<-getwd() print (getwd()) lokasi_folder<-'dataset/' d<-list.files(path=paste(work_direktori,lokasi_folder,sep='/'),pattern='*.txt') for(i in 1:length(d)) { lokasi_file<-paste(getwd(),'/',lokasi_folder,d[i],sep='') print (lokasi_file) } print('Selesai')
hasil
[1] "F:/My BLOG/21. Looping File/dataset/23-12-12 17-06-2020.txt" [1] "F:/My BLOG/21. Looping File/dataset/24-12-12 17-06-2020.txt" [1] "F:/My BLOG/21. Looping File/dataset/25-12-12 17-06-2020.txt" [1] "F:/My BLOG/21. Looping File/dataset/26-12-12 17-06-2020.txt" [1] "F:/My BLOG/21. Looping File/dataset/27-12-12 17-06-2020.txt"
Sangat mudah bukan? tinggal setiap kalian lakukan parsing saja menggunakan package dplyr yang didalam package tersebut ada banyak function yang bisa digunakan untuk concatenate/append terhadap sebuah array/list, sehingga jadi lebih mudah menerapkan query data bila formatnya berbentuk data frame.
Misalkan pada contoh kasus diatas, bisa gunakan sebuah plot sederhana untuk mencari tahu anomali data suhu pada jam berapa suhu mengalami trend kenaikan. (akan dilanjutkan lagi kodenya agar bisa dilakukan append, misalkan file *.txt tersebut berisi
Kodenya kita ubah sedikit dengan menggunakan package dplyr saja, sehingga data tersebut dapat dibuat menjadi sebuah data kesatuan utuh serta sedikit parsing untuk mendapatkan nama file tanpa extensionya
library(dplr) work_direktori<-getwd() setwd(work_direktori) print (getwd()) lokasi_folder<-'dataset/' d<-list.files(path=paste(work_direktori,lokasi_folder,sep='/'),pattern='*.txt') logg<-data.frame(tanggal=character(0),suhu=numeric(0)) for(i in 1:length(d)) { lokasi_file<-paste(getwd(),'/',lokasi_folder,d[i],sep='') print (lokasi_file) file = read.csv(lokasi_file,header=FALSE) tanggal = sub('\\..*$', '', basename(lokasi_file)) logg<- rbind(logg, data.frame(tanggal =tanggal, suhu = file$V1)) } print(logg) print('Selesai')
hasil
tanggal suhu 1 23-12-12 17-06-2020 44.0 2 24-12-12 17-06-2020 44.6 3 25-12-12 17-06-2020 44.8 4 26-12-12 17-06-2020 43.0 5 27-12-12 17-06-2020 43.1
Sangat mudah bukan?