Julia'nın istatistik topluluğuna bağlı kalmayı umuyor mu?


161

Geçenlerde , John Myles White'dan bu blog gönderisine bağlantı yapan ve Julia adlı yeni bir dil hakkında R-Blogger’lardan bir yazı okudum . Julia, hızlı çalışma sürelerini kötüleştiren tam zamanında bir derleyiciden yararlanır ve C / C ++ ile aynı hızda (aynı sırada değil , aynı sırada ) verir. Dahası, R'nin ifadeleri ve vektör işlemlerini uygulamak yerine, geleneksel dillerle programlamaya başlayanların bildiği ortodoks döngü mekanizmalarını kullanır.

R, hiçbir şekilde, Julia'nın müthiş zamanlamaları ile bile uzaklaşmıyor. Endüstride geniş bir desteğe ve hemen hemen her şeyi yapmak için çok sayıda harika paketlere sahiptir.

İlgi alanlarım, vektörleştirmenin çoğu zaman mümkün olmadığı doğada Bayesian'dur. Kesinlikle seri işlemler döngüler kullanılarak yapılmalı ve her yinelemede ağır hesaplamalar yapılmalıdır. Bu seri döngü görevlerinde R çok yavaş olabilir ve C / ++ yazması için parkta bir yürüyüş değildir. Julia, C / ++ dilinde yazmaya harika bir alternatif gibi gözüküyor, ancak başlangıç ​​aşamasında ve R hakkında sevdiğim işlevsellikten çok yoksun, ancak yeterli destek toplarsa, Julia'yı hesaplamalı istatistik tezgahı olarak öğrenmenin bir anlamı olacak. istatistik topluluklarından ve insanlar bunun için faydalı paketler yazmaya başlar.

Sorularım şöyle:

  1. R'yi fiili bir istatistik dili yapan cazibeye sahip olmak için Julia'nın hangi özelliklere sahip olması gerekir?

  2. Julia'yı C / ++ gibi düşük seviyeli bir dil öğrenmek yerine, hesaplama ağırlıklı işleri yapmak için öğrenmenin avantajları ve dezavantajları nelerdir?


7
Julia, Incanter ( incanter.org ) ve benzeri projelerden daha iyi nasıl olabilir ?
Wayne,

24
Prosedürel yapıları (örn. Döngü): dev bir geriye adım gibi geliyor. Tek ve küçük CPU platformlarından kitlesel paralel platformlara geçişin zirvesindeyiz. Bu evrim önümüzdeki on yıl boyunca gerçekleştiği için, kolay ve otomatik olarak paralelleştirilebilen fonksiyonel kodlama tarzı, prosedür koduna göre çok büyük avantajlar elde edecektir. Diğer pek çok husus elbette birinin istatistiksel platform seçimine müdahale eder, fakat bu uzun vadeli bir strateji olarak göz önünde bulundurmaya değer.
whuber

12
Christopher, iyi bir yaklaşım, soruları sebepleri ve kanıtları talep edecek şekilde tasarlanmasıdır. Örneğin, "Julia'nın gerekli çekiciliği var mıdır?" Yerine " Julia'nın hangi unsurları hakkında çekiş ve neden kazanma şansı verebileceği " gibi bir şey deneyin ; "Öğrenmeye değer mi?" yerine "Julia neden şimdi öğrenmeye değer olabilir? Potansiyel avantajları nelerdir?" Sen başka ne kullanımların türlü belirterek bu soruyu rafine olabilir Julia kerelik sorunları, biyoistatistik, veri madenciliği, vb yazılım geliştirme gibi, ilgilenen bu tür çekebilir çözme
whuber

1
@Whuber: Önerileri takdir ediyorum ve bunları yerine getirdim. Teşekkür ederim!
Christopher Aden,

2
@ trolle3000 Kimsenin paralelleşmenin bu kadar otomatik olduğunu iddia ettiğini sanmıyorum. Bununla birlikte, eğer bir programın işlevsel bir versiyonunu yazdıysanız, paralelleştirmek için gereken çabayı çoktan aldınız; bu nedenle, Mathematica gibi uygulamalar paralelleşmeyi genellikle oldukça etkili bir şekilde otomatikleştirebiliyor. Bunun yerine bir algoritmayı usule uygun bir şekilde kodladıysanız, paralel hale getirmek genellikle çok daha zor olacaktır.
whuber

Yanıtlar:


96

Anahtarın Julia için kütüphanelerin geliştirilmeye başlayıp başlamayacağını düşünüyorum. Julia'nın, R'nin kötü olduğu görevlerde sudan dışarı fırladığını gösteren oyuncak örneklerini (karmaşık oyuncaklar olsa bile) görmek güzel ve iyi.

Ancak kötü yapılmış döngüler ve el kodlu algoritmalar, neden R kullandığını bildiğim insanların çoğunun R kullandığını bilmiyor. Çünkü güneş altında neredeyse her türlü istatistiksel işlem için, birileri R kodu yazmış. R bir programlama dili hem de ve mevcut Julia sadece eski - bir istatistik paketi.

Oraya ulaşmanın mümkün olduğunu düşünüyorum, ancak hala kullanılabilir istatistik araçlarının kullanılmasıyla mücadele eden çok daha yerleşik diller (Python) var.


Aslında R yöntemlerinin kötü yazıldığını bilmek için gösterge koduna (veya kıyaslama kriterlerine) baktınız mı? Çeşitli dillerin nasıl kullanıldığını görmek için kendimi bulmaya çalışıyorum ...
Josh Hemann

10
@JoshHemann R tahtası boyunca "yavaş-ish" olduğunu bilmek için yeterince baktım. Her zaman mutlaka kaybetmek zorunda kalmaz ve zaman zaman Python'u suyun dışına üfler, ancak tüm bu durumlarda "kazanan" kurdele Python veya R programcısının aslında C’deki eşyalarının çoğunu yazdığı yere gider. .
Fomite

