Làm thế nào để R và Python bổ sung cho nhau trong khoa học dữ liệu?


54

Trong nhiều hướng dẫn hoặc hướng dẫn sử dụng, tường thuật dường như ngụ ý rằng R và python cùng tồn tại như là thành phần bổ sung của quá trình phân tích. Tuy nhiên, đối với con mắt chưa được huấn luyện của tôi, có vẻ như cả hai ngôn ngữ đều làm điều tương tự.

Vì vậy, câu hỏi của tôi là nếu có những ngóc ngách thực sự chuyên biệt cho hai ngôn ngữ hoặc nếu đó chỉ là một sở thích cá nhân thì nên sử dụng ngôn ngữ này hay ngôn ngữ kia?


2
Điều này thực sự không giống như một bản sao của chủ đề đó. Đây không phải là về cách sử dụng Python để làm thống kê, mà là về cách Python có thể bổ sung cho R (rõ ràng R sẽ được sử dụng để thực hiện các phân tích thống kê).
gung - Phục hồi Monica

4
R nếu bạn là một nhà thống kê 10 năm trước. Python nếu bạn muốn đưa mã của mình vào sản xuất ở đâu đó hoặc sử dụng lại nó.
djechlin


3
Do sự phổ biến của q này, và để đáp ứng các yêu cầu thông qua cờ, tôi đã mở lại nhưng đã biến nó thành CW.
Scortchi - Phục hồi Monica

1
Điều mà hầu hết các câu trả lời có xu hướng quên là họ đang so sánh ngôn ngữ Python với GNU-R triển khai . R cũng có các triển khai khác (xem Renjin , được viết bằng Java, Microsoft R Open , được biên dịch với Intel MKL, FastR , pqR , v.v.). Chúng cố gắng sửa một số vấn đề với GNU-R, một triển khai bảo thủ hơn nhiều. Ngoài ra, hãy nhớ R không có định nghĩa chính thức.
Firebug

Câu trả lời:


45

Họ là bổ sung. Đúng là cả hai có thể làm những điều giống nhau, nhưng điều này có thể nói về hầu hết các ngôn ngữ. Mỗi cái đều có điểm mạnh và điểm yếu. Triển vọng chung dường như là Python là tốt nhất để thu thập và chuẩn bị dữ liệu, cũng như cho phân tích văn bản. R được coi là tốt nhất cho phân tích dữ liệu, vì nó là ngôn ngữ thống kê trước hết.

R có một gói các gói cho bất cứ điều gì bạn có thể nghĩ đến, nhưng chủ yếu của nó là phân tích thống kê - từ phân tích chi bình phương đến phân tích nhân tố và mô hình nguy hiểm, rất dễ dàng và mạnh mẽ. Một số tên tuổi lớn nhất trong thống kê tạo ra các gói R và nó có một cộng đồng sống động để đáp ứng mọi nhu cầu của bạn. ggplot2là một tiêu chuẩn trong trực quan hóa dữ liệu (đồ thị, v.v.). R là một ngôn ngữ được vector hóa và được xây dựng để lặp qua dữ liệu một cách hiệu quả. Nó cũng lưu trữ tất cả dữ liệu trong RAM, là con dao hai lưỡi - nó rất linh hoạt trên các tập dữ liệu nhỏ hơn (mặc dù một số có thể tranh luận với tôi), nhưng nó không thể xử lý tốt dữ liệu lớn (mặc dù nó có các gói để vượt qua điều này , chẳng hạn như ff).

Python dễ học hơn đáng kể so với R - đặc biệt đối với những người có kinh nghiệm lập trình trước đó. R chỉ là ... kỳ lạ. Python rất tuyệt trong việc truy xuất dữ liệu và là ngôn ngữ được sử dụng để quét web (với sự tuyệt vời beautifulsoup). Python được biết đến với sức mạnh của nó trong phân tích chuỗi và thao tác văn bản. pandaslà một thư viện tuyệt vời để thao tác dữ liệu, hợp nhất, biến đổi, v.v., và nhanh chóng (và có lẽ lấy cảm hứng từ R).

Python là tuyệt vời khi bạn cần làm một số lập trình. Điều này không đáng ngạc nhiên vì nó là một ngôn ngữ có mục đích chung. R, tuy nhiên, với tất cả các phần mở rộng của nó, được xây dựng bởi các nhà thống kê cho các nhà thống kê. Vì vậy, trong khi Python có thể dễ dàng hơn và tốt hơn và nhanh hơn ở nhiều ứng dụng, R sẽ là nền tảng để phân tích thống kê.


