Veri analizi için R vs Python [kapalı]


60

Yaklaşık bir yıldır programlama yapıyorum ve veri analizi ve makine öğrenimi ile gerçekten ilgileniyorum. Birkaç çevrimiçi kursa katılıyorum ve birkaç kitap okuyorum.

Yaptığım her şey R veya Python kullanıyor ve tek bir dilde mi (yoksa öyleyse) mi yoksa her ikisinde de devam etmemem mi gerektiğine dair öneriler arıyorum; birbirlerini tamamlıyorlar mı?

- Okulda C # kullandığımı söylemeliyim ama Python ile kendi kendine çalışarak aşinayım.


İşte belki ilginç bir link: coursera.org/course/compdata
Giorgio

Yanıtlar:


39

Hem Python'u (numpy ve scipy dahil tabiki veri analizi için) hem de R'yi yan yana kullanıyorum. Ancak, veri analizi yapmak için yalnızca R'yi ve daha genel programlama görevleri için Python'u kullanıyorum (örneğin bir bilgisayar modelinin iş akışı kontrolü).

Temel işlemler açısından, dizilerdeki işlemlerin ve sıralama, R ve Python + numpy'nin çok karşılaştırılabilir olduğunu söyleyin. R'nin bir avantaja sahip olması çok büyük istatistiksel fonksiyon kütüphanesindedir. Ek olarak, matplotlib ggplot2 kadar iyi görünmüyor, ama ben matplotlib'i o kadar fazla kullanmamıştım. Ek olarak, önce bir dile odaklanacağım ve onun özelliklerinde iyi olacağım. Öncelikle veri mühendisliği ile ilgileniyor görünüyorsunuz, yazılım mühendisliği ile değil. R'yi seçip buna sadık kaldım. Bununla birlikte, Python + numpy + scipy + scikit'i seçmenin kesinlikle ve mükemmel bir seçim olduğunu düşünüyorum, sadece R'nin biraz daha mükemmel olduğunu hissediyorum.

Ayrıca, meslektaşlarınızın ve alanınızdaki diğer insanların ne kullandığına bir göz atacağım. Hepsi Python'u kullanıyorlarsa, onlardan daha kolay bir şekilde öğrenmek ve kodları değiştirmek için buna bağlı kalmak mantıklı olacaktır.

Feragatname: Ağır bir R kullanıcısı olduğumu ve bu nedenle cevabımı mümkün olduğunca objektif tutmaya çalışmama rağmen fikrim önyargılı olabilir. Ek olarak, Python + numpy'yi yoğun bir şekilde kullanmadım, ancak tüm veri analizlerini yapan kolejleri de biliyorum.

ps: Bu bağlantı ilginç olabilir: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: ya bu alıntı bu yazı :

Tüm araştırmalarım için R ve Python kullanıyorum (gerektiğinde Rcpp veya Cython ile), fakat eğer kaçınabilsem C veya C ++ ile yazmaktan kaçınmayı tercih ederim. R, büyük oranda inanılmaz kullanıcı topluluğu nedeniyle harika bir dildir. İstatistikçiler tarafından yaratılmıştır, yani veri analizleri dilin tam merkezindedir; Bunun dilin önemli bir özelliği olduğunu ve kısa sürede neden değiştirilmemesinin büyük bir nedeni olduğunu düşünüyorum. Python, özellikle fonksiyonel programlama ile nesne yönelimi karışımını göz önüne aldığınızda, daha iyi bir genel dildir. Scipy / Numpy, Pandalar ve istatistik modelleriyle birleştirildiğinde, bu güçlü bir kombinasyon sağlar. Ancak Python hala ciddi bir istatistikçi / matematikçi topluluğundan yoksun.


3
R'nin Python'dan daha güçlü olduğunu söyleyerek, Python + numpy / blaze + scipy veya düz Python anlamına mı geliyorsunuz ?
9000,

5
Yani Python + numpy evet, aksi halde seçim daha kolay olurdu. Temel işlemler açısından, dizilerdeki işlemlerin ve sıralama, R ve Python + numpy'nin çok karşılaştırılabilir olduğunu düşünüyorum. R'nin bir avantaja sahip olması çok büyük istatistiksel fonksiyon kütüphanesindedir. Ek olarak, matplotlib ggplot2 kadar iyi görünmüyor, ama ben matplotlib'i o kadar fazla kullanmamıştım.
Paul Hiemstra,