5
Benchmark kodu korkunç . R örnekleri için 2000x hız kazancı mümkündür. Bkz stackoverflow.com/questions/9968578/... , özellikle bir yorum.
Ari B. Friedman,

12
Haklısın, @gsk. Örneğin, pisum( github.com/JuliaLang/julia/blob/master/test/perf/perf.R adresinde ) 7.76 saniye sürerken, idiomatik R ( replicate(500, sum((1 / (10000:1))^2))[500]) kullanılarak basit bir yeniden yazma işlemi elli kat fazla hız artışından 0.137 saniye sürer.
whuber

2
R'in ortaya çıkmasının bir nedeni, S-PLUS ile uyumluluğuydı. İnsanlar çok fazla eski kod kullanabildiler. Eski ağır kullanılan kod daha az hataya sahiptir. Eski kodla uyumlu olmayan Julia gibi yeni şeylerle, bir "katil uygulama" durumuna ihtiyacınız var: yeni bir platforma geçmenin tüm sıkıntılarını haklı çıkaran bir şey. Bu, Google’ın yeni dili Go - nice deneme’ine benzer, ancak neden öğreneyim?
Aksakal

56

Diğer yorumların çoğuna katılıyorum. "Umut"? Elbette. Bence Julia, R ve Python / NumPy / Panda'ların ve diğer sistemlerin yıllar boyunca doğru ve yanlış yaptıklarından çok şey öğrendi. Benden daha zeki olsaydım ve gelecekteki istatistiksel gelişim ortamı için substrat olacak yeni bir programlama dili yazmak isteseydim, Julia'ya çok benziyordu.

Bu, bu sorunun daha sonradan cevaplandırılmasından 5 yıl sonra olacağını söyledi. Şu an itibariyle, Julia, günlük kullanıcılar için R ile rekabet edebilecek istatistiksel bir programlama sisteminin aşağıdaki kritik yönlerinden yoksundur:

(liste zamanla güncellenir ...)

  • isteğe bağlı sıralı faktör tipleri
  • çoğu istatistiksel testler ve istatistiksel modeller
  • okuryazar programlama / yeniden üretilebilir analiz desteği
  • R sınıfı veya hatta Matlab sınıfı komplo

R ile rekabet edebilmek için, Julia ve eklenti istatistik paketlerinin yeterince temiz olması ve zeki olmayan programcıların, sosyal bilimlerdeki lisanslı öğrencilerin makul bir şekilde kullanabileceği kadar eksiksiz olması gerekir. Oraya gidecek çok iş var. Belki gerçekleşir, belki karışır, belki başka bir şey (R 3.0?) Onu üstlenir.

Güncelleme:

Julia artık veri / NA'ları, modülleri / ad alanlarını, formulatürlerini ve model.matrixaltyapısını, komploları (sorta), veritabanı desteğini (ancak henüz DataFrames'e değil) ve argümanları anahtar kelimelerle ileterek DataFrame'leri destekliyor. Ayrıca şimdi bir IDE (Julia Studio), Windows desteği, bazı istatistiksel testler ve bazı tarih / saat desteği var.


literate programming/reproduce-able analysis support-> IJulia'yı görün .
Piotr Migdal,

1
İPython / Jupyter notebook ekosistemi için iJulia çekirdeğini ekleyin.
thecity2

2
Julia Studio aşamalı hale geliyor ve Juno şimdi IDE
Antony

3
Bu cevabın ilk yayınlanmasından 2.5 yıl sonra, "olması gerekenler" listesindeki maddelerin üçte ikisi uygulanmaktadır. Bence Julia'nın gerçek bir vaadi olduğunu bulabileceğin en iyi kanıt bu.
gönderen

5 yıl geçmiş olmalı. Hala var mıyız, @Harlan?
StasK

35

Benim için bir veri analizi dili için çok önemli bir şey, makul varsayılanlar ve etkileşimli odaklı tasarımlı sorgu / ilişkisel cebir fonksiyonelliğine sahip olmaktır ve ideal olarak bu dilin yerleşik olması gerekir. IMO, kullandığım hiçbir FOSS dili R'yi bile etkili yapmıyor.

data.frame etkileşimli olarak çalışmak için oldukça beceriksizdir - örneğin tüm veri yapısını başlatma üzerine basar, $ sözdiziminin programlı olarak çalışması zordur, sorgulama gereksiz kendi kendine referans gerektirir (yani DF[DF$x < 10]), birleşimler ve toplama zordur . Data.table bu sıkıntıların çoğunu çözer, ancak temel uygulamanın bir parçası olmadığı için, çoğu R kodu olanaklarından yararlanmaz.

Pitondaki pandalar aynı hatalardan muzdariptir.

Bu tutuşlar nitpicky gibi görünebilir, ancak bu hatalar birikir ve sonunda toplamda çok fazla zaman harcadıkları için önemlidir.

Julia'nın bir veri analizi ortamı olarak başarılı olacağını düşünüyorsanız, kullanıcı dostu bir tablo veri türünde SQL türü operatörleri (SQL sözdizimi olmadan) uygulamak için çaba harcanması gerektiğine inanıyorum.


1
+ 1 - İlginç bir nokta, düşünceli bir şekilde açıkladı. Topluluğumuza Hoşgeldiniz!
whuber

4
Nitelikli olmak gerekirse, büyük Pandas DataFrame'leri aslında R'de olduğu gibi çağrıldıklarında tüm içeriğini yazdırmazlar. Bunlar, null / null olmayan değerler ile birlikte sütun başlıklarını göstermeye geçer. Ayrıca, sözdiziminin ideal olmadığı konusunda hemfikir olmama rağmen, kapsam belirleme sorunları anlama tarzı filtrelemeye ilişkin öz referansı ortadan kaldırmayı zorlaştırmaktadır. Daha kötüsüdür, ancak DataFrame'in beklediğiniz çalışma zamanında fazladan sütunları varsa, ad alanı çarpışmalarına karşı da dirençlidir.
saat

29

Dirk ve EpiGrad'ın söylediklerinin altını çizebilirim; Yine de, R'yi niş - veri yönelimli tip sisteminde eşsiz kılan bir şey daha var.