13
Là một người biết cả hai, tôi đồng ý với điều này; có thể có rất nhiều tranh luận về phong cách, nhưng sự khác biệt lớn nhất là một khi đã đến lúc thực sự chạy các mô hình thống kê nguyên nhân Python chưa được phát triển. Các statsmodels gói giúp bạn một số điều cơ bản, nhưng không tiếp cận R, Stata hoặc Sas. Một ngoại lệ đáng chú ý là phân tích phong cách học máy, trong đó scikitlearn của Python rất phù hợp. Đối với mọi thứ khác, tôi nghĩ rằng các đối số tốt có thể được đưa ra rằng Python ít nhất bằng R và thường vượt trội. Học cả hai không có nghĩa là sử dụng thời gian xấu.
Jeff

2
Tôi đồng ý với hầu hết điều này - nhưng sẽ nhấn mạnh vấn đề nhiều hơn - R không tốt cho các tập dữ liệu lớn và không xử lý các tập dữ liệu thưa thớt (hầu hết các thư viện không hỗ trợ nó) rất tốt (đó là điều mà nhiều người thực hiện học máy) ví dụ: mô hình kiểu 'túi từ' trong đó số lượng thẻ của một yếu tố / biến phân loại .might nằm trong 1000s.
seanv507

10
Không bắt đầu một đối số trong luồng nhận xét, nhưng data.tablegói trong R được dành riêng cho công việc hiệu quả xung quanh các tập dữ liệu lớn và cắm tốt để xử lý phân tán.
ngôi sao sáng

3
Nếu bạn nghĩ rằng Python tốt hơn R khi truy xuất dữ liệu và phân tích chuỗi thì bạn đã sử dụng R rất sai. Điều tương tự đối với "R không tốt cho các tập dữ liệu lớn và không xử lý các tập dữ liệu thưa thớt (hầu hết các thư viện không hỗ trợ nó) rất tốt" .
gents

3
thêm vào sự thúc đẩy của Trevor data.table; Tôi cũng rất vui khi nói rvestlà một công cụ TUYỆT VỜI để xử lý hầu hết các tác vụ cào, và dễ dàng hơn để đứng dậy và chạy hơnbeautifulsoup
MichaelChirico

21

Tôi sẽ cố gắng đưa ra một câu trả lời chạm vào những điểm chính trong đó hai ngôn ngữ được sử dụng để phân tích dữ liệu / thống kê / phân tích dữ liệu và tương tự, như một người sử dụng cả hai.

Quy trình công việc trong phân tích dữ liệu thường bao gồm các bước sau:

  1. Tìm nạp dữ liệu từ một số loại nguồn (rất có thể là cơ sở dữ liệu SQL / noQuery hoặc tệp .csv).
  2. Phân tích dữ liệu theo định dạng hợp lý và hợp lý (khung dữ liệu) để người ta có thể thực hiện các thao tác và suy nghĩ ngay sau đó.
  3. Áp dụng một số chức năng cho dữ liệu (nhóm, xóa, hợp nhất, đổi tên).
  4. Áp dụng một số loại mô hình cho dữ liệu (hồi quy, phân cụm, mạng thần kinh hoặc bất kỳ lý thuyết phức tạp nào khác ít nhiều).
  5. Triển khai / trình bày kết quả của bạn cho đối tượng kỹ thuật nhiều hơn hoặc ít hơn.

Lấy dữ liệu

99% thời gian, quá trình lấy dữ liệu đi xuống đến truy vấn một số loại SQL hoặc cơ sở dữ liệu Impala: cả PythonR có khách hàng hoặc các thư viện cụ thể thực hiện công việc trong thời gian không và tốt như nhau ( RImpala, RmySQLcho R và MySQLdbcho Python làm việc trơn tru, không thực sự nhiều để thêm). Khi đọc các tệp .csv bên ngoài, data.tablegói cho R cung cấp chức năng freadđọc các tệp .csv lớn và phức tạp với bất kỳ tùy chọn phân tích tùy chỉnh nào trong thời gian ngắn và chuyển đổi kết quả trực tiếp thành các khung dữ liệu với tên cột và số hàng.

Sắp xếp các khung dữ liệu

Chúng tôi muốn dữ liệu được lưu trữ trong một số loại bảng để chúng tôi có thể truy cập bất kỳ mục, hàng hoặc cột đơn lẻ nào một cách dễ dàng.