Bu, Python + numpy + scipy + scikit için seçimin kesinlikle ve mükemmel bir seçim olduğunu düşünüyorum, sadece R'nin biraz daha mükemmel olduğunu hissediyorum.
Paul Hiemstra,

@PaulHiemstra - Yorumlarınızda muhtemelen cevabınızı iyileştirecek bazı güzel noktalar vardınız - eğer soru yeniden açılırsa ve bu fırsatınız varsa.
psr

@psr Yorumlarımda düzenleme yaptım, görünüşe göre düzenlemek istersem sorunun açık olmasına gerek yok (belki de sadece düzenleyebilirim ...).
Paul Hiemstra

36

Arkaplan: Austin'deki bir başlangıçta veri bilimcisiyim ve yüksekokuldan (Fizik) geliyorum. Python'u veri analizi için günlük kullanıyorum, ancak R'yi biraz kullanıyorum. Ayrıca C # /. NET ve Java (hemen hemen her gün) kullanıyorum, C ++ 'ı yüksek lisans okulunda yoğun kullandım.

Sayısal olarak Python'u kullanmanın asıl probleminin (R üstü) kullanıcı topluluğunun büyüklüğü olduğunu düşünüyorum. Dil her zaman etrafta olduğu için, birçok insan yapmak isteyebileceğiniz şeyler yaptı. Bu, zor bir problemle karşılaştığınızda, sadece paketi indirebilir ve çalışmaya başlayabileceğiniz anlamına gelir. Ve R "sadece işe yarıyor": ona bir veri seti veriyorsunuz ve hangi özet istatistiklerin faydalı olduğunu biliyor. Bazı sonuçlar veriyorsunuz ve ne istediğinizi biliyor. Yapmak isteyeceğiniz tüm ortak alanlar orada, hatta Wikipedia'da aramak zorunda kalacağınız oldukça ezoterik olanlar bile var. Scipy / numpy / pandas / statsmodels / etc kadar güzel. Python için, R standart kütüphanesi düzeyinde değiller.

Python'un R'ye göre en büyük avantajı, C ailesinde gerçek bir programlama dili olmasıdır. Kolayca ölçeklenir, bu nedenle sanal alanınızdaki her şeyin üretimde kullanılabileceği düşünülebilir. Python, bir çeşit düşünce sonrası (çünkü olduğu gibi) hissettiği R'nin aksine, Fırında Nesne Yönelimi'ne sahiptir. Python'un güzelce yaptığı başka şeyler de var: iş parçacığı ve paralel işleme oldukça kolay ve R'nin durumunun böyle olup olmadığından emin değilim. Python'u öğrenmek de size güçlü bir komut dosyası aracı sunuyor. Ayrıca Python için gerçekten iyi (ücretsiz) IDE'ler var, daha iyi olanlar da (100 $ 'dan az) ödeyeceksiniz ve bunun R için geçerli olduğundan emin değilim - bildiğim tek R IDE Benim deneyimim oldukça iyi fakat PyDev + Eclipse kadar iyi değil.

Bunu biraz daha hızlı ekleyeceğim: Hala okulda olduğun için işleri düşünmelisin. Çok yetenekli Python aygıtları için son derece yetenekli R aygıtları için olanlardan daha fazla iş ilanı bulacaksınız. Austin'de Django dev'lerinin işleri gökten düşüyor. R'yi gerçekten iyi tanıyorsanız, bu beceriden yararlanabileceğiniz birkaç yer var (örneğin, Revolution Analytics), ancak birçok dükkan Python kullanıyor gibi görünüyor. Veri analizi / veri bilimi alanında bile, daha fazla insan Python'a yöneliyor gibi görünüyor.

Ve Java'yı sadece bilen (söyleyen) kişilerle / birlikte çalışabileceğinizi hafife almayın. Bu insanlar Python kodunuzu kolayca okuyabilir. Tüm çalışmalarınızı R'de yaparsanız bu mutlaka geçerli olmayacak. (Bu deneyimden geliyor.)

Son olarak, bu yüzeysel görünebilir, ancak bence Python belgelerine ve adlandırma kurallarına (dini olarak bağlı olduğu ortaya çıkıyor), faydacı R doc'dan çok daha güzel. Bu ateşli bir şekilde tartışılacak, eminim ama Python'daki vurgu okunabilirlik. Bu, Python işlevlerinin argümanlarının okuyabileceğiniz adlara sahip olduğu ve bunun bir anlamı olduğu anlamına gelir. R'de, argüman adları genellikle kesiliyor --- Python'da bunu daha az doğru buldum. Bu sersemletici gelebilir, ancak 'x_label' argümanını kolayca söyleyebildiğiniz zaman 'xlab' gibi şeyler yazmaya beni deli ediyor (sadece bir örnek) --- bu, öğrenmeye çalışırken çok büyük bir etkiye sahiptir yeni modül / paket API'si. R doc okumak, Linux sayfalarını okumak gibi bir şey --- eğer teknenizi yüzdüren şeyse, o zaman size daha fazla güç kazandırır.

Bunların hepsi söyleniyorsa, şunu öneriyorum (ki bu benim tipik iş akışım): Python'u bildiğinizden beri, bunu ilk aracınız olarak kullanın. Python'u eksik bulduğunda, istediğini yapmak için yeterince R öğren ve sonra ikisinden birini öğren:

  1. Komut dosyalarını R'ye yazın ve alt işlem modülünü kullanarak Python'dan çalıştırın veya
  2. RPy modülünü takın.

Python'un iyi olduğu şeyler için Python kullanın ve boşluklardan yukarıdakilerden birini doldurun. Bu benim normal iş akışım --- Genellikle işleri çizmek için R, ağır kaldırma için Python kullanıyorum.

Özetlemek gerekirse: Python'un okunabilirlik konusundaki vurgusundan ("Pythonic için" gooogle'da arama yapın), iyi, ücretsiz IDE'lerin mevcudiyeti, C dilleri ailesinde olması gerçeği, büyük harf kullanabilme olasılığınız yüksek beceri seti ve dilin her yönüyle daha iyi dokümantasyon stili, Python'u sizin için uygun hale getirmenizi ve sadece gerektiğinde R'ye güvenmenizi öneririm.


