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:
- 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).
- 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 đó.
- Á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).
- Á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).
- 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ả Python và R 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
, RmySQL
cho R và MySQLdb
cho 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.table
gó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.table
cung 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 j
mệ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ẩn và câ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, ifelse
thự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 Python là pandas
thư 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 matrix
hoặ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 apply
hoặ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.table
như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 stringr
gó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 SciPy
và scikit-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, ggplot2
trê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 app
tí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 myAnalysis
bấ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ì.