Opsi analisis data di luar inti

18

Saya telah menggunakan SAS secara profesional selama hampir 5 tahun sekarang. Saya sudah menginstalnya di laptop saya dan sering harus menganalisis dataset dengan 1.000-2.000 variabel dan ratusan ribu pengamatan.

Saya telah mencari alternatif untuk SAS yang memungkinkan saya untuk melakukan analisis pada set data berukuran serupa. Saya ingin tahu apa yang orang lain gunakan untuk situasi seperti ini. Ini tentu saja bukan "Data Besar" dengan cara yang digunakan saat ini. Kumpulan data saya juga tidak cukup kecil untuk disimpan dalam memori. Saya membutuhkan solusi yang dapat menerapkan algoritma ke data yang disimpan di hard drive. Ini adalah hal-hal yang telah saya selidiki tidak berhasil:

  1. R - BigMemory dapat membuat matriks yang disimpan dari memori, tetapi elemen-elemennya harus dalam mode yang sama. Saya bekerja dengan data yang terbagi hampir 50/50 antara karakter dan numerik. Paket FF semakin mendekati apa yang saya butuhkan, tetapi saya tidak begitu mengerti prosedur mana yang kompatibel dengannya. Saya pikir dukungan agak terbatas.
  2. Panda - Saya sangat senang tentang alternatif Pythonic untuk R. Namun, itu juga harus menyimpan semua data dalam memori.
  3. Revolution R - Yang ini menunjukkan sedikit janji. Saya memiliki salinan di komputer rumah saya (gratis jika Anda mendaftar ke Kaggle) dan belum mengujinya sebagai alternatif yang layak untuk SAS. Komentar tentang Revolution R sebagai alternatif SAS sangat dihargai.

Terima kasih

PEMBARUAN 1

Mengedit untuk menambahkan bahwa saya mencari solusi praktis dan nyata yang telah digunakan orang dengan sukses. Untuk sebagian besar, SAS memungkinkan saya membaca file besar tanpa khawatir sedikit pun tentang kendala memori. Namun SAS diimplementasikan, mereka menemukan cara untuk membuat manajemen memori transparan kepada pengguna. Tapi, dengan berat hati saya menggunakan SAS untuk pekerjaan saya (saya harus) dan akan MENCINTAI alternatif FOSS yang memungkinkan saya untuk bekerja pada data "besar" tanpa harus berpikir terlalu keras tentang di mana data itu berada di waktu tertentu (dalam memori atau pada disk).

Hal terdekat yang saya temui adalah paket FF R dan sesuatu di cakrawala untuk Python disebut Blaze . Namun, masalah ini telah ada selama bertahun-tahun, jadi apa yang telah dilakukan para analis pada saat itu? Bagaimana mereka menangani masalah yang sama dengan batas Memori ini? Sebagian besar solusi yang ditawarkan adalah:

  • Dapatkan lebih banyak RAM - Ini bukan solusi yang baik, imo. Sangat mudah untuk menemukan dataset yang dapat melebihi RAM namun masih muat di hard-drive. Selanjutnya, alur kerja harus mengakomodasi semua struktur yang dibuat selama analisis data eksplorasi.
  • Subset data - Ini bagus untuk eksplorasi tetapi tidak untuk menyelesaikan hasil dan pelaporan. Pada akhirnya, proses apa pun yang dikembangkan pada subset harus diterapkan ke seluruh dataset (dalam kasus saya, bagaimanapun).
  • Memotong data - Inilah yang ingin saya ketahui lebih banyak dari orang yang benar-benar menerapkan alur kerja ini. Bagaimana ini dilakukan? Dengan alat apa? Bisakah itu dilakukan dengan cara yang transparan bagi pengguna? (Yaitu, buat beberapa struktur data pada disk dan frame-work menangani chunking di bawah tenda).
Zelazny7
sumber
1
Versi Stata yang lebih baru pada mesin 64 bit tidak memiliki masalah dengan dataset ukuran ini (karena 5GB dengan mudah masuk dalam RAM saat ini) tetapi apakah Anda tertarik dengan alternatif komersial untuk SAS atau apakah Anda hanya melihat FOSS?
whuber
1
Ya, solusi FOSS adalah apa yang saya cari. Saya setuju bahwa dataset dapat masuk ke dalam 5 gigs RAM, tetapi juga harus menangani operasi dan struktur data tambahan yang dibuat selama analisis data eksplorasi. Pasangan ini dengan laptop komersial dilengkapi dengan 4GB RAM yang sedikit dan overhead yang dikonsumsi oleh OS dan Memori Kesalahan muncul cukup cepat.
Zelazny7
2
@ Zelazny7: Menambahkan 4Gigs ke laptop seharusnya cukup murah akhir-akhir ini. :)
curious_cat
3
Pilihan lain adalah menyimpan data dalam database (SQL atau yang lain). Seringkali, suatu analisis hanya akan membutuhkan subset data (variabel 1:10, tetapi tidak 1: 1000) yang sesuai dengan memori. Jika himpunan bagian masih lebih besar dari memori, analisis dapat dilakukan dalam potongan (memuat data dari database 1000 pengamatan pada suatu waktu, secara tepat menyusun hasil bersama-sama di akhir).
jthetzel
1
Pastikan untuk meninjau pertanyaan data besar pada SO, serta tampilan tugas komputasi berkinerja tinggi pada CRAN untuk diskusi terkait lebih lanjut, jika Anda belum melakukannya.
jthetzel

