İnternet şirketleri neden veri bilimci işi için Java / Python'u tercih ediyor?


53

Python / Java deneyimini isteyen veri bilimcileri için iş tanımında defalarca görüyorum ve R'yi göz ardı ediyorum. Aşağıda linkedin aracılığıyla başvurduğum bir şirketin baş veri bilimcisinden aldığım kişisel bir e-posta adresi.

X, İlgilendiğiniz ve bağlantı kurduğunuz için teşekkür ederiz. İyi Analytics Becerileriniz var. Bununla birlikte, tüm veri bilimcilerimiz Java / Python'da bir internet / mobil organizasyon olduğumuz ve yaptığımız her şey çevrimiçi olduğu için iyi programlama becerilerine sahip olmalıdır.

Baş veri bilimcisinin kararına saygı duymakla birlikte, Python'un R'nin yapamayacağı görevlerin neler olduğu konusunda net bir resim alamıyorum. Birileri detaylandırmak ister mi? Aslında biraz daha fazla bilgi edinmem şartıyla Python / Java'yı öğrenmek istiyorum.

Düzenleme: Quora hakkında ilginç bir tartışma buldum. Python neden veri bilimcileri için tercih edilen bir dil?

Düzen2: Makine Öğrenimi için Dil ve Kütüphanelerdeki Udacity Blog


8
Python iyi bir uzlaşmadır: veri bilimi için birçok (standart dışı) kütüphane sağlar (pandalar, scikit, ...) ve birçok endüstriyel süreç zaten python ile kodlanmıştır.
Manu H,

4
"veri bilimcilerimizin Internet / mobil bir organizasyon olduğumuz ve yaptığımız her şey çevrimiçi olduğu için Java / Python'da iyi programlama becerilerine sahip olmaları gerekiyor" muazzam bir düzenleyici değil - sonuç öncülden gelmiyor . CDS'nin senden kurtulmaya çalıştığından şüpheleniyorum.
Spacedman

5
@ManuH Eğer "standart dışı" derken, "standart kütüphanede değil" demek istiyorsun, haklısın. Ancak bu araçlar oldukça yaygın bir şekilde kullanılıyor ve kesinlikle dilin zımbaları. numpy şu anda SO hakkında 100.000'in üzerinde sorusu var, pandaların 74'ü var. Bence kesinlikle onların endüstri standardı olduğuna dair bir dava açabilirsin . (En azından yazılım geliştirme tarafında. Kendimi zorlukla "veri bilimcisi" olarak adlandırırdım.)
jpmc26

2
"Veri Bilimcisi" iyi tanımlanmış bir terim değildir. Veri Bilimcisi temelde verilerle faydalı şeyler yapabilen bir kişidir. Makine öğrenimi veya istatistiksel paket kullanmak zorunda değiller. Birileri büyük miktarda veriyi yönetmek ve herhangi bir makine öğrenmesi olmadan faydalı bilgiler almak için Java / Scala / Spark / kullanıyor.
Akavall

2
@ jpmc26 Evet demek istedim. Şimdi, henüz endüstri standartlarına ulaşmamış kütüphanelerden bile bahsedilebileceğini anlıyorum (python için bir argüman daha)
Manu H

Yanıtlar:


67

Böylece kod tabanının kalanıyla bütünleşebilirsiniz. Görünüşe göre şirketiniz Java ve python karışımı kullanıyor. Sitenin küçük bir köşesinde makine öğrenmesi gerekiyorsa ne yapacaksınız; Verileri bir veritabanıyla veya önbellekle dolaştırıp R'ye bırakma vb. Neden hepsini aynı dilde yapmıyorsun? Daha hızlı, daha temiz ve bakımı kolaydır.

Yalnızca R’de çalışan herhangi bir çevrimiçi şirketi tanıyor musunuz? Hiçbirini yapmam...

Bütün bunlar Java'nın veri bilimini yapacağım son dil olduğunu söyledi.


1
Servis odaklı bir mimarinin köprü teknolojilerine de yardımcı olduğunu söylemek üzereydim. PMML biraz enterprisey; Ben kullanmadım, ama sizinki bir Java mağazası, ana girişimci dilleri, bu yüzden asla bilmiyorsunuz ...
Emre

