Bối cảnh: Tôi là một nhà khoa học dữ liệu tại một công ty khởi nghiệp ở Austin và tôi đến từ trường cấp ba (Vật lý). Tôi sử dụng Python hàng ngày để phân tích dữ liệu, nhưng sử dụng R một chút. Tôi cũng sử dụng C # /. NET và Java (chỉ khoảng hàng ngày), tôi đã sử dụng C ++ rất nhiều ở trường học.
Tôi nghĩ vấn đề chính của việc sử dụng Python cho số (trên R) là quy mô của cộng đồng người dùng. Vì ngôn ngữ đã tồn tại mãi mãi, rất nhiều người đã làm những việc mà bạn có thể muốn làm. Điều này có nghĩa là, khi gặp vấn đề khó khăn, bạn chỉ cần tải gói và đi làm. Và R "chỉ hoạt động": bạn cung cấp cho nó một bộ dữ liệu và nó biết những thống kê tóm tắt nào hữu ích. Bạn cung cấp cho nó một số kết quả, và nó biết những gì bạn muốn. Tất cả các âm mưu phổ biến bạn muốn thực hiện đều có ở đó, thậm chí một số cốt truyện bí truyền mà bạn sẽ phải tìm kiếm trên Wikipedia. Đẹp như scipy / numpy / pandas / statsmodels / vv. là dành cho Python, chúng không ở cấp độ của thư viện chuẩn R.
Ưu điểm chính của Python so với R là ngôn ngữ lập trình thực sự trong họ C. Nó dễ dàng thay đổi, do đó, có thể hiểu được rằng bất cứ thứ gì bạn có trong hộp cát của bạn đều có thể được sử dụng trong sản xuất. Python có Object Orientation nướng, trái ngược với R nơi mà nó cảm thấy giống như một suy nghĩ lại (bởi vì nó là). Có một số thứ khác mà Python cũng làm rất tốt: xử lý luồng và xử lý song song khá dễ dàng và tôi không chắc đó có phải là trường hợp của R. Và học Python cũng cung cấp cho bạn một công cụ kịch bản mạnh mẽ. Ngoài ra còn có các IDE thực sự tốt (miễn phí) cho Python, những IDE tốt hơn nhiều nếu bạn sẵn sàng trả (dưới 100 đô la) và tôi không chắc đây là trường hợp của R - IDE R duy nhất tôi biết là R Studio, khá tốt, nhưng không tốt bằng PyDev + Eclipse, theo kinh nghiệm của tôi.
Tôi sẽ thêm điều này như một chút của một kicker: vì bạn vẫn còn đi học, bạn nên nghĩ về công việc. Bạn sẽ tìm thấy nhiều bài đăng công việc cho các nhà phát triển Python có tay nghề cao hơn so với các nhà phát triển R có tay nghề cao. Ở Austin, việc làm cho các nhà phát triển Django là loại rơi khỏi bầu trời. Nếu bạn biết R thực sự rõ ràng, có một vài nơi bạn sẽ có thể tận dụng kỹ năng đó (chẳng hạn như Revolution Analytics), nhưng rất nhiều cửa hàng dường như sử dụng Python. Ngay cả trong lĩnh vực phân tích dữ liệu / khoa học dữ liệu, nhiều người dường như đang chuyển sang Python.
Và đừng đánh giá thấp rằng bạn có thể làm việc với / cho những người chỉ biết (nói) Java. Những người đó sẽ có thể đọc mã Python của bạn khá dễ dàng. Điều này sẽ không nhất thiết là trường hợp nếu bạn thực hiện tất cả công việc của mình ở R. (Điều này xuất phát từ kinh nghiệm.)
Cuối cùng, điều này nghe có vẻ hời hợt, nhưng tôi nghĩ rằng tài liệu Python và các quy ước đặt tên (được tuân thủ một cách tôn giáo, hóa ra) lại đẹp hơn nhiều so với tài liệu R thực dụng. Điều này sẽ được tranh luận sôi nổi, tôi chắc chắn, nhưng điểm nhấn trong Python là khả năng đọc. Điều đó có nghĩa là các đối số cho các hàm Python có tên mà bạn có thể đọc và điều đó có nghĩa là một cái gì đó. Trong R, tên đối số thường bị cắt ngắn --- Tôi thấy điều này ít đúng trong Python. Điều này nghe có vẻ khoa trương, nhưng nó khiến tôi phải viết những thứ như 'xlab' khi bạn có thể dễ dàng đặt tên cho một đối số 'x_label' (chỉ một ví dụ) --- điều này có tác dụng rất lớn khi bạn cố gắng học API mô-đun / gói mới. Đọc tài liệu R giống như đọc các trang dành cho người dùng Linux --- nếu đó là những gì làm nổi thuyền của bạn, thì sẽ tiếp thêm sức mạnh cho bạn.
Tất cả điều đó đang được nói, tôi đề nghị những điều sau đây (cũng là quy trình công việc điển hình của tôi): vì bạn biết Python, hãy sử dụng nó làm công cụ đầu tiên của bạn. Khi bạn thấy Python thiếu, hãy học đủ R để làm những gì bạn muốn và sau đó:
- Viết các tập lệnh trong R và chạy chúng từ Python bằng mô đun quy trình con, hoặc
- Cài đặt mô-đun RPy.
Sử dụng Python cho những gì Python giỏi và điền vào các khoảng trống với một trong những điều trên. Đây là quy trình làm việc bình thường của tôi --- Tôi thường sử dụng R để vẽ đồ thị và Python cho việc nâng vật nặng.
Vì vậy, để tóm tắt: vì sự nhấn mạnh của Python vào khả năng đọc (tìm kiếm từ "Pythonic"), sự sẵn có của các IDE tốt, miễn phí, thực tế là trong họ ngôn ngữ C, khả năng lớn hơn là bạn sẽ có thể viết hoa bộ kỹ năng và phong cách ngôn ngữ tài liệu tốt hơn xung quanh, tôi khuyên bạn nên biến Python thành công cụ của mình và chỉ dựa vào R khi cần thiết.
Ok, đây là (cho đến nay) câu trả lời phổ biến nhất của tôi từ trước đến nay trên một trang web stack, và nó thậm chí không phải là số 1 :) Tôi hy vọng điều này đã giúp một vài người trên con đường này.
Bằng mọi giá, tôi đã đi đến kết luận sau vài năm trong lĩnh vực này:
Đây có lẽ là câu hỏi sai.
Đặt câu hỏi "tôi có nên học công nghệ đặc biệt này không" là một câu hỏi tồi. Tại sao?
- Công nghệ thay đổi. Bạn sẽ luôn phải học một công nghệ khác. Nếu bạn đi làm ở Twitter, họ điều hành Scala. Một số nơi là cửa hàng Python. Một số nơi không quan tâm. Bạn sẽ không được thuê vì bạn biết hoặc không biết một số công nghệ cụ thể - nếu bạn không thể học một công nghệ mới, bạn có thể (và nên) bị sa thải. Giống như, nếu một chiếc cờ lê ống mới xuất hiện, và bạn là một thợ sửa ống nước, và bạn không thể hiểu được cách mà cờ lê ống mới hoạt động, có lẽ bạn là một thợ sửa ống nước khá tệ hại.
- Đưa ra lựa chọn "Tôi có học công nghệ này" hay "Tôi có dành nhiều thời gian hơn để giải quyết các vấn đề thực sự không", bạn nên luôn luôn chọn cách sau, không có ngoại lệ.
Là một nhà khoa học dữ liệu, công việc của bạn là giải quyết các vấn đề . Một chút khôn ngoan đó luôn bị mất đi trong mỗi cuộc hội thảo hoặc cuộc gặp gỡ mà bạn tham dự - mọi cuộc nói chuyện "dữ liệu lớn" mà tôi từng thấy đều tập trung vào công nghệ, chứ không phải giải quyết vấn đề. Việc giải quyết vấn đề thực tế thường được đưa xuống một vài slide ở cuối:
[Tiêu đề trò chuyện = "Học sâu khi khởi động mới tuyệt vời"] ... [45 phút sơ đồ và kỹ thuật-babel trong đó tôi khoanh vùng và kiểm tra điện thoại của mình] ... Và, sau khi triển khai cụm Hadoop của chúng tôi và [Khu vực Ben ra một lần nữa] chúng ta có thể điều hành thói quen học tập sâu của mình, [thức dậy: đây là lý do tại sao tôi đến!] các chi tiết thuộc sở hữu độc quyền. Câu hỏi?
Điều này mang lại một ấn tượng xấu rằng lĩnh vực này là về công nghệ, và nó không đúng. Nếu bạn thực sự giỏi về Scala, hoặc Python hoặc R, nhưng bạn thực sự kém trong việc giải quyết vấn đề, bạn sẽ trở thành một nhà khoa học dữ liệu tệ hại .
Paco Nathan đã ở Austin một vài tháng trước tại một hội nghị "dữ liệu lớn" kéo dài một ngày và nói một cái gì đó như "Hóa học không phải là về ống nghiệm". Điều đó khá nhiều tiền - khoa học dữ liệu không phải là về Scala, hay Hadoop, hay Spark, hay bất cứ thứ gì khác về công nghệ-du-jour xuất hiện. Vào cuối ngày, tôi muốn thuê những người suy nghĩ chứ không phải những người lão luyện trong việc sử dụng Stack Overflow để học các bộ công cụ.
Tương tự như vậy, nếu bạn đi phỏng vấn xin việc và họ không thuê bạn chỉ vì bạn không biết một số ngôn ngữ lập trình, thì công ty đó thật tệ . Họ không hiểu "nhà khoa học dữ liệu" nghĩa là gì và có lẽ tốt hơn cho bạn nếu nó không thành công.
Cuối cùng, nếu khả năng giải quyết vấn đề của bạn là ngoài lề (trung thực với chính mình), hoặc bạn thực sự chỉ thích công nghệ, hoặc học công nghệ là điều bạn thực sự yêu thích (một lần nữa, hãy trung thực), sau đó học nhiều công nghệ. Bạn sẽ luôn có thể tìm thấy các vai trò loại "kỹ sư dữ liệu" phù hợp với bộ kỹ năng của bạn. Đây không phải là một điều xấu, các kỹ sư dữ liệu bôi trơn các bánh xe và giúp bạn có thể làm công việc của mình như một nhà khoa học dữ liệu. (Sự khác biệt gần giống với kiến trúc sư phần mềm so với nhóm phát triển.)