Các R gói data.tablecung cấp nhiều cách cạnh tranh nhất nhãn, đổi tên, xóa và truy cập dữ liệu. Cú pháp tiêu chuẩn rất giống SQL dt[i, j, fun_by], nơi dự định là dt[where_condition, select_column, grouped_by (or the like)]; Các hàm do người dùng tùy chỉnh có thể được đặt trong đó cũng như trong jmệnh đề, để bạn hoàn toàn tự do thao tác dữ liệu và áp dụng bất kỳ hàm phức tạp hoặc ưa thích nào trên các nhóm hoặc tập hợp con (như lấy hàng thứ i, k-th phần tử và tính tổng của nó cho phần tử thứ (k-2) của hàng thứ i (i-1) khi và chỉ khi độ lệch chuẩn của toàn bộ cột là cái gì, được nhóm theo cột cuối cùng). Hãy nhìn vào điểm chuẩncâu hỏi tuyệt vời này về SO. Sắp xếp, xóa và đặt lại tên cột và hàng làm những gì chúng phải làm và các phương thức R được vector hóa tiêu chuẩn apply, sapply, lapply, ifelsethực hiện các hoạt động được vector hóa trên các cột và khung dữ liệu hoàn toàn, mà không lặp qua từng phần tử (hãy nhớ rằng bất cứ khi nào bạn đang sử dụng các vòng lặp trong R bạn đang làm nó sai rất tệ).

Counterweapon của Pythonpandasthư viện. Cuối cùng, nó cung cấp cấu trúc pd.DataFrame(mà Python tiêu chuẩn còn thiếu, vì một số lý do mà tôi vẫn chưa biết) xử lý dữ liệu cho những gì chúng là, cụ thể là các khung dữ liệu (thay vì một số numpy array, numpy list, numpy matrixhoặc bất cứ thứ gì). Các thao tác như nhóm, đặt tên lại, sắp xếp và tương tự có thể dễ dàng đạt được và ở đây, người dùng cũng có thể áp dụng bất kỳ chức năng tùy chỉnh nào cho tập dữ liệu được nhóm hoặc tập hợp con của khung bằng Python applyhoặc lambda. Cá nhân tôi không thích ngữ pháp df[df.iloc(...)]để truy cập các mục, nhưng đó chỉ là sở thích cá nhân và không có vấn đề gì cả. Điểm chuẩn cho các hoạt động nhóm vẫn kém hơn R một chút data.tablenhưng trừ khi bạn muốn tiết kiệm 0,02 giây để biên dịch, không có sự khác biệt lớn về hiệu suất.

Dây

Cách R để xử lý chuỗi là sử dụng stringrgói cho phép mọi thao tác văn bản, đảo chữ, biểu thức chính quy, dấu cách trắng hoặc tương tự một cách dễ dàng. Nó cũng có thể được sử dụng kết hợp với các thư viện JSON để giải nén các từ điển JSON và hủy liệt kê các phần tử của chúng, để người ta có một khung dữ liệu cuối cùng trong đó các tên cột và các phần tử là những gì chúng phải có, không có bất kỳ ký tự không phải UTF8 hoặc khoảng trắng nào trong đó.

Pandas của Python .str. cũng làm công việc tương tự như chơi với các biểu thức thông thường, theo dõi hoặc khác như đối thủ cạnh tranh của nó, vì vậy ngay cả ở đây không có sự khác biệt lớn về hương vị.

Áp dụng mô hình

Đây là nơi mà theo tôi, sự khác biệt giữa hai ngôn ngữ phát sinh.

Rcho đến ngày nay, một bộ thư viện vô song cho phép người dùng về cơ bản làm bất cứ điều gì họ muốn trong một đến hai dòng mã. Hồi quy chức năng hoặc đa thức tiêu chuẩn được thực hiện trong một lớp và tạo ra kết quả đầu ra có hệ số dễ đọc, kèm theo khoảng tin cậy tương ứng và phân phối giá trị p. Tương tự như vậy đối với việc phân cụm, tương tự như vậy đối với các mô hình rừng ngẫu nhiên, tương tự như vậy đối với các bản thảo, phân tích thành phần chính, phân tách giá trị số ít, phù hợp với hậu cần và nhiều hơn nữa. Đầu ra cho mỗi thứ ở trên rất có thể đi kèm với một lớp âm mưu cụ thể tạo ra trực quan hóa những gì bạn vừa làm, với màu sắc và bong bóng cho các hệ số và tham số. Kiểm tra giả thuyết, kiểm tra thống kê, Shapiro,

Python đang cố gắng theo kịp SciPyscikit-learn. Hầu hết các phân tích và mô hình tiêu chuẩn cũng có sẵn, nhưng chúng hơi dài để viết mã và ít trực quan hơn để đọc (theo ý kiến ​​của tôi). Máy móc phức tạp hơn bị thiếu, mặc dù một số có thể được truy trở lại một số kết hợp của các thư viện đã tồn tại. Một điều mà tôi thích làm trong Python hơn là trong R là phân tích văn bản theo từ với các đơn hàng bi-gram, tri-gram và cao hơn.

Trình bày kết quả