Tamam, bu (şimdiye kadar) bir yığın sitede şimdiye kadarki en popüler cevabım ve # 1 bile değil :) Umarım bu yol boyunca birkaç kişiye yardımcı olmuştur.

Her neyse, bu alanda birkaç yıl sonra şu sonuca vardım:

Bu muhtemelen sorulacak yanlış bir soru.

“Bu teknolojiyi öğrenmeli miyim?” Sorusu kötü bir sorudur. Neden?

  1. Teknoloji değişiyor. Her zaman başka bir teknoloji öğrenmek zorunda kalacaksın. Twitter'da çalışmaya gidersen, Scala'yı işletiyorlar. Bazı yerler Python mağazaları. Bazı yerler umursamıyor. İşe alınmayacaksınız çünkü belli bir teknoloji parçasını biliyorsunuz veya bilmiyorsunuz - yeni bir teknoloji öğrenemiyorsanız, kovulabilir (ve olmalı). Tıpkı, yeni bir boru anahtarı ortaya çıkarsa ve bir tesisatçıysanız ve yeni boru anahtarının nasıl çalıştığını çözemezseniz, muhtemelen oldukça kötü bir tesisatçısınızdır.
  2. “Bu teknolojiyi öğreniyor muyum” veya “Gerçek problemleri çözmek için daha fazla zaman harcıyorum mu” seçimi göz önüne alındığında, istisnasız her zaman ikincisini seçmelisiniz.

Bir veri bilimcisi olarak, işiniz sorunları çözmek . Bu bilgelik biti, gittiğiniz her konferansta veya tanışmada hemen hemen her zaman kaybolur - gördüğüm her "büyük veri" konuşması, problem çözmeye değil, teknolojiye odaklandı. Asıl problem çözme genellikle sonunda bir kaç slayta ayrılır:

[Talk title = "Cool New Startup'ta derin öğrenme"] ... [[Telefonumu kontrol edip kontrol edeceğim 45 dakikalık diyagram ve tekno-babel] ... Hadoop kümemizi uyguladıktan ve tekrar] derin öğrenme rutinimizi çalıştırabiliriz [uyandır: bu yüzden geldim!] ayrıntıları özeldir. Sorular?

Bu, alanın teknoloji hakkında olduğu konusunda kötü bir izlenim bırakıyor ve bu doğru değil. Scala veya Python veya R'de gerçekten iyiyseniz, ancak problem çözmede gerçekten kötüyseniz, kötü bir veri bilimcisi olursunuz .