R'ler özellikle veri işleme için tasarlanmıştır, bu yüzden vektör merkezlidir ve data.frames, faktörler, NA'lar ve öznitelikler gibi özelliklere sahiptir.
Julia'nın türleri ise sayısal-performans odaklı, dolayısıyla skalerlere, iyi tanımlanmış depolama modlarına, sendikalara ve yapılara sahibiz.

Bu iyi huylu görünebilir, ancak MATLAB ile istatistik yapmaya çalışan herkes gerçekten acı çektiğini bilir.

Bu yüzden, en azından benim için Julia, birkaç satırlık bir C yığınla düzeltemeyeceğim bir şey teklif edemez ve çok faydalı bir etkileyiciliği öldürür.


4
(+1) İyi nokta. Bazı düşünceler: data.framePython'daki benzeri tesislerin olmaması beni çok rahatsız etti, ama şimdi Pandalar bu sorunu çözmüş gibi görünüyor. Formül, istatistik modellerinin planlanan uzantılarından bazılarıdır (peki, bazen R'nin formül arayüzünden kaçınmasının daha iyi olduğunu biliyoruz). Julia için bir data.frame teklifi var (Python'a kıyasla oldukça hızlı!), (...)
chl

5
Ben C / C ++ ... Ben R. ile C / C ++ kullanabilirsiniz aynı büyüklük sırasına hız gerekiyorsa @mbq da C ile ilgili bir noktası vardır düşünüyorum
fomite

4
@EpiGrad, evet, C / C ++ yazabilir ve R ile temiz bir arayüz oluşturabilirsiniz. Ama bu bir zayıflık, dilin gücü değil. Julia ile, son kullanıcıların hız kazanmak için asla C yazmasına gerek kalmayacak.
Harlan

2
@Harlan Hem Julia hem de C'yi zaten tanıyorsanız, bu bir zayıflıktır. C'de harcanan zamanı yeni bir dil öğrenmek ve her şeyi sıfırdan yeniden uygulamak için harcadım .
Fomite

9
@Harlan Künt olmak gerekirse, bu insanlar eşyalarını Julia'da tekrar yazmayacaklar. Bir istatistik paketi olarak R, bir programlama dili değil kullanım durumudur .
Fomite

26

Julia'nın insanlık için büyük bir hizmet olacak olan Matlab'ı değiştirdiğini görebiliyorum.

R'yi değiştirmek için, Neil G, Harlan ve diğerlerinin bahsettiği şeyleri, ayrıca ele alınmadığına inandığım büyük bir etkene göz atmanız gerekir: uygulamanın ve kitaplıkların kolay kurulumu.

Şu anda, Mac, Windows veya Linux için bir R ikili dosyasını indirebilirsiniz. Çok çeşitli istatistiksel yöntemlerle kutudan çıktı. Bir paket indirmek istiyorsanız, basit bir komut veya fare tıklaması. Sadece işe yarıyor.

Julia'yı indirmeye gittim ve basit değil. İkili dosyayı indiriyor olsanız bile, uygun kütüphaneleri alabilmek için ihtişamınız yüklü olmalıdır. Kaynak indirdim ve denedim makeve gerçekten yararlı bir mesaj ile başarısız oldu. Bilgisayar bilimi alanında lisans ve yüksek lisans derecem var, bu yüzden çok eğilmiş olsaydım, etrafımda dolaşıp işe koyulabilirdim. (Ben değilim.) Joe Statistician bunu yapacak mı?

R sadece geniş bir paket seçkisine sahip değildir, aynı zamanda uygulamanın ikililerini ve neredeyse tüm paketlerini otomatik olarak yapan oldukça karmaşık bir sisteme sahiptir. Bazı nedenlerden dolayı, bir paketi kaynaktan derlemeniz gerekiyorsa, bu gerçekten zor değil (sisteminizde kurulu uygun bir derleyiciniz, vb. Olduğu sürece). Bu altyapıyı görmezden gelemez, github yoluyla her şeyi yapabilir ve geniş bir kabul görmeyi bekleyemezsiniz.

EDIT: Julia ile dalga geçmeyi istedim - heyecan verici görünüyor. İki problem:

1) Ek paketler yüklemeyi denediğimde (Julia'da ne dediklerini unutma), belirsiz hatalarla başarısız oldu. Açıkçası Mac'imin bekledikleri gibi bir aracı yok. Sadece başarısızlık etmekle kalmaz, aynı zamanda çevrede yatan şeyleri manuel olarak silmem gerekir, aksi halde diğer yüklemeler başarısız olur.

2) Bir kod satırında belirli boşlukları zorlarlar. Önümde detaylar yok, ama makrolarla ilgili olmalı ve argümanları açan makro ve parantez arasında boşluk bırakmamalı. Bu tür bir kısıtlama gerçekten beni çok rahatsız ediyor, çünkü kod formatımı uzun yıllar ve diller boyunca geliştirdim ve aslında bir işlev / makro adı ile açılış parantezi arasına bir boşluk koydum. Bazı kod biçimlendirme kısıtlamalarını anlıyorum, ancak bir satırdaki boşluk?


5
Julia hala bebeklik döneminde çok fazla. Ben tarihçi değilim, ama ilk birkaç ayda R'nin temiz ikili dosyalarının çıkmadığına bahse girerim. Dağıtım sistemi hakkındaki düşünceniz şu ana kadar çok fazla bahsetmediğim bir şey. Sonra yine, CRAN'ın R ile aynı anda filizlenmemesine de bahse girerim. Bir "CJAN" kesinlikle büyük ölçekli evlat edinme için iyi olurdu.
Christopher Aden,

7
Daha sonra, @Christopher, R'nin gerçekten bağımsız bir şekilde geliştirilmiş bir paketin (S, sonra S-Plus), (hafif) ticari bir başarısı olan ve on yıl önce geliştirilme aşamasında olan bir klonu olduğunu bilmek isteyebilirsiniz. Bu, Julia'nın (ve bu tür diğer çabaların çoğunun) asla sahip olamayacağı konusunda önemli bir başlangıç ​​yaptı .
whuber

