0Pricing
Pandas & NumPy Academy · Pelajaran

Pengantar Dask DataFrames

Ganti pd.read_csv dan pd.DataFrame dengan padanan Dask, panggil compute() untuk memulai eksekusi, dan buat profil graf tugas.

Pengantar Dask DataFrames adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa Itu Dask?

Dask adalah pustaka komputasi paralel untuk Python yang memperluas NumPy dan Pandas agar dapat menangani dataset yang lebih besar daripada RAM. Modul dask.dataframe menyediakan antarmuka DataFrame yang hampir identik dengan Pandas, tetapi alih-alih langsung menjalankan operasi, Dask membangun graf tugas dan menjalankannya secara malas ketika Anda memanggil .compute(). Hal ini memungkinkan Dask memparalelkan pekerjaan di beberapa inti atau bahkan beberapa mesin dengan perubahan kode yang minimal.

Memasang dan Mengimpor Dask

Dask dipasang dengan pip install dask[dataframe]. Konvensi impornya adalah import dask.dataframe as dd. Di balik layar, sebuah Dask DataFrame dibagi menjadi banyak DataFrame Pandas yang lebih kecil, dan masing-masing diproses secara independen. Operasi pada Dask DataFrame membuat graf tugas malas — tidak ada yang dijalankan sampai .compute() dipanggil. Pemisahan antara mendeskripsikan dan menjalankan komputasi ini merupakan gagasan utama Dask.

import dask.dataframe as dd

# Read a large CSV — returns a Dask DataFrame immediately (no data loaded yet)
ddf = dd.read_csv('large_sales.csv')
print(type(ddf))     # dask.dataframe.core.DataFrame
print(ddf.columns.tolist())
print(ddf.dtypes)

Dask vs Pandas: Perbedaan Utama

Dengan Pandas, setiap operasi dijalankan segera dan secara eager. Dengan Dask, operasi mengembalikan objek Dask lain yang merepresentasikan komputasi tertunda. Dask baru benar-benar membaca data dan menjalankan graf tugas ketika Anda memanggil .compute(). Sifat malas ini memungkinkan Dask mengoptimalkan rencana sebelum menjalankannya — misalnya, Dask dapat menggabungkan filter yang berurutan agar data tidak dimuat berkali-kali. Bayangkan ini seperti resep: Dask menulis resepnya; .compute() memasak hidangannya.

import dask.dataframe as dd

ddf = dd.read_csv('sales.csv')

# This does NOT run yet — just builds the task graph
filtered = ddf[ddf['amount'] > 1000]
agg = filtered.groupby('region')['amount'].sum()

print(type(agg))  # dask.dataframe.core.Series

# NOW execute everything
result = agg.compute()
print(result)

Partisi: Konsep Inti

Sebuah Dask DataFrame dibagi menjadi partisi, yang masing-masing merupakan DataFrame Pandas biasa. Secara default, dd.read_csv membuat satu partisi per file (atau satu partisi per 128 MB untuk file berukuran besar). Anda dapat mengaturnya dengan blocksize. Pemeriksaan terhadap ddf.npartitions menunjukkan jumlah partisi yang ada. Partisi yang lebih banyak memungkinkan paralelisme yang lebih besar, tetapi menambah overhead; partisi yang lebih sedikit mengurangi overhead, tetapi membatasi paralelisme. Titik optimal biasanya berada di sekitar beberapa ratus partisi.

import dask.dataframe as dd

ddf = dd.read_csv('data/*.csv')  # Read multiple CSV files at once
print('Number of partitions:', ddf.npartitions)

# Access a single partition as a Pandas DataFrame
first_partition = ddf.get_partition(0).compute()
print('Partition 0 shape:', first_partition.shape)

Operasi Pandas yang Umum dalam Dask

Sebagian besar operasi Pandas yang umum bekerja dengan cara yang sama dalam Dask: .head(), .tail(), .describe(), pengindeksan boolean, .groupby(), .merge(), dan .assign() semuanya memiliki padanan dalam Dask. Perbedaan terbesarnya adalah Anda harus memanggil .compute() untuk mewujudkan hasilnya. Operasi yang ditangani Pandas dalam hitungan milidetik mungkin memerlukan beberapa detik dalam Dask karena overhead graf tugas — jadi gunakan Pandas untuk data kecil dan Dask ketika data tidak muat dalam RAM.

import dask.dataframe as dd

ddf = dd.read_csv('transactions.csv')

# Filtering — same syntax as Pandas
high_value = ddf[ddf['amount'] > 500]

# GroupBy aggregation
by_region = high_value.groupby('region')['amount'].mean()

# Execute
result = by_region.compute()
print(result.sort_values(ascending=False))

Membaca Banyak File dengan Pola Glob

Salah satu fitur Dask yang paling berguna adalah membaca banyak file sekaligus menggunakan pola glob. dd.read_csv('data/2024-*.csv') membaca semua file yang cocok dan membuat satu partisi per file. Ini sangat cocok untuk data yang disimpan sebagai file yang dipartisi per bulan atau per hari, pola yang umum dalam danau data. Dask menyelaraskan skema secara otomatis, setara dengan melakukan perulangan secara manual dan menggabungkan file dengan Pandas, tetapi jauh lebih sederhana.

import dask.dataframe as dd

# Read all monthly files at once
ddf = dd.read_csv('sales/2024-*.csv',
                  dtype={'order_id': 'int32',
                         'amount': 'float32'})
print(f'Partitions: {ddf.npartitions}')  # One per file
print(f'Total rows (lazy): {len(ddf)}')  # This triggers a compute!

Metode visualize() untuk Graf Tugas