Cả hai ngôn ngữ đều có các công cụ vẽ đồ thị đẹp, ggplot2trên hết là R và tương đương với Python. Không thực sự cạnh tranh nhiều, họ làm công việc an toàn và âm thanh, mặc dù tôi tin rằng nếu bạn trình bày kết quả, bạn có thể phải sử dụng các công cụ khác. Có những công cụ thiết kế đầy màu sắc lạ mắt ngoài đó và cả Python và R đều không làm kinh ngạc khán giả với kéo và thả màu đỏ và màu xanh lá cây ưa thích. R gần đây đã công bố rất nhiều cải tiến về các shiny apptính năng của nó , về cơ bản cho phép nó tạo ra các đầu ra tương tác . Tôi không bao giờ muốn học nó, nhưng tôi biết nó ở đó và mọi người sử dụng nó tốt.


Lưu ý bên

Một lưu ý phụ tôi muốn nhấn mạnh rằng sự khác biệt chính giữa hai ngôn ngữ là Python là một ngôn ngữ lập trình mục đích chung, được tạo ra bởi và cho khoa học máy tính, tính di động, triển khai, v.v. Thật tuyệt vời với những gì nó làm và đơn giản để học; không có ai không thích trăn. Nhưng nó là một ngôn ngữ lập trình để làm lập trình.

Rmặt khác, được phát minh bởi và cho các nhà toán học, vật lý học, nhà thống kê và nhà khoa học dữ liệu. Nếu bạn đến từ nền tảng đó, mọi thứ đều có ý nghĩa hoàn hảo bởi vì nó hoàn toàn phản chiếu và tái tạo các khái niệm được sử dụng trong thống kê và toán học. Nhưng nếu, thay vào đó, bạn đến từ một nền tảng khoa học máy tính và muốn mô phỏng Java hoặc C trong R, bạn sẽ thất vọng; nó không có "đối tượng" theo nghĩa tiêu chuẩn (tốt, nó có, nhưng không phải là những gì người ta thường nghĩ là ...), nó không có các lớp theo nghĩa chuẩn (tốt, nó có, nhưng không phải là những gì thông thường nghĩ rằng chúng là ...), nó không có "con trỏ" hoặc tất cả các cấu trúc khoa học máy tính khác - nhưng chỉ vì nó không cần chúng. Cuối cùng nhưng không kém phần: tài liệu và gói rất đơn giản để tạo và đọc (nếu bạn đang sử dụng Rstudio); Có một cộng đồng lớn và đam mê ngoài kia, và Google phải mất 5 giây để hiểu "cách thực hiện vấn đề chèn ngẫu nhiên trong R" mà mục nhập đầu tiên chuyển hướng bạn đến một giải pháp cho vấn đề (được thực hiện bởi người khác) với mã tương ứng , không có thời gian.

Hầu hết các công ty công nghiệp đều có cơ sở hạ tầng được xây dựng bằng Python (hoặc môi trường thân thiện với Python) cho phép tích hợp dễ dàng mã Python ( import myAnalysisbất cứ nơi nào và về cơ bản bạn đã hoàn thành). Tuy nhiên, bất kỳ công nghệ hiện đại hoặc máy chủ hoặc nền tảng nào cũng dễ dàng chạy mã R nền mà không gặp vấn đề gì.


8
+6, đây là một câu trả lời rất hay: chi tiết, chính xác và cân bằng.
gung - Phục hồi Monica

+1 Câu trả lời hay nhất tại đây. Thật buồn cười, tôi đã đến R từ Java (mặc dù không theo lộ trình trực tiếp) và tôi đã khá thích nó. Tôi không nhất thiết nghĩ rằng làm các vòng lặp trong R có nghĩa là bạn đang làm sai. Đôi khi tôi thấy mình gãi đầu cố gắng phá vỡ bằng cách sử dụng các vòng lặp, nhưng không thể tìm ra cách nào đó (như tạo các giá trị biến mới trong tập dữ liệu dựa trên các điều kiện của các hàng trước đó và tìm nạp dữ liệu từ các bộ dữ liệu thứ cấp).
Yuval Spiegler

Nếu chỉ có rất nhiều gói R để làm bất cứ điều gì dưới ánh mặt trời thì tất cả đều được viết bởi những người biết làm máy tính thống kê / viết phần mềm toán học số đáng tin cậy và mạnh mẽ / biết phân tích số, v.v ... Một số gói R rất tốt. Một số lượng lớn các gói R, thậm chí một số được viết bởi các tác giả nổi tiếng, là toàn bộ rác - và nhiều người dùng thậm chí không nhận ra họ đang nhận rác. Ồ, đó là CRAN, nó phải tốt, hoặc ít nhất là chính xác, hoặc đáng tin cậy ... SAU !!!!!
Mark L. Stone