3
@ChristopherAden: Julia'nın henüz genç olduğuna katılıyorum. Ancak, “bir“ CJAN ”ın büyük ölçekli evlat edinme için kesinlikle iyi olacağı” nı kesinlikle istemiyorum: mutlak bir zorunluluk. CRAN benzeri bir altyapıya sahip olmadığını düşünebildiğim tek araç, JAGS gibi oldukça uzmanlaşmış. Fakat Julia, R gibi, genel amaçtır.
Wayne

10
Açık Kaynak Dil'in yerini alacağı gün MATLAB mühendislik dünyasına en iyi gün olacak.
Royi

9
“Julia'nın, insanlık için çok büyük bir hizmet olacak Matlab'ın yerini aldığını görebiliyorum.” Daha fazla katılamadım.
davidav

24

Julia dili oldukça yeni; spot ışıktaki zaman haftalar içinde ölçülebilir (gelişme süresi elbette yıllar içinde ölçülebilse bile). Şimdi, spot ışıkta geçen haftalar çok heyecanlı haftalardı - örneğin Stanford'da "yeni başladığı" son konuşmaya bakın --- fakat daha geniş altyapı ve paket desteği konusunda ne beklediğiniz daha uzun sürecektir. gerçekleşmek.

Bu yüzden R'yi kullanmaya devam ediyorum ve gelişen alternatifler konusunda dikkatli olacağım. Geçen yıl pek çok insan Clojure üzerinde ağlamaya başladı; Julia bu yıl hüküm süren yeni lezzet. Yapışır mı göreceğiz.


16
Rcpp üzerinden gördüklerimden dolayı, MCMC'de olduğu gibi basit döngü için Julia, bundan yaklaşık 50, 60, 70 kat artış ve fibonacci gibi "dejenere" örnekler için yüzlerce kat daha çok etkilendim. RPP var! Ama aynı zamanda Rcpp ile 3700 CRAN paketine, yani sayısız C ++ kütüphanesine erişebildiğimi biliyorum; oysa Julia şu anda neredeyse hiçbir şeye sahip değil. Bununla birlikte, Julia'nın vaadi çok büyük. Ama belki bir "o zaman" yanı sıra bir "şimdi" var. Zaman gösterecek.
Dirk Eddelbuettel

2
Ve Clojure'a dayanan istatistiksel bir ortam olması beklenen Incanter'ı da unutmayın. Julia bundan daha üstün?
Wayne

2
@Wayne, burada suları kirletmeyelim. Bunun için yeni bir soru açın (belki birden fazla dil arasında karşılaştırma isteyen)
naught101

2
@ naught011: Dirk’in Clojure’un ayın lezzeti olduğu fikrini tekrar söylüyorum, daha sonra özellikle şu anda Julia. Julia veya Incanter'in (veya Clojure) genelleştirilmiş istatistiksel platformlar olma şansı olduğunu sanmıyorum.
Wayne

2
Hiçbir fikrim yok, ama memnuniyetle R tarafını güncelledim: CRAN'daki 6400'den fazla paket ve şu anda Rcpp kullananların 350'den fazlası. Hala benim için çalışıyor. Julia millet aktif görünüyor ve mutlu --- ve bir seçeneğe sahip olmak iyi bir şey. Bütün problemler için tek bir dil yok: üzgünüm Python .
Dirk Eddelbuettel

19

Burada Bruce Tate, Yedi Haftada Yedi Dil'in yazarı. İşte birkaç düşünce. Takip kitabı için Julia üzerinde çalışıyorum. Aşağıdaki birkaç haftalık oyundan sonra sadece benim düşüncem.

Oyunda iki temel güç var. İlk olarak, tüm dillerin bir ömrü vardır. R bir gün değiştirilecek. Ne zaman olduğunu bilmiyoruz. Yeni dillerin gelişmesi oldukça zor bir zaman geçirir. Yeni bir dil geliştiğinde, genellikle bazı ezici acı noktalarını çözer.

Bu iki şey birbiriyle ilişkili. Bana göre, R gibi dillerin etrafında şekillenen bir tema görmeye başlıyoruz. Yeterince hızlı değil ve olması gerekenden daha zor. Belirli bir performans zarfında yaşayabilir ve yerleşik kütüphanelerde kalabilirler. Daha fazlasına ihtiyacı olmayanlar ve daha fazlasını aramaya başlıyorlar.

Mesele şu ki, bilgisayar mimarileri değişiyor ve bunlardan yararlanmak için, dilin ve yapılarının belirli bir şekilde inşa edilmesi gerekiyor. Julia'nın eşzamanlılık üstlenmesi ilginç. Böyle bir dil için doğru olanı en iyi duruma getirir: şeffaf dağıtım ve işlemler arasında verilerin etkin biçimde taşınması. Julia'yı tipik görevler, haritalar ve dönüşümler ve benzerleri için kullandığımda, sadece işlevleri çağırıyorum. Sıhhi tesisat için endişelenmeme gerek yok.

Bana göre, Julia'nın bir işlemcide daha hızlı olması ilginçtir, ancak R için aşırı derecede caydırıcı değildir. Benim için ilginç olan şey, işlemcilerin performans için çok çekirdekli bölgelere gittikçe daha fazla bağlı olmaları nedeniyle, teknik bilgi işlem problemlerinin ideal olarak konumlandırılmasıdır. Doğru dil verildiğinde mümkün olan en iyi avantajı elde etmek

Bunun olmasına yardımcı olacak diğer özellik gerçekten makrolar. Dilin hızı şu anda çok yoğun. Makrolar daha büyük, daha temiz yapı taşları ile inşa etmenizi sağlar. Kütüphanelere bakmak ilginç ama bütün resmi anlatmıyor. Kütüphanelerin büyümesine bakmalısın. Julia'nın yörüngesi burada oldukça fazla nokta.