3
@ Meraklısı, RPy2 kullanarak (örneğin) Rt'yi python altında çalıştırabileceğinizi unutmayınız, böylece R (python aracılığıyla yazılmış) bir web arayüzü aracılığıyla sunulabilecek şekilde çalışan (önceki bir işte yaptığım gibi) çalışabilirsiniz. django üzerinden.
MD-Tech

2
Modeli, test etmek (ve yapıyı kolaylaştırmak için) R yorumlayıcısına yüklenen düz metin .r dosyalarında oluşturduk. Bu inşa edilirken ve test edilirken RPy2'ye başvuran ve RPy2 nesneleri oluşturan bir python django projesi yaptık. Bu nesneler daha sonra R dosyalarını yorumlayıcıya yüklediğiniz şekilde yüklemek için kullanıldı, böylece modeli saran işlevlere erişebildik. Daha sonra veriyi veritabanından R'ye python ile iletebiliriz. Python katmanı bize django ile web ön yüzünü verdi ve veri tabanı vb. Üzerinde kontrolü yaptı ..
MD-Tech

1
@ Meraklısı Model sonuçları RPy2 içinde R tarafından geri döndürülmüş ve ön taraftaki grafiklerde çoğunlukla çeşitli grafiklerde sunulmuştur.
MD-Tech

2
@ Meraklısı Finans için bir Bayesian ağıydı ama bundan daha fazlasını söyleyemem. Model düz R olarak yazılmıştır. Sadece düz metin; Ne zaman ihtiyacım olursa Vim'de düzenliyordum ve RPy2 nesnelerindeki kaynağı ("our_code.r") kullanarak R kodunu metin olarak RPy2'ye yükleyerek "konuşlandırıldı". Bu şekilde yapıldı, böylece modeli düzenleyebiliriz. Bu, bu sorunun cevabı değil; sorulmamış olanın bir cevabı;)
MD-Tech

24

Bunun gibi birçok neden olabilir:

  1. İşgücü esnekliği: Bir Java / Python programcısı başka işlere veya projelere kolayca taşınabilir.

  2. Adayların bulunabilirliği: Bol miktarda Java / Python programcısı var. Daha sonra kalifiye işçi olmadığını veya çok pahalı olduğunu bulmak için yeni bir programlama dili tanıtmak istemezsiniz.

  3. Entegrasyon ve ETL: Bazen verileri doğru kalitede elde etmek projenin en zor kısmıdır. Bu nedenle, diğer sistemlerle aynı dili kullanmak doğaldır.

  4. İşletme modeli tanımı: Çoğu işletme kuralları ve işletme modelleri zaten bu dillerde yazılmıştır.

  5. Sadece işleri basit tutmak. Zaten teknolojilerle güncel olmak için yeterince zor. Farklı bir dil temeli kaotik olabilir. Bunun için R, bunun için Ruby, Scala, Clojure, F #, Swift, Dart ... Farklı sunuculara, farklı yollara, idare etmeye cehenneme ihtiyaçları olabilir. Hepsinde araçlar ve eklentiler içeren kendi IDE'leri vardır (her zaman ücretsiz değildir). Bob Amca'nın dil seçimi ve yeni teknolojiler hakkındaki bazı noktalarına bakın

Dolayısıyla, belirli bir görev için R'yi kullanarak% 5 -% 15 verimlilik avantajınız olsa bile, en verimli şekilde olmasa bile işi yapan bir aracı tercih edebilirler.


Doğru olmasına rağmen, yukarıdakilerin hiçbiri aslında soruyu yanıtlamaz. Verilerin elde edilmesi, bir veritabanını sorgulama veya .csvdosyaları okuma zamanının% 99'unu azaltır - bu amaç R'nin pazardaki en uygun araçtır. Adayların mevcudiyeti: R programcılarından daha fazla Java programcısı olduğunu, varsa bir R adayını atmanız gerekmediği anlamına gelmez. Bilim adamının, bazı sunucular (veya şirketin çalıştırdığı herhangi bir şey) tarafından çalıştırılabilir okunabilir bir kod dağıttığı sürece egzersizlerini nasıl gerçekleştirdiği önemli değildir.
09'da

Elbette adayı atmamalısın. Kişi araçtan çok daha önemlidir. Takımları R öğrenebilir ve aday Java / Python öğrenebilir. Ancak para anlamına gelen zaman alacaktır.
borjab

Kesinlikle katılmıyorum nokta dil onun umrunda değil. R'i tanıyan ekibin tek üyesi tatil olmadığında ve değişiklik yapmaları gerektiğinde patron mutlu olmaz. Ya da sadece ekibine sorun: "Harika, yeni bir dil öğrenmemiz gerekiyor, çünkü yeni olan böyle yapar". Sunucu yönetimi başka bir departman olabilir ve yeni tipte sunucuların bazı yeni analizlere, prosedürlere vb. İhtiyacı vardır. Yeni bir dil kullanmak için BT güvenliğinden gelen yeşil ışığa ihtiyacınız olabilir.
borjab

@GennaroTedesco, aday tarafından yazılan kodun , birlikte çalışırken ve aynı zamanda asıl yazarın ilerleyeceği bir gelecekte çalışacak şekilde, diğer programcılar tarafından korunmalıdır . Teknolojiyi iyi tanıyan bir adayı olması yeterli değildir , ihtiyacınız olduğunda, teknolojiyi iyi tanıyan başka bir adayı işe almanın ne kadar kolay olacağını düşünmek önemlidir . Tabii ki, iyi bir neden varsa, yeni bir niş teknolojisi ortaya çıkarılabilir, ancak bu tür iş risklerinden daha ağır basmak için iyi bir neden olması gerekir.
Peteris

Sen R kullanarak bir $ x verimlilik iyileştirme olabilir, ama eğer hiçbir yardım var onlar harcamak zorunda $ iş akışlarında değişikliklere çaba 2x. Bunu neden yapıyorlardı, özellikle 2x $ 'a mal olamayacak başka birisini işe alabilirlerse ?
user1908704

14

Genel olarak, veri bilimi ve istatistik alıştırmaları için R'nin en iyi ve en hızlı (özellikle data.tablepaketi kullanıyorsanız ) araç ve yöntemleri sunduğu, aksi takdirde Python'da uygulanması daha ağır olacağı doğrudur ( Python tarafından hepimiz Pandalar demek istiyoruz). ). Çoğu veri bilimcisi, modellerini ve hesaplamalarını yapmak için ya da sadece verinin nasıl davrandığını görmek için aslında R'yi kullanırlar.

Egzersiz tamamlandıktan sonra, onu kullanmak zorunda kalanların (yani konuşlandırmak için) diğer kişilerin kullanımına sunma zamanıdır; Bu amaç için genellikle Python’da iki ana nedenden dolayı kodun gönderilmesi tercih edilir:

  1. Mimarilerin çoğu Python'da yazılmıştır veya Python'a uygundur, bu nedenle bu dilde yerel olarak yazılmış modelleri uygulamak daha kolay olacaktır.
  2. R sözdizimi ve gramer oldukça karmaşıktır. Ben kendimden R’yi başka hiçbir şeyden çok daha fazla severim ancak sözdiziminin gerçekten kolay olmadığını ve öğrenilmiş bir öğrenme eğrisi olduğunu kabul etmek zorundayım.

