"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?

