You are currently viewing Dask Dataframe Library

Dask Dataframe Library

Dalam data sains atau machine learning, terkadang kita menghadapi dataset yang cukup besar hingga jutaan atau miliaran record. Apabila kita memproses dataset tersebut menggunakan library pandas maka untuk komputer dengan RAM yang terbatas akan cepat terkuras habis. Oleh sebab itu saya menggunakan salah satu library untuk mengolah big data yaitu Dask.

Dask dataframe digunakan untuk memproses dataset yang besar dengan melakukan partisi dataframe tersebut menjadi beberapa bagian (disebut chunk), kemudian diproses secara parallel oleh CPU. Sebenarnya API Dask ada beberapa diantaranya : Dask Array, Dask Bags, Dask Delayed, dan Dask Dataframe salah satunya. Penulis akan membahas Dask Dataframe API karena sedang penulis gunakan secara intens.

Dataset yang menjadi ujicoba penulis kali ini bersumber dari CIC-IDS 2018 yang merupakan dataset yang berisi serangan malware ke sebuah server. Dalam dataset ini terdapat 79 features dan 1 label, yang terdiri dari jutaan baris.

Dataset ini terdiri dari 10 file csv, yang berkasnya diberi nama sesuai dengan tanggal serangan, yaitu:

Nama BerkasUkuran (KB)Jumlah BarisKeterangan
02-14-2018.csv349.8281.048.575* FTP-BruteForce
* Benign
* SSH-Bruteforce
02-15-2018.csv367.1351.048.575* Benign
* DoS attacks-GoldenEye
* DoS attacks-Slowloris
02-16-2018.csv325.902
02-20-2018.csv3.959.889
02-21-2018.csv321.186
02-22-2018.csv373.669
02-23-2018.csv373.868
02-28-2018.csv204.346
03-01-2018.csv105.316
03-02-2018.csv344.110

Untuk instalasi library dask dapat dilihat pada artikel lain. Artikel ini fokus pada penggunaan Dask Dataframe. Dibawah ini contoh implementasi Dask DataFrame :

Menampilkan info dari file 02-14-2018.csv
import dask.dataframe as dd
df = dd.read_csv('02-14-2018.csv', dtype={'Active Mean': 'float64', 'Active Std': 'float64'})
df.info()

#output
<class 'dask_expr.DataFrame'>
Columns: 80 entries, Dst Port to Label
dtypes: float64(22), int64(56), string(2)
  • import dask.dataframe as dd, digunakan untuk mengimport library
  • df = dd.read_csv("02-14-2018.csv"), digunakan untuk membaca file csv dan menyimpan dalam objek df
  • parameter dtype={'Active Mean': 'float64', 'Active Std': 'float64'} digunakan untuk memaksa perubahan tipe data pada kolom Active Mean dan Active Std menjadi float64
    Catatan: Dask hanya membaca beberapa baris sampel dan menyimpulkan tipe data int64 , namun kenyataanya terdapat baris dengan tipe data float64, sehingga akan mengakibatkan error. Solusinya adalah dengan merubah kedua kolom tadi menjadi tipe data yang sesuai yaitu float64
  • Terlihat bahwa dataset terdiri dari 80 kolom, dengan data type float sebanyak 22 kolom, int64 sebanyak 56 kolom, dan string sebanyak 2 kolom.
Mencari total baris pada dataframe
import dask.dataframe as dd
df = dd.read_csv('02-14-2018.csv', dtype={'Active Mean': 'float64', 'Active Std': 'float64'})
df.count().compute()

#output pandas.core.series.Series
Dst Port         1048575
Protocol         1048575
Timestamp        1048575
Flow Duration    1048575
Tot Fwd Pkts     1048575
                  ...   
Idle Mean        1048575
Idle Std         1048575
Idle Max         1048575
Idle Min         1048575
Label            1048575
Length: 80, dtype: int64
  • df.count().compute(), akan mengeksekusi perintah untuk menghitung jumlah baris
    Catatan: df.count() mempersiapkan data tanpa benar-benar mengeksekusi perintah, namun apabila ditambahkan fungsi .compute() maka perintah baru akan dijalankan.
Menampilkan n baris pertama
import dask.dataframe as dd
df = dd.read_csv('02-14-2018.csv', dtype={'Active Mean': 'float64', 'Active Std': 'float64'})
df.head(5)

#output tidak ditampilkan
#tipe data output : pandas.core.frame.DataFrame
  • df.head(5), menampilkan 5 baris pertama
  • output memiliki tipe data
Mencari nilai unik pada kolom ‘Label’
import dask.dataframe as dd
df = dd.read_csv('02-14-2018.csv', dtype={'Active Mean': 'float64', 'Active Std': 'float64'})

result = df["Label"].drop_duplicates().compute() #output1
result = df["Label"].drop_duplicates().compute().reset_index(drop=True) #output2
result = df["Label"].unique().compute() #output3

#output1 pandas.core.series.Series
94        FTP-BruteForce
0                 Benign
179431    SSH-Bruteforce
Name: Label, dtype: object

#output2 pandas.core.series.Series
0        FTP-BruteForce
1                 Benign
2    SSH-Bruteforce
Name: Label, dtype: object

#output3 pandas.core.series.Series
0    FTP-BruteForce
0            Benign
1    SSH-Bruteforce
Name: Label, dtype: object
Menghitung nilai mean
import dask.dataframe as dd
df = dd.read_csv("file.csv")
result = df.groupby('category').mean()
final_result = result.compute()
print(final_result)
  • import dask.dataframe as dd, digunakan untuk mengimport library
  • df = dd.read_csv(“file.csv”), digunakan untuk membaca file csv
  • result = df.groupby(‘category’).mean(), digunakan untuk mendaftarkan job untuk mengkategorikan berdasarkan ‘category’ kemudian mengambil nilainya dan dirata-ratakan. Perlu dipahami bahwa proses belum benar-benar dikerjakan, hanya didaftarkan dalam job list Dask.
  • final_result = result.compute(), result.compute() merupakan perintah untuk menjalankan job list yang telah didaftarkan, hasilnya disimpan di final_result
  • print(final_result), untuk mencetak hasil

Leave a Reply