"R, cho đến ngày nay, một bộ thư viện vô song cho phép người dùng về cơ bản làm bất cứ điều gì họ muốn trong một đến hai dòng mã." Tôi đồng ý 100%, trừ khi nhận được câu trả lời đúng là một trong những điều người dùng muốn.
Mark L. Stone

8
@ MarkL.Stone Bạn có phiền khi trình bày một ví dụ về các gói tiêu chuẩn được viết bởi những người dùng nổi tiếng cho kết quả sai?
gents

15
  • Python là ngôn ngữ lập trình chung: do đó, rất tốt để thực hiện nhiều tác vụ khác ngoài phân tích dữ liệu. Ví dụ, nếu chúng ta muốn tự động hóa việc thực hiện mô hình của mình trong máy chủ sản xuất, thì python là một lựa chọn thực sự tốt. Các ví dụ khác bao gồm kết nối với phần cứng / cảm biến để đọc dữ liệu, tương tác với cơ sở dữ liệu (dữ liệu quan hệ hoặc không có cấu trúc như JSON), phân tích dữ liệu, lập trình mạng (TCP / IP), giao diện người dùng đồ họa, tương tác với shell, v.v. (Vâng, Tại sao một nhà khoa học dữ liệu muốn thực hiện nhiều loại nhiệm vụ như vậy, ít liên quan đến các mô hình dự đoán? Tôi nghĩ mọi người có định nghĩa khác nhau Nhà khoa học dữ liệu là gì?Trong một số tổ chức, phân tích dữ liệu và thực hiện phân tích mô tả bằng bảng điều khiển là đủ tốt cho doanh nghiệp và dữ liệu không đủ chín để thực hiện các mô hình dự đoán. Mặt khác, trong nhiều công ty nhỏ, mọi người có thể mong đợi các nhà khoa học dữ liệu thực hiện nhiều kỹ thuật phần mềm. Biết python sẽ khiến bạn độc lập với các kỹ sư phần mềm khác.)

  • R có rất nhiều gói thống kê tốt hơn nhiều so với python hoặc MATLAB. Bằng cách sử dụng R, người ta thực sự có thể nghĩ ở cấp độ mô hình thay vì mức độ chi tiết triển khai. Đây là một lợi thế rất lớn trong việc phát triển các mô hình thống kê. Ví dụ, nhiều người đang thực hiện thủ công các mạng thần kinh trong python; làm công việc như vậy có thể không giúp hiểu lý do tại sao các mạng thần kinh hoạt động, nhưng chỉ cần làm theo công thức để sao chép công việc của người khác để kiểm tra xem nó có hoạt động không. Nếu chúng ta đang làm việc trong R, chúng ta có thể dễ dàng tập trung vào toán học đằng sau mô hình, thay vì chi tiết triển khai.

Trong nhiều trường hợp, mọi người sử dụng chúng cùng nhau. Xây dựng phần mềm rất dễ thực hiện trong python và các mô hình xây dựng tốt hơn ở R. Nếu chúng tôi muốn cung cấp một mô hình trong sản xuất nhưng không phải là một tờ giấy, chúng tôi có thể cần cả hai. Nếu công ty của bạn có nhiều kỹ sư phần mềm, bạn có thể cần nhiều R. Và nếu công ty của bạn có nhiều nhà khoa học nghiên cứu, bạn có thể cần nhiều trăn hơn.


2
Câu trả lời hay nhưng bạn đã viết 'Jason' thay vì 'JSON', đã cho tôi một tiếng cười vui vẻ
par

Tôi không thực sự là thành viên của các cộng đồng thống kê hoặc "học máy", nhưng tôi nghĩ rằng sự sẵn có của các gói nâng cao có phần cụ thể của cộng đồng. Tôi có thể tin rằng nhiều kỹ thuật thống kê mới và hiện đại đi kèm với mã R. Nhưng khi tôi nhìn thấy thị giác máy tính / máy học / giấy mạng thần kinh đi kèm với mã ("cấp cao") ... chúng dường như là Matlab hoặc python.
GeoMatt22

1
+1 để thảo luận về cách các ngôn ngữ ảnh hưởng đến cách người ta nghĩ. Một lợi thế lớn của R là, bởi vì nó được xây dựng bởi các nhà thống kê cho các nhà thống kê, làm thế nào nó khuyến khích suy nghĩ về mặt mô hình hóa. Tiết lộ: Tôi thông thạo R, nhưng chỉ học hỏi về Python.
Ashe

Ừm ... còn gì scikit-learn? scikit-learn.org/ sóng ổn định
tàu chiến

10

Các lập trình viên của tất cả các sọc đánh giá thấp bao nhiêu sự lựa chọn ngôn ngữ là văn hóa . Các nhà phát triển web như Node.js. Các nhà khoa học như Python. Là một kỹ sư phần mềm polyglot, người có thể xử lý sự linh hoạt của Javascript và độ cứng của Java như nhau, tôi nhận ra rằng không có bất kỳ lý do nội tại nào mà các ngôn ngữ này làm xấu nhau - chỉ là số lượng lớn các gói, tài liệu, cộng đồng, sách, vv xung quanh họ.

(Vì lý do nội tại, một ngôn ngữ ngẫu nhiên tốt hơn một số ngôn ngữ khác, hãy xem các nhận xét sắp tới cho câu trả lời này.)

Dự đoán cá nhân của tôi là Python là con đường của tương lai bởi vì nó có thể làm tất cả mọi thứ có thể R - hay đúng hơn, đủ về những gì R có thể rằng các lập trình viên chuyên dụng đang làm việc để lấp đầy khoảng trống - và là một xa ngôn ngữ công nghệ phần mềm tốt hơn. Kỹ thuật phần mềm là một chuyên ngành liên quan đến:

  • tin tưởng mã của bạn đủ để đưa nó vào sản xuất (vì vậy bất kỳ mô hình học máy nào phục vụ người dùng trong thời gian thực)
  • đảm bảo mã của bạn có thể tiếp tục hoạt động khi nó trải qua sửa đổi và tái sử dụng (ví dụ khung kiểm tra đơn vị)
  • tập trung vào khả năng đọc, vì lợi ích của người khác và của chính bạn trong ít nhất là 6 tháng
  • nhấn mạnh sâu vào tổ chức mã, để dễ dàng tạo phiên bản, sao lưu cho các phiên bản làm việc trước đó và phát triển đồng thời bởi nhiều bên
  • thích các công cụ và công nghệ có tài liệu tốt hơn và lý tưởng nhất là với tài sản mà chúng hoàn toàn không hoạt động trừ khi bạn sử dụng chúng đúng cách (đây là điều tôi thích nhất với Matlab - Tôi google một câu hỏi và tôi phải đọc qua các diễn đàn khá khủng khiếp của chúng tìm kiếm một câu trả lời)

Cộng với Python thẳng thắn thì dễ học hơn.

Các nhà khoa học và nhà thống kê sẽ nhận ra họ là các bên liên quan đến thực hành kỹ thuật phần mềm tốt, không phải là một nghề độc lập và không bị làm mát. Chỉ là ý kiến ​​của tôi, nhưng các bài báo chứng minh tính giòn của mã học thuật sẽ hỗ trợ điều này.

Câu trả lời này là tất cả ý kiến ​​của tôi - nhưng bạn đã hỏi một câu hỏi rất quan tâm, và vì nó đã được đón nhận cho đến nay tôi cảm thấy bạn xứng đáng nhận được một ý kiến ​​không thông minh, hợp lý (tôi hy vọng!). Có một cuộc tranh luận nghiêm túc về Python trên R trên bảng và tôi sẽ cảm thấy hối hận khi cố gắng đăng câu trả lời phi đảng phái khi thực tế có thể là đảng phái.


Julia, khi nó lớn lên, sẽ là một sự thay thế tốt hơn Python?
kjetil b halvorsen

1
@kjetilbhalvorsen "khi nó lớn lên" là một từ "nếu", rất khó để thay thế một ngôn ngữ đã được thiết lập, và về cơ bản, đó là một lựa chọn cá nhân cho dù bạn muốn sử dụng công nghệ tiên tiến trước nguy cơ nó không bao giờ được chấp nhận. IMO, Python có động lực bây giờ. Tôi không quen thuộc lắm với Julia mặc dù vậy đây là một ý kiến ​​khá chung chung.
djechlin

1
Ngoại trừ viên đạn đầu tiên, tôi không thể thấy Python vốn đã vượt trội như thế nào trong bốn điểm còn lại.
Bọ lửa

4
"Python có thể làm mọi thứ mà R có thể" là sai. "đủ những gì R mà các lập trình viên tận tâm đang làm việc để lấp đầy các khoảng trống" , điều đó đúng với mọi thứ trên thế giới - mọi thứ đều có thể được thực hiện để làm bất cứ điều gì miễn là có ai đó làm việc trên đó.
gents

2
@djechlin Hoàn toàn không. Ví dụ về độ tin cậy của bạn là "vì vậy bất kỳ mô hình học máy nào phục vụ người dùng trong thời gian thực". Python tốt hơn về điều này vì nó hỗ trợ triển khai dễ dàng hơn nhiều so với R và chỉ có thế. Kiểm tra đơn vị, khả năng đọc, tổ chức và tài liệu không phải là phẩm chất vốn có. Bạn có thể thực hiện các thử nghiệm của riêng mình, làm cho mã của bạn dễ đọc hơn, sắp xếp nó và tài liệu R thực sự dễ hiểu.
Bọ lửa

8

Tôi là người dùng R nhưng tôi nghĩ Python là tương lai (tôi không nghĩ đó là cú pháp)

Python là tương lai
Lợi ích của Python là vì những người khác đã đề cập đến sự hỗ trợ rộng hơn nhiều và, đối với các lập trình viên, cú pháp logic hơn.
Ngoài ra khả năng bạn có thể dịch các phát hiện từ phân tích của mình vào một hệ thống sản xuất đơn giản hơn nhiều.
Có lẽ vì Python là mục đích chung còn R thì không, nhưng ngay cả tôi cũng nhướn mày khi thấy một đường ống R được sản xuất.
Nhưng không chỉ vậy, ngay cả đối với các ứng dụng Nâng cao, Python cũng nhanh chóng bắt kịp (Scikit-learn, PyBrain, Tensorflow, v.v.) và trong khi R vẫn là lingua franca trong các học giả về cách thực hiện các phương pháp thống kê Python đã trở nên rất lớn trong lĩnh vực chuyên nghiệp do sự ra đời của các thư viện chuyên ngành tiên tiến.

Nhưng R không tệ
Nhiều người dường như thích nhảy vào bandwagon "R có cú pháp xấu".
Tôi muốn đề xuất cú pháp của R là một điều tốt!
Các hàm gán, đánh giá lười biếng, đánh giá không chuẩn và các công thức là những lợi ích to lớn khi sử dụng R.
Nó giúp tiết kiệm rất nhiều thời gian mà không phải lo lắng về việc thoát các tên biến được tham chiếu trong tóm tắt của bạn hoặc cách xây dựng logic của những gì được mô hình hóa dựa trên cái gì hoặc nhìn vào tên names()và sau đó gán tên mới bằng cách thêm <- c("A", "B", "C").
Khi mọi người phàn nàn về cú pháp kỳ lạ của R, họ xem nó như một ngôn ngữ lập trình chứ không phải là một công cụ khoa học dữ liệu.
Là một người đến từ R và yêu dplyr, tôi thấy cú pháp của gấu trúc hơi vụng về khi so sánh.
Đúng là nó linh hoạt hơn một chút, nhưng đối với hầu hết các tác vụ, bạn cần nhiều thao tác bàn phím hơn để thực hiện một lệnh đơn giản hơn trong R chỉ đơn thuần là ở đó để đáp ứng trình phân tích cú pháp của Python, không thể hiện ý tưởng của bạn.

Tóm lại
Tất nhiên là khôn ngoan khi biết cả hai và trong khi Python đang đến đó, các lựa chọn thiết kế cụ thể cho miền của R chỉ đơn giản hơn cho công việc ad hoc. Hạn chế lớn của R là khó rời khỏi miền của nó, điều mà về cơ bản bạn phải làm một khi bạn cố gắng thực hiện phát hiện của mình một cách bền vững.


4

Nếu bạn xem R như một công cụ thống kê chứ không phải là ngôn ngữ lập trình, nó thực sự tuyệt vời. Nó có tính linh hoạt cao hơn nhiều so với Stata hoặc SPSS, nhưng có thể làm mọi thứ họ có thể. Tôi đã học Stata khi còn học đại học, và R rất dễ nhìn vì tôi đã có quan điểm về công cụ thống kê và không phải là trải nghiệm ngôn ngữ lập trình thuần túy mà người khác có thể có.

Tôi nghĩ rằng sự thất vọng với R xuất hiện khi những người lập trình viên cố gắng học và hiểu R; nhưng nó là một công cụ tuyệt vời cho những người đến với R thông qua một nền tảng thống kê.

Python là tuyệt vời nếu bạn đã là một lập trình viên tuyệt vời; nhưng đối với tôi là người mới bắt đầu lập trình và thống kê khi mới ra trường, R là lựa chọn tốt hơn nhiều. Nó thực sự chỉ là sở thích mà một trong những phù hợp với kỹ năng và sở thích của bạn nhiều hơn.


3

Thêm vào một số câu trả lời trước:

Theo kinh nghiệm của tôi, không có gì dễ dàng hơn việc sử dụng dplyr + tidyr, ggplot và Rmarkdown của R trong việc lấy từ dữ liệu thô đến kết quả có thể trình bày. Python cung cấp rất nhiều và tôi đang sử dụng nó ngày càng nhiều, nhưng tôi chắc chắn thích cách các gói của Hadley kết hợp với nhau.


2

