İ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:
- Verileri bir tür kaynaktan (büyük olasılıkla bir SQL / noSQL veritabanı veya .csv dosyaları) almak.
- 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.
- Bazı fonksiyonları verilere uygulama (gruplama, silme, birleştirme, yeniden adlandırma).
- Verilere bir tür model uygulamak (regresyon, kümeleme, sinir ağı veya başka herhangi bir veya daha az karmaşık teori).
- 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
, RmySQL
R ve MySQLdb
Python 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.table
verileri 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, j
maddede 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ı pandas
kü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 matrix
veya 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 apply
veya 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.table
ancak 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, ggplot2
her ş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 myAnalysis
yerde 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.