"Lima exabytes informasi diciptakan oleh umat manusia dari saat kelahiran peradaban hingga 2003, tetapi jumlah yang sama sekarang diciptakan setiap dua hari." Eric SchmidtDatatable adalah pustaka Python untuk melakukan pemrosesan data multi-threaded yang efisien. Datatable mendukung dataset yang tidak sesuai dengan memori.
Jika Anda menulis dalam R, maka Anda mungkin sudah menggunakan paket
data.table
.
Data.table adalah ekstensi dari paket
data.frame R. Selain itu, mereka yang menggunakan R untuk dengan cepat mengumpulkan kumpulan data besar tidak dapat melakukan tanpa paket ini (kita berbicara, khususnya, sekitar 100 GB data dalam RAM).
Paket
data.table
untuk R sangat fleksibel dan kuat. Menggunakannya mudah dan nyaman, program yang digunakan ditulis dengan cukup cepat. Paket ini dikenal luas di kalangan programmer-R. Ini diunduh lebih dari 400 ribu kali sebulan, digunakan di hampir 650 paket CRAN dan Bioconductor (
sumber ).
Apa gunanya penambangan data untuk Python? Masalahnya adalah bahwa ada paket
datatable
Python yang merupakan analog dari
data.table
dari dunia R. Paket
datatable
jelas berfokus pada pemrosesan set data besar. Ini ditandai dengan kinerja tinggi - baik ketika bekerja dengan data yang sepenuhnya ditempatkan dalam RAM, dan ketika bekerja dengan data yang ukurannya melebihi jumlah RAM yang tersedia. Ini mendukung pemrosesan data multi-threaded. Secara umum, paket
datatable dapat disebut sebagai adik dari
data.table .
Datatable
Sistem pembelajaran mesin modern perlu memproses data dalam jumlah yang sangat besar dan menghasilkan banyak fitur. Ini diperlukan untuk membangun model seakurat mungkin. Modul Python yang dapat
datatable
dibuat untuk mengatasi masalah ini. Ini adalah seperangkat alat untuk melakukan operasi dengan volume data yang besar (hingga 100 GB) pada satu komputer dengan kecepatan setinggi mungkin. Sponsor pengembangan
dataat adalah
H2O.ai , dan pengguna pertama paket tersebut adalah
Driverless.ai .
Toolkit ini sangat mirip dengan
panda , tetapi lebih fokus pada penyediaan pemrosesan data berkecepatan tinggi dan mendukung kumpulan data besar. Selain itu, pengembang paket yang dapat
datatable
, berupaya agar nyaman bagi pengguna untuk menggunakannya. Ini, khususnya, API yang kuat dan pesan kesalahan yang dipikirkan dengan matang. Pada artikel ini, kita akan berbicara tentang bagaimana menggunakan
datatable
, dan bagaimana tampilannya dibandingkan dengan
pandas
saat memproses set data yang besar.
Instalasi
Di macOS,
datatable
dapat dengan mudah diinstal menggunakan
pip
:
pip install datatable
Di Linux, instalasi dilakukan dari distribusi biner:
Saat ini,
datatable
tidak berfungsi di bawah Windows, tetapi pekerjaan sedang berlangsung dalam arah ini, jadi dukungan Windows hanyalah masalah waktu.
Detail tentang cara menginstal
datatable
dapat ditemukan di
sini .
Kode yang akan digunakan dalam artikel ini dapat ditemukan di repositori GitHub
ini atau di
sini di mybinder.org.
Membaca data
Kumpulan data yang akan kami uji di sini diambil dari Kaggle (
Data Pinjaman Klub Data ). Set ini terdiri dari data lengkap tentang semua pinjaman yang diterbitkan pada 2007-2015, termasuk status pinjaman saat ini (Lancar, Terlambat, Dibayar Penuh, dll.) Dan informasi pembayaran terbaru. File ini terdiri dari 2,26 juta baris dan 145 kolom. Ukuran dataset ini sangat ideal untuk menunjukkan kemampuan perpustakaan yang dapat
datatable
.
Mari memuat data ke objek
Frame
. Unit dasar analisis dalam sebuah
datatable
adalah
Frame
. Ini sama dengan
DataFrame
dari
pandas
atau tabel SQL. Yaitu, kita berbicara tentang data yang diatur sebagai larik dua dimensi di mana baris dan kolom dapat dibedakan.
▍Pemuatan data menggunakan dataat
%%time datatable_df = dt.fread("data.csv") ____________________________________________________________________ CPU times: user 30 s, sys: 3.39 s, total: 33.4 s Wall time: 23.6 s
Fungsi
fread()
di atas adalah mekanisme yang kuat dan sangat cepat. Secara otomatis dapat mendeteksi dan memproses parameter untuk sebagian besar file teks, mengunduh data dari arsip .ZIP dan file Excel, mengambil data dengan URL, dan banyak lagi.
Selain itu, pengurai
datatable
memiliki fitur berikut:
- Secara otomatis dapat mendeteksi pembatas, heading, tipe kolom, aturan pelolosan karakter, dan sebagainya.
- Ia dapat membaca data dari berbagai sumber. Diantaranya adalah sistem file, URL, command shell, teks mentah, arsip.
- Ia mampu melakukan pembacaan data multithread untuk kinerja maksimum.
- Ini menampilkan indikator kemajuan saat membaca file besar.
- Itu bisa membaca file yang sesuai dan tidak sesuai dengan RFC4180 .
▍Mengunduh data menggunakan panda
Sekarang mari kita lihat berapa lama
pandas
perlu membaca file yang sama.
%%time pandas_df= pd.read_csv("data.csv") ___________________________________________________________ CPU times: user 47.5 s, sys: 12.1 s, total: 59.6 s Wall time: 1min 4s
Anda dapat melihat bahwa
datatable
jelas lebih cepat daripada
pandas
saat membaca dataset besar.
Pandas
dalam percobaan kami membutuhkan waktu lebih dari satu menit, dan waktu yang diperlukan oleh data diukur dalam detik.
Konversi Objek Bingkai
Objek
Frame
paket
datatable
ada dapat dikonversi ke objek
DataFrame
numpy
atau
pandas
. Ini dilakukan seperti ini:
numpy_df = datatable_df.to_numpy() pandas_df = datatable_df.to_pandas()
Mari kita coba untuk mengonversi
Frame
sudah ada menjadi
datatable
menjadi
pandas
DataFrame
dan lihat berapa lama.
%%time datatable_pandas = datatable_df.to_pandas() ___________________________________________________________________ CPU times: user 17.1 s, sys: 4 s, total: 21.1 s Wall time: 21.4 s
Tampaknya membaca file menjadi
Frame
datatable
dan kemudian mengonversinya menjadi objek
DataFrame
pandas
membutuhkan waktu lebih sedikit daripada memuat data ke
DataFrame
menggunakan
pandas
. Oleh karena itu, mungkin, jika Anda berencana untuk memproses sejumlah besar data menggunakan
pandas
, akan lebih baik memuatnya menggunakan
datatable
, dan kemudian mengubahnya menjadi
DataFrame
.
type(datatable_pandas) ___________________________________________________________________ pandas.core.frame.DataFrame
Properti dasar dari objek Frame
Pertimbangkan properti dasar objek
Frame
dari
datatable
. Mereka sangat mirip dengan properti serupa dari objek
DataFrame
dari
pandas
:
print(datatable_df.shape)
Di sini kita dapat menggunakan metode
head()
, yang menampilkan
n
baris pertama:
datatable_df.head(10)
10 baris pertama objek Frame dari dataatWarna header menunjukkan tipe data. Merah menunjukkan garis, hijau menunjukkan bilangan bulat, biru menunjukkan angka floating-point.
Statistik Ringkasan
Menghitung statistik ringkasan dalam
pandas
adalah operasi yang membutuhkan banyak memori untuk menyelesaikannya. Dalam kasus
datatable
ini tidak demikian. Berikut adalah perintah yang dapat Anda gunakan untuk menghitung berbagai metrik dalam data yang dapat
datatable
:
datatable_df.sum() datatable_df.nunique() datatable_df.sd() datatable_df.max() datatable_df.mode() datatable_df.min() datatable_df.nmodal() datatable_df.mean()
Kami menghitung nilai rata-rata di atas kolom menggunakan
datatable
dan
pandas
dan menganalisis waktu yang diperlukan untuk menyelesaikan operasi ini.
▍ Mencari rata-rata menggunakan datatable
%%time datatable_df.mean() _______________________________________________________________ CPU times: user 5.11 s, sys: 51.8 ms, total: 5.16 s Wall time: 1.43 s
▍ Menemukan rata-rata menggunakan panda
pandas_df.mean() __________________________________________________________________ Throws memory error.
Seperti yang Anda lihat, di
pandas
kami tidak bisa mendapatkan hasilnya - kesalahan yang terkait dengan memori dikeluarkan.
Manipulasi data
Frame
dan
DataFrame
adalah struktur data yang berupa tabel. Dalam
datatable
, tanda kurung siku digunakan untuk memanipulasi data. Ini mirip dengan cara kerjanya dengan matriks konvensional, tetapi di sini, saat menggunakan tanda kurung, Anda dapat menggunakan fitur tambahan.
Bekerja dengan data yang dapat didata menggunakan kurung sikuDalam matematika, ketika bekerja dengan matriks, konstruksi bentuk
DT[i, j]
juga digunakan. Struktur serupa dapat ditemukan di C, C ++ dan R, dalam paket
pandas
dan
numpy
, serta dalam banyak teknologi lainnya. Pertimbangkan untuk melakukan manipulasi data umum dalam data.
▍ Membentuk Baris atau Sampel Kolom
Kode berikut memilih semua baris dari kolom
funded_amnt
:
datatable_df[:,'funded_amnt']
Pilih semua baris kolom funded_amntBerikut cara memilih 5 baris dan 3 kolom pertama:
datatable_df[:5,:3]
Pemilihan 5 baris pertama dan 3 kolom▍Menyortir data menggunakan datatable
Urutkan set data dengan kolom yang dipilih:
%%time datatable_df.sort('funded_amnt_inv') _________________________________________________________________ CPU times: user 534 ms, sys: 67.9 ms, total: 602 ms Wall time: 179 ms
▍Menyortir data menggunakan panda
%%time pandas_df.sort_values(by = 'funded_amnt_inv') ___________________________________________________________________ CPU times: user 8.76 s, sys: 2.87 s, total: 11.6 s Wall time: 12.4 s
Perhatikan perbedaan signifikan dalam waktu yang diperlukan untuk mengurutkan data dan
pandas
.
El Hapus baris dan kolom
Berikut cara menghapus kolom bernama
member_id
:
del datatable_df[:, 'member_id']
Pengelompokan
Datatable, seperti
pandas
, mendukung kemampuan pengelompokan data. Mari kita lihat bagaimana cara mendapatkan rata-rata kolom
funded_amound
, data yang dikelompokkan berdasarkan kolom
grade
.
▍Mengelompokkan data menggunakan datatable
%%time for i in range(100): datatable_df[:, dt.sum(dt.f.funded_amnt), dt.by(dt.f.grade)] ____________________________________________________________________ CPU times: user 6.41 s, sys: 1.34 s, total: 7.76 s Wall time: 2.42 s
Di sini Anda dapat melihat penggunaan konstruksi
.f
. Ini disebut frame proxy - mekanisme sederhana yang memungkinkan Anda untuk merujuk ke objek
Frame
yang saat ini beberapa tindakan sedang dilakukan. Dalam kasus kami,
dt.f
sama dengan
datatable_df
.
▍ Mengelompokkan data menggunakan panda
%%time for i in range(100): pandas_df.groupby("grade")["funded_amnt"].sum() ____________________________________________________________________ CPU times: user 12.9 s, sys: 859 ms, total: 13.7 s Wall time: 13.9 s
Penyaringan garis
Sintaksis penyaringan mirip dengan sintaksis pengelompokan.
loan_amnt
garis
loan_amnt
yang nilai
loan_amnt
lebih besar dari
funded_amnt
.
datatable_df[dt.f.loan_amnt>dt.f.funded_amnt,"loan_amnt"]
Menyimpan Objek Bingkai
Isi objek
Frame
dapat ditulis ke file CSV, yang memungkinkan penggunaan data di masa depan. Ini dilakukan seperti ini:
datatable_df.to_csv('output.csv')
Anda dapat membaca tentang metode yang dapat
datatable
lainnya untuk bekerja dengan data di
sini .
Ringkasan
Modul Python yang dapat
datatable
pasti lebih cepat daripada
pandas
biasa. Ini juga merupakan anugerah bagi mereka yang perlu memproses set data yang sangat besar. Sejauh ini, satu-satunya minus
datatable
dibandingkan dengan
pandas
adalah jumlah fungsionalitas. Namun, pekerjaan aktif sedang dilakukan pada
datatable
, sehingga sangat mungkin bahwa di masa depan, data akan melampaui
pandas
di semua arah.
Pembaca yang budiman! Apakah Anda berencana untuk menggunakan paket
datatable
dalam proyek Anda?