Paco Nathan birkaç ay önce bir gün süren "büyük veri" konferansında Austin’deydi ve "Kimya test tüpleriyle ilgili değil" dedi. Bu hemen hemen özetliyor - veri bilimi Scala, Hadoop veya Spark ya da başka bir teknoloji-du-jour çıkmazsa değil. Günün sonunda, araç takımlarını öğrenmek için Stack Overflow'u kullanma konusunda becerikli olmayan insanları değil düşünen insanları işe almak istiyorum.

Aynı şekilde, eğer bir iş görüşmesine giderseniz ve sizi bir programlama dili bilmediğiniz için işe almazlarsa, o zaman bu şirket berbat olur . "Veri bilimcisinin" ne anlama geldiğini anlamıyorlar ve eğer işe yaramadıysa, muhtemelen sizin için daha iyi.

Son olarak, eğer problem çözme yetenekleriniz marjinal ise (kendinize karşı dürüst olursanız) veya bir şeylerin teknik yönünden gerçekten zevk alıyorsanız veya teknolojiyi öğrenmek gerçekten sevdiğiniz şeydir (yine dürüst olun), o zaman çok fazla teknoloji öğrenin. Yetenek setinize uygun "data engineer" tipindeki rolleri her zaman bulabileceksiniz. Bu kötü bir şey değil, veri mühendisleri tekerlekleri yağlar ve bir veri bilimci olarak işinizi yapmanıza olanak tanır. (Aradaki fark yazılım mimarına karşı geliştirme ekibine benzer.)


3
Bununla birlikte, eğer bir ticaret katında çalışıyor olsaydım ve baş tüccar bana opsiyon fiyatlarında bir csv ile geldiyse ve onları log-lineer dağılımına uymamı ve ortalama ve standart sapmayı geri çekmemi istedi. Python'u bile düşünmezdim. Sanırım bunu R. 'de yapmak üç kod satırı gibi
BenDundee

12

Bu yüzden, öncelikle Matlab'da veri analizi yaptım, ancak bazılarını Python'da yaptım (ve daha genel olarak Python kullandım) ve ayrıca biraz da R başlattım. Python. Bunun nedeni, istatistik (R'nin baskın olduğu yer) veya dijital sinyal işleme (Matlab'ın baskın olduğu yer) değil, Makine Öğrenmesi perspektifinden veri analizi yapmanızdır.

Makine Öğrenimi ve İstatistikler arasında belirgin bir örtüşme olduğu açık. Ancak örtüşmek kimlik değildir. Makine Öğrenimi CS'den benim için R'de uygulamak istemediğim fikirleri kullanıyor. Elbette, R'de minimal bir yayılma ağacı hesaplayabilirsiniz. Yine de çirkin bir karmaşa gibi görünebilir. Makine öğrenen insanlar karma tablolara, ikili arama ağaçlarına vb. Kolayca erişebildiğinizi varsayar. Aklımda, gerektiğinde canlandıran bir istatistik algoritması uygulamak, genel olarak bir programlama dilindeki alana özgü bir dilin temelini çizmeyi denemekten daha kolaydır.

Python'un veri analizi için sağladığı faydalar da çok daha yüksektir. Aynı zamanda, aynı zamanda, komut dosyası işlemeyi başarabilen, daha büyük uygulamalar yaratabilen vb. Gibi gerçek bir programlama dilini öğreneceksiniz.

Sanırım, önce bazı evraklara bakardım ve hangi dilde kod yazdıklarına bakardım. R'de değilse, kullanmayın.


1
Çok teşekkür ederim. Şeylerin ML tarafı ile kesinlikle daha fazla ilgileniyorum.
The_Cthulhu_Kid

1
Sadece küçük bir zeyilname: R'nin bunu bir şekilde de yapabileceğinden eminim, ancak Python, Ct'yi çağırabilen veya en az ek yükü olan Cython kullanarak fonksiyonları derleme yeteneği ile bilinir. Böylece, genellikle daha az çabayla, gerçek verilere bakmak için önemli bir husus olan daha hızlı alabilirsiniz. Bir başka (son) egzotik not: Java'da bazı iyi makine öğrenme kütüphaneleri (WEKA gibi) vardır. Ancak, havalı olan şey bunlara Python'dan Jython :-)
Nir Friedman

7

