Saya telah mencoba mencari jawaban untuk pertanyaan ini selama berbulan-bulan sambil belajar panda. Saya menggunakan SAS untuk pekerjaan saya sehari-hari dan itu sangat bagus untuk itu dukungan di luar inti. Namun, SAS mengerikan sebagai bagian dari perangkat lunak karena berbagai alasan lainnya.
Suatu hari saya berharap untuk mengganti penggunaan SAS saya dengan python dan panda, tapi saat ini saya kekurangan alur kerja out-of-core untuk dataset besar. Saya tidak berbicara tentang "data besar" yang memerlukan jaringan terdistribusi, melainkan file yang terlalu besar untuk muat di memori tetapi cukup kecil untuk muat di hard-drive.
Pikiran pertama saya adalah menggunakan HDFStore
untuk menyimpan dataset besar pada disk dan hanya menarik bagian yang saya butuhkan ke dalam kerangka data untuk dianalisis. Yang lain menyebutkan MongoDB sebagai alternatif yang lebih mudah digunakan. Pertanyaan saya adalah ini:
Apa saja alur kerja praktik terbaik untuk mencapai yang berikut ini:
- Memuat file rata ke dalam struktur basis data disk permanen
- Meminta basis data itu untuk mengambil data untuk dimasukkan ke dalam struktur data panda
- Memperbarui database setelah memanipulasi potongan dalam panda
Contoh dunia nyata akan sangat dihargai, terutama dari siapa pun yang menggunakan panda pada "data besar".
Edit - contoh bagaimana saya ingin ini berfungsi:
- Mengimpor file flat besar secara besar-besaran dan menyimpannya dalam struktur basis data on-disk yang permanen. File-file ini biasanya terlalu besar untuk muat di memori.
- Untuk menggunakan Panda, saya ingin membaca himpunan bagian dari data ini (biasanya hanya beberapa kolom pada satu waktu) yang dapat ditampung dalam memori.
- Saya akan membuat kolom baru dengan melakukan berbagai operasi pada kolom yang dipilih.
- Saya kemudian harus menambahkan kolom baru ini ke dalam struktur basis data.
Saya mencoba menemukan cara praktik terbaik untuk melakukan langkah-langkah ini. Membaca tautan tentang panda dan pytables tampaknya menambahkan kolom baru bisa menjadi masalah.
Sunting - Menanggapi pertanyaan Jeff secara khusus:
- Saya sedang membangun model risiko kredit konsumen. Jenis data termasuk telepon, SSN dan karakteristik alamat; nilai properti; informasi yang merendahkan seperti catatan kriminal, kebangkrutan, dll ... Kumpulan data yang saya gunakan setiap hari rata-rata memiliki hampir 1.000 hingga 2.000 bidang data campuran: variabel kontinu, nominal dan ordinal dari data numerik dan karakter. Saya jarang menambahkan baris, tetapi saya melakukan banyak operasi yang membuat kolom baru.
- Operasi tipikal melibatkan menggabungkan beberapa kolom menggunakan logika kondisional ke dalam kolom gabungan yang baru. Sebagai contoh
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
,. Hasil dari operasi ini adalah kolom baru untuk setiap catatan dalam dataset saya. - Akhirnya, saya ingin menambahkan kolom baru ini ke dalam struktur data pada disk. Saya akan mengulangi langkah 2, mengeksplorasi data dengan tab silang dan statistik deskriptif yang berusaha menemukan hubungan yang menarik, intuitif dengan model.
- File proyek tipikal biasanya sekitar 1GB. File disusun sedemikian rupa di mana baris terdiri dari catatan data konsumen. Setiap baris memiliki jumlah kolom yang sama untuk setiap catatan. Ini akan selalu menjadi masalah.
- Sangat jarang bahwa saya akan subset oleh baris ketika membuat kolom baru. Namun, sangat umum bagi saya untuk membuat subset pada baris ketika membuat laporan atau menghasilkan statistik deskriptif. Misalnya, saya mungkin ingin membuat frekuensi sederhana untuk lini bisnis tertentu, misalnya kartu kredit Ritel. Untuk melakukan ini, saya hanya akan memilih catatan-catatan di mana garis bisnis = ritel di samping kolom mana pun yang ingin saya laporkan. Ketika membuat kolom baru, saya akan menarik semua baris data dan hanya kolom yang saya butuhkan untuk operasi.
- Proses pemodelan mengharuskan saya menganalisis setiap kolom, mencari hubungan yang menarik dengan beberapa variabel hasil, dan membuat kolom gabungan baru yang menggambarkan hubungan tersebut. Kolom yang saya jelajahi biasanya dilakukan dalam set kecil. Sebagai contoh, saya akan fokus pada satu set katakan 20 kolom hanya berurusan dengan nilai properti dan amati bagaimana mereka berhubungan dengan default pada pinjaman. Setelah itu dieksplorasi dan kolom baru dibuat, saya kemudian pindah ke grup kolom lain, katakanlah pendidikan perguruan tinggi, dan ulangi prosesnya. Apa yang saya lakukan adalah membuat variabel kandidat yang menjelaskan hubungan antara data saya dan beberapa hasil. Di akhir proses ini, saya menerapkan beberapa teknik pembelajaran yang membuat persamaan dari kolom-kolom majemuk tersebut.
Jarang sekali saya menambahkan baris ke dataset. Saya hampir selalu akan membuat kolom baru (variabel atau fitur dalam statistik / bahasa pembelajaran mesin).