Library Pengolah Jutaan Data – Big Data
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.
- pip install dask: Install only dask, which depends only on the standard library. This is appropriate if you only want the task schedulers.
- pip install dask[complete]: Install everything
- pip install dask[array]: Install dask and numpy
- pip install dask[bag]: Install dask and cloudpickle
- 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: