Tại sao các công ty internet thích Java / Python cho công việc nhà khoa học dữ liệu?


53

Tôi thấy rất nhiều lần trong mô tả công việc cho nhà khoa học dữ liệu yêu cầu trải nghiệm Python / Java và bỏ qua R. Dưới đây là email cá nhân tôi nhận được từ nhà khoa học dữ liệu chính của một công ty tôi đã đăng ký thông qua Linkedin.

X, Cảm ơn bạn đã kết nối và bày tỏ sự quan tâm. Bạn có Kỹ năng phân tích tốt. Tuy nhiên, tất cả các nhà khoa học dữ liệu của chúng tôi phải có kỹ năng lập trình tốt về Java / Python vì chúng tôi là một tổ chức internet / di động và mọi thứ chúng tôi làm đều trực tuyến.

Trong khi tôi tôn trọng quyết định của nhà khoa học dữ liệu trưởng, tôi không thể có được một bức tranh rõ ràng về những nhiệm vụ mà Python có thể làm mà R không thể làm. Bất cứ ai có thể quan tâm để xây dựng? Tôi thực sự muốn học Python / Java, miễn là tôi có thêm một chút chi tiết.

Chỉnh sửa: Tôi tìm thấy một cuộc thảo luận thú vị trên Quora. Tại sao Python là ngôn ngữ được lựa chọn cho các nhà khoa học dữ liệu?

Edit2: Blog từ Udacity về Ngôn ngữ và Thư viện cho Machine Learning


8
Python là một sự thỏa hiệp tốt: nó cung cấp nhiều thư viện (không chuẩn) cho kho dữ liệu (gấu trúc, scikit, ...) và nhiều quy trình công nghiệp đã được mã hóa bằng python.
Manu H

4
"Các nhà khoa học dữ liệu của chúng tôi phải có kỹ năng lập trình tốt về Java / Python vì chúng tôi là một tổ chức internet / di động và mọi thứ chúng tôi làm đều trực tuyến" là một công cụ không theo trình tự lớn - kết luận không tuân theo tiền đề. Tôi nghi ngờ CDS chỉ đang cố gắng để thoát khỏi bạn.
Spainedman

5
@ManuH Nếu theo "không chuẩn", ý bạn là "không có trong thư viện chuẩn" thì bạn đã đúng. Nhưng những công cụ đó có mức độ sử dụng khá rộng và chắc chắn chúng là ngôn ngữ chính. numpy hiện có hơn 100 nghìn câu hỏi về SO, gấu trúc có 74k. Tôi nghĩ rằng bạn chắc chắn có thể làm cho một trường hợp rằng họ là tiêu chuẩn ngành . (Ít nhất là về phía phát triển phần mềm. Tôi hầu như không gọi mình là "nhà khoa học dữ liệu.")
jpmc26

2
"Nhà khoa học dữ liệu" không được xác định rõ ràng. Nhà khoa học dữ liệu về cơ bản là người có thể làm những việc hữu ích với dữ liệu. Họ không phải sử dụng các gói máy học hoặc thống kê. Ai đó có thể đang sử dụng Java / Scala / Spark / bất cứ điều gì để quản lý lượng lớn dữ liệu và nhận được thông tin chi tiết hữu ích mà không cần học máy.
Akavall

2
@ jpmc26 Vâng, đó là ý của tôi. Bây giờ tôi nhận ra rằng ngay cả các thư viện chưa đạt tiêu chuẩn ngành cũng có thể được đề cập (thêm một đối số cho python)
Manu H

Câu trả lời:


67

Vì vậy, bạn có thể tích hợp với phần còn lại của cơ sở mã. Có vẻ như công ty của bạn sử dụng hỗn hợp Java và python. Bạn sẽ làm gì nếu một góc nhỏ của trang web cần học máy; truyền dữ liệu xung quanh với cơ sở dữ liệu hoặc bộ đệm, thả xuống R, v.v. Tại sao không làm tất cả trong cùng một ngôn ngữ? Nó nhanh hơn, sạch hơn và dễ bảo trì hơn.

Biết bất kỳ công ty trực tuyến nào chỉ chạy trên R? Tôi cũng không...

Tất cả những gì đã nói Java là ngôn ngữ cuối cùng tôi làm khoa học dữ liệu.


1
Tôi đã định nói một kiến ​​trúc hướng dịch vụ cũng giúp các công nghệ cầu nối. PMML là một chút enterprisey; Tôi chưa sử dụng nó, nhưng của bạn là một cửa hàng Java, ngôn ngữ doanh nghiệp mẹ, vì vậy bạn không bao giờ biết ...
Emre