Clojure bazıları için ilginçtir, çünkü R'nin yapabileceği bir teknik dil yoktur, bu nedenle bazıları bu boşluğu doldurmak için genel amaçlı bir dile bakar. Ben aslında büyük bir hayranıyım. Fakat Clojure oldukça ciddi bir beyin çarpıntısı. Clojure, teknik bilgi işlem yapmak isteyen programcılar için orada olacak. Mühendisler ve bilim insanları için olmayacak. Öğrenecek çok fazla şey var.

Bana göre Julia ya da onun gibi bir şey kesinlikle R'nin yerini alacak. Bu bir zaman meselesi.


Hem şablonlu türler hem de lisp kaynaklı birinci sınıf makro ekosistemi sağlayan pek çok yeni dil bulunmuyor - Julia bunu yapıyor. Bu özellik, eşzamanlılık özellikleri ve hızı ile birlikte (gelecekteki sürümlerde büyük olasılıkla gelişecektir), benim görüşüme göre diğer dillere karşı güçlü bir rekabet ortamı sağlıyor. Nadiren R'yi kullanırım, fakat sıklıkla C ++ (w / templates) ve Lisp (w / macros) kullanırım. Julia, tek bir açık dilde hem temiz hem de verimli bir şekilde yapabilir. Gelecekte Julia'nın ana dil olduğunu kanıtlayacağına inanıyorum.
AsymLabs

15

Ne zaman yeni bir dil görsem kendime neden mevcut dilin geliştirilemediğini soruyorum.

Python'un büyük avantajları

  • Zengin bir modül kümesi (sadece istatistik değil, aynı zamanda kütüphaneleri çizmek, pdf çıktıları vb.)
  • uzun vadede ihtiyaç duyduğunuz dil yapıları (büyük bir projede ihtiyaç duyduğunuz nesne yönelimli yapılar; gelişimi kolaylaştıran dekoratörler, kapaklar vb.)
  • birçok ders ve geniş bir destek topluluğu
  • işlemek için çok fazla veriye sahipseniz ve bunu bir kümede çalıştırmak için birkaç kuruş ödemeyi unutmayın.

R, Julia vb .'yi sollamak için Python kullanabilir

  • Tek bir makinede size daha fazla hız kazandırmak için kısıtlı Python için tam zamanında derlemenin geliştirilmesi (gecikmeyi kaldırabilirseniz mapreduce hala daha iyidir)
  • daha zengin bir istatistik kütüphanesi

3
Bu doğru olabilir, ancak çok sıradan bir kullanıcı için Python'un dil tasarımının kullanımı Matlab veya daha da matematik benzeri bir sözdizimine sahip Julia gibi bir şeyden daha zor olabilir. y = 3x+2Julia'da söyleyebilirsin ve işe yarıyor!
Harlan

6
Bu komik: 10 yıl önce Python'u ilk gördüğümde tam olarak aynı tepkimeye girdim (neden bu gerekli? Neden sadece şu anda olanları geliştirmedim? Neden yepyeni bir tuhaf sözdizimsel tuhaflıklar, sınıf isimleri, yöntemler öğrenmeye başladım? ve prosedürler ve diğerleri?). :-)
whuber

2
@NeilG Profesyonel bilimler, özellikle bilimlerde programcı olmayan araştırmacılar kadar değildir. Python programcılar için harikadır, ancak tek yapmak istediğiniz psikoloji verilerinizi yüklemek ve bazı modellere (hızlı) uymaksa, Python'un zarif nesne tabanlı tasarımına çok basit bir matematik benzeri sözdizimi tercih edilebilir.
Harlan

3
@NeilG R'nin başarısının bir parçası, sadece istatistikçiler tarafından kullanılmamasıdır. İstatistik yapan insanlar tarafından kullanılır . Sosyal bilimciler, klinisyenler ve birinci sınıf fen yüksek lisans öğrencileri kesinlikle çok sıradan kullanıcılar.
Fomite

6
Bence (CrossValidated üyesi) John D Cook'un blog yazısı şudur: Ben matematik ve sistem problemlerini matematik dilinde kodlamaya çalışmak yerine, genel amaçlı bir dilde matematik programlamayı tercih ederim. Julia topluluğu bunu aklında tutabiliyorsa, dilin genel olarak analitik programlama için yapması iyi bir şans olabilir (istatistikler bunun sadece bir kısmıdır). Bkz. Johndcook.com/blog/2012/04/02/why-scipy
Josh Hemann

9

Julia çok yakında R'yi devralmayacak. Microsoft R açık göz atın.

https://mran.revolutionanalytics.com/open/

Bu, bilgisayarınızın tüm çekirdeklerini otomatik olarak kullanan gelişmiş bir R sürümüdür. Aynı R, aynı dil, aynı paket. Taktığınızda, RStudio konsolda da kullanır. MRO'nun hızı Julia'dan bile daha hızlı. Çok fazla bilgisayar kullanımı yapıyorum ve Julia'yı bir yıldan fazla kullandım. Son zamanlarda R'ye geçtim çünkü R daha iyi bir desteğe sahip ve RStudio harika bir editör. Julia hala erken aşamada ve Python veya R'yi çok yakında yakalayamıyor.


8

Aşağıdakiler muhtemelen bir cevap olmayı hak etmiyor, ancak başkasının cevabına yorum olarak gömülmek çok önemli ...

Bellek tüketimi hakkında pek bir şey duymadım, sadece hız. R'nin bütün anlambilimsel değerinin yanlısı olması acı verici olabilir ve bu dilin bir eleştirisi olmuştur (ki bu zaten kaç tane büyük paketin varlığından ayrı bir konudur). İyi bellek yönetimi, çekirdek dışı işlemlerle uğraşmanın yollarını olduğu gibi önemlidir (örneğin , numpy'nin hafıza eşlemeli dizileri veya öbekleri veya Revolution Analytics'in xdf formatı)). PyPy'nin JIT derleyicisi bazı çarpıcı Python testlerine izin verirken, bellek tüketimi oldukça yüksek olabilir. Peki, Julia ve hafıza kullanımı konusunda tecrübeli olan var mı? Windows "alfa" sürümünde şüphesiz adreslenecek bellek sızıntısı var gibi görünüyor ve hala dil ile oynamak için bir Linux kutusuna erişmeyi bekliyorum.


