Bagaimana Data Engineer Mengelola Dataset

By | August 17, 2021
154 Views

Bagaimana Data Engineer Mengelola Dataset? Tulisan ini berdasarkan pengalaman kami dalam menangani beberapa dataset yang berukuran sangat besar sehingga butuh mekanisme khsusus agar pada data engineer dapat bekerja lebih efisien. Dataset adalah kumpulan data yang mempunyai properties yang seragam. Dataset mempunyai banyak bentuk seperti file CSV, Gambar, atau dalam Database. Didalam dataset terdiri dari banyak record / jumlah data yang biasa terdiri dari ratusan / ribuan. Dataset ada yang sudah jadi dalam bentuk angka tabel ataupun harus mengolah terlebih dahulu.

Properties Dataset

Setiap dataset yang terdiri dari record harus mempunyai 2 hal yaitu ciri fitur dan kelas. Saya berikan contoh dataset yang sudah jadi seperti Iris – https://www.kaggle.com/uciml/iris yang terdiri dari 6 column yaitu

  1. Id
  2. SepalLengthCm
  3. SepalWidthCm
  4. PetalLengthCm
  5. PetalWidthCm
  6. Species

Ciri Fitur

Ciri fitur merupakan sebuah nilai/rentang angka yang menjadi pembeda antar kelas. Contoh mudahnya yaitu ciri fitur jenis kelamin laki-laki dan perempuan. Ada tidak nya kumis merupakan sebuah ciri fitur. Pada contoh data iris, maka ciri fitur pada dataset tersebut yaitu pada kolom no 2 sampai 5 yang merupakan ciri fitur dari species iris yang diukur panjang sepal dan petalnya dalam satuan cm

  1. SepalLengthCm
  2. SepalWidthCm
  3. PetalLengthCm
  4. PetalWidthCm

Tidak semua ciri fitur menggunakan nilai diatas, tapi juga bisa menggunakan rentang nilai / kategori seperti https://softscients.com/2020/04/29/buku-belajar-dasar-statistika-dengan-r-analisis-regresi-logistik/#gsc.tab=0

Kelas / Target

Kelas/target merupakan tujuan/goal yang harus dicapai, berdasarkan ciri fitur. Pada dataset iris maka kelas/target yaitu pada kolom Species dengan jenis data kategorikal yaitu

  1. Iris-setosa,
  2. Iris-versicolor,
  3. Iris-virginica

tidak semua kelas/target bersifat kategorikal, biasanya menggunakan skala ordinal/numeric,  misalkan saja

  1. Iris-setosa diubah menjadi angka 1
  2. Iris-versicolor diubah menjadi angka 2
  3. Iris-virginica diubah menjadi angka 3

ataupun dalam machine learning menggunakan teknik One Hot Encoding  Seperti berikut

Bagaimana dengan dataset yang harus diolah terlebih dahulu?

Dataset yang berbentuk gambar biasanya harus diolah terlebih dahulu untuk mendapatkan ciri fitur, misalkan saja Mean RGB, GLCM, dan yang lainnya ataubahkan tidak bisa disimpan karena dalam bentuk tabular seperti teknik CNN – Convolution Neural Network (kalian bisa menggunakan hDF5). Cara mudahnya untuk mengelola dataset yaitu dengan menyimpan dalam folder tersendiri sesuai dengan kelas/target. Contohnya sebagai berikut

Hal ini diatas akan sangat membantu kita dalam mempersiapkan dataset tanpa perlu melakukan labelling secara manual. Sehingga bila ada record terbaru, bisa langsung ditambahkan sesuai dengan folder masing-masing.

Penamaan file yang baik

Saya sangat merekomendasikan kepada kalian untuk membuat nama file yang mudah dibaca dan ditelusuri, seperti menggunakan tahun-bulan-tanggal-waktu sehingga akan ter sort secara otomatis di File Explorer

Cara Scanning Folder

Scanning folder digunakan untuk membaca folder tertentu berdasarkan extension file, Caranya bagaimana? yaitu dengan cara melakukan scanning folder / batch folder. Anggap saja saya mempunyai folder dengan susunan sebagai berikut

 