3
@Enthusiast đừng quên rằng bạn có thể chạy R theo python bằng RPy2 (ví dụ) để bạn có thể kết thúc (như tôi đã làm trong một công việc trước đó) chạy các mô hình được viết bằng R thông qua python để chúng có thể được trình bày qua giao diện web thông qua django.
MD-Tech

2
Chúng tôi đã xây dựng mô hình trong các tệp .r văn bản đơn giản được tải vào trình thông dịch R để kiểm tra (và để tạo điều kiện xây dựng). Trong khi điều này đang được xây dựng và thử nghiệm, chúng tôi đã xây dựng một dự án django python với một phần tham chiếu RPy2 và tạo các đối tượng RPy2. Các đối tượng này sau đó được sử dụng để tải các tệp R theo cùng một cách như bạn sẽ tải chúng trong trình thông dịch để chúng ta có thể truy cập các hàm bao bọc mô hình. Sau đó chúng ta có thể truyền dữ liệu từ cơ sở dữ liệu đến R thông qua python. Lớp python đã cho chúng ta trang web với django và kiểm soát cơ sở dữ liệu, v.v.
MD-Tech

1
@Enthusiast Các kết quả của mô hình đã được R trả về trong RPy2 và được trình bày ở mặt trước trong nhiều vỏ bọc khác nhau, chủ yếu là đồ thị.
MD-Tech

2
@Enthusiast Đó là một mạng lưới Bayes cho tài chính nhưng tôi không thể nói nhiều hơn thế. Mô hình được viết bằng chữ R. Chỉ cần văn bản đơn giản; Tôi đã chỉnh sửa nó trong Vim bất cứ khi nào tôi cần và nó đã được "triển khai" bằng cách tải mã R, dưới dạng văn bản, vào RPy2 bằng cách sử dụng nguồn ("our_code.r") trên các đối tượng RPy2. Nó đã được thực hiện theo cách này để chúng ta có thể chỉnh sửa mô hình. Đây không phải là một câu trả lời cho câu hỏi này; đó là câu trả lời cho câu hỏi chưa được hỏi;)
MD-Tech

24

Có thể có rất nhiều lý do như:

  1. Linh hoạt lực lượng lao động: Một lập trình viên Java / Python có thể được chuyển sang các nhiệm vụ hoặc dự án khác một cách dễ dàng.

  2. Ứng viên sẵn có: có rất nhiều lập trình viên Java / Python. Bạn không muốn giới thiệu một ngôn ngữ lập trình mới để sau đó phát hiện ra rằng không có nhân viên có trình độ hoặc chúng quá đắt.

  3. Tích hợp và ETL: Đôi khi nhận được dữ liệu với chất lượng phù hợp là phần khó nhất của dự án. Vì vậy, việc sử dụng cùng một ngôn ngữ với các hệ thống còn lại là điều tự nhiên.

  4. Định nghĩa mô hình kinh doanh: Hầu hết các quy tắc kinh doanh và mô hình kinh doanh đã được viết bằng ngôn ngữ này.

  5. Chỉ cần giữ mọi thứ đơn giản. Nó đã đủ khó để cập nhật với các công nghệ. Một cơ sở đa dạng của ngôn ngữ có thể hỗn loạn. R cho điều này, Ruby cho điều đó, Scala, Clojure, F #, Swift, Dart ... Họ có thể cần các máy chủ khác nhau, các đường dẫn khác nhau, một địa ngục để quản trị. Tất cả đều có IDE riêng với các công cụ và plugin (không phải lúc nào cũng miễn phí). Xem một số quan điểm của Bác Bob về lựa chọn ngôn ngữcông nghệ mới

Vì vậy, ngay cả khi bạn có lợi thế năng suất 5% - 15% khi sử dụng R cho nhiệm vụ cụ thể, họ có thể thích một công cụ chỉ thực hiện công việc ngay cả khi không theo cách hiệu quả nhất.


Mặc dù đúng, không có câu trả lời nào ở trên thực sự trả lời được câu hỏi. Nhận dữ liệu giúp giảm 99% số lần truy vấn cơ sở dữ liệu hoặc đọc .csvtệp - mà aim R thực sự là công cụ phù hợp nhất trên thị trường. Ứng viên sẵn có: rằng có nhiều lập trình viên Java hơn lập trình viên R không có nghĩa là bạn phải loại bỏ ứng viên R nếu bạn có. Nó không thực sự quan trọng như thế nào nhà khoa học thực hiện các bài tập của họ miễn là họ triển khai mã có thể đọc được có thể được chạy bởi một số máy chủ (hoặc bất kỳ điều gì khác mà công ty đang chạy).
gents

