Clojure R karşı: veri analizi için avantaj ve dezavantajları


39

Yakın gelecekte R öğrenme planım vardı. Okuma başka bir soru ben Clojure öğrendim. Şimdi ne yapacağımı bilemiyorum.

Benim için R'nin büyük bir avantajı, amirlerimden biri de dahil olmak üzere Ekonomideki bazı insanların onu kullanmasıdır (diğeri: R'den uzak dur!). Clojure ' in bir avantajı Lisp tabanlı olmasıdır ve Emacs öğrenmeye başladığımdan ve kendi kişiselleştirmelerimi yazmaya istekli olduğum için yardımcı olacaktır (evet, Clojure ve Elisp’in Lisp’in farklı lehçeleri olduğunu biliyorum. Hem Lisp hem de benzer şekilde hayal ediyorum).

Hangisinin daha iyi olduğunu soramam, çünkü bunun çok kişisel olduğunu biliyorum, ancak birisi bana, özellikle pratik terimlerle Clojure x R'nin avantajlarını (veya avantajlarını) verebilir mi? Örneğin, hangisinin daha kolay olması, hangisinin daha esnek veya daha güçlü, hangisinin daha fazla kütüphaneye, daha fazla desteğe, daha fazla kullanıcıya vb. Sahip olması gerekir?

Amacım kullanım : Tahmimin büyük kısmı Matlab kullanılarak yapılmalı, bu yüzden istatistiksel analiz açısından çok derin bir şey aramıyorum, bunun yerine ilk veri manipülasyonu ve görselleştirme, özet istatistikler ve grafiklendirme için Excel'in yerini alacak bir yazılım arıyorum. fakat aynı zamanda bazı temel istatistiksel analizler veya tahminime yapılan ilk girişimler.


10
Eğer R'yi tadacak olursanız, MATLAB'dan (benim durumumda olduğu gibi) istifa etmeniz çok muhtemel.

IMO, bu topluluk wiki olmalıdır (dil "karşı" tipi sorular oldukça özneldir).
Shane,

Bu kesinlikle programlama dilleri ile ilgili bir sorudur ve Yığın Taşması ile ilgili olarak sorulmalıdır.
Sharpie

Sharpie ile aynı fikirdeyim. @Vivi: Soru başlığını "veri akışı için avantajlar ve dezavantajlar" veya bu satırdaki bir konu olarak değiştirmelisiniz;
Shane,

5
@Sharpie, @Shane IMO bu ölçüde araçlar hakkında bir soru, bu yüzden kabul edilebilir.

Yanıtlar:


27

Her iki dili de sevdiğimi söyleyerek başlayalım: her ikisinde de yanlış gidemezsiniz ve veri analizi yapmak için C ++ veya Java gibi bir şeyden kesinlikle daha iyidirler.

Temel veri analizi için R'yi öneririm (özellikle plyr ile). IMO, R, Clojure'dan daha kolay öğrenilebilse de, Clojure Lisp'e dayandığından ve bu durum SICP gibi çok sayıda müthiş Lisp kaynağına sahip olduğundan bu tamamen açık değildir . Clojure'da daha az anahtar kelime var, ancak kütüphanelerin kurulması ve üzerinde çalışılması çok daha zor. Ayrıca, R (veya S) 'nin büyük ölçüde Scheme'den geldiğini, bu nedenle bunu kullanırken Lisp bilgisinden faydalanabileceğinizi unutmayın.

Genel olarak:

R'nin temel avantajı, CRAN'daki topluluktur (2461'in üzerinde paket ve sayım). Yakın gelecekte bununla hiçbir şey kıyaslanamaz, matlab gibi ticari bir uygulama bile.

Clojure, JVM üzerinde çalışmanın büyük avantajına sahiptir, bu da herhangi bir Java tabanlı kütüphaneyi hemen kullanabileceği anlamına gelir.

Ben verdiğim eklersiniz R Clojure / Incanter ilgili bir konuşma sen ilgi bulmak bu yüzden, bir süre önce. Bunu oluşturma konusundaki tecrübeme göre, basit işlemler için Clojure genellikle R'den daha yavaştı.


11

Son 6-7 yıldır ağır bir R kullanıcısı oldum. Dil olarak, çeşitli tasarım sınırlamaları vardır. Yine de, ekonometride ve veri analizinde çalışmak için hala gönülden tavsiye ediyorum. Ekonometri, zaman serileri, tüketici seçim modellemesi vb. Ve tabii ki mükemmel görselleştirme, iyi cebir ve sayısal kütüphaneler vb. İle ilgili olabilecek çok sayıda pakete sahiptir. Elbette mükemmel veri görüntüleme, iyi cebir ve sayısal kütüphaneler vb. R "büyük veri" için tasarlanmamış olmasına rağmen (diyelim, SAS'tan farklı), bunun için yollar vardır. Paketlerin mevcudiyeti, fark yaratan şeydir, gerçekten.

Sadece Clojure'nin dil özelliklerini okudum ve çok güzel ve temiz. Paralelleştirme ve ölçeklendirme konularını doğal bir şekilde ele almaktadır. Bazı temel java veya OOP bilginiz varsa, çok sayıda yüksek kaliteli java kütüphanesinden yararlanabilirsiniz.

Clojure ile ilgili olan sorun şu ki, son zamanlarda yapılan tek kişilik (R.Hickey) operasyon, bu nedenle 1) çok riskli 2) çok olgunlaşmamış 3) nişin kabul edilmesiyle ilgili. Meraklıları için harika, erken evlat edinmek, yeni şeyler denemek isteyen CS / ML insanlar. Bir dili sona erdirmenin bir aracı olarak gören ve başkalarıyla paylaşılabilen çok sağlam koda ihtiyaç duyan bir kullanıcı için, oluşturulan diller daha güvenli bir seçim gibi görünmektedir. Sadece kim olduğunu bil.