Jawaban:

3

jika Anda memaksimalkan 500.000 catatan x 2.000 variabel, saya akan menghabiskan sedikit lebih banyak uang pada RAM untuk laptop Anda dan selesai dengan itu. jika Anda memiliki 16GB, Anda mungkin dapat membaca kumpulan data yang Anda deskripsikan menjadi R secara langsung. dan pada saat itu, Anda akan dapat melakukan jauh lebih banyak - dan sangat cepat .. tetapi Anda mengatakan itu bukan pilihan, jadi:

lihat paket berbasis SQL untuk R. ini memungkinkan Anda untuk terhubung ke database eksternal dan mengakses tabel tersebut melalui SQL. karena SQL sangat universal (dan karena R adalah open-source), kode Anda tidak akan hilang jika Anda berganti pekerjaan atau kehilangan akses ke SAS. basis data eksternal termudah untuk dibuat RSQLitetetapi sejauh ini yang tercepat adalah MonetDB.R( tes kecepatan )

mungkin ada beberapa solusi yang baik untuk masalah Anda, dugaan saya adalah bahwa hampir semuanya melibatkan R;)

Anthony Damico
sumber
2

Mungkin itu bukan tentang aplikasi / masalah yang Anda tuju, dan karakteristiknya, tetapi lebih banyak tentang algoritma dan varian yang Anda gunakan. Lebih konkretnya, untuk menangani data besar, banyak varian berdasarkan keturunan gradien stokastik dari algoritma populer, seperti SVM, telah muncul yang mampu mengatasinya.

Scikit menawarkan dukungan untuk beberapa algoritma ini (SVM, kNN, kmeans, ...). Saya kira grafik yang bagus ini dapat membantu Anda mencari tahu dengan cepat, jika scikit masuk akal bagi Anda sama sekali.

Semoga itu bisa membantu

CATATAN: apa yang berikut adalah balasan atas komentar oleh zelazny7

Sekarang aku mengerti kamu. Yang Anda cari adalah panda . Lihatlah bagian pembicaraan. Ada presentasi yang membandingkan alur kerja Panda dan singkat panda. Panda memungkinkan Anda mengimpor data dalam berbagai format dan menangani file bgu melalui integrasi tabel HDF5 . Selain itu, Anda dapat antarmuka Scikit.

jpmuc
sumber
Terima kasih! Algoritma pasti harus bekerja on-lineatau pada potongan data yang dibaca ke dalam memori dan ditulis kembali ke disk. Scikit hebat dan itulah sebenarnya yang SAYA SUKA gunakan, tetapi alat / alur kerja / pendekatan apa yang ada untuk langkah-langkah yang sangat diperlukan untuk eksplorasi, penghijauan dan persiapan data sebelum menerapkan algo ini? Bahasa-bahasa ini dapat menangani langkah-langkah ini, tetapi saya benar-benar mencari contoh nyata dari seseorang yang harus mengatasi masalah ini di luar ingatan.
Zelazny7
Saya mengedit jawaban saya dengan apa yang Anda cari (atau jadi saya percaya!)
jpmuc
2

Anda sudah tampak nyaman dengan SAS, dan kumpulan data Anda cukup kecil untuk muat dalam RAM, tetapi mungkin Anda tidak bisa memasukkan cukup RAM ke dalam laptop Anda. Jika Anda tidak keberatan tetap menggunakan SAS, bagaimana jika Anda hanya terhubung ke SAS yang beroperasi dari jarak jauh di komputer dengan banyak RAM? Saya tidak tahu cara kerjanya, tetapi tautan ini mungkin bisa membantu Anda memulai.

Ada alasan bagus lainnya untuk menggunakan Panda atau R, tetapi saya tidak berpikir Anda perlu khawatir tentang batas memori. Jika Anda tidak dapat memasukkan cukup memori pada laptop Anda, jalankan instance Python atau R di tempat lain dan sambungkan dengan SSH, iPython Notebook atau RStudio.

Thomas Levine
sumber
1

Graphchi sangat bagus, dan dapat menangani kumpulan data besar. Agak merepotkan, tetapi bisa menangani data grafis dan non-grafis.

Zach
sumber
1

Saya baru-baru ini menemukan SFrames dan GraphLab Buat. Ini adalah pustaka untuk Python yang menawarkan jenis fungsionalitas yang tampaknya Anda cari di sistem Anda. " Jadi anggap itu sebagai fungsi manipulasi data dan API di Pandas tetapi tanpa memasukkan semua data dalam memori terlebih dahulu. SFrame gratis dan open source sejauh yang saya tahu. Di sisi lain GraphLab dibangun di atas fungsionalitas SFrame untuk menyediakan algoritma untuk melakukan analisis deskriptif dan prediktif (pembelajaran mesin) pada data yang disimpan dalam SFrames. GraphLab Create create bukan gratis / open source, tetapi memiliki lisensi demo gratis. Bagaimanapun, tergantung pada seberapa canggih algoritma Anda perlu, SFrame mungkin cukup untuk Anda.

Mateo
sumber
-1

Sudahkah Anda menganggap bahasa "Nyata", tidak ditafsirkan seperti Fortran?

Sepertinya saran sejauh ini sangat tergantung atau ditafsirkan vendor. Metode yang diinterpretasikan sangat buruk pada aplikasi yang intensif memori. MatLab mungkin tingkat bahasa yang jauh lebih tinggi daripada "C" tetapi optimasi penanganan memori di C dapat membuatnya menangani 100's kali lebih cepat set data yang jutaan kali lebih besar.

Baik "R" dan "Python" adalah bahasa yang indah, tingkat tinggi, kaya secara teknis dan sangat digunakan. Mereka juga ditafsirkan.

Anda dapat mempertimbangkan salah satu contoh R-on-Hadoop. (Rhipe, lain-lain) Ini memiliki keuntungan karena dapat menerjemahkan R (level tinggi, mudah diprogram) ke dalam instruksi MapReduce / Hadoop. Hadoop dapat membuat cluster multiprocessing orang miskin yang menarik.

http://www.datadr.org/ <- (tautan Rhipe)

Fortran telah dikembangkan selama beberapa dekade. Ini memiliki penanganan memori yang sangat efisien, dan kompilasi. Ini juga memiliki beberapa perpustakaan tingkat yang lebih tinggi sehingga dapat melakukan operasi yang sangat canggih secara teknis cukup sederhana. Saya mungkin melakukan CFD mainan di MatLab, tetapi untuk sesuatu yang realistis dan dapat dikodekan sendiri, saya akan menggunakan Fortran untuk pemrosesan "besar-besi" dan sesuatu seperti MatLab atau R untuk menyajikan / meringkas data. Tidak ada yang membuat perangkat lunak CFD komersial yang "mesin" -nya ditafsirkan alih-alih dikompilasi. Beberapa vendor memiliki kode CFD penghasil uang mereka dalam C atau Fortran. SAS awalnya ditulis dalam C ( tautan ).

Fortran dan Rhipe dapat diakses. MatLab membutuhkan biaya dan jika pekerjaan saya tidak membayarnya maka saya akan menggunakan R atau Python sekarang.

UPDATE:
Poin saya "dikompilasi". Python memiliki cython yang secara harfiah dapat menjalankan kode (fundamental) yang sama ~ 1000x lebih cepat. Itu berarti Anda dapat memiliki data yang ~ 1000x lebih besar dan memprosesnya dalam waktu yang hampir bersamaan. Membuat Cython bekerja dengan bersih bisa menjadi tantangan, tetapi alat seperti " Sage " membungkusnya dengan baik. Rcpp diduga memiliki kemiripan, tetapi saya pribadi tidak tahu bahwa itu juga dikembangkan.

Jika Anda memikirkannya, dasar-dasar hampir semua yang Anda jalankan dalam komputasi ilmiah, bahkan dalam bahasa yang ditafsirkan dikompilasi Fortran atau dikompilasi C. BLAS adalah BLAS; Anda tidak menciptakan kembali kode setiap kali Anda melakukan EDA . Bahasa yang Anda tafsirkan memanggil perpustakaan-perpustakaan itu, meskipun sangat tidak efisien, ketika dijalankan.

Sebagai tambahan, Anda mungkin melihat JMP . Ini memiliki antarmuka yang sangat mudah digunakan dan sangat baik untuk analisis data eksplorasi sangat visual ( EDA ).

EngrStudent
sumber
2
Bagaimana Anda menjelajahi data dengan bahasa yang dikompilasi seperti fortran? Daya tarik dari bahasa yang ditafsirkan, bagi saya, adalah REPL yang menyediakan introspeksi yang kaya dan memungkinkan saya untuk dengan cepat mempelajari apa yang saya hadapi serta bermain dengan fungsi perpustakaan baru yang mungkin tidak saya kenal.
Zelazny7
1
Rcpp dikembangkan dengan sangat baik (cukup periksa penggunaan terbalik pada CRAN), tetapi tidak benar-benar sebanding dengan cython. Jika Anda memiliki beberapa fungsi yang didefinisikan, ya Anda dapat mengambil input R, memprosesnya dalam Cpp dan mengembalikan data ke R. Tetapi Anda tidak akan mengkompilasi seluruh skrip R ke dalam Cpp dalam waktu dekat.
russellpierce