Tất nhiên bạn không nên loại bỏ ứng viên. Người quan trọng hơn nhiều so với công cụ. Nhóm của họ có thể học R và ứng viên có thể học Java / Python. Nhưng nó sẽ mất thời gian có nghĩa là tiền.
borjab

Điểm tôi chắc chắn không đồng ý là nó không bận tâm đến ngôn ngữ. Khi thành viên duy nhất của đội biết R không có ngày nghỉ và họ cần thay đổi, ông chủ sẽ không vui. Hoặc chỉ cần hỏi nhóm "Ồ tuyệt vời, chúng ta cần học một ngôn ngữ mới chỉ vì ngôn ngữ mới làm mọi thứ theo cách này". Có thể quản trị máy chủ là một bộ phận khác và các loại máy chủ mới cần một số phân tích, quy trình mới, v.v. Có thể bạn cần đèn xanh từ bảo mật CNTT để sử dụng ngôn ngữ mới.
borjab

@GennaroTedesco mã được viết bởi ứng viên phải được duy trì bởi các lập trình viên khác , trong khi làm việc cùng nhau và trong tương lai khi tác giả ban đầu sẽ tiếp tục. Không đủ để có một ứng viên biết rõ về công nghệ, điều quan trọng là phải xem xét việc thuê một ứng viên khác biết rõ về công nghệ khi bạn cần một người sẽ dễ dàng như thế nào . tất nhiên, một mảnh mới của công nghệ thích hợp có thể được giới thiệu nếu có một lý do chính đáng, nhưng cần phải có một tốt lý do để vượt trội nguy cơ kinh doanh như vậy.
Peteris

Bạn có thể cải thiện năng suất $ x bằng cách sử dụng R, nhưng sẽ không có ích gì nếu họ phải bỏ ra $ 2 nỗ lực để thay đổi quy trình làm việc của họ. Tại sao họ sẽ làm điều đó, đặc biệt là nếu họ có thể thuê một người khác có thể không phải trả họ $ 2?
dùng1908704

14

Nói chung, đối với các bài tập thống kê và khoa học dữ liệu thuần túy, R cung cấp các data.tablecông cụ và phương pháp tốt nhất và nhanh nhất (đặc biệt là nếu sử dụng gói), nếu không thì sẽ nặng hơn khi thực hiện trong Python (mặc dù tôi cho rằng Python có nghĩa là Pandas ). Hầu hết các nhà khoa học dữ liệu thực tế sử dụng R để thực hiện các mô hình và tính toán của họ, hoặc chỉ để xem cách dữ liệu hoạt động.

Sau khi bài tập hoàn thành, đã đến lúc làm cho nó có sẵn cho những người còn lại phải sử dụng nó (tức là để triển khai); Để đạt được mục đích này, thông thường nên gửi mã bằng Python vì hai lý do chính:

  1. Hầu hết các kiến ​​trúc được viết bằng Python hoặc thân thiện với Python, do đó sẽ dễ dàng thực hiện các mô hình được viết bằng ngôn ngữ đó.
  2. Cú pháp và ngữ pháp R cực kỳ phức tạp. Bản thân tôi rất ủng hộ R hơn bất cứ điều gì khác nhưng phải thừa nhận rằng cú pháp không thực sự đơn giản và có một đường cong học tập rất được chọn.

Ở trên đã nói, vẫn đúng là người ta có thể dễ dàng dịch mã R sang bất kỳ ngôn ngữ nào khác, cung cấp các phương thức, thư viện và gói có sẵn (trong Python hầu hết đều như vậy, vì vậy không có vấn đề gì cả). Rất nhiều cơ sở hạ tầng và cơ sở dữ liệu hỗ trợ mã R cơ bản, do đó tính di động không thực sự là vấn đề, đặc biệt là nếu người ta chỉ phải gửi kết quả tính toán (đến phần mở rộng đó, không ai thực sự nhìn thấy mã bên dưới).

Java hầu như không được sử dụng cho chính khoa học dữ liệu thuần túy (mặc dù Đại học Stanford có một bộ thư viện NLP học máy được viết bằng Java, theo như tôi nhớ - nhưng vui lòng kiểm tra). Lý do duy nhất tại sao nó có thể được yêu cầu chỉ là phần còn lại của công ty sử dụng nó cho các phạm vi lớn và họ không muốn thay thế nó bằng một cái gì đó mới.