+1 Harika cevap. Bir süre önce benzer bir tartışma yaşadım, çünkü Incanter (ve bazı Java kodlamaları yaptım) ilgimi çekti. İstatistiksel çalışmaları hızlıca yapmak için R'nin kullandığı, Clojure ise bir bilgisayar bilimcisi gibi düşünmek için kullanılan dildi. Açıkçası örtüşme var ama dediğiniz gibi "kim olduğunuzu bilmek".
Josh Hemann

SAS o kadar eski ki delikli kartlarda çalışıyordu, bu nedenle garip ve arkaik sözdizimini kullanıyordu. "Büyük veri tasarımı" nın bir kısmı, telefonunuzdan daha az belleğe sahip olan ve verileri girmek için delikli kartlar kullanan asıl olarak "ana bilgisayarlarda" çalışacak şekilde tasarlandığı için aptalca bir şans. Büyük Veri için "tasarlanmış" olduğunu söyleyemem, iyi idare etse bile.
Wayne,

2011'de ilk duyduğumda Clojure ile ilgili benzer endişelerim vardı. Şimdi, 2014 yılında yok. Clojure ve topluluğu oldukça olgun ve şaşırtıcı derecede popüler (sonuçta, OO olmayan, işlevsel, Lisp). Ancak, Incanter'in hiç paket sayısında R'yi yakalayacağına inanmıyorum (genellikle bunu düşünürseniz, zaten yapılmıştır). JRI Java-R arayüzünü temel alan bir Clojure kütüphanesi Rincanter var, ancak bunun ne kadar kolay olduğundan emin değilim.
Mars

5

Güncelleme (Ağustos 2014): Aşağıdaki boşluklu yorumlarda olduğu gibi, R sürümü 3.0.0'dan itibaren sınırlar daha yüksek ve R'nin daha büyük veri kümelerini işleyebildiği anlamına geliyor.

İşte bir veri noktası: R, büyük veri kümeleriyle çalışmayı planlıyorsanız bilmenizde yararlı olan "büyük veri tavanı" na sahiptir .

Aynı sınırlamaların Clojure / Incanter için de geçerli olup olmadığı, R'den daha iyi performans gösterip göstermediğinden veya gerçekten daha kötü olup olmadığından emin değilim. JVM'nin, özellikle Clojure'un tembel özelliklerinin gücünden faydalanmayı başarırsanız büyük veri setleriyle başa çıkabileceğini düşünüyorum.


1
R ayrıca tembel olarak değerlendirilir.

3
@mbq: Yorumunuz yanlış yönlendiriliyor. R, fonksiyon tanımındaki değişkenleri temsili olarak değerlendirir, ancak “tembellik” normal davranış değildir. Delay_Assign () işlevi, tercümana bir değişkenin ataması ile tembel olduğunu söylemek için vardır, ancak tercüman, herhangi bir veri yapısının, değerlendirilmesi gerekip gerekmediğine işaret ettiğinde, bu değişkeni işaret ettiğinde değerlendirme yapacaktır. Ayrıca, ticari R şirketi Revolution Analytics, R'yi "büyük veri" analizinde kullanmak için pazarlamalarını desteklemek için bir yineleyici nesnesi oluşturmak zorunda kaldı.
Josh Hemann,

Bence bu cevap güncellenmeli. R 3.0.0'dan beri, R artık 2 ^ 31-1 element sınırına sahip değildir . Sınır, bir dizinin her boyutunda 2 ^ 63-1 (inanıyorum) ve 2 ^ 31-1 değildir . Bu, bellekteki büyük nesneler için uygun olmasını sağlar.
gappy
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.