R ve Python veri biliminde birbirlerini nasıl tamamlar?


54

Birçok öğreticide veya kılavuzda anlatı, R ve python'un analiz sürecinin tamamlayıcı bileşenleri olarak bir arada bulunduğunu ima ediyor gibi görünmektedir. Eğitimsiz gözlerime göre, iki dil de aynı şeyi yapıyor gibi görünüyor.

Öyleyse benim sorum şu ki, iki dil için gerçekten özel nişler var mı, yoksa birisini mi yoksa diğerini mi kullanmanın kişisel bir tercih olduğu?


2
Bu gerçekten o konunun bir kopyası gibi görünmüyor. Bu, Python'un istatistik yapmak için nasıl kullanılacağıyla ilgili değildir, Python'un R'yi nasıl tamamlayabildiği ile ilgilidir (açıkçası R, istatistiksel analizleri yapmak için kullanılır).
gung - Reinstate Monica

4
R eğer 10 yıl önce istatistikçi olsaydınız. Python, kodunuzu bir yerde üretime sokmak veya yeniden kullanmak istiyorsanız.
djechlin


3
Bu q’nun popülaritesinden ötürü, & bayraklardan gelen isteklere cevap olarak, tekrar açtım ancak CW yaptım.
Scortchi

1
Cevapların çoğu, unutmak eğiliminde oldukları şey Python dilini uygulama GNU-R ile karşılaştırdıklarıdır. R ayrıca başka uygulamalara da sahiptir (bkz. Renjin , Java ile yazılmış, Intel MKL, FastR , pqR , vb. İle derlenmiş Microsoft R Open . Bunlar, daha muhafazakar bir uygulama olan GNU-R ile ilgili bazı sorunları düzeltmeye çalışıyor. Ayrıca, R'nin resmi bir tanımı olmadığını unutmayın.
Firebug

Yanıtlar:


45

Tamamlayıcılar. Her ikisinin de aynı şeyi yapabileceği doğrudur , ancak bu çoğu dilde söylenebilir. Her birinin güçlü ve zayıf yönleri vardır. Ortak bakış, Python'un veri toplama ve hazırlamanın yanı sıra metinsel analiz için de en iyisi olduğu görülüyor. Her şeyden önce istatistiksel bir dil olduğu için R, veri analizi için en iyi yöntem olarak kabul edilir.

R aklınıza gelebilecek her şey için smorgasbord paketlerine sahiptir, ancak temel istatistiki analizdir - temel ki-kare'den faktör analizi ve tehlike modellerine kadar, kolay ve sağlamdır. İstatistiklerdeki en büyük isimlerden bazıları R paketleri yaratır ve her ihtiyacınıza yardımcı olacak canlı bir topluluğu vardır. ggplot2veri görselleştirmesinde standarttır (grafik vb.). R, vectorized bir dildir ve veriler arasında verimli bir şekilde dolaşmak için oluşturulmuştur. Ayrıca tüm verileri çift kenarlı bir kılıç olan RAM'de saklar - daha küçük veri setlerinde hızlıdır (bazıları benimle tartışsa da), ancak büyük verileri iyi idare edemez (bunu atlayacak paketleri olmasına rağmen gibi ff).

Python'u öğrenmek, R'den çok daha kolaydır - özellikle önceki programlama deneyimine sahip olanlar için. R sadece ... garip. Python veri alımı konusunda harika ve web ile kazıma için kullanılan dil (şaşırtıcı ile beautifulsoup). Python, dize ayrıştırma ve metin işleme konusundaki gücüyle bilinir. pandasveri manipülasyonu, birleştirme, dönüştürme vb. için harika bir kütüphanedir ve hızlıdır (ve muhtemelen R'den ilham almıştır).

Biraz programlama yapmanız gerektiğinde Python mükemmeldir. Genel amaçlı bir dil olduğu için bu şaşırtıcı değildir. Ancak, R, bütün uzantılarıyla birlikte istatistikçiler için istatistikçiler tarafından yaptırılmıştır. Dolayısıyla, Python birçok uygulamada daha kolay ve daha iyi ve daha hızlı olsa da, R istatistiksel analiz için go-to-platform olacaktır.


13
İkisini de bilen biri olarak buna katılıyorum; birçok stilistik argüman olabilir, ancak en büyük fark Python'un gerçekte nedensel istatistik modellerini çalıştırma zamanı gelmesidir. Statsmodels paketi Size bazı temel alır, ancak R, Stata veya Sas yaklaşım değildir. Dikkate değer bir istisna, Python'un bilim takımının iyi eşleştiği makine öğrenme tarzı analizidir . Her şey için, Python'un en azından R'ye eşit ve genellikle üstün olduğuna dair iyi argümanlar yapılabileceğini düşünüyorum. Her ikisini de öğrenmek hiçbir zaman kötü bir kullanım değildir.
Jeff

2
Bunların çoğuna katılıyorum - ancak sorunları daha fazla vurgulayacağım - R büyük veri kümeleri için iyi değil ve seyrek veri kümelerini idare etmiyor (çoğu kütüphane desteklemiyor) çok iyi (çoğu kişi bunun üzerinde makine öğrenmesi yapıyor) Örneğin, bir faktör / kategorik değişkenin önem derecesinin 1000'lerde olabileceği 'sözcük torbası' tipi modeller.
seanv507

10
Bir yorum dizisinde bir argüman başlatmamaya dikkat edin, ancak data.tableR'deki paket özellikle büyük veri kümelerinde verimli çalışma ve dağıtılmış işleme uygun şekilde takılmak üzere tasarlanmıştır.
parlak yıldızlı

3
Python'un veri alımında ve string ayrıştırmada R'den daha iyi olduğunu düşünüyorsanız, o zaman R'yi çok yanlış kullanıyordunuz. Aynı şey, "R, büyük veri kümeleri için iyi değildir ve seyrek veri kümelerini işlemez (çoğu kitaplık bunu desteklemez) çok iyi" için de geçerlidir .
saat

3
Trevor'un yükselişine ekleme data.table; Ayrıca rvestçoğu kazıma görevini yerine getirmek için mükemmel bir araç olduğunu söylemekten memnuniyet duyuyorum ve kalkması ve çalıştırılması çok daha kolaybeautifulsoup
MichaelChirico

21

İki dilin veri bilimi / istatistik / veri analizi ve benzerleri için devreye girdiği ana noktalara dokunarak bir cevap formüle etmeye çalışacağım.

Veri analizindeki iş akışı genellikle aşağıdaki adımlardan oluşur:

  1. Verileri bir tür kaynaktan (büyük olasılıkla bir SQL / noSQL veritabanı veya .csv dosyaları) almak.
  2. Verileri düzgün ve makul bir formatta (veri çerçevesi) ayrıştırmak, böylece işlem yapabilir ve bunun hakkında düşünebilir.
  3. Bazı fonksiyonları verilere uygulama (gruplama, silme, birleştirme, yeniden adlandırma).
  4. Verilere bir tür model uygulamak (regresyon, kümeleme, sinir ağı veya başka herhangi bir veya daha az karmaşık teori).
  5. Sonuçlarınızı az ya da çok teknik bir kitleye dağıtmak / sunmak.

Veri işleniyor

Zamanın% 99, veri alma işlemi SQL veya Impala veritabanı çeşit sorgulama için aşağı gelir: Her iki Python ve R eşit derecede iyi (hiçbir zaman işi yapmak ve belirli müşterileri ya da kütüphaneleri vardır RImpala, RmySQLR ve MySQLdbPython için sorunsuz çalışın, eklemek için pek bir şey yok). Harici .csv dosyalarını okumak söz konusu olduğunda, Rdata.table paketi , herhangi bir özel ayrıştırma seçeneğiyle çok büyük ve karmaşık .csv dosyalarında kısa sürede okuyan ve sonucu doğrudan sütun adlarına ve satır numaralarına sahip veri çerçevelerine dönüştüren işlevi sağlar .fread

Veri çerçevelerini düzenleme

Verilerin bir tür tabloda depolanmasını istiyoruz, böylece herhangi bir giriş, satır veya sütuna kolaylıkla erişebiliriz.

R paket data.tableverileri etiketlemek adlandırmak, silmek ve erişmek için rakipsiz yollar sağlar. Standart sözdizimi dt[i, j, fun_by], olması gerektiği şekilde SQL benzeridir dt[where_condition, select_column, grouped_by (or the like)]; Özel kullanıcı tanımlı fonksiyonlar, jmaddede olduğu gibi oraya da yerleştirilebilir , böylece verileri yönetmek ve gruplara veya alt gruplara karmaşık veya süslü bir işlev uygulamak için tamamen özgür olursunuz (örneğin, i-inci sırasını almak, k-inci Elementi ve (i-1) -th sırasının (k-2) -th elementine toplayın, ve eğer sadece tüm sütunun standart sapması ise, son sütuna göre gruplandırılmışsa, toplamı). SO kriterleri ve bu diğer şaşırtıcı soruya bir göz atın. Sütunların ve satırların sıralanması, silinmesi ve yeniden adlandırılması, yapılması gerekenleri yapar ve standart vectorised R yöntemleri apply, sapply, lapply, ifelse, sütunlar ve veri çerçeveleri üzerinde her elemanın içine girmeden, vectorised işlemleri gerçekleştirir. çok yanlış yapıyorlar).

Python'un silahı pandaskütüphanedir. Sonunda pd.DataFrame(standart Python, hala bana neden hala bilinmeyen bir nedenden ötürü sahip değildir) kendi verileri hakkındaki verileri, yani veri çerçevelerini (bazıları numpy array, numpy list, numpy matrixveya her neyse) ele alan bir yapı sağlar. Gruplandırma, yeniden adlandırma, sıralama ve benzeri işlemler kolayca elde edilebilir ve burada da kullanıcı, Python applyveya tuşlarını kullanarak gruplanmış bir veri kümesine veya çerçevenin alt kümesine herhangi bir özel işlevi uygulayabilir lambda. df[df.iloc(...)]Girişlere erişmek için gramerden kişisel olarak hoşlanmıyorum , ancak bu sadece kişisel bir zevk ve hiç sorun değil. Gruplama işlemleri için kıyaslamalar hala R'den biraz daha kötüdür, data.tableancak derleme için 0.02 saniye tasarruf etmek istemiyorsanız, performansta büyük bir fark yoktur.

Teller

R dizeleri tedavi etmek için bir yol kullanmaktır stringr, boşluk ya da kolaylıkla benzer arka, bir metin işleme, anagramını normal ifade sağlar paketi. Ayrıca, JSON sözlüklerini paketleyen ve öğelerini listeleyen JSON kitaplıklarıyla birlikte de kullanılabilir; böylece, bir UTF8 karakteri veya boşluk olmadan sütun adlarının ve öğelerin olması gerektiği gibi son bir veri çerçevesi olur. Orada.

Python's Pandas .str. , normal ifadelerle, izini sürmekle veya rakibi kadar iyi oynamakla aynı işi yapıyor, bu yüzden burada bile zevkten büyük bir fark yok.

Modelleri uygulamak

İşte bence iki dil arasındaki farklar ortaya çıkıyor.

R,Bugün itibariyle, kullanıcının istediği her şeyi bir veya iki kod satırında yapmasını sağlayan rakipsiz bir kitaplık kümesine sahiptir. Standart fonksiyonel veya polinom regresyonlar tek gömleklerde gerçekleştirilir ve katsayıları kolaylıkla okunabilen çıktılar elde edilir, bunlara karşılık gelen güven aralıkları ve p-değerleri dağılımları eşlik eder. Aynı şekilde, kümelenme için de aynı şekilde rastgele orman modelleri için, aynı şekilde dendogramlar, temel bileşen analizi, tekil değer ayrıştırmaları, lojistik uyarlar ve daha birçok şey için. Yukarıdakilerin her birinin çıktısı büyük olasılıkla az önce yaptığınız şeylerin görselleştirmelerini üreten, katsayılar ve parametreler için renkler ve kabarcıklar içeren belirli bir çizim sınıfı ile birlikte gelir. Hipotez testleri, istatistiksel testler, Shapiro,

PythonSciPy ve ile yetişmeye çalışıyor scikit-learn. Standart analiz ve modellerin çoğu da mevcuttur, ancak kodlamaları biraz daha uzundur ve okumak için daha az sezgiseldir (bence). Daha karmaşık makineler eksik, ancak bazıları mevcut kitaplıkların bazı kombinasyonlarına kadar izlenebilir. R'den ziyade Python'da yapmayı tercih ettiğim tek şey, iki gram, üç gram ve daha yüksek derecelerde olan kelime paketindeki metin analizi.

Sonuçların sunulması

Her iki dilde, ggplot2her şeyden önce R ve karşılık gelen Python eşdeğeri olan güzel çizim araçları vardır . Gerçekten rekabet etmek için çok değil, işi güvenli ve sağlam yapıyorlar, ancak sonuçları sunuyorsanız diğer araçları kullanmanız gerekebileceğine inanıyorum - dışarıda süslü renkli tasarım araçları var ve ne Python ne de R şaşırtmak zorunda değil süslü kırmızı ve yeşil sürükle ve bırak ile seyirci. R son zamanlarda shiny appözellikleri üzerinde etkileşimli çıktılar üretmesine izin veren pek çok gelişme yayınladı . Asla öğrenmek istemedim ama orada olduğunu ve insanların iyi kullandığını biliyorum.


Kenar notu

Bir yan not olarak, iki dil arasındaki en büyük farkın Python'un bilgisayar bilimi, taşınabilirlik, konuşlandırmalar ve diğerleri için yapılan ve genel amaçlı bir programlama dili olduğunu vurgulamak isterim . Yaptığı şeyde harika ve öğrenmesi kolay; Python'u sevmeyen kimse yok. Ancak programlama yapmak için bir programlama dilidir.

R,Öte yandan matematikçiler, fizikçiler, istatistikçiler ve veri bilimcileri için icat edildi. Bu arka plandan geliyorsanız, her şey mükemmel bir anlam ifade ediyor, çünkü istatistik ve matematikte kullanılan kavramları kusursuz bir şekilde yansıtıyor ve yeniden üretiyor. Fakat bunun yerine, bir bilgisayar bilimi geçmişinden geliyorsanız ve R'de Java veya C'yi simüle etmek istiyorsanız hayal kırıklığına uğrayacaksınız; standart anlamda "nesnelere" sahip değildir (peki, öyledir, ama tipik olarak ne olduğunu düşünmez ...), standart anlamda sınıflara sahip değildir (peki, öyledir, ama tipik olarak ne değildir) sanıyorlar ki…), “işaretçiler” ya da diğer tüm bilgisayar bilimi yapılarına sahip değil - sadece onlara ihtiyacı olmadığı için. Son fakat en az olmayan: dokümantasyon ve paketlerin oluşturulması ve okunması kolaydır (Rstudio kullanıyorsanız); Dışarıda büyük ve tutkulu bir topluluk var ve Google’ın ilk girişi sizi ilgili kodla (başkası tarafından yapılan) ilgili soruna bir çözüme yönlendiren Google’a beş saniye sürüyor. , hiçbir zaman.

Çoğu sanayi şirketi, Python kodunun (sadece bir import myAnalysisyerde ve temelde yapıldığında) kolay entegrasyonunu sağlayan Python'da (veya bir Python-dostu ortam) yerleşik altyapıya sahiptir . Bununla birlikte, herhangi bir modern teknoloji veya sunucu veya platform kolayca arka plan R kodunu da sorunsuz şekilde çalıştırır.


8
+6, bu çok iyi bir cevap: ayrıntılı, doğru ve dengeli.
gung - Reinstate Monica

+1 Buradaki en iyi cevap. Komik, Java'dan (doğrudan rotada olmasa da) R'ye geldim ve bundan çok hoşlandım. Mutlaka R'de döngü yapmanın yanlış yaptığınız anlamına geldiğini sanmıyorum. Kendimi bazen döngüleri kullanarak atlamaya çalışırken başımı tırmalarken buldum, ancak bunun çevresinde bir yol bulamadım (önceki satırların koşullarına göre veri kümesinde yeni değişken değerler oluşturmak ve ikincil veri kümelerinden veri almak gibi).
Yuval Spiegler

Eğer sadece bu R paketlerinin güneş altında bir şey yapması için gereken her şey, istatistiksel hesaplama / güvenilir ve sağlam bir sayısal matematiksel yazılım / sayısal analiz yapmayı bilen insanlar tarafından yazılmış olsaydı. R paketlerinin bazıları çok iyi. Çok sayıda R paketi, bazıları ünlü yazarlar tarafından yazılmış olsa bile, tamamen çöptür - ve çoğu kullanıcı çöp aldıklarının farkında bile değildir. Oh, CRAN'da, iyi olmalı ya da en azından doğru ya da güvenilir olmalı ... YANLIŞ !!!!!
Mark L. Stone