Yukarıda belirtilenler, R kodu kolayca başka bir dile çevrilebilir, ancak metotlar, kütüphaneler ve paketler mevcutsa (Python'da çoğu problem vardır, bu yüzden hiç sorun olmaz) doğrudur. Çok sayıda altyapı ve veri tabanı, altta yatan R kodunu destekliyor, bu nedenle taşınabilirlik gerçekten bir sorun değil, özellikle de birinin hesaplamaların sonuçlarını sunması gerekiyorsa (bu kapsamda, hiç kimse altta yatan kodu gerçekten görmez).

Java, saf veri biliminin kendisi için neredeyse hiçbir işe yaramaz (Stanford Üniversitesi, Java'da hatırladığım kadarıyla Java'da yazılmış bir makine öğrenen NLP kütüphanesi koleksiyonuna sahip olmasına rağmen - ama kontrol edin). Gerekli olabilmesinin tek nedeni, şirketin geri kalanının büyük miktarlarda kullanması ve yeni bir şeyle değiştirmek istememesidir.


Bakış açınızı ve deneyiminizi paylaştığınız için teşekkür ederiz !! Bu yardımcı olur. İkinci son paragrafınızdan, scikit-learn hakkında konuştuğunuzu varsayıyorum? Yoksa RPY mi demek istedin? Detaylandırmak ister misiniz?
Meraklısı,

1
Demek istediğim, R'de ne yapıyorsanız yapın, muhtemelen aynı işi yapan benzer bir Python paketi var. Pandalar, data.tablesunduğu şeylerin çoğunu kapsar ; Sizin de belirttiğiniz gibi, scikit-learn başka bir örnektir, ancak eldeki davaya göre çok daha fazlası var.
18'de

1
Tam olarak ne yapıyorum. R'de yapılan araştırma, bir kez bittiğinde, kod tabanına entegre olmak için python'a çevrilir. Ancak @ Meraklısı, o şirkette aynı şeyi yapıp yapamayacağının kültürüne bağlıdır. Çoğu insan patronunun kullandığı programlama dilini kullanır. Ve Python'u öğrenmek zor değil.
jf328

1
@GennaroTedesco: "R'de ne yaparsanız yapın, muhtemelen aynı işi yapan benzer bir Python paketi var" demek istiyorum. Aslında bu ifadeye kesinlikle katılmıyorum. R'nin en büyük avantajı, istatistikçilerin% 90'ının Python yerine en son ve en "R" harflerini yayınlamalarıdır. Bu yöntemler başarılı olursa, sonunda Python'a gidebilirler. Ama bu aynı zamanda Python için bir artı; Python istatistik paketlerinin denenmiş ve gerçek yöntemlerden daha muhtemel olduğunu düşünüyorum, ancak sadece çöp olan birçok R istatistik paketi var.
Cliff AB

“R sözdizimi ve dilbilgisi son derece karmaşık. Ben kendimi R'den çok daha fazla tercih ediyorum, ancak sözdiziminin gerçekten kolay olmadığını ve öğrenilmiş bir öğrenme eğrisi olduğunu itiraf etmek zorundayım.” Bunların ikisi de görüş gibi görünüyor, ancak biri nesnel bir ifade olarak giyinmiş, diğeri buna karşı çıkıyor. Şaşırdım Ayrıca Python'un sözdiziminin ve deyimlerin daha karmaşık olduğunu da hissediyorum (biri için OOP vurgusu), bu yüzden bu cevabımla kafam karıştı.
parlak yıldız

7

"Data Engineer" tipindeki rolleri için Data Scientist ünvanını kullanan birkaç şirket gördüm. Özellikle büyük veri alanlarında.

Eğer şirket Hadoop veya Spark gibi dağıtılmış bir çerçeve kullanıyorsa, o zaman Java veya Python (veya muhtemelen Scala) 'da analitiktir ve en mantıklı olan dillerdir.


Bu durumda, rolün makine öğrenmesi becerileri ve belirtilen tekniklerin listesi için istendiği gibi modelleme için olduğundan eminim.
Meraklısı,

H20 ya da MLlib gibi akla gelen Java / Python kütüphanelerini kullanırken de bu teknolojilerin içinde hala bunu yapabilirlerdi.
greenpenguin

4

Java

Java ile ilgili diğer afişlere katılmam gerek. Biri Java'da mapreduce işleri yazmak için gereken bazı noSQL veritabanları (hadoop gibi) vardır . Şimdi aynı sonucu elde etmek için HIVE kullanabilirsiniz .

piton

Python / R tartışması devam ediyor. Her ikisi de genişletilebilir dillerdir, bu nedenle potansiyel olarak her ikisi de aynı işleme yeteneğine sahip olabilir. Sadece R'yi biliyorum ve piton bilgim oldukça yüzeysel. Küçük bir işletme sahibi olarak konuşurken, işletmenizde çok fazla araç bulunmasını istemiyorsanız, aksi takdirde genel olarak derinlemesine bir eksikliği olacak ve onları desteklemekte zorluk çekeceksiniz. Takımda takım bilgisinin derinliğine ineceğini düşünüyorum. Eğer takım python'a odaklanmışsa, o zaman başka bir python veri bilimcisi işe almak, mevcut kod tabanı ve tarihi deney koduyla ilgilenebilecekleri için mantıklı olacaktır.


2

En azından şu anki ekibim için (~ 80 veri bilimcisi ve mühendis), böyle bir tercihimiz yok. Buradaki veri bilimcilerin yarısı R, bir diğer kısmı Python kullanıyor. Birçok kişi her ikisini de kodlayabilir. Üretimde Python ve R kodlarını kullanıyoruz.

Veri bilimcilerimizin hiçbirinin Java kullandığını sanmıyorum. Büyük verilerle uğraşmaları gerekiyorsa, SparkSQL veya PySpark'ı kullanabilirler. Veri mühendisliği ekibi Java / Scala / Python / Go'nun bir karışımını kullanıyor.

Küçük bir şirketteki az sayıdaki veri insanından biriyseniz, neden belirli dil becerilerine ihtiyaç duyduklarını anlayabiliyorum, böylece hem veri bilimi hem de mühendislik yapabilirsiniz. Ancak tbh, bence çoğu küçük şirket Python veya R'nin üretimde kullanamayacağı kadar büyük veriye sahip olmayacak.


Kuruluşunuzun yaptığı iş türünü açıklayabilir misiniz? Ve evde ML işinde mi yoksa dış müşterilerde mi?
Meraklısı

1
@ Meraklısı Perakende iş. Kurum içi ML için% 100.
piggybox

0

Küçük bir R deneyimi olan genel amaçlı bir programcı olarak benim bakış açım: R, veri bilimi için mükemmel, ancak verileri elle yorumlayan insanlara yönelik. Sonuçları otomatikleştirilmiş bir şey için kullanmak istiyorsanız, başka bir şeyle arabirim kurmanız ve R gibi bir soruna özel bir dilde başka bir şey yapmanın zor olması gerekir. :) Öte yandan, python veri bilimi konularında hazır kütüphanelere sahip ve onunla başka bir şey yapmanın önüne geçmeyen genel amaçlı bir programlama dili. Java gelince, yüzbinlerce ila milyonlarca satır kod içeren büyük programlama projeleri için iyidir. Eğer veri bilimi bölümü bununla arayüze ihtiyaç duyuyorsa, o zaman Java'da her şeyi yapmak mantıklı gelebilir.

