Library Pengolah Jutaan Data – Big Data

By | January 14, 2021
Print Friendly, PDF & Email
1,451 Views

Dalam era big data yang mempunyai jutaan record pada sebuah data transaksi membutuhkan perangkat dan software khusus karena data tersebut bila diload dalam memory RAM akan langsung out of memory.  Nah kalau kalian membaca buku yang saya tulis ada 2 library yang khusus untuk menangani sebuah data terstruktur yaitu numpy dan pandas. Pandas sudah sangat terkenal karena kemudahan dan kesederhanaan sintaksnya. Namun bila mengolah data yang terdiri dari jutaan record maka tidak begitu bagus. Ada beberapa pilihan yang bisa kalian gunakan seperti dask dan  vaex.

Dask

Terkenal dengan jargonnya paralel computing yang merupakan scale up dari Numpy dan Pandas https://dask.org/ Untuk melakukan instalasi via pip, agak nyeleneh karena agak berbeda dengan yang lainnya yaitu

pip install “dask[complete]”

Dengan perintah diatas, maka semua dependency nya akan terinstall semuanya. Karena kalau tidak lengkap, hanya untuk install hanya core nya saja (standar library). Berikut ada 5 jenis install dask.

  1. pip install dask: Install only dask, which depends only on the standard library. This is appropriate if you only want the task schedulers.
  2. pip install dask[complete]: Install everything
  3. pip install dask[array]: Install dask and numpy
  4. pip install dask[bag]: Install dask and cloudpickle
  5. pip install dask[dataframe]: Install dask, numpy, and pandas

 Pada tulisan ini dibuat, saya menggunakan 2.18.0, yang bisa kalian cek seperti biasanya yaitu

import dask
dask.__version__
'2.18.0'

Misalkan kita akan membuat 10.000 x 10.000 array yang akan direpresentasikan didalam numpy 1.000 x 1.000 array sehingga ada 10 x 10 grid. Oiya, kalian sebaiknya menggunakan jupyter saja ya untuk melakukan coding daripada menggunakan spyder, agar mudah visualisasinya. Untuk menjalankan jupyter notebook, ketikan perintah berikut di terminal / command prompt kalian

jupyter notebook

Maka akan secara otomatis terbuka browser dengan alamat http://localhost:8888/notebooks/. Ketikan saja kode berikut untuk mencoba membuat array.

import dask.array as da
x = da.random.random((10000, 10000), chunks=(1000, 1000))
x

Kalian bisa baca lebih lanjut di https://examples.dask.org/array.html sedangkan untuk dataframe https://docs.dask.org/en/latest/dataframe.html

Vaex

Vaex berbeda dengan dengan Dask tapi mirip cara kerja Data Frame Dask yang mana sama-sama menggunakan Pandas sebagai core nya. Perbedaannya adalah Dask harus melakukan loading secara lengkap kedalam RAM untuk diproses, sedangkan Vaex tidak melakukan hal demikian. Vaex tidak membuat copy Data Frame didalam memory utama tapi menggunakan keunggulan dari HDF5 dan Apache Arrow dalam mengelola data. Untuk melakukan instal, ketikan saja perintah berikut

pip install vaex

Kita akan membuat sebuah data yang sangat besar yaitu 1.000.000 baris x 1.000 kolom yang akan menguras RAM komputer.

import vaex
import pandas as pd
import numpy as np
n_rows = 1000000
n_cols = 1000
df = pd.DataFrame(np.random.randint(0, 100, size=(n_rows, n_cols)), columns=['col%d' % i for i in range(n_cols)])
df.head()

df.info(memory_usage='deep')

Setidaknya dibutuhkan 3.7 gb, kalau kita simpan dalam bentuk *.csv membutuhkan sekitar 2.9 GB atau sekitar 7 menit buat simpan (padahal saya menggunakan SSD lho, kayaknya sih mampet di prosesor yang saya pakai cuman i3 generasi 2 serta RAM cuman 6GB)

file_path = 'big_file.csv'
df.to_csv(file_path, index=False)

Biasanya bila data berukuran sangat besar, akan susah diloading menggunakan pandas (karena disesuaikan dengan RAM komputer mu), oleh karena itu kita harus convert saja ke HDF5 seperti berikut

dv = vaex.from_csv(file_path, convert=True, chunk_size=5_000_000

Perintah berikut digunakan untuk membuat HDF5

type(dv)# output
vaex.hdf5.dataset.Hdf5MemoryMapped
dv = vaex.open('big_file.csv.hdf5')

Kita coba akan menghitung grand total col1

suma = dv.col1.sum()
suma# array(49486599)

Yang tidak membutuhkan waktu kurang dari 3 detik saja, hal ini dikarenakan adanya memory mapping. Lebih lanjut bisa kalian pelajari di https://github.com/vaexio/vaex

Dengan menggunakan 2 library diatas, maka sangat mungkin mengolah Jutaan Data hanya dengan komputer desktop biasa.

ref:

https://towardsdatascience.com/ml-impossible-train-a-1-billion-sample-model-in-20-minutes-with-vaex-and-scikit-learn-on-your-9e2968e6f385

Leave a Reply