Matlab ve Python arasında istatistiksel analiz için hangi dil iyidir?


17

Matlab ve Python arasında genel istatistiksel veri analizi için hangi dil iyidir? Her biri için erişilebilirlik dışında artıları ve eksileri nelerdir?


2
Bu topluluk wiki'si, IMO olmalı.
Shane

Neden R'ye bakamadığınızı açıklamak ister misiniz?
Dirk Eddelbuettel

@DirK: R'yi pek duymadım. Üstelik Python gibi bir programlama dili öğrenmek istedim ve yine R'nin Python, IMO'ya yakın bir yerde olduğunu düşünmüyorum. Umarım sorunuzu cevaplar.

2
Burada ve StackOverflow'da, insanların istatistiksel analiz ve programlama için önerdikleri açısından biraz konuşun . Birçoğumuz R'ye gerçek bir alternatif olmadığını düşünüyoruz. Ama tıpkı güzellik gibi, bu da bakanın gözünde, çok iyi şanslar.
Dirk Eddelbuettel

Jeoistatistik açısından (içinde doktora yaptığım), R'nin çok iyi donanımlı olduğunu düşünüyorum (bkz. Gstat, geoR vb.). En azından python'da jeoistatistiki tekniklerin bu kadar kapsamlı bir şekilde kapandığını bilmiyorum. Ve neden R "hiçbir yerde python'a yakın değil"? Her ikisini de kullandım ve geostats için R'nin oldukça üstün olduğunu hissediyorum.
Paul Hiemstra

Yanıtlar:


29