Membaca isi folder dataset fruit\\data latih\\ data tabular berikut ini bisa disimpan dalam bentuk csv. Kalian bisa melihat

  1. ciri fitur yaitu RED, GREEN, dan BLUE sedangkan
  2. target/kelas yaitu KELAS dengan kategorikal
    1. Apple Braeburn
    2. Apple Crimson Snow
    3. Apple Golden 1
    4. Apple Golden 2

Semuanya serba otomatis, algoritma sambil menghitung/mencari ciri fitur serta juga menyimpan kelas/targetnya! Kalian bisa menggunakan WEKA untuk mengolah data minning. Udah tahu donk sekarang tugas data engineer yaitu menghimpun dan mencari dataset sedangkan data science yaitu mengolah dataset untuk mendapatkan kesimpulan hubungan ataupun object functionnya.

                            Perhitungan RGB                             
 NO  |     FILE      |  RED  |  GREEN  |  BLUE  |        KELAS         |
------------------------------------------------------------------------
  1  |  321_100.jpg  |  189  |    114  |   241  |      Apple Braeburn  |
  2  |  322_100.jpg  |  199  |      8  |    98  |      Apple Braeburn  |
  3  |  323_100.jpg  |    9  |    163  |   198  |      Apple Braeburn  |
  4  |  324_100.jpg  |  244  |    197  |    74  |      Apple Braeburn  |
  5  |  100_100.jpg  |   34  |    226  |   252  |  Apple Crimson Snow  |
  6  |  101_100.jpg  |  165  |     97  |    29  |  Apple Crimson Snow  |
  7  |  102_100.jpg  |  147  |    114  |   167  |  Apple Crimson Snow  |
  8  |  103_100.jpg  |  119  |    103  |   206  |  Apple Crimson Snow  |
  9  |  100_100.jpg  |   34  |      4  |   101  |      Apple Golden 1  |
 10  |  101_100.jpg  |  101  |    255  |   108  |      Apple Golden 1  |
 11  |  102_100.jpg  |  171  |     82  |    38  |      Apple Golden 1  |
 12  |  103_100.jpg  |  189  |    110  |   201  |      Apple Golden 1  |
 13  |  321_100.jpg  |  231  |    193  |    92  |      Apple Golden 2  |
 14  |  322_100.jpg  |  180  |     26  |    73  |      Apple Golden 2  |
 15  |  323_100.jpg  |  169  |    130  |   174  |      Apple Golden 2  |
 16  |  324_100.jpg  |   77  |    128  |   114  |      Apple Golden 2  |

Bila kalian menggunakan bahasa java, bisa gunakan kode berikut

final String parent_path = "dataset fruit\\data latih\\";
final String [] folder_target = new String []{"Apple Braeburn",
                                                "Apple Crimson Snow",
                                                "Apple Golden 1",
                                                "Apple Golden 2"};
       
for(int i=0;i<folder_target.length;i++){
    File f = new File(parent_path+folder_target[i]);
    File [] fs = f.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".jpg");
        }
    });
    System.out.println(folder_target[i]);
    for(int j=0;j<fs.length;j++){
        System.out.println("\t"+fs[j].getName());                
    }
}

Kode diatas hanya sekedar contoh saja, kalian bisa menggunakan library tabular seperti table saw, serta mendapatkan ciri fitur dengan teknik ROI.

Tentu cara  diatas menurut saya adalah cara terbaik dalam mengelola dataset! karena kan nggak lucu donk, kalian mengolah file gambar satu-persatu untuk mendapatkan nilai ciri fitur!  kurang kerjaan

Mengelola ribuan Record dan belasan kelas/target

Saya sudah pernah pengalaman mengolah data gambar dengan ukuran 27 GB bila ditotal ada ribuan file dengan belasan kelas/target sehingga butuh waktu scanning folder untuk mendapatkan nilai fitur sekitar 6 jam bahkan sampai 18 jam. Tentu menyimpan record walau hanya dalam bentuk array di memory akan sangat riskan bila tiba-tiba terjadi error/bahkan mati lampu!

Masa mau ngulang lagi dari awal! tentu hal sangat boros waktu, sehingga saya akan membuat database khusus berbasis server untuk menyimpan setiap kali scanning file. Saya lebih suka menggunakan database mysql / postgres karena didesain khusus untuk multi user dibandingkan dengan sqlite. Mengapa demikian? karena sambil komputer melakukan perhitungan dan menyimpan kedalam database, kita bisa melihat hasil perhitungan tersebut tanpa takut terjadi bentrok connection pada saat semuanya berjalan!