Cảm ơn đã chia sẻ quan điểm và kinh nghiệm của bạn !! Điều này rất hữu ích. Từ đoạn cuối cùng thứ hai của bạn, tôi giả sử bạn đang nói về scikit-learn? hoặc bạn có nghĩa là RPy? Quan tâm đến công phu?
Nhiệt tình

1
Tôi chỉ đơn giản có nghĩa là bất cứ điều gì bạn đang làm trong R, rất có thể có một gói Python tương tự thực hiện cùng một công việc. Gấu trúc bao gồm hầu hết những thứ data.tablecung cấp; scikit-learn, như bạn đã đề cập, là một ví dụ khác, nhưng có nhiều hơn nữa theo trường hợp trong tay.
gents

1
Chính xác những gì tôi làm. Nghiên cứu trong R, sau khi hoàn thành, dịch sang python để tích hợp vào cơ sở mã. Nhưng @Enthusiast liệu bạn có thể làm điều tương tự trong công ty đó hay không phụ thuộc vào văn hóa của nó. Hầu hết mọi người sử dụng ngôn ngữ lập trình mà ông chủ của họ sử dụng. Và Python không khó học.
jf328

1
@GennaroTedesco: "Tôi chỉ đơn giản là bất cứ điều gì bạn đang làm trong R, rất có thể là một gói Python tương tự thực hiện cùng một công việc". Tôi thực sự không đồng ý với tuyên bố này. Ưu điểm lớn nhất với R là 90% các nhà thống kê xuất bản mới nhất và "vĩ đại nhất" của họ trong R, thay vì Python. Nếu các phương thức này bắt kịp, cuối cùng chúng có thể tìm đường đến Python. Nhưng đó cũng là một điểm cộng cho Python; có rất nhiều gói thống kê R chỉ là rác, trong khi tôi nghĩ các gói thống kê Python có nhiều khả năng là phương thức thử và đúng.
Vách đá AB

"Cú pháp và ngữ pháp R cực kỳ phức tạp. Bản thân tôi rất ủng hộ R hơn bất kỳ điều gì khác nhưng phải thừa nhận rằng cú pháp không thực sự đơn giản và có một đường cong học tập rất được chọn." Cả hai điều này dường như là ý kiến, nhưng một người ăn mặc như một tuyên bố khách quan và người kia phản đối nó. Tôi đang bối rối. Tôi cũng cảm thấy rằng cú pháp và thành ngữ của Python phức tạp hơn (nhấn mạnh OOP, đối với một), vì vậy tôi đôi khi bối rối trước câu trả lời này.
ngôi sao sáng

7

Tôi đã thấy khá nhiều công ty sử dụng tiêu đề Nhà khoa học dữ liệu cho các vai trò loại "Kỹ sư dữ liệu". Đặc biệt trong không gian dữ liệu lớn.

Nếu công ty đang sử dụng Hadoop hoặc một khung phân tán như Spark để thực hiện phân tích thì Java hoặc Python (hoặc có thể là Scala) sẽ là ngôn ngữ có ý nghĩa nhất.


Trong trường hợp này, tôi biết chắc chắn rằng vai trò đó là để mô hình hóa khi nó yêu cầu các kỹ năng học máy và danh sách các kỹ thuật được chỉ định.
Nhiệt tình

Họ vẫn có thể làm điều đó bên trong các công nghệ đó mặc dù sử dụng các thư viện Java / Python, một cái gì đó giống như H20 hoặc MLlib xuất hiện.
greenpenguin

4

Java

Tôi phải không đồng ý với các áp phích khác về câu hỏi java. Có một số cơ sở dữ liệu noQuery (như hadoop) mà người ta cần để viết các công việc mapreduce trong java . Bây giờ bạn có thể sử dụng HIVE để đạt được nhiều kết quả tương tự.

Con trăn

