Trong số Matlab và Python, ngôn ngữ nào tốt cho phân tích thống kê?


17

Trong số Matlab và Python, ngôn ngữ nào tốt cho phân tích dữ liệu thống kê chung? Những ưu và nhược điểm, ngoài khả năng tiếp cận, đối với mỗi là gì?


2
Đây phải là wiki cộng đồng, IMO.
Shane

Bạn có quan tâm để giải thích tại sao bạn cũng không thể nhìn vào R?
Dirk Eddelbuettel

@DirK: Tôi hầu như không nghe nói về R. Hơn nữa tôi muốn học một số ngôn ngữ lập trình như Python, và một lần nữa tôi cũng không nghĩ R ở bất cứ nơi nào gần với python, IMO. Tôi hy vọng nó trả lời câu hỏi của bạn.

2
Chọc một chút ở đây và tại StackOverflow về những gì mọi người khuyên dùng để phân tích và lập trình thống kê . Nhiều người trong chúng ta cảm thấy rằng không có sự thay thế thực sự cho R. Nhưng cũng giống như vẻ đẹp, điều này nằm trong mắt của kẻ si tình, thật may mắn.
Dirk Eddelbuettel

Về mặt địa lý học (trong đó tôi đã làm bằng tiến sĩ), tôi nghĩ rằng R được trang bị rất tốt (xem gstat, GeoR, v.v.). Ít nhất tôi không biết về sự bao phủ hoàn toàn của các kỹ thuật địa lý như vậy ở trăn. Và tại sao R "không ở gần với con trăn"? Tôi đã sử dụng cả hai và cho geostats tôi cảm thấy R khá rõ ràng vượt trội.
Paul Hiemstra

Câu trả lời:


29

Là người dùng Matlab cực kỳ nguy hiểm trong hơn 10 năm qua, tôi khuyên bạn nên tìm hiểu Python. Khi bạn đã đủ thành thạo ngôn ngữ, khi bạn làm việc với ngôn ngữ bạn đang học, có vẻ như bạn không đủ năng suất và bạn sẽ quay lại sử dụng ngôn ngữ tốt nhất mặc định của mình. Ít nhất, tôi sẽ đề nghị bạn cố gắng thành thạo như nhau trong một số ngôn ngữ (tôi cũng sẽ đề xuất R).

Những gì tôi thích về Matlab:

  • Tôi thành thạo trong đó.
  • Nó là ngôn ngữ chung giữa các nhà phân tích số.
  • các công cụ định hình là rất tốt. Đây là lý do duy nhất tôi sử dụng Matlab thay vì quãng tám.
  • Có một bản sao phần mềm miễn phí, quãng tám, có sự tuân thủ tốt với việc thực hiện tham chiếu.

Những gì tôi không thích về Matlab:

  • Không có một hệ thống tốt để quản lý các gói và tập lệnh của bên thứ ba (miễn phí hoặc khác). Mathworks kiểm soát 'trao đổi tập tin trung tâm' và việc cài đặt các gói bổ trợ có vẻ rất rắc rối, không có gì giống với hệ thống tuyệt vời mà R có. Hơn nữa, Mathworks không có động lực để cải thiện tình trạng này, vì họ kiếm tiền từ việc bán các hộp công cụ cạnh tranh với các gói phần mềm miễn phí;
  • Giấy phép tính toán song song trong Matlab cực kỳ tốn kém;
  • Phần lớn mã m, bao gồm nhiều chức năng của hộp công cụ và một số nội trang, được thiết kế rõ ràng là chính xác, với chi phí hiệu quả và / hoặc khả năng sử dụng. Ví dụ rõ ràng nhất về điều này là medianhàm Matlab , thực hiện một loại dữ liệu, sau đó lấy giá trị trung bình . Đây là thuật toán sai từ những năm 70.
  • lưu đồ thị vào tập tin là tốt nhất trong Matlab.
  • Tôi đã không thấy trải nghiệm người dùng của mình đã được cải thiện trong 5 năm qua (khi tôi bắt đầu sử dụng Matlab thay vì quãng tám), mặc dù Mathworks vẫn tiếp tục thêm chuông và còi. Điều này cho thấy tôi không phải là khách hàng mục tiêu của họ, thay vào đó họ đang tìm cách mở rộng thị phần bằng cách làm cho mọi thứ trở nên tồi tệ hơn đối với người dùng quyền lực.
  • Hiện tại có 2 cách để lập trình hướng đối tượng trong Matlab, điều này gây nhầm lẫn ở mức tốt nhất. Mã kế thừa sử dụng kiểu cũ sẽ tồn tại trong một thời gian.
  • Giao diện người dùng Matlab được viết bằng Java, có ý tưởng khó chịu về quản lý bộ nhớ.

+1, điểm tốt. Về điều này: "những ý tưởng khó chịu về quản lý bộ nhớ" .. thú vị, bạn có thể giải thích?
ars

1
ký ức của tôi đang đi đâu đó ; kinh nghiệm của tôi với Java bên ngoài việc sử dụng Matlab cho thấy đó là thủ phạm có khả năng và chạy vào -nojvmdường như để giúp ...
shabbychef

