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:
- Komut dosyalarını R'ye yazın ve alt işlem modülünü kullanarak Python'dan çalıştırın veya
- 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?
- 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.
- “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.)