Son 10 yıldan beri diehard Matlab kullanıcısı olarak, Python öğrenmenizi tavsiye ederim. Bir dilde yeterince yetenekli olduğunuzda, öğrendiğiniz bir dilde çalışırken, yeterince üretken olmamanız gibi görünecek ve varsayılan en iyi dilinizi kullanmaya geri döneceksiniz. En azından, birkaç dilde eşit derecede yetkin olmaya çalışmanızı öneririm (R'yi de öneririm).

Matlab hakkında sevdiğim:

  • Ben bu konuda yetkinim.
  • Öyle ortak dil sayısal analistler arasında.
  • profil oluşturma aracı çok iyi. Oktav yerine Matlab kullanmamın tek nedeni bu.
  • Referans uygulaması ile iyi uyumu olan ücretsiz bir klon, oktav vardır.

Matlab hakkında sevmediğim şeyler:

  • Üçüncü taraf (ücretsiz veya başka türlü) paketleri ve komut dosyalarını yönetmek için iyi bir sistem yoktur. Mathworks 'merkezi dosya değişimini' kontrol eder ve eklenti paketlerinin kurulumu çok karmaşık görünüyor, R'nin sahip olduğu mükemmel sisteme benzemiyor. Dahası, Mathworks'ün bu durumu iyileştirmek için bir teşviği yoktur, çünkü ücretsiz paketlerle rekabet eden araç kutuları satmak için para kazanırlar;
  • Matlab'da paralel hesaplama lisansları inanılmaz derecede pahalıdır;
  • Araç kutusu işlevlerinin çoğu ve bazı yerleşik öğeler dahil olmak üzere m kodunun çoğu, verimlilik ve / veya kullanılabilirlik pahasına bariz şekilde doğru olacak şekilde tasarlanmıştır. Bunun en göze çarpan örneği, Matlab'ın bir tür veri gerçekleştiren ve ardından orta değeri alanmedian işlevidir . 70'lerden beri bu yanlış algoritma.
  • grafikleri dosyaya kaydetmek en iyi Matlab'da çok tehlikeli.
  • Mathworks, çan ve ıslık eklemeye devam etse bile, kullanıcı deneyimimin son 5 yılda (oktav yerine Matlab kullanmaya başladığımda) iyileştiğini bulamadım. Bu, onların hedef müşterisi olmadığımı gösteriyor, daha ziyade güç kullanıcıları için işleri daha da kötüleştirerek pazar payını genişletmek istiyorlar.
  • Matlab'da en iyi kafa karıştırıcı olan nesne odaklı programlama yapmanın 2 yolu var. Eski stili kullanan eski kod bir süre daha devam eder.
  • Matlab kullanıcı arabirimi, bellek yönetimi hakkında hoş olmayan fikirleri olan Java ile yazılmıştır.

+1, iyi puan. Bu konuda: "bellek yönetimi hakkında hoş olmayan fikirler" .. ilginç, ayrıntılı olabilir?
ars

1
hafızam bir yere gidiyor ; Matlab kullanımı dışındaki Java ile yaşadığım deneyim, olası suçlu olduğunu gösteriyor ve koşmak -nojvmyardımcı gibi görünüyor ...
shabbychef

MATLAB garip yerleşik kodlarının en sevdiğim örneği, yeni oluşturulmuş rastgele bir vektörü sıralayarak döndürülen siparişle verileri yeniden düzenleyen karışıklıktır.

1
@ mbq: shufflebir araç kutusunda olabilir, stok matlab değildir. randpermrastgele bir vektörün sıralama indeksini döndüren yerleşmeden daha kötü olamazdı . Yine, bu muhtemelen yanlış algoritma (Ben sadece burada Knuth-Fisher-Yates shuffle istatistiklerini öğrendim.SE) ..
shabbychef

1
@mbq: diğer iyi tarafı randperm, tohumlamadan etkilenmesidir randn, oysa Knuth-Fisher-Yates'in mex'ed versiyonu belki de 'dahili olarak' süslü tohuma erişemez ve muhtemelen saf bir .m versiyonu shuffle'ın çok yavaş ol.
shabbychef

11

Programlamanın istatistiklerle buluştuğu üç alana (başımın üstünden) ayıralım: veri uyuşmazlığı, sayısal rutinler (optimizasyon ve benzeri) ve istatistiksel kütüphaneler (modelleme, vb.).

Birincisi, en büyük fark Python'un genel amaçlı bir programlama dili olmasıdır. Matlab, dünyanız kabaca bir nümerik sayısal diziye izomorfik olduğu sürece harika. Veri ayıklama ve ilgili sorunlarla uğraşmaya başladığınızda, Python Matlab'ı geride bırakıyor. Örneğin, Greg Wilson'ın şu kitabına bakın: Veri Sıkıştırma: Java, Python ve daha fazlasını kullanarak Gündelik Sorunları Çözme .

İkincisi, Matlab gerçekten sayısal çalışmalarla parlıyor. Araştırma topluluğunun çoğu bunu kullanıyor ve örneğin, sıkıştırılmış algılamadaki bir kağıtla ilgili bazı algoritmalar arıyorsanız , Matlab'da bir uygulama bulma olasılığınız çok daha yüksek. Öte yandan, Matlab bir çeşit bilimsel hesaplama PHP'sidir - güneşin altındaki her şey için bir fonksiyona sahip olmaya çalışır. Ortaya çıkan estetik ve mimari, bir programlama dili meraklısıysanız çıldırıyor, ancak faydacı terimlerle işi hallediyor. Bunların çoğu Numpy / Scipy'nin yükselişiyle daha az ilgili hale geldi, Python için mevcut optimizasyon ve makine öğrenme kütüphanelerini bulma olasılığınız da yüksek. C ile arayüz kurmak her iki dilde de kolaydır.

Modelleme ve benzeri için istatistiksel kütüphanelerin mevcudiyeti üzerine, her ikisi de R gibi bir şeyle karşılaştırıldığında biraz eksiktir. (Her ikisinin de istatistiksel çalışma yapan insanların% 80'inin ihtiyaçlarını karşılayacağından şüpheleniyorum.) : İstatistik tezgahı olarak Python . Matlab tarafı için, bir istatistik araç kutusu olduğunu biliyorum, ancak boşlukları daha bilgili bir kişinin doldurmasına izin vereceğim (Matlab ile ilgili deneyimim istatistiklerle ilgili olmayan sayısal çalışmalarla sınırlıdır).


Matlab'daki istatistik araç kutuları oldukça eğlencelidir. R için benzer bir şey var mı, örneğin bir dizi farklı işlev uyumu (regresyon) hızlı bir şekilde deneyebilirsiniz?
Alex R.12

6

Ayrıca 10 yıldan fazla süredir hevesli bir Matlab kullanıcısıyım. O yıllar boyunca işim için yarattığım araç kutusunun ötesinde çalışmak için hiçbir nedenim yoktu. Bir araç kutusu için birçok işlev oluşturulmuş olsa da, genellikle hızlı geri dönüş analizi için algoritmalar oluşturmam gerekiyordu. Bu algoritmalar genellikle matris matematiğini kullandığından Matlab işim için ideal bir adaydı. Matlab araç koduma ek olarak, grubumdaki diğer diller, diller arasında açık birlikte çalışabilirlik olduğundan Java'da kapsamlı bir şekilde çalıştı. Yıllarca Matlab'dan tamamen memnun kaldım, ancak yaklaşık 3 yıl önce Matlab'dan yavaş geçişe başlamaya karar verdim ve yaklaşık bir yıl içinde açmadım demekten mutluyum. İşte hamlemin nedeni:

  • Çevrimiçi ve çevrimdışı bilgi işlem sistemleriyle çalışıyorum, lisanslama sistemi her zaman bir baş ağrısıydı. Matlab'a en çok ihtiyaç duyduğumuzda, lisansın süresinin dolması veya aniden sorunları olması her zaman ortaya çıktı. Bu her zaman bir baş ağrısıydı. Ayrıca, kodu paylaşmamız gerektiğinde ve karşı tarafın aynı araç kutuları için lisansları yoksa, bu bir baş ağrısı yarattı. Ücretsiz değil
  • Sık sık sunumlar oluşturmam gerekiyor. Matlab, algoritma tasarımı için çok güçlü kılan rakamlar oluşturmak için kapsamlı araçlar sağlamasına rağmen, rakamı bir sunuma eklenebilecek ve güzel görünecek şekilde kaydetmek basit bir iş değildir. Sık sık tüm çöpleri kaldırmak, yazı tiplerini düzeltmek ve satırları temizlemek için Adobe illustrator'a bir EPS dosyası eklemek zorunda kaldım. Bununla birlikte (export_fig.m) dosya değişiminde bu konuda yardımcı olacak bazı araçlar vardır.
  • Matlab kodunu sık sık başkalarından alıyorum. Bu olduğunda, neredeyse her zaman yeniden yazıyorum çünkü: API'ları verilerimle uyumlu değil, kodları mantıklı değil, yavaş, ihtiyacım olanı vermiyor, ... Temelde Matlab'da gelişen insanlar yazılım mühendisleri ve Matlab herhangi bir tasarım prensibini teşvik etmez.
  • Ben güçlü bir kullanıcıyım. Terminalleri severim. GUI'den nefret ediyorum - nefret ediyorum. Ve "windows" tarzı kurdele eklediklerinde, bundan biraz daha nefret ettim. Temelde GUI ve korkunç bellek yönetimi için tweaks son düğmeye bastı ve ayrılmaya karar verdi. -nodesktopSeçeneği kullanmak çoğu zaman iyidir, ancak sorunları vardır.
  • Fonksiyonların tasarımı için birçok olasılık (OO veya fonksiyonel tasarım kullanarak), ancak hiçbiri doğru hissetmez , çoğu adhoc hisseder. Matlab'da iyi fonksiyonlar tasarlamaktan memnuniyet duymuyorum
  • Topluluk büyük, ancak paylaşmak ve iyi kod bulmak kolay değil. Dosya değişimi o kadar da iyi değil.

Bu, Matlab ile olan birçok tutkumdan sadece birkaçı. Parlayan bir özellik: kolay, hızlı bir şekilde kod yazmak çok kolay (çirkin değilse). Yine de bıraktım ve görevim beni Clojure-> JavaScript-> Python <-> Julia'ya yönlendirdi; Evet, her yerde bulundum.

  • Clojure: güzel fonksiyonel dil. Clojure'u kullanmamın nedeni Java komut dosyası yazma yeteneğiydi. "Büyük" kod tabanımızın çoğu Java'dadır, bu yüzden bu çok mantıklıydı. O zamanlar çok fazla bilimsel işlem mevcut değildi ve görselleştirme ile de pek yoktu. Ama bence bu değişiyor.
  • Javascript: http://julialang.org/ adresindeki kriterleri gördükten sonra ve kesinlikle D3'ün görselleştirme yeteneğiyle ilgilendiğim için JavaScript'i denemeye karar verdim. JavaScript şaşırtıcı bir şekilde çok hızlı. Ancak gerçekten kendinizden nefret etmek istiyorsanız, JavaScript öğrenin.
  • Python: Python'un inanılmaz bir topluluğu var ve devam eden birçok harika projesi var. IPython Notebook birçok nedenden dolayı şaşırtıcıdır (bunlardan biri powerpoint'e basit bir kopya / geçmiş geçmişi). NumPy / SciPy / Scikit-Learn / Pandalar gibi projeler gerçekten Python'u eğlenceli ve kullanımı kolay hale getirdi. Birden fazla çekirdek veya kümede kullanımı çok kolaydır. Geçiş için gerçekten çok mutlu oldum.
  • Julia: Julia muhteşem. Özellikle Matlab kullanıcıları için. Bu henüz bebeklik döneminde, bu yüzden birçok değişiklik oluyor. Python'un en büyük dezavantajlarından biri, Matlab'ın sahip olduğu tüm yerleşik işlevselliğe sahip olmamasıdır. Tabii NumPy / SciPy bu işlevselliği getiriyor, ancak yerleşik değildir ve saf python nesneleri veya numpy nesneleri olup olmadığına karar vermeniz gerekir. Julia temel olarak Python'un Matlab'dan gelmesini istediğiniz her şeye sahiptir. Beklerdim, ama bu gelecekte Matlab kullanıcıları için en iyi seçenektir.
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.