Ví dụ yêu thích của tôi về mã tích hợp lạ MATLAB là xáo trộn, sắp xếp lại dữ liệu với thứ tự được trả về bằng cách sắp xếp một vectơ ngẫu nhiên mới được tạo.

1
@mbq: shufflecó thể trong hộp công cụ, không phải là chứng khoán matlab. khó có thể tệ hơn dựng sẵn randperm, trả về chỉ số sắp xếp của một vectơ ngẫu nhiên. Một lần nữa, đây có lẽ là thuật toán sai (tôi mới tìm hiểu về việc xáo trộn Knuth-Fisher-Yates ở đây trên thống kê.SE) ..
shabbychef

1
@mbq: một điều tốt khác randpermlà nó bị ảnh hưởng bởi việc gieo hạt randn, trong khi phiên bản Knuth-Fisher-Yates có lẽ không thể truy cập vào hạt giống randn 'bên trong', và một phiên bản thuần túy quá chậm
shabbychef

11

Hãy chia nó thành ba khu vực (ngoài đỉnh đầu của tôi) nơi lập trình đáp ứng các số liệu thống kê: khủng hoảng dữ liệu, thói quen số (tối ưu hóa và như vậy) và thư viện thống kê (mô hình hóa, v.v.).

Đầu tiên, sự khác biệt lớn nhất là Python là ngôn ngữ lập trình có mục đích chung. Matlab là tuyệt vời miễn là thế giới của bạn gần như là đẳng cấu với một mảng số fortran. Khi bạn bắt đầu xử lý các vấn đề liên quan đến dữ liệu và các vấn đề liên quan, Python sẽ vượt qua Matlab. Ví dụ: xem cuốn sách của Greg Wilson: Data Crunching: Giải quyết các vấn đề hàng ngày bằng cách sử dụng Java, Python và hơn thế nữa .

Lần thứ hai, Matlab thực sự tỏa sáng với công việc số. Rất nhiều cộng đồng nghiên cứu sử dụng nó và nếu bạn đang tìm kiếm tiếng nói, một số thuật toán liên quan đến một bài báo trong cảm biến nén, bạn xa hơn khả năng tìm thấy một thực hiện trong Matlab. Mặt khác, Matlab là một loại PHP của máy tính khoa học - nó cố gắng để có một chức năng cho mọi thứ dưới ánh mặt trời. Kết quả thẩm mỹ và kiến ​​trúc thật điên rồ nếu bạn là một người đam mê ngôn ngữ lập trình, nhưng về mặt thực dụng, nó hoàn thành công việc. Rất nhiều thứ đã trở nên ít phụ thuộc hơn với sự gia tăng của Numpy / Scipy, bạn cũng có khả năng tìm thấy các thư viện tối ưu hóa và học máy có sẵn cho Python. Giao diện với C là dễ dàng trong cả hai ngôn ngữ.

Về sự sẵn có của các thư viện thống kê để lập mô hình và như vậy, cả hai đều hơi thiếu khi so sánh với một cái gì đó như R. (Mặc dù tôi nghi ngờ cả hai sẽ đáp ứng nhu cầu cho 80% số người làm công việc thống kê.) : Python như một bàn làm việc thống kê . Đối với phía Matlab, tôi biết có một hộp công cụ thống kê, nhưng tôi sẽ để ai đó hiểu rõ hơn về chỗ trống (kinh nghiệm của tôi với Matlab bị giới hạn trong công việc số không liên quan đến thống kê).


Các hộp công cụ thống kê trong Matlab khá thú vị. Có một cái gì đó tương tự cho R, ví dụ như bạn có thể nhanh chóng thử một loạt các chức năng phù hợp khác nhau (hồi quy)?
Alex R.

6