Kemudahan dalam tambah record baru didalam dataset

Selain keuntungan diatas, menggunakan mysql akan sangat membantu dalam mengelola record, misalkan saja bilamana ada record baru yang akan dimasukan kedalam sebuah folder, maka kita bisa melakukan check file tersebut didatabase! sehingga file-file yang lama didalam folder tersebut diabaikan dan hanya akan memproses file baru saja ditambahkan!

Misalkan ketika sebelumnya ada 9 file dalam 1 folder kemudian ditambah 2 file menjadi 11 file dalam 1 folder. Aplikasi akan melakukan scanning dan melakukan perhitungan hanya pada 2 file tersebut dan memasukan nya kedalam database.

Hal ini bisa saja dilakukan karena pada saat sebelum perhitungan ciri fitur dilakukan checking file exist didatabase terlebih dahulu, jika file tersebut sudah ada maka diabaikan. Bila tidak ada maka lakukan proses dan insert ke dalam  database!

Melalui mekanisme diatas, user tidak perlu kuatir bila menambah file/record terbaru kedalam folder tersebut. Dalam skala besar riset itu butuh records yang banyak serta harus uptodate ataupun malah menambah class/target baru.

Bila hal tersebut kurang akurat!, misalkan saja bisa juga user memberikan nama file yang sama tanpa sengaja tapi isinya beda, ya kalian bisa desain dengan checksum, jadi pada saat scanning folder selain hitung ciri fitur juga hitung checksum file untuk dimasukan bersama-sama didalam database!

Pembagian Dataset

Secara umum dataset untuk kebutuhan machine learning terdiri dari 2 yaitu dataset training dan testing untuk keperluan tuning model. Ada banyak ratio yang digunakan yaitu 0.9 sampai 0.7.  Misalkan menggunakan ratio 0.9 artinya jika kita punya 150 record dataset, maka 90% x 150 = 135 records nya dimasukan dalam dataset training sisanya dataset testing. Bagaimana jika dataset tersebut mempunyai beberapa kelas? Misalkan terdapat 3 kelas dengan jumlah record masing-masing sebagai berikut

  1. Iris-setosa : 150 record
  2. Iris-versicolor: 250 record
  3. Iris-virginica: 60 record

Jika 0.9 ratio yang digunakan, maka dataset training menjadi

  1. Iris-setosa : 135 record
  2. Iris-versicolor: 225 record
  3. Iris-virginica: 54 record

sisanya menjadi dataset testing. Adapun cara splitnya bisa menggunakan random atau urut sequence Misalkan dari Iris-setosa : 150 record, maka no urut 1 sampai dengan 135 menjadi dataset traning dan no urut 136 sampai dengan 150 menjadi dataset testing.

Selanjutnya

Selanjutnya adalah melakukan tuning model yang merupakan kerjaan dari data science, pada kasus diatas sebagai contoh kita telah menghitung ciri fitur dan disimpan dalam bentuk CSV, kalian bisa menggunakan WEKA untuk mengolah dataset tersebut. Sebagai informasi dataset diatas diambil dari https://www.kaggle.com/moltean/fruits, kemudian case yang saya berikan adalah dengan menggunakan computer vision / digital image processing akan dihitung mean RGB dengan teknik ROI-Segmentasi Gambar sebagai ciri fitur dengan kelas kategorikal 4 kelas. Saya perjelas menjadi berikut

  1. ciri fitur yaitu RED, GREEN, dan BLUE sedangkan
  2. target/kelas yaitu KELAS dengan kategorikal
    1. Apple Braeburn
    2. Apple Crimson Snow
    3. Apple Golden 1
    4. Apple Golden 2

Rancangan GUI

GUI merupakan antarmuka yang menjembatani interaksi antara komputer dengan user, tidak semuanya user suka menggunakan aplikasi berbasis CLI, oleh karena hal tersebut untuk mempermudah pekerjaan dibuatlah GUI yang didalamnya ada user akan menekan sebuah tombol saja. Agar mudah dalam tuning dataset, saya menyarankan membuat dedicated folder bila harus mengolah dataset berupa ciri fitur! Misalkan dataset tersebut disimpan di dataset fruit/