Python có một sự chấp nhận rộng rãi ngoài khoa học, vì vậy bạn được hưởng lợi từ tất cả những điều đó. Như "Hướng dẫn tức giận về R" chỉ ra, R được phát triển bởi một cộng đồng, nơi phải đặt hàng đầu tiên cho các nhà phát triển phần mềm.

Tôi muốn nói rằng ngày nay R có hai thế mạnh chính: một số gói chuyên dụng thực sự trưởng thành trong một số lĩnh vực và gói nghiên cứu tái tạo hiện đại đan.

Python có vẻ phù hợp hơn với mọi thứ khác.

Đây là một ý kiến ​​của khóa học, vì hầu hết mọi thứ trong chủ đề này. Tôi rất ngạc nhiên khi chủ đề này vẫn còn sống.


2

Như được mô tả trong các câu trả lời khác, Python là ngôn ngữ lập trình đa năng tốt, trong khi R có lỗ hổng nghiêm trọng như ngôn ngữ lập trình nhưng có bộ thư viện phân tích dữ liệu phong phú hơn. Trong những năm gần đây, Python đã bắt kịp R với sự phát triển của các thư viện phân tích dữ liệu trưởng thành như scikit-learn, trong khi R sẽ không bao giờ được sửa chữa. Trong thực tế, tôi sử dụng Python (thực ra là Hy ) cho hầu hết mọi thứ và chỉ chuyển sang R cho các phương thức tương đối bí truyền như hồi quy lượng tử (việc thực hiện trong các số liệu thống kê của Python dường như bị phá vỡ). Có một số cách để gọi R từ Python; PypeR là một thứ đủ đơn giản để tôi có thể hoạt động trong môi trường thù địch như một máy chủ Windows.

Chỉnh sửa : Tôi khuyến khích bất cứ ai muốn tranh luận về vấn đề này hơn nữa để nói chuyện với các tác giả của bài tiểu luận được liên kết thay vì bình luận về câu trả lời này.


8
Hướng dẫn aRrgh đó là lời chỉ trích không biết gì nhất mà tôi từng đọc về R (và tôi đã đọc nhiều).
Bọ lửa

10
"Tài liệu này là vô cùng tồi tệ", đó là không biết gì. Sức mạnh R là sự đơn giản của nó đối với những người không lập trình và tài liệu rộng lớn của nó. "Bởi vì ngay cả tên của R cũng ngu ngốc, thật khó để google R mọi thứ theo cách hữu ích. Xin lỗi. Chào mừng bạn đến với R!", Điều đó thật không biết. Tôi chưa bao giờ gặp phải bất kỳ vấn đề nào khi cố gắng tìm tài liệu cho các gói khó hiểu nhất xung quanh. "Bạn đổi tên các cột bằng cách, ma quái, gán vào tên (khung). Bạn có biết cách thức và lý do tại sao nó hoạt động không? Xin hãy giáo dục tôi.", C'mmon, anh ấy thậm chí không thử.
Bọ lửa

8
Làm thế nào R khó google hơn C? Google rất thông minh. Nó học được rằng bạn quan tâm đến ngôn ngữ lập trình R. R hầu hết bị chỉ trích bởi những người có nền tảng từ các ngôn ngữ lập trình khác. Xin lỗi, nhưng nó không được phát triển thay thế cho các ngôn ngữ này. Nó được phát triển cho và bởi các nhà thống kê. Kết quả là, một số quyết định thiết kế không tối ưu, nhưng nói rằng có những sai sót nghiêm trọng thì hơi mạnh. Mỗi ngôn ngữ lập trình đều có điểm mạnh và điểm yếu.
Roland

5
Tạo một gói thực sự rất dễ dàng. Nó chỉ trở nên phức tạp nếu bạn tuân thủ các quy tắc (đúng) được thi hành bởi CRAN. Bạn có thể nhập có chọn lọc từ các gói nếu bạn tạo một gói. Vector tái chế thực sự là một thế mạnh. Không có sự không nhất quán giữa danh sách tập hợp con và vectơ. Một số phần còn lại thực sự có thể được coi là sai sót.
Roland

6
R rõ ràng có mụn cóc, một số loại "wat" không thể giải thích được (StringAsFactors). Nhưng nó cũng có các thư viện thống kê không có song song, thậm chí không từ xa, trong bất kỳ ngôn ngữ nào khác. Việc lập trình cần thiết để tạo ra các thư viện này nghiêm trọng hơn so với đại đa số chúng ta sẽ phải làm. Như một tuyên bố về chăn, "R không phải là một ngôn ngữ nghiêm túc" nằm ở đâu đó giữa những cây nho không biết gì, vô vọng, mù chữ và chua. Và tôi nói điều này như một người mong muốn rằng R về cơ bản là Python với các thư viện của R.
Paul
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.