Tôi cũng là một người dùng Matlab cuồng nhiệt trong hơn 10 năm. Trong nhiều năm, tôi không có lý do gì để làm việc ngoài hộp công cụ tôi đã tạo cho công việc của mình. Mặc dù nhiều hàm được tạo cho hộp công cụ, tôi thường cần tạo thuật toán để phân tích quay vòng nhanh. Vì các thuật toán này thường sử dụng toán ma trận, Matlab là một ứng cử viên lý tưởng cho công việc của tôi. Ngoài hộp công cụ mã Matlab của tôi, những người khác trong nhóm của tôi đã làm việc nhiều về Java vì có khả năng tương tác rõ ràng giữa các ngôn ngữ. Trong nhiều năm, tôi hoàn toàn hài lòng với Matlab, nhưng khoảng 3 năm trước tôi đã quyết định bắt đầu quá trình chuyển đổi chậm chạp khỏi Matlab và vui mừng nói rằng tôi đã không mở nó trong khoảng một năm nay. Đây là lý do cho động thái của tôi:

  • Tôi làm việc với các hệ thống máy tính trực tuyến và ngoại tuyến, hệ thống cấp phép luôn là vấn đề đau đầu. Dường như điều đó luôn xảy ra khi chúng ta cần Matlab nhất, giấy phép sẽ hết hạn hoặc đột nhiên có vấn đề. Điều này luôn luôn là một vấn đề đau đầu. Ngoài ra, nếu chúng ta cần chia sẻ mã và bên kia không có giấy phép cho cùng một hộp công cụ, điều này tạo ra một vấn đề đau đầu. Nó không miễn phí
  • Tôi thường cần tạo bài thuyết trình. Mặc dù Matlab cung cấp các công cụ mở rộng để tạo số liệu, giúp thiết kế thuật toán trở nên rất mạnh mẽ, nhưng lưu hình ảnh để có thể chèn vào bản trình bày trông đẹp mắt không phải là nhiệm vụ đơn giản. Tôi thường phải chèn một tệp EPS vào Adobe Illustrator để loại bỏ tất cả rác, sửa các phông chữ và dọn sạch các dòng. Có một số công cụ để giúp với điều này trên trao đổi tập tin mặc dù (export_fig.m).
  • Tôi thường nhận được mã Matlab từ người khác. Khi điều này xảy ra, tôi hầu như luôn viết lại nó bởi vì: API của họ không tương thích với dữ liệu của tôi, mã của họ không có ý nghĩa, nó chậm, nó không tạo ra những gì tôi cần, ... Về cơ bản những người phát triển trong Matlab là không phải kỹ sư phần mềm và Matlab không khuyến khích bất kỳ loại nguyên tắc thiết kế nào.
  • Tôi là người sử dụng điện. Tôi thích thiết bị đầu cuối. Tôi ghét GUI - ghét nó. Và khi họ thêm dải băng kiểu "windows", tôi ghét nó thêm nữa. Về cơ bản, các tinh chỉnh của chúng đối với GUI và quản lý bộ nhớ khủng đã đẩy nút cuối cùng của tôi và tôi quyết định rời đi. Sử dụng -nodesktoptùy chọn hầu hết thời gian, nhưng có vấn đề.
  • Nhiều khả năng để thiết kế các chức năng (sử dụng OO hoặc thiết kế chức năng), nhưng không có khả năng nào cảm thấy đúng, hầu hết đều cảm thấy adhoc. Tôi không nhận được sự hài lòng từ việc thiết kế các chức năng tốt trong Matlab
  • Cộng đồng rất lớn, nhưng không dễ để chia sẻ và tìm mã tốt. Việc trao đổi tập tin không phải là tuyệt vời.

Đây chỉ là một vài trong số rất nhiều sự kìm kẹp của tôi với Matlab. Đây là một thuộc tính sáng chói: thật dễ dàng, thực sự dễ dàng để viết mã nhanh chóng (nếu không xấu xí). Mặc dù vậy, tôi đã bỏ nó và nhiệm vụ của tôi đã đưa tôi qua Clojure-> JavaScript-> Python <-> Julia; Vâng, tôi đã ở khắp mọi nơi.

  • Clojure: ngôn ngữ chức năng đẹp. Lý do tôi sử dụng Clojure là khả năng viết kịch bản Java. Rất nhiều cơ sở mã "lớn" của chúng tôi có trong Java, vì vậy điều này rất có ý nghĩa. Vào thời điểm đó, rất nhiều quá trình xử lý khoa học không có sẵn và cũng không có nhiều bằng trực quan. Nhưng tôi nghĩ điều này đang thay đổi.
  • Javascript: sau khi xem điểm chuẩn tại http://julialang.org/ và vì tôi chắc chắn quan tâm đến khả năng hiển thị của D3 , tôi đã quyết định dùng thử JavaScript. JavaScript đáng ngạc nhiên là rất nhanh. Nhưng nếu bạn thực sự muốn ghét chính mình, hãy học JavaScript.
  • Python: Python có một cộng đồng tuyệt vời và có rất nhiều dự án tuyệt vời đang diễn ra. IPython Notebook rất tuyệt vời vì nhiều lý do (một trong số chúng là bản sao đơn giản / quá khứ của các số liệu thành powerpoint). Các dự án như NumPy / SciPy / Scikit-Learn / Pandas đã thực sự làm cho Python trở nên thú vị và dễ sử dụng. Thật dễ dàng để sử dụng trên nhiều lõi hoặc cụm. Tôi đã thực sự hạnh phúc cho việc chuyển đổi.
  • Julia: Julia thật tuyệt vời. Đặc biệt đối với người dùng Matlab. Mặc dù ở giai đoạn sơ khai, rất nhiều thay đổi đang diễn ra. Một trong những nhược điểm chính của Python là nó không có tất cả các chức năng tích hợp mà Matlab có. Chắc chắn NumPy / SciPy mang chức năng đó, nhưng nó không được tích hợp sẵn và bạn phải đưa ra quyết định về việc nên là đối tượng python thuần hay đối tượng numpy. Julia về cơ bản có mọi thứ bạn muốn Python đến từ Matlab. Tôi sẽ đợi, nhưng đây là tùy chọn tốt nhất cho người dùng Matlab trong tương lai.
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.