Cuộc tranh luận về python / R vẫn tiếp tục. Cả hai đều là ngôn ngữ có thể mở rộng, vì vậy có khả năng cả hai có thể có khả năng xử lý như nhau. Tôi chỉ biết R và kiến ​​thức về con trăn của tôi khá hời hợt. Nói như một chủ doanh nghiệp nhỏ, bạn muốn không có quá nhiều công cụ trong doanh nghiệp của mình nếu không sẽ có sự thiếu chiều sâu chung trong họ và khó khăn trong việc hỗ trợ họ. Tôi nghĩ rằng nó sẽ đi sâu vào kiến ​​thức công cụ trong nhóm. Nếu nhóm nghiên cứu tập trung vào python, thì việc thuê một nhà khoa học dữ liệu python khác sẽ có ý nghĩa khi họ có thể tham gia với cơ sở mã hiện tại và mã thử nghiệm lịch sử.


2

Ít nhất là đối với đội ngũ hiện tại của tôi (~ 80 nhà khoa học và kỹ sư dữ liệu), chúng tôi không có sở thích như vậy. Một nửa số nhà khoa học dữ liệu ở đây sử dụng R và một nửa khác sử dụng Python. Nhiều người có thể viết mã trong cả hai. Chúng tôi triển khai mã Python và R trong sản xuất.

Tôi không nghĩ bất kỳ nhà khoa học dữ liệu nào của chúng tôi sử dụng Java cả. Nếu họ cần xử lý dữ liệu lớn, họ có thể sử dụng SparkQuery hoặc PySpark. Nhóm kỹ thuật dữ liệu sử dụng kết hợp Java / Scala / Python / Go.

Nếu bạn là một trong số ít người làm dữ liệu trong một công ty nhỏ, tôi có thể hiểu tại sao họ yêu cầu một số kỹ năng ngôn ngữ nhất định để bạn có thể làm cả khoa học dữ liệu và kỹ thuật. Nhưng tbh, tôi nghĩ rằng hầu hết các công ty nhỏ sẽ không có dữ liệu đủ lớn để Python hoặc R không thể xử lý trong sản xuất.


Bạn có thể giải thích về loại hình kinh doanh mà tổ chức của bạn làm không? Và nó là trong công việc ML nhà hoặc cho khách hàng bên ngoài?
Nhiệt tình

1
@Enthusiast Kinh doanh bán lẻ. 100% cho ML trong nhà.
piggybox

0

Quan điểm của tôi với tư cách là một lập trình viên có mục đích chung với một chút kinh nghiệm R: R là tuyệt vời cho khoa học dữ liệu, nhưng nó hướng đến những người diễn giải dữ liệu theo cách thủ công. Nếu bạn muốn sử dụng kết quả cho một thứ gì đó tự động, bạn phải giao tiếp với thứ khác và điều đó sẽ khó thực hiện bằng ngôn ngữ cụ thể như R. Bạn có thể làm một trang web trong R không? Mặt khác, python đã sẵn sàng tạo ra các thư viện cho các công cụ xử lý dữ liệu và là ngôn ngữ lập trình cho mục đích chung không cản trở bạn làm bất cứ điều gì khác với nó. Đối với Java, nó tốt cho các dự án lập trình lớn với hàng trăm nghìn đến hàng triệu dòng mã. Nếu phần khoa học dữ liệu cần giao diện với điều đó, thì có thể có ý nghĩa để làm mọi thứ trong Java.

Rên rỉ ngẫu nhiên: Tại sao tôi phải đăng nhập riêng vào từng trang web StackExchange?


4
Mã R có thể dễ dàng chạy bởi hầu hết tất cả các công cụ có sẵn trên thị trường. Java gần như không sử dụng cho khoa học dữ liệu.
gents

1
@GennaroTedesco JAVA rất hữu ích cho việc mã hóa trong các công cụ bigdata. Vì vậy, một phần hữu ích cho truy vấn dữ liệu.
Nhiệt tình

-1

Các công cụ trong Python chỉ tốt hơn cộng đồng R. Ther R khá trì trệ trong khi cộng đồng Python đang phát triển rất nhanh. Đặc biệt là trong các công cụ cho Khoa học dữ liệu.
Ngoài ra Python hoạt động dễ dàng hơn với mọi thứ xung quanh nó. Bạn có thể dễ dàng cạo web, kết nối với cơ sở dữ liệu và như vậy. Điều đó làm cho việc tạo mẫu thực sự nhanh chóng.
Và nếu bạn có một nguyên mẫu hoạt động và quan tâm để làm cho nó nhanh hơn hoặc tích hợp nó vào quy trình làm việc của công ty, thì nó thường được triển khai lại trong Java.

R có một vài công cụ gọn gàng và trực quan hóa nhưng thật tuyệt vời khi xây dựng những thứ mới trong đó.


4
Điều đó là hoàn toàn sai trong tất cả các phương tiện.
gents
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.