Sebelum menjalankan alur Dask yang kompleks, Anda dapat memeriksa graf tugas dengan memanggil result.visualize(), yang menghasilkan diagram PNG dari semua langkah komputasi. Hal ini berguna untuk memahami apa yang akan dijalankan Dask dan men-debug kelambatan yang tidak terduga. Graf tersebut menunjukkan bagaimana partisi mengalir melalui langkah filter, groupby, dan agregasi, sehingga komputasi yang berulang dapat ditemukan dengan mudah. Memerlukan paket graphviz.

import dask.dataframe as dd

ddf = dd.read_csv('orders.csv')
pipeline = (
    ddf[ddf['status'] == 'completed']
    .groupby('product_id')['revenue']
    .sum()
)

# Visualise the task graph (saves to PNG)
# pipeline.visualize('task_graph.png')

# Check number of tasks in the graph
print('Number of tasks:', len(pipeline.__dask_graph__()))

Menerapkan Fungsi Khusus dengan map_partitions

Jika Anda perlu menerapkan fungsi Pandas khusus pada Dask DataFrame, gunakan ddf.map_partitions(func). Fungsi ini menerapkan func pada setiap partisi secara independen dan mengembalikan Dask DataFrame baru. Fungsi tersebut menerima DataFrame Pandas biasa dan harus mengembalikan DataFrame yang sama. Ini merupakan padanan Dask untuk df.apply() dan merupakan cara mengintegrasikan Dask dengan kode yang hanya memahami Pandas.

import dask.dataframe as dd
import pandas as pd

def normalise_chunk(df):
    df = df.copy()
    df['amount_norm'] = (df['amount'] - df['amount'].mean()) / df['amount'].std()
    return df

ddf = dd.read_csv('data.csv')
normalised = ddf.map_partitions(normalise_chunk)
result = normalised[['order_id', 'amount_norm']].compute()
print(result.head())

Opsi Penjadwal Dask

Dask memiliki beberapa penjadwal yang mengatur cara tugas dijalankan. Penjadwal 'synchronous' menjalankan tugas secara berurutan di thread saat ini (berguna untuk men-debug). Penjadwal 'threads' menggunakan kumpulan thread (cocok untuk pekerjaan yang dibatasi I/O). Penjadwal 'processes' membuat beberapa proses untuk pekerjaan yang dibatasi CPU (melewati GIL Python). Klaster terdistribusi Dask memungkinkan eksekusi pada banyak mesin. Tentukan penjadwal melalui compute(scheduler='threads').

import dask.dataframe as dd

ddf = dd.read_csv('data.csv')
agg = ddf.groupby('category')['sales'].sum()

# Choose scheduler based on workload
result_sync = agg.compute(scheduler='synchronous')  # sequential, easy to debug
result_threads = agg.compute(scheduler='threads')   # parallel I/O
result_processes = agg.compute(scheduler='processes')  # parallel CPU

Mengonversi antara Dask dan Pandas

Memproses dataset besar dengan Dask lalu membawa hasil agregasi ke Pandas untuk analisis atau visualisasi akhir merupakan hal yang umum. Gunakan .compute() untuk mengonversi Dask DataFrame menjadi Pandas. Untuk arah sebaliknya, dd.from_pandas(df, npartitions=4) mengonversi DataFrame Pandas menjadi Dask DataFrame, yang berguna untuk menguji kode Dask pada data kecil sebelum meningkatkannya ke dataset lengkap.

import pandas as pd
import dask.dataframe as dd

# Start with a small Pandas DF for testing
df_small = pd.DataFrame({'a': range(100), 'b': range(100, 200)})

# Convert to Dask for development/testing
ddf = dd.from_pandas(df_small, npartitions=4)
result = ddf.groupby('a')['b'].sum().compute()
print(type(result))  # pandas.Series
print(result.head())

Kapan Menggunakan Dask, Pandas, atau SQL

Dask tidak selalu merupakan alat yang tepat. Gunakan Pandas jika data Anda muat dalam RAM (kurang dari beberapa GB) — Pandas lebih sederhana dan lebih cepat karena overhead-nya lebih kecil. Gunakan Dask jika data melebihi kapasitas RAM, tetapi Anda menginginkan sintaks seperti Pandas dan paralelisme pada satu mesin. Gunakan SQL/basis data jika data berada dalam basis data relasional dan agregasi dapat diteruskan ke mesin basis data. Gunakan Spark atau BigQuery jika Anda memerlukan pemrosesan terdistribusi pada banyak mesin dalam skala petabita.

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini, Anda telah mempelajari bahwa Dask DataFrames merupakan kumpulan partisi Pandas yang dievaluasi secara malas dengan antarmuka yang familier, .compute() memicu eksekusi graf tugas yang sebenarnya, dan map_partitions memungkinkan Anda menerapkan fungsi Pandas khusus apa pun pada semua partisi. Selanjutnya, kita akan membahas format Parquet sebagai alternatif berbasis kolom yang cepat untuk CSV dalam menyimpan dataset berukuran besar.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengantar Dask DataFrames” gratis?

Ya — teks lengkap “Pengantar Dask DataFrames” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengantar Dask DataFrames”?

Ganti pd.read_csv dan pd.DataFrame dengan padanan Dask, panggil compute() untuk memulai eksekusi, dan buat profil graf tugas. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pengantar Dask DataFrames” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. CSV Streaming dengan chunksize
  2. Agregasi Bertahap di Seluruh Potongan
  3. Pengantar Dask DataFrames
  4. Parquet: Penyimpanan Kolumnar Cepat
← Kembali ke Pandas & NumPy Academy