Eskiden bir okul olarak (50'den fazla) bu araçlardan bazılarını kullanan ve kullanmaya devam eden bir bilim adamı olarak iki kuruş ekleyeceğim. Fortran'da hala her yerde bir kod yazan meslektaşları ile çalıştım, sıra dışı birebir veri analizi işlerinden dünyanın bazı süper bilgisayarlarına hâkim olan koda kadar. Yeni Fortran lehçeleri (F90, F95, F2003, F2008), varolan en iyi tasarlanmış dillerden bazıları olan IMHO'dur. Yüksek performanslı bilgi işlem konusundaki onlarca yıllık deneyim, oldukça etkileyici bir dil gelişimine neden oldu.

Python'u sadece zaman zaman kullandım ve tekrar ziyaret edeceğim (çoğunlukla Sage yüzünden) ama zamanımı test eden bir dil seti kullandım. Fortran, C, Perl, R ve Scheme (VMD komut dosyası için tcl ile). R ve Fortran ve C kombinasyonlarını çok rahat buluyorum. R'deki nesne modeli hakkında yapılan diğer yorumların aksine, CLOS'un genel işlevler kavramı ve yöntem gönderimine dayanan etkileşimli çalışmalar için iyi bir nesne modelidir. Yeni bir paketle etkileşimli olarak çalışırken, verimli bir şeyler yapmak için genellikle "baskı" ve "çizim" gibi genel işlevlere güvenebilirsiniz.

Fortran ve C'ye API kullanımı çok kolaydır. Modelleme ve veri analizi için Fortran ve C’de çalışmaya alışkınsanız, bu büyük bir artı. Dinamik olarak R kodunu oluşturma ve değerlendirme kabiliyeti, Lisp ve C'deki makro sistemler kadar temiz olmasa da, dinamik veri setlerini işlerken çok faydalıdır.

Gerçek veriler için R'nin bazı kısıtlamaları, değere göre çağrı yaklaşımını içerir. Değere göre çağrı için CS nedenleri olsa da, büyük sayısal veri içeren gerçek dünya programlaması, referans için bir tür çağrı gerektirir (eski koddaki Fortran ortak bloklarının ya da yeni koddaki modül verilerinin önemine dikkat edin). PDL (Perl Data Language) tarafından benimsenen yaklaşım bu konuda özellikle şık. (Bir kopya istemediğiniz sürece Pdls, esasen referans ile çağrılır.

Birçok dil öğrenmek iyidir. Python şüphesiz önemli bir dildir, ancak R de etki alanındadır. Ancak, kauçuk bilimin yolunda gerçekten bir araya gelmesi gerektiğinde Fortran ve C (ve bazıları için C ++) yerinden etmek zor olacaktır.


1

R'nin temel özelliği, programlama dili olduğu kadar, bir paket kütüphanesi olmasıdır. Her paket yazarının, prensip olarak, diğer paketlerin içindeki öğelere erişimi vardır. Bu, yeniden icat etme, yeniden belgelendirme, yeniden öğrenme gereksinimini önemli ölçüde azaltır. Bu hem paket yazarları hem de kullanıcılar için geçerlidir. Tabi bu altyapının bir bedeli var. Paket yazarları zaman geçtikçe giderek daha titiz hale gelen standartlara uymalıdır. Bunlardan bazıları kullanıcıların karşılaştığı şeye karışabilir.

Python, anladığım kadarıyla, bir paket yönetim sistemine sahip değil. R’nin Kapsamlı R Arşiv Ağı’nın ( http://cran.r-project.org ) eşdeğeri ve R görev görünümlerinin doğrudan karşılığı yoktur ( http://cran.csiro.au/web/views/ ). Dolayısıyla, R için geçerli olmayan bir ölçüde, programcıların halihazırda mevcut olanın üzerine inşa etme çabaları kapsamında değil, kendi başlarına çok fazla çalışan programcılar için bir araçtır.

Veri analizi ve makine öğrenmesi için talep, zaten büyük ölçüde mevcut olan yeteneklerden faydalanmak ve bunlardan yararlanmaktır. Daha genel programlama görevleri için Python'un avantajları olabilir. Python'u öğrenmek için harcadığınız çabayı haklı gösterecek türde bir çalışma yapacak mısınız?


3
Python, pip adında bir paket yönetim sistemine sahiptir. Standart kütüphanenin bir parçası değildir, ancak gelecek ay (Mart 2014) piyasaya sürülecek olan Python 3.4 ile başlayan standart Python ile birlikte gönderilecektir.
Cody Piersall

2
Kapsamlı R Arşiv Ağının Python eşdeğeri PyPI'dir
Wilfred Hughes
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.