Rastgele whine: Neden her StackExchange sitesinde ayrı ayrı oturum açmak zorundayım?


4
R kodu, piyasada bulunan hemen hemen tüm araçlar tarafından kolayca çalıştırılabilir. Java, veri bilimi için neredeyse hiçbir işe yaramaz.
16'da

1
@GennaroTedesco JAVA, büyük veri araçlarında kodlama yapmak için kullanışlıdır. Bu yüzden kısmen veri sorgulamak için kullanışlıdır.
Meraklısı,

-1

Python'daki araçlar R'den sadece daha iyi. Thert topluluğu oldukça durgun, Python topluluğu gerçekten hızlı bir şekilde gelişiyor. Özellikle Veri Bilimi araçlarında.
Ayrıca Python etrafındaki her şeyle daha kolay çalışır. Web'i kolayca kazıyabilir, veritabanlarına bağlanabilirsiniz. Bu prototiplemeyi çok hızlı yapar.
Ve eğer çalışan bir prototipiniz varsa ve daha hızlı hale getirmek veya şirketin iş akışına entegre etmek için özen gösterirseniz, genellikle Java'da yeniden düzenlenir.

R'nin birkaç zarif aracı ve görselleştirmesi var, ancak içinde yeni şeyler inşa etmek o kadar da iyi değil.


4
Bu her anlamda tamamen yanlıştır.
16'da
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.