Bila user memilih pengolahan dataset training, maka aplikasi akan memilih folder dataset fruit/data latih begitu juga untuk dataset testing maka aplikasi akan memilih folder dataset fruit/testing. Hal ini untuk mempermudah saja! ingat bahwa dataset itu digunakan untuk tuning model sehingga wajib diketahui ciri fitur dan target/kelas! kecuali aplikasi tersebut akan post production khusus untuk melakukan klasifikasi, maka kita tidak perlu membuat dedicated folder.

Desain GUI sangat simple, yaitu user hanya klik tombol Proses Dataset dengan memilih terlebih dahulu dataset training atau testing, hasil perhitungan ciri fitur akan ditampilkan dalam tabel serta secara otomatis akan menyimpan hasil. Karena ini hanya percobaan saja, saya menggunakan format CSV untuk menyimpan hasil perhitungan ciri fitur dengan nama fruit training.csv dan fruit testing.csv tapi dalam prakteknya bila dataset tersebut terdiri dari ribuan file, maka saya lebih suka menggunakan mysql server.

Bilamana jika user ingin menambahkan data baru? sebenarnya ini cukup mudah,

  1. bisa lakukan copy paste secara manual file gambar tersebut sesuai dengan tujuan kelasnya (copy paste di dedicated folder) atau
  2. data enginner membuat GUI Khusus untuk melakukan copy paste by programming kedalam folder dedicated tapi harus hati-hati ya, aplikasi wajib melakukan chek nama file agar tidak terjadi overwrite

Contohnya GUI bisa seperti berikut, langkahnya yaitu

  1. user akan diberikan cari gambar untuk menampilkan kotak dialog cari file, bila sudah file dipilih
  2. aplikasi akan memberikan pertanyaan, mau dimasukan kemana? Ingat ya ini adalah dataset untuk tuning model! sehingga harus didefinikasikan kelas/target terlebih dahulu

 

Tentu GUI diatas kurang efisien karena user harus satu-persatu melakukan proses, bilamana yang dipilih harus ratusan file?

  1. Copy paste kan saja file tersebut ke dedicated folder secara manual! atau
  2. buat GUI baru lagi khusus untuk dapat memproses ratusan file yang dipilih oleh user

Untuk GUI Tambah File banyak, maka user wajib melakukan pengelompokan file-file tersebut pada folder khusus (dikumpulin jadi satu dulu menjadi kelas yang sama, misalkan ada 10 file dengan 2 kelas ya buat dulu 2 folder)

langkahnya yaitu

  1. user akan diberikan cari folder untuk menampilkan kotak dialog cari folder yang berisikan file-file
  2. user akan diberikan pertanyaan terlebih dahulu sebelum lakukan upload

GUI dari Data Engineer

Setelah membuat GUI diatas, GUI tersebut dikumpulkan jadi 1 agar mudah dipanggil oleh GUI Dataset, user diberikan 3 opsi yaitu

  1. tambah 1 file
  2. tambah banyak file
  3. lakukan perhitungan ciri fitur

Selesai sudah tugas data engineer mulai dari

  1. menyiapkan struktur dataset
  2. memilih format penyimpanan dataset dan mekanisme bila terjadi duplikasi data
  3. melakukan perhitungan ciri fitur
  4. membuat GUI untuk mempermudah kegiatan yang berkenaan dengan dataset

Hemm, tapi ada 1 lagi yang belum dibuat yaitu mekanisme delete record pada dataset! ntar dibahas tersendiri menggunakan CRUID Mysql Database

Hasil perhitungan Dataset Fruit

Berikut hasil perhitungan ciri fitur yang telah dilakukan oleh data engineer

  1. fruit training
  2. fruit testing

 

2 thoughts on “Bagaimana Data Engineer Mengelola Dataset

  1. Reyne Raea

    Astagaaa, auto nge-hang deh otak saya membaca ini, selalu kagum dengan orang-orang yang jago dalam hal mengelola dataset, engineer dulunya saya pikir, arsitek atau civil engineer yang keren aja loh hahaha

    Reply

Leave a Reply

Your email address will not be published.




Enter Captcha Here :