“R, bugün itibariyle, kullanıcının istediği her şeyi bir veya iki kod satırında yapmasını sağlayan rakipsiz bir kitaplık kümesine sahip.” Doğru cevabı bulmak, kullanıcının istediği şeylerden biri olmadığı sürece% 100 kabul ediyorum.
Mark L. Stone

8
@ MarkL.Stone Ünlü kullanıcılar tarafından yanlış sonuçlar veren standart paketlerin bir örneğini sunar mısınız?
gented

15
  • Python genel bir programlama dilidir: bu nedenle, veri analizine ek olarak birçok başka görevi yapmak için iyidir. Örneğin, üretim sürecindeki model uygulamalarımızı otomatikleştirmek istiyorsak, python gerçekten iyi bir seçimdir. Diğer örnekler, verileri okumak için donanıma / sensörlere bağlanmak, veritabanlarıyla etkileşimde bulunmak (JSON gibi ilişkisel veya yapılandırılmamış veriler), verileri ayrıştırmak, ağ programlaması (TCP / IP), grafiksel kullanıcı arabirimi, kabukla etkileşimde bulunmak, vb. (Eh, Neden bir veri bilimcisi, tahmin modelleriyle pek ilgisi olmayan, bu tür görevlerin çoğunu yapmak istesin? İnsanların farklı tanımları olduğunu düşünüyorum. Veri bilimcisi nedir?Bazı kuruluşlarda, verileri ayrıştırmak ve gösterge tablosuyla açıklayıcı analiz yapmak iş için yeterince iyidir ve veriler öngörü modeli yapmak için yeterince olgun değildir. Öte yandan, birçok küçük şirkette, insanlar veri bilimcilerinin birçok yazılım mühendisliği yapmalarını bekleyebilirler. Python'u bilmek sizi diğer yazılım mühendislerinden bağımsız hale getirir.)

  • R, python veya MATLAB'dan çok daha iyi istatistiksel paketlere sahiptir. Bir R kullanarak, uygulama detay seviyesi yerine gerçekten model düzeyinde düşünebilirsiniz. Bu, istatistiksel modellerin geliştirilmesinde büyük bir avantajdır. Örneğin, birçok kişi sinir ağlarını python içinde elle uyguluyor; böyle bir işi yapmak sinir ağlarının neden işe yaradığını anlamamıza yardımcı olabilir, ancak çalışıp çalışmadığını kontrol etmek için başkalarının çalışmalarını çoğaltmak için tarifin ardından. Eğer R'de çalışıyorsak, uygulama detayları yerine, modelin arkasındaki matematiğe kolayca odaklanabiliriz.

Çoğu durumda, insanlar bunları birlikte kullanır. Yapı yazılımı python ile yapmak kolaydır ve yapı modelleri R'de daha iyidir. Üretimde bir model sunmak istiyorsak, kağıt olmasaydı ikisine de ihtiyacımız olabilir. Şirketinizde çok fazla yazılım mühendisi varsa, daha fazla R'ye ihtiyacınız olabilir. Ve şirketinizde çok fazla araştırma bilimcisi varsa, daha fazla pitona ihtiyacınız olabilir.


2
Güzel cevap ama bana iyi bir kıkırdama verdin, onun yerine 'JSON' arasında 'Jason' yazdı
par

Gerçekten istatistiklerin veya "makine öğrenen" toplulukların bir üyesi değilim, ancak gelişmiş paketlerin kullanılabilirliğinin bir şekilde topluluğa özgü olduğunu düşünüyorum. Birçok yeni ve son teknoloji istatistik tekniğinin R kodu ile geldiğine inanabilirim. Ama bilgisayar vizyonu / makine öğrenimi / sinir ağları ("yüksek seviye") kodlarıyla birlikte geldiğimde ... bunlar Matlab veya python gibi görünüyor.
GeoMatt22

1
Dillerin nasıl düşündüğünü nasıl etkilediğini tartışmak için +1. R'nin büyük bir avantajı, istatistikçiler için istatistikçiler tarafından yapılmış olması, modelleme açısından düşünmeyi nasıl teşvik ettiğidir. Açıklama: R'de akıcıyım ama sadece Python'da cüret ediyorum.
Ashe

Um ... peki ya scikit-learn? scikit-learn.org/stable
savaş gemisi

10

Tüm programcıların programcıları ne kadar dil seçiminin kültürel olduğunu hafife alıyorlar . Node.js. benzeri web geliştiricileri Python gibi bilim adamları. Javascript’in akıcılığını ve Java’nın sertliğini aynı düzeyde kaldırabilen çokgen bir yazılım mühendisi olarak, bu dillerin birbirlerinin işlerinde kötü olmasının kendine özgü bir nedeni olmadığını fark ettim - sadece çok büyük miktarda paket, dokümantasyon, topluluk, kitap, vb onları çevreleyen.

(Gerçek sebeplerden biri rastgele bir dilin diğer bir dilden daha iyidir, bu cevabın gelecek yorumlarına bakınız.)

Benim kişisel tahminim Python'un geleceğin yoludur, çünkü R'nin yapabileceği her şeyi yapabilir - veya daha doğrusu, R'nin özel programcıların boşlukları doldurmak için çalıştığı şeyden yeterince - ve çok daha iyi bir yazılım mühendisliği dilidir. Yazılım mühendisliği aşağıdakilerle ilgilenen bir disiplindir:

  • kodunuzun güvenilirliğini, üretime sokacak kadar güvenmek (böylece kullanıcılara gerçek zamanlı olarak hizmet veren herhangi bir makine öğrenme modeli)
  • Kodunuzun, modifikasyon ve tekrar kullanımdan geçtikçe çalışmaya devam edebilmesini sağlamak (örneğin birim test çerçeveleri)
  • 6 ay kadar kısa bir sürede başkalarının ve kendinizin yararına okunabilirliğe odaklanma
  • Kod oluşturma, sürüm oluşturma kolaylığı, önceki çalışma sürümlerine geri dönme ve birden fazla tarafın eşzamanlı gelişimi için derin bir vurgu
  • araçları ve teknolojileri daha iyi bir dokümantasyonla ve ideal olarak, kullanmadığınız mülkle, doğru kullanmadıkça kullanamayacakları tercih etmek (bu, Matlab'la en büyük sıkıntımdı - bir soru soruyorum ve onların korkunç forumlarını okumak zorundayım.) cevap aranıyor)

Artı açıkçası Python'u öğrenmek daha kolaydır.

Bilim adamları ve istatistikçiler, bağımsız ve rahatsız edici bir meslek değil, iyi bir yazılım mühendisliği uygulamasının paydaşı olduklarını fark edeceklerdir. Sadece benim görüşüm, fakat akademik kodun kırılganlığını kanıtlayan yazılar bunu destekleyecek.

Bu cevabın hepsi benim görüşüm - ama siz çok fikirli bir soru sordunuz ve o ana kadar iyi karşılandığından beri cevap olarak iddiasız, makul olarak bilgilendirilmiş (umarım!) Bir görüşü hak ettiğinizi hissettim. Python için, R'nin karşısındaki R'nin üzerinde ciddi bir argüman var ve ben gerçekliğin kendisi partizan olduğunda partizan olmayan cevabı göndermeye çalışacağım.


Julia, büyüyünce Python'dan daha iyi bir alternatif olmaz mıydı?
kjetil b halvorsen

1
@kjetilbhalvorsen “büyüdüğü zaman”, “if” den daha zordur, yerleşik bir dili desteklemek çok zordur ve temelde asla katı bir şekilde benimseme riski altında olmak üzere sınır teknolojisinde olmak isteyip istemediğiniz temel olarak kişisel bir seçimdir. IMO, Python şimdi momentuma sahip. Julia'yı çok iyi tanımadım, bu yüzden bu oldukça genel bir fikir.
djechlin

1
İlk mermi dışında, Python'un diğer dört noktada doğal olarak nasıl üstün olduğunu göremiyorum.
Firebug

4
"Python R'nin yapabileceği her şeyi yapabilir" yanlıştır. "Özel programcıların boşlukları doldurmak için çalışabilecekleri yeterlilikte Y" yeterince iyi, bu dünyadaki herhangi bir şey için geçerli olacak - birisi üzerinde çalıştığı sürece her şeyi yapmak için herhangi bir şey yapılabilir.
gented

2
@djechlin Tamamen değil. Güvenilirlik için örneğiniz "kullanıcılara gerçek zamanlı olarak hizmet veren herhangi bir makine öğrenme modeli" idi. Python bu konuda daha iyidir, çünkü konuşlandırmayı R'den çok daha kolay bir şekilde destekler, ve sadece bundan. Birim testi, okunabilirlik, organizasyon ve dökümantasyon doğal nitelikler değildir. Kendi testlerinizi uygulayabilir, kodunuzu okumayı kolaylaştırabilir, düzenleyebilirsiniz ve R belgelerinin anlaşılması gerçekten kolaydır.
Firebug

8

Ben bir R kullanıcısıyım ama Python'un gelecek olduğunu düşünüyorum (sözdizimi olduğunu sanmıyorum)

Gelecek
Python Python'un yararı, diğer insanların çok daha geniş bir destekten bahsettiği ve programcılar için daha mantıklı bir sözdiziminden kaynaklandığı gibidir.
Ayrıca, analizinizden elde ettiğiniz bulguları bir üretim sistemine çevirebilme becerisi çok daha kolaydır.
Belki de Python'un genel amaçlı olması ve R'nin değil, hatta üretilmiş bir R boru hattı gördüğümde kaşlarımı bile kaldırdım.
Ancak, sadece bu değil, Gelişmiş uygulamalar için bile Python hızlı bir şekilde yetişiyor (Scikit-learn, PyBrain, Tensorflow vb.) Ve R hala akademik yöntemlerde Python profesyonel sektörde büyük metodlar kazandı. ileri düzey uzmanlık kütüphanelerinin ortaya çıkışı.

Fakat R fena değil
Pek çok insan "R'nin kötü sözdizimi var" vagonuna atlamaktan hoşlanıyor gibi görünüyor.
R'nin sözdizimini iyi bir şey olmasını öneriyorum!
Atama işlevleri, tembel değerlendirme, standart olmayan değerlendirme ve formüller, R kullanıldığında çok büyük faydalar sağlar.
Özetinizde referans verilen değişken adlardan kaçmak veya neyin neye göre modellendiğinin mantığını oluşturmak için endişelenmenize gerek kalmaz. ile isimlere bakmak names()ve sonra ekleyerek yeni isimler vermek <- c("A", "B", "C").
İnsanlar R'nin tuhaf sözdizimi hakkında şikayette bulunduğunda, ona bir veri bilimi aracı olarak değil, bir programlama dili olarak bakarlar.
R'den gelen ve dplyr'ı seven biri olarak pandaların sözdizimini karşılaştırmalı olarak biraz sakar buluyorum.
Evet, biraz daha esnektir, ancak çoğu görev için, basitçe bir komut vermek için, Python'un ayrıştırıcısını tatmin etmek için sadece orada bulunan, fikrinizi ifade etmemek için sadece orada bulunan çok daha fazla tuşa basmanız gerekir.

Özetle
Tabii ki, her ikisini de bilmek akıllıca olur ve Python oraya giderken R'in etki alanına özgü tasarım seçenekleri sadece geçici çalışma için daha basit hale getirir. R'nin en büyük dezavantajı, bulgularını sürdürülebilir bir şekilde uygulamaya çalıştığınızda temelde yapmanız gereken alanını terk etmenin zor olmasıdır.


4

R'ye bir programlama dili olarak değil, istatistiksel bir araç olarak bakarsanız, gerçekten harikadır. Stata veya SPSS'den çok daha fazla esnekliğe sahip, ancak ellerinden geleni de yapabiliyor. Kolejde Stata'yı öğrendim ve R'nin bakması yeterince kolaydı çünkü zaten istatistiksel aracın bakış açısına sahiptim ve başkalarının yaşayabileceği saf bir programlama dili deneyimim yoktu.

Sanırım programcı olanlar R'yi öğrenmeye ve anlamaya çalıştıklarında R ile ilgili hayal kırıklığı ortaya çıkıyor; ancak istatistiksel bir arka plandan R'ye gelenler için harika bir araçtır.

Zaten büyük bir programcı iseniz Python harika; fakat benim için sadece üniversiteden yeni programlama ve istatistik yapmaya yeni başlayanlar için, R çok daha iyi bir seçimdi. Gerçekten sadece hangisinin sizin beceri setinize uyması ve daha çok ilgisini çekmesi tercihidir.


3

Önceki cevaplardan bazılarına ekleme:

Tecrübelerime göre, R'nin dplyr + tidyr, ggplot ve Rmarkdown'ı ham verilerden hazırlanabilir sonuçlara ulaşmak için kullanmaktan daha kolay bir şey yoktur. Python çok şey sunuyor ve ben daha çok kullanıyorum, ama Hadley'nin paketlerinin birbirine bağlanma şeklini seviyorum.


2

Python'un bilim dışında geniş bir kabulü vardır, yani bundan faydalanırsınız. "R'ye Kızgın Bir Rehber" in işaret ettiği gibi, R, birinci dereceden sıfır yazılım geliştiricisine sahip olan bir topluluk tarafından geliştirilmiştir.

Bugün R'nin iki temel gücü olduğunu söyleyebilirim: bazı alanlarda gerçekten olgunlaşmış bazı özel paketler ve en son teknoloji ürünü yeniden üretilebilir araştırma paketi knitr.

Python her şey için daha uygun görünüyor.

Elbette, bu konudaki hemen hemen her şey gibi bir görüş. Bu iş parçacığının hala hayatta olduğunu hayret ediyorum.


2

Diğer cevaplarda açıklandığı gibi, Python iyi bir genel amaçlı programlama dilidir, R ise bir programlama dili olarak ciddi kusurlara sahiptir, ancak daha zengin bir veri analizi kütüphanesi kümesine sahiptir. Son yıllarda, Python, scikit-learn gibi olgun veri analiz kütüphanelerinin geliştirilmesiyle R'yi yakaladı, R ise hiçbir zaman sabit olmayacak. Uygulamada, Python'u (aslında, Hy ) hemen hemen her şey için kullanıyorum ve sadece nicel regresyon (Python'un istatistik modellerinde uygulamasının kırıldığı görülüyor) gibi nispeten ezoterik yöntemler için R'ye dönüyorum. Python'dan R'yi çağırmanın birkaç yolu vardır; PypeR, Windows sunucusu gibi düşmanca ortamlarda çalışmasını sağladığım kadar basit.

Düzenleme : Bu konuda daha fazla tartışmak isteyen herkesi, bu cevabın yorumunu yapmak yerine bağlantılı makalenin yazarları ile konuşmaya teşvik ediyorum.


8
ARrgh rehberinin R hakkında okuduğum en cüretsiz eleştiri (ve pek çok şey okudum).
Firebug,

10
"Belgeleme inanılmayacak kadar kötü", bu clueless değil. R gücü, programcı olmayanlara basitliği ve engin belgeleridir. “R'nin adı bile aptal olduğundan, R ile ilgili şeyleri faydalı bir şekilde google yapmak gerçekten zor. Üzgünüm. R'ye hoş geldiniz!”, Bu clueless. Etrafımdaki en karanlık paketlerin belgelerini bulmaya çalışırken hiçbir sorunla karşılaşmadım. "Sütunları isimlendirerek adlarını (çerçeve) atayarak yeniden adlandırıyorsunuz. Bunun nasıl ve neden işe yaradığını biliyor musunuz? Lütfen beni eğitin.", Hadi, denemiyor bile.
Firebug,

8
R google’ı C’den daha zor mu? Google akıllıdır. Programlama dili R ile ilgilendiğinizi öğrenir. R, çoğunlukla diğer programlama dillerinden gelen geçmişi olan kişiler tarafından eleştirilir. Üzgünüz, bu dillere alternatif olarak geliştirilmedi. İstatistikçiler tarafından ve onun için geliştirilmiştir. Sonuç olarak, bazı tasarım kararları optimal değildi, ancak ciddi kusurlar olduğunu söylemek biraz güçlü. Her programlama dili güçlü ve zayıf yönlerini öğrendi.
Roland,

5
Bir paket oluşturmak aslında çok kolaydır. Sadece, CRAN tarafından uygulanan kurallara (haklı olarak) uyarsanız karmaşıklaşır. Bir paket oluşturursanız, paketlerden seçici olarak alabilirsiniz. Vektör geri dönüşüm aslında bir güçtür. Altküme listesi ve vektörler arasında tutarsızlık yoktur. Gerisinin bir kısmı gerçekten de kusur olarak kabul edilebilir.
Roland,

6
R açıkça münasebetsiz "wat" çeşitliliğine sahip siğillere sahiptir (dizgeler AsAfftors). Ancak, başka hiçbir dilde , hatta uzaktan bile paralel olmayan istatistiksel kütüphaneleri vardır . Bu kütüphaneleri oluşturmak için gereken programlama, çoğumuzun yapması gerekenlerden çok daha ciddi. Bir battaniye ifadesi olarak, "R ciddi bir dil değildir", ipucu, umutsuzca paroşiyal, okuma yazma bilmeyen ve ekşi üzümler arasında bir yerdedir. Ve bunu R'nin temelde R'in kütüphaneleriyle Python olmasını isteyen biri olarak söylüyorum.
Paul,
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.