Doğru, ancak R'de referans referansını kullanmanın yolları var (biri için Referans Sınıfları).
Ari B. Friedman,

1
Ve R gerçekten kesinlikle değere göre değil. Tembel değerlendirme ve bazı akıllı optimizasyonlar, verilerin olması gerekmedikçe sıklıkla kopyalanmadığı anlamına gelir.
Ari B. Friedman

8

Sanırım, Julia'nın daha önce belirtilen nedenlerden dolayı, R'nin yerine geçmesi pek mümkün değildir. Julia, bir R yerine değil bir Matlab yerine geçer; farklı hedefleri var. Julia tamamen genişletilmiş bir istatistik kütüphanesine sahip olsa bile, hiç kimse içinde bir İstatistik Dersine Giriş dersi veremezdi.

Bununla birlikte, inanılmaz olabileceği bir alan, C / C ++ 'dan daha az acı verici bir hızda optimize edilmiş programlama dilidir. Sorunsuz bir şekilde R'ye (Rcpp tarzında) bağlanmış olsaydı, kodun kritik bölümlerini yazmada bir ton kullanım görecekti. Ne yazık ki şu anda böyle bir bağlantı mevcut değil:

https://stackoverflow.com/questions/9965747/linking-r-and-julia



8

Ben bir Julia acemiyim ve R uzmanıyım. Julia'yı şimdiye kadar ilginç bulmamın nedenleri performans ve uyumluluk odaklı.

GPU araçları. İstatistiksel bir uygulama için CUSPARSE kullanmak isterim. CRAN sonuçları orada fazla bir şey olmadığını gösteriyor. Julia'nın şu ana kadar sorunsuz çalışan ciltleri var.

using CUSPARSE
N = 1000
M = 1000
hA = sprand(N, M, .01)
hA = hA' * hA
dA = CudaSparseMatrixCSR(hA)
dC = CUSPARSE.csric02(dA, 'O') #incomplete Cholesky decomp
hC = CUSPARSE.to_host(dC)

HPC araçları. Bir küme, birden fazla hesaplama düğümü ile etkileşimli olarak kullanılabilir.

nnodes = 2
ncores = 12    #ask for all cores on the nodes we control
procs = addprocs(SlurmManager(nnodes*ncores), partition="tesla", nodes=nnodes)
for worker in procs
    println(remotecall_fetch(readall, worker, `hostname`))
end

Python uyumluluğu. Python ekosistemine giriş var. Örneğin, beyin görüntüleme verilerinin nasıl okunacağını bulmak kolaydı:

import PyCall
@pyimport nibabel

fp = "foo_BOLD.nii.gz"
res = nibabel.load(fp)
data = res[:get_data]();

C uyumluluğu. Aşağıdaki C standart kütüphanesini kullanarak rastgele bir tam sayı oluşturur.

ccall( (:rand, "libc"), Int32, ())

Hız. Distributions.jl paketinin R'nin normuna karşı nasıl bir performans gösterdiğini düşündüğümü düşündüm.

julia> F = Normal(3,1)
Distributions.Normal(μ=3.0, σ=1.0)

julia> @elapsed rand(F, 1000000)
0.03422067

R'de:

> system.time(rnorm(1000000, mean=3, sd=1))
   user  system elapsed 
  0.262   0.003   0.266 

1
@NickCox, zaten bir düzineden fazla yanıt olduğu için, alternatif bir açıyı vurgulamanın ilginç olabileceğini düşündüm. Ayrıca, yanlışlıkla erken bir taslak yayınladım :)
varsayımlar

1
Soru, Julia'nın neden istatistik topluluğa sadık kalabildiği sorusuydu, cevabım, hesaplama yoğun çalışmalara sahip birçok kişinin ilginç bulabileceği açıkçası hpc + gpu için iyi bir desteğe odaklanıyor.
hesaplamalar

7

Julia 1.0 çok kullanışlı bir IDE (Juno) ile çıktı. Python'un Makine Öğrenimi'ne hâkim olduğu için partiye biraz geç geldi, R ise diğer tüm istatistiksel analizlere hâkim oldu. Bununla birlikte, Julia, finans ve ticaret algoritmaları alanında hızlı bir gelişim süresi ve uygulama zorunluluğu olduğu için öne çıkmaya başladı. Benim düşünceme göre, başka bir dil ortaya çıkmadıkça belirgin bir şekilde daha iyi değilse, Julia'nın öne çıkması muhtemelen şöyle bir şeye benzeyecektir:

(1) MATLAB'ın öğle yemeğini yemeye başlar. MATLAB kullanıcıları MATLAB sözdizimini severler fakat diğer her şeyden nefret ederler. Yavaşlık, pahalı lisanslar, matris olmayan karmaşık veri yapılarının üstesinden gelmenin çok sınırlı yolları. "Julia MATLAB'in yerini alırsa, insanlığa büyük bir hizmet olacak" deyince bir alıntı hatırlıyorum. MATLAB kullanıcıları Julia'da çok hızlı bir şekilde yetkin olabilirler ve bu MATLAB'ın yapabileceğinden çok daha fazlasını yapan kalite kodları yazmanın kolaylığından etkilenirler. Sadece bu değil, araştırmacılar Julia'da (küçük bir doktora öğrencisi doktora öğrencisi MATLAB ile imkansız olacak olan bir dünya çapında diferansiyel denklem paketi yazmış) ciddi alet kutuları yapabilirler.

(2) Sayısal yöntem ve benzetimde araştırma devralmaya başlar. MIT, ağırlığını Julia'nın arkasına atıyor ve araştırma topluluğu MIT'i dinliyor. Sayısal simülasyonlar ve yeni sayısal yöntemler, kütüphanesi olmayan kötü tanımlanmış problemlerdir. Julia'nın bir dil olarak parladığı yer; Kullanılabilir kitaplık yoksa, Julia'da hızlı kalitede kod yazmak diğer dillerden daha kolaydır. Matematikçiler tarafından matematikçiler için yazılmış bir sayısal / simülasyon dili olacaktır (henüz R'ye benzeyen?)

(3) Makine Öğreniminde bir başka atılım, Julia'ya üstünlük sağladı. Bu olmayabilecek bir joker karakter. TensorFlow harika, ama kesmek çok zor. Python zaten çatlaklar göstermeye başladı ve TensorFlow Swift'i kabul etmeye başladı (Julia onurlu bir söz aldı). Başka bir makine öğrenmesi atılımı olursa, Flux.jl gibi bir Julia paketinde uygulamak ve kesmek çok daha kolay olacaktır.

(4) Julia, yavaş yavaş R'ye yetişmeye başlar, bu biraz zaman alır. MATLAB'da istatistik yapmak acı vericidir, ancak Juila zaten Distributions.jl ile MATLAB'ın çok ilerisindedir. Gerçek şu ki, R iş akışları kolayca Julia'ya çevrilebilir. R'nin sahip olduğu tek gerçek avantaj, istatistikçiler tarafından istatistikçiler için yazılmış çok fazla paket bulunması gerçeğidir. Bununla birlikte, bu işlem, Julia'da da kolaydır. Aradaki fark, Julia'nın tamamen hızlı olması ve performans için başka bir dil kullanmanıza gerek kalmaması (daha "ciddi" R paketleri C gibi dillerde yazılmıştır). R'nin sorunu, R'de yazılmış paketlerin büyük veri kümelerini işleyemeyecek kadar yavaş olmasıdır. Tek alternatif, paketleri R'de geliştirmeyi Julia'dan daha yavaş bir süreç haline getirerek başka bir dile çevirmektir.


2
Hatırladığınız Matlab'ın değiştirilmesiyle ilgili alıntı , bu diziden . :)
Dougal

5

Farklı mimariler kullanarak daha iyi hız ve kolay paralelleştirme vaadiyle ilgileniyorum. Bu nedenle kesinlikle Julia'nın gelişimini izleyeceğim, ancak genelleştirilmiş doğrusal karışık modelleri işleyene kadar kullanmayacağım, iyi bir genel önyükleme paketi, bina tasarımı için basit bir model dili, ggplot2'ye eşdeğer bir kabiliyet ve geniş bir aralık Makine öğrenmesi algoritmalarından.

Hiçbir istatistikçi araç seçiminde köktenci bir tutuma sahip olamaz. İşi en verimli şekilde yapmamızı sağlayacak her şeyi kullanırız. Benim tahminim, birkaç yıllığına R'ye bağlı kalacağım, ancak hoş bir sürpriz yapmak güzel olurdu.


Merhaba Mervyn ve Stats.SE'ye hoş geldiniz! Julia, bu yazıyı oluşturduğumdan bu yana önemli gelişmeler kaydetti (neredeyse bir yıl önce!). Douglas Bates GLM kodunun bir kısmını (belki GLMM?) Kodunu Julia dmbates.blogspot.com/2012/04/r-programmer-looks-at-julia.html adresine taşıdı ve ana Github sayfası geçmişte birçok güncelleme gördü. yıl. Şu ana kadar Julia'ya olan ilgim (geçen yıldan beri kullanıyorum ve kullandım), bazı ham MCMC'ler için kullandığım hız için güzel bir araç oldu, ancak henüz alet zincirimdeki R yerini almadı. R'nin daha hızlı olması veya Julia'nın daha yaygın olması için sabırsızlanıyorum!
Christopher Aden,

Doug henüz GLMM'leri taşımadı. Birisi yardım etmek isterse mutlu olacağından eminim ...
Ben Bolker

4

NA'ların R'deki lüksü performans cezaları olmadan gelmiyor. Eğer Julia, NA'ları daha düşük performans cezasıyla destekliyorsa, istatistikler topluluğunun bir bölümü için ilginç hale gelir, ancak NA'lar R ile birlikte derlenmiş kod kullanırken fazladan fazla çalışma yapar.

R'deki paketlerin çoğu eski dillerde yazılmış rutinlere dayanmaktadır (C, Fortran veya C ++). Bazı durumlarda, derlenmiş rutinler R dışında geliştirildi ve daha sonra R kütüphanesi paketlerinin temeli olarak kullanıldı. Diğerlerinde, rutinler ilk önce R'ye uygulandı ve daha sonra performansın bulunmadığı durumlarda kritik bölümler derlenmiş bir dile çevrildi. Julia, eşdeğer rutinleri uygulamak için kullanılabiliyorsa çekici olacaktır. NA'lar için düşük seviyeli destek tasarlama, derlenmiş kodla R kullanırken şu anda sahip olduğumuz NA kullanımını kolaylaştıracak şekilde tasarlama fırsatı vardır.

Çok sayıda R kütüphanesi, birçok kullanıcının çabalarını temsil eder. Bu mümkündü, çünkü R, başka türlü elde edilemeyen / uygun fiyatlı olmayan yetenekler sağladı. Julia yaygın olarak kullanılacaksa, çok temel şeyler (örneğin, grafikler, tarih dersleri, NA'lar, vb.) Sağlama için harcanan çabaya değecek alternatiflerden çok daha iyisini yapmasını sağlayan bir kullanıcı grubuna ihtiyaç duyar. ) mevcut dillerden edinilebilir.


4

Önümde olacağım, R ile ilgili hiçbir tecrübem yok, ancak istatistiksel analiz için mükemmel bir araç olduğunu düşünen birçok insanla çalışıyorum. Geçmişim veri depolamakta ve Julia'nın kolayca dağılabilen ancak daha standart programlama modelinden dolayı, genellikle işi çok zayıf yapan, çoğu işi yapmayan geleneksel ETL araçlarının dönüştürme kısmı için çok ilginç bir alternatif olabileceğini düşünüyorum. Kolayca standartlaştırılmış bir dönüşüm oluşturmak ya da daha önce bir veri setinde daha önce yapılmış bir dönüşümün sonuçlarını tekrar kullanmak. Sıkça tanımlanmış ve yazılan tupler desteği, temelde daha önce hesaplanmış tupler dışında daha ayrıntılı tupler (olgu tabloları) oluşturmak için gereken bir OLAP küpü oluşturmak istersem, bundan bahsetmek için 'yapı taşları' içermemektedir. yardım edebilir, bu endüstri geçmişte bu yolla çeşitli yollarla çalıştı, ancak takaslar var. Geleneksel programlama dilleri, merkezi olarak tanımlanan dönüşümler sağlayarak yardımcı olabilir ve Julia, daha karmaşık veri ambarı sistemlerinde yaygın olan standart dışı toplamaları ve dağıtımları potansiyel olarak basitleştirebilir.


3

Julia ve R'yi birlikte kullanabilirsiniz. Orada Julia-to-R arayüzü . Bu paketlerle, ne zaman ihtiyaç duyulacak bir kütüphaneye sahip olduğunda R'yi çağırırken Julia ile oynayabilirsiniz.


2

Julia kuşkusuz, güç kullanıcılarının hayallerini gerçekleştirebilecekleri bir istatistik olma şansını yakalar, örneğin SAS’ı ele geçirin, gücü C’de yazılan sayısız işlemde yatmaktadır - Julia’nın yapabileceği şey, kaynak koduyla birlikte olanları matrislerle vermektir. SAS / iml ile dağıtılan yerleşik bir veri türü. İstatistikçilerin bu yavru köpeğin ne yapabileceğini öğrenince Julia'ya akın edeceğinden şüphem yok.


1
İstatistiklere hoş geldin, Jimbo. Senin iddiasına katılmıyorum. Bence Julia'nın neler yapabileceğini gördük, fakat bu noktada sorun şu ki, R'de olduğu gibi etki alanı için çok fazla paket bulunmuyor. R açık kaynak istatistiklerinde en üst düzey hüküm sürmeye devam edecek. Araştırmacılar R evrendeki sayısız paketi kullanmaktan daha fazla yarar gördükleri sürece. En azından benim emrim bu.
Christopher Aden,

2

Ah evet, Julia çok hızlı bir şekilde R'yi geçecektir. Ve birincil nedenler "makrolar" olacak, dilin% 95'i Julia'da uygulandı ve gürültüsüz, temelsiz sözdizimi. Lisp dili türleriyle ilgili deneyiminiz yoksa, henüz anlamıyor olabilirsiniz, ancak R formülü arayüzünün modası geçmiş ve çirkin bir mekanizma haline geleceğini ve CL'ye benzer özel mikro dilleri modelleme ile nasıl yer alacağını oldukça çabuk göreceksiniz. Makro döngü Bir nesnenin düşük seviye referanslarına erişim de büyük bir artıdır. Bence R hala bu şeyleri basitleştirmekten ziyade kullanıcıdan gizleyen içselleri anlamadı.

Şimdi gördüğüm gibi (yıllarca yoğun R kullanımına sahip ve Julia el kitabını okumayı yeni bitirdim), Julia'nın R ile ilgili ana dezavantajları yapısal kalıtım için bir destek değil (bu kasıtlıydı). Julia'nın tip sistemi S4'ten daha az iddialı; Aynı zamanda çoklu gönderim ve çoklu kalıtım destekler, ancak bir yakalama ile - sadece bir sınıf somut sınıf vardır. Öte yandan R'de sınıf seviyesindeki hiyerarşileri nadiren 3 seviyeden daha derin görüyorum.

Zaman söyleyecek, ancak çoğu R kullanıcısının düşündüğünden daha erken olacak :)


2
Makrolar hakkında iyi bir noktaya değiniyorsunuz: on yıllar sonra insanlar hala Lisp'in gerçekte ne kadar güçlü olduğunu hafife alıyorlar. Ancak, # 1'de belirtildiği gibi, bu dil temelde bir R yerine değil, bir Matlab yerine geçer. Sanırım, insanların kullandığı dil artı kütüphaneler (paketler) olduğu gerçeğini görmezden geliyorsunuz ve Julia orada ihtiyaç duyduklarının% 1'ine bile sahip değil.
Wayne,

2
@Wayne, hiçbir şeyi görmezden gelmiyorum, OP geleceğe aitti, şimdi olanlarla ilgili değildi. 5 yıl içinde, Julia’daki istatistikler için şu anda R’den çok daha fazla kitaplık görmekteyiz.
VitoshKa

Julia gerçekten bir MATLAB'ın yerine geçerse, aynı dili mühendislik ve istatistik için kullanmanın çok büyük faydaları olacaktır! Örtüşen alanlar (zaman serileri gibi) çok büyük.
kjetil b halvorsen

1

Julia'nın ilk hedef kullanım durumları sayısal problemlerdir. Temel olarak, bu analiz ve hesaplamalı bilim alanlarını veri bilimine (veri güdümlü) ve simülasyon bilimine (model güdümlü) ayırabilirsiniz. Julia, önce simülasyon bilimi kullanım durumlarıyla ilgileniyor. Ayrıca veri bilimi durumlarıyla da ilgileniyorlar, ancak daha yavaş. R, simülasyon bilimi için hiçbir zaman çok faydalı olmayacak, ancak Julia birkaç yıl içinde her ikisi için de çok faydalı olacak.


0

Kullanıcı için şeffaf bir şekilde belleğe sığmayan büyük veri setlerine herhangi bir işlevi uygulayabilmesi gerekir.
Bu, en azından çalışan karışık efekt modellerini, hayatta kalma modellerini veya diske sığacak ancak belleğe sığmayan veri kümelerinde MCMC'yi içerir. Ve mümkünse, birkaç bilgisayarda dağıtılan veri kümelerinde.

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.