Çekirdek dışı veri analizi seçenekleri


18

SAS'ı 5 yıldan beri profesyonel olarak kullanıyorum. Dizüstü bilgisayarıma yükledim ve sıklıkla 1000-2.000 değişken ve yüz binlerce gözlem içeren veri kümelerini analiz etmek zorundayım.

Benzer büyüklükteki veri kümeleri üzerinde analiz yapmama izin veren SAS'a alternatifler arıyordum. Diğer insanların bu gibi durumlar için ne kullandığını merak ediyorum. Bu kesinlikle bugün kullanılan şekilde "Büyük Veri" değildir. Veri kümelerim bellekte tutacak kadar küçük de değil. Sabit diskte depolanan verilere algoritmalar uygulayabilecek bir çözüme ihtiyacım var. Bunlar boşuna araştırdım şeyler:

  1. R - BigMemory, bellekte depolanan matrisler oluşturabilir, ancak elemanların aynı modda olması gerekir. Neredeyse karakter ve sayısal arasında 50/50 bölünmüş verilerle çalışıyorum. FF paketi ihtiyacım olana yaklaşıyor, ancak hangi prosedürlerin onunla uyumlu olduğunu tam olarak anlamıyorum. Bence destek biraz sınırlı.
  2. Pandalar - R'ye Pythonic bir alternatif konusunda çok heyecanlandım. Ancak, tüm verileri hafızada tutmak zorunda.
  3. Devrim R - Bu biraz umut vaat ediyor. Ev bilgisayarımda (Kaggle'a kaydolursanız ücretsiz) bir kopyam var ve henüz SAS'a uygun bir alternatif olarak test etmem gerekiyor. SAS alternatifi olarak Revolution R hakkındaki yorumlar çok takdir edilmektedir.

Teşekkürler

GÜNCELLEME 1

İnsanların başarılı bir şekilde kullandıkları gerçek ve pratik çözümler aradığımı eklemek için düzenleme yapıyorum. SAS, bellek kısıtlamaları hakkında biraz endişelenmeden büyük dosyaları dolaşmama izin veriyor. SAS uygulansa da, bellek yönetiminin kullanıcıya nasıl şeffaf hale getirileceğini anladılar. Ancak, işim için SAS kullandığım ağır bir kalple (zorundayım) ve verilerin bir yerde nerede olduğu hakkında çok fazla düşünmek zorunda kalmadan "büyük" veriler üzerinde çalışmamı sağlayan bir FOSS alternatifini SEVİYORUM belirli bir zaman (bellekte veya diskte).

Karşılaştığım en yakın şey, R'nin FF paketi ve Python için Blaze adlı ufukta bir şey . Ve yine de, bu sorunlar yıllardır var, bu yüzden analistler bu arada ne yapıyorlar? Bellek sınırlarıyla aynı sorunları nasıl ele alıyorlar? Sunulan çözümlerin çoğunluğu şöyledir:

  • Daha fazla RAM alın - Bu iyi bir çözüm değil, imo. RAM'i aşabilen ancak yine de bir sabit sürücüye sığabilecek bir veri kümesi bulmak kolaydır. Ayrıca, iş akışı, keşifsel veri analizi sırasında oluşturulan tüm yapıları barındırmalıdır.
  • Verileri alt kümele - Bu keşif için iyidir, ancak sonuçları kesinleştirmek ve raporlamak için uygun değildir. Sonunda, bir alt kümede geliştirilen süreçler, tüm veri kümesine uygulanmalıdır (benim durumumda, her neyse).
  • Verileri toplayın - Bu iş akışını gerçekte uygulayan insanlardan daha fazla şey öğrenmek istiyorum. Nasıl oldu? Hangi araçlarla? Kullanıcı için şeffaf bir şekilde yapılabilir mi? (yani, disk üzerinde bir veri yapısı oluşturun ve çerçeve çalışması, kaputun altındaki yığınlarla ilgilenir).

1
64 bitlik makinelerdeki yeni Stata sürümlerinin bu boyuttaki veri kümeleriyle bir sorunu yoktur (çünkü 5GB bu günlerde RAM'e kolayca sığar), ancak SAS'ın ticari alternatiflerine ilgi duyuyor musunuz veya sadece FOSS'a mı bakıyorsunuz?
whuber

1
Evet, aradığım FOSS çözümleri. Bir veri kümesinin 5 gig RAM'e sığabileceğini kabul ediyorum, ancak aynı zamanda keşifsel veri analizi sırasında oluşturulan operasyonları ve ek veri yapılarını da ele alması gerekiyor. Bunu 4GB RAM ile donatılmış ticari dizüstü bilgisayarlarla birleştirin ve işletim sistemi tarafından tüketilen ek yük ve Bellek Hataları oldukça hızlı bir şekilde ortaya çıkar.
Ocak

2
@ Zelazny7: Bir dizüstü bilgisayara başka bir 4Gig eklemek bu günlerde oldukça ucuz olmalı. :)
curious_cat

3
Başka bir seçenek de verileri bir veritabanında (SQL veya başka bir yerde) saklamaktır. Çoğu zaman, bir analiz yalnızca belleğe sığacak bir veri alt kümesi gerektirir (1:10 değişkenleri, ancak 1: 1000 değil). Alt küme hala bellekten daha büyükse, analiz parçalar halinde yapılabilir (bir seferde veri tabanındaki 1000 gözlemi yükler, sonuçların sonunda uygun şekilde bir araya getirilmesi).
jthetzel

1
Henüz yapmadıysanız, daha fazla ilgili tartışmalar için SO'daki büyük veri sorularını ve CRAN'daki yüksek performanslı bilgi işlem görev görünümünü gözden geçirdiğinizden emin olun .
jthetzel

Yanıtlar:


3

500.000 kayıt x 2.000 değişkenle maksimumda olursanız, dizüstü bilgisayarınız için RAM'e biraz daha fazla para harcayacağım ve bununla bitireceğim. 16 GB'ınız varsa, büyük olasılıkla doğrudan R'ye açıkladığınız veri kümesini okuyabilirsiniz. ve bu noktada, çok daha fazlasını ve çok hızlı bir şekilde yapabileceksiniz ... ama bunun bir seçenek olmadığını söylüyorsunuz, yani:

R için SQL tabanlı paketlere bakın. bunlar harici veritabanlarına bağlanmanıza ve bu tablolara SQL aracılığıyla erişmenize izin verir. SQL oldukça evrensel olduğundan (ve R açık kaynak olduğundan), işleri değiştirirseniz veya SAS'a erişiminizi kaybederseniz kodunuz kaybolmaz. ayarlanması en kolay harici veritabanı RSQLiteancak en hızlısı MonetDB.R( hız testleri )

muhtemelen belirttiğiniz sorun için birkaç iyi çözüm vardır, tahminim hemen hepsi R içerir;)


2

Belki de amaçladığınız uygulamalar / problemler ve özellikleri ile ilgili değil, kullandığınız algoritmalar ve varyantlar hakkında daha fazla. Daha somut olarak, büyük verileri işlemek için, SVM gibi popüler algoritmaların stokastik degrade inişine dayanan birçok varyant bunu ele alabilir.

Scikit bu algoritmaların bazıları için destek sunar (SVM, kNN, kmeans, ...). Sanırım scikit size hiç mantıklı gelmiyorsa , bu güzel grafik hızlı bir şekilde anlamanıza yardımcı olabilir .

umarım yardımcı olur

NOT: aşağıdaki soru zelazny7 tarafından yapılan yorumda bir cevaptır

Şimdi seni anladım. Aradığın şey pandalar . Görüşmeler bölümüne bir göz atın. Panda'nın iş akışını ve panda'yı kısaca karşılaştıran bir sunum var. Panda, HDF5 tablo entegrasyonu ile verileri farklı formatlarda içe aktarmanıza ve bgu dosyalarını işlemenize olanak tanır . Ayrıca Scikit ile arayüz kurabilirsiniz.


Teşekkürler! Algoritmalar kesinlikle on-linebelleğe okunan ve diske yazılan verilerin parçaları üzerinde çalışmak zorundadır . Scikit harika ve ben gerçekten kullanmak isterdim, ama bu algos uygulamadan önce çok gerekli keşif, munging ve veri hazırlama adımları için hangi araçlar / iş akışları / yaklaşımlar var? Bu diller bu adımları uygulayabilir, ancak gerçekten bu sorunlarla başa çıkmak zorunda olan birinden gerçek bir örnek arıyorum.
Zelazny7

Aradığımı cevabımı düzenledim (ya da inanıyorum!)
jpmuc

2

SAS ile zaten rahat görünüyorsunuz ve veri kümeleriniz RAM'e sığacak kadar küçük, ancak belki de dizüstü bilgisayarınıza yeterli RAM sığamazsınız. SAS ile çalışmayı önemsemiyorsanız, çok fazla RAM bulunan bir bilgisayarda uzaktan çalışan SAS'a bağlanmaya ne dersiniz? Bunun nasıl çalıştığı hakkında hiçbir fikrim yok, ancak bu bağlantılar sizi başlatabilir.

Pandalar veya R'yi kullanmanın başka harika nedenleri de var, ancak bellek sınırları hakkında endişelenmeniz gerektiğini düşünmüyorum. Dizüstü bilgisayarınıza yeterli bellek sığdıramıyorsanız, Python veya R örneğini başka bir yerde çalıştırın ve SSH, iPython Notebook veya RStudio ile bağlanın.


1

Graphchi mükemmeldir ve büyük veri kümelerini işleyebilir. Çalışması biraz acı verici, ancak grafiksel ve grafiksel olmayan verileri işleyebilir.


1

Geçenlerde SFrames ve GraphLab Create ile karşılaştım. Bunlar Python için aradığınız tipte işlevsellik sunan kütüphanelerdir: Pypi sitesinden: "SFrame, RAM miktarından daha büyük veri kümeleriyle çalışmanıza izin veren ölçeklenebilir, çekirdek dışı bir veri çerçevesidir. sisteminizde. " Bu yüzden onu Pandalar'daki veri işleme işlevselliği ve API olarak düşünün, ancak önce tüm verileri belleğe koymadan. SFrame bildiğim kadarıyla ücretsiz ve açık kaynak. Öte yandan GraphLab, SFrame'lerde depolanan veriler üzerinde açıklayıcı ve tahmine dayalı (makine öğrenimi) analizleri yapmak için algoritmalar sağlamak üzere SFrame işlevini temel alır. GraphLab Create create ücretsiz / açık kaynak değildir, ancak ücretsiz demo lisansına sahiptir. Her durumda, algoritmalarınızın ne kadar karmaşık olması gerektiğine bağlı olarak, SFrame sizin için yeterli olabilir.


-1

Fortran gibi "Gerçek", yorumlanmamış bir dil mi düşündünüz?

Şimdiye kadar yapılan öneriler ya satıcıya bağımlı ya da yorumlanmış gibi görünüyor. Yorumlanan yöntemler, bellek yoğun uygulamalarda kötü bir şekilde kötüdür. MatLab, bir dilin "C" seviyesinden çok daha yüksek bir seviyede olabilir, ancak C'deki bellek işleme optimizasyonları, milyonlarca kat daha büyük olan veri kümelerinin 100'lü kat daha hızlı veri setlerini işleyebilmesini sağlayabilir.

Hem "R" hem de "Python" harika, üst düzey, teknik açıdan zengin ve çok kullanılan dillerdir. Onlar da yorumlanır.

H-on-Hadoop örneklerinden birini düşünebilirsiniz. (Rhipe, diğerleri) Bu, R'yi (yüksek seviye, programlaması kolay) MapReduce / Hadoop talimatlarına çevirebilme avantajına sahiptir. Hadoop ilginç bir kötü adamın çoklu işlem kümesini oluşturabilir.

http://www.datadr.org/ <- (Rhipe bağlantısı)

Fortran onlarca yıldır geliştirilmektedir. Çok verimli bellek kullanımı ve derleme özelliğine sahiptir. Ayrıca bazı üst düzey kütüphanelere sahiptir, böylece teknik olarak çok karmaşık işlemleri oldukça basit bir şekilde yapabilir. MatLab'da bir oyuncak CFD yapabilirim, ancak gerçekçi ve kendinden kodlanmış bir şey için Fortran'ı "büyük demir" işleme için ve MatLab veya R gibi bir şeyi veri sunmak / özetlemek için kullanırdım. Hiç kimse "motoru" derlenmiş yerine yorumlanmış ticari CFD yazılımı yapmaz. Bazı satıcıların para yatırma CFD'leri C veya Fortran'da kodlanmıştır. SAS aslen C ( link ) dilinde yazılmıştır .

Fortran ve Rhipe'ye erişilebilir. MatLab paraya mal olur ve işim bunun için ödeme yapmazsa, şu anda R veya Python kullanıyordum.

GÜNCELLEME: Demek istediğim
"derlendi". Python, tam olarak aynı (temel) kodu ~ 1000x daha hızlı çalıştırabilen cython'a sahiptir. Bu, ~ 1000x daha büyük verilere sahip olabileceğiniz ve neredeyse aynı zamanda işleyebileceğiniz anlamına gelir. Cython'un temiz çalışmasını sağlamak zor olabilir, ancak " Sage " gibi araçlar iyi bir şekilde sarar. Rcpp'in benzer olduğu iddia ediliyor, ancak kişisel olarak bunun iyi geliştiğini bilmiyorum.

Bunu düşünürseniz, yorumlanmış dillerde bile bilimsel hesaplamada çalıştırdığınız hemen hemen her şeyin temeli Fortran veya C derlenir. BLAS BLAS; yeniden icat edilmez kodunu bunu her zaman EDA . Yorumladığınız dil, çalıştığında çok verimsiz de olsa bu kütüphaneleri çağırıyor.

Bir yana, JMP'ye bakabilirsiniz . Kullanımı çok kolay bir arayüze sahiptir ve çok görsel keşifsel veri analizi ( EDA ) için mükemmeldir.


2
Fortran gibi derlenmiş bir dille verileri nasıl keşfedersiniz? Benim için, yorumlanmış dillerin cazibesi, zengin içgözlem sağlayan ve neyle uğraştığımı hızlı bir şekilde öğrenmeme ve aşina olmadığım yeni kütüphane işlevleriyle oynamama izin veren REPL'dir.
Zelazny7

1
Rcpp çok iyi gelişmiştir (sadece CRAN üzerinde ters kullanıma bakın), ancak cython ile gerçekten karşılaştırılamaz. Tanımlı bir fonksiyonunuz varsa, evet, R girişini alabilir, Cpp'de işleyebilir ve verileri R'ye geri döndürebilirsiniz.
russellpierce
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.