2010-02-19 62 views
14

Phân tích/lập trình thống kê, là viết mã. Cho dù mô tả hay không quan trọng, Bạn viết mã để: nhập dữ liệu, để làm sạch nó, để phân tích nó và để biên dịch một báo cáo.Phát triển phần mềm so sánh với lập trình/phân tích thống kê như thế nào?

Phân tích dữ liệu có thể liên quan đến nhiều lần xoắn và lần lượt của các quy trình thống kê và các góc mà từ đó bạn xem dữ liệu của mình. Cuối cùng, bạn có nhiều tệp, với nhiều dòng mã, thực hiện các tác vụ trên dữ liệu của bạn. Một số trong số đó là tái sử dụng và bạn capsulate nó như là một "tốt để có" chức năng.

Quá trình "phân tích thống kê" này cảm thấy với tôi như "lập trình" Nhưng tôi không chắc nó cảm thấy giống với mọi người.

Từ Wikipedia article on Software development:

Sự phát triển phần mềm hạn thường dùng để chỉ hoạt động của lập trình máy tính, đó là quá trình viết và duy trì mã nguồn, trong khi cảm giác rộng hơn của thuật ngữ bao gồm tất cả những gì là liên quan giữa quan niệm của phần mềm mong muốn thông qua biểu thức cuối cùng của phần mềm. Do đó, phát triển phần mềm có thể bao gồm nghiên cứu, phát triển mới, sửa đổi, sử dụng lại, tái kỹ thuật, bảo trì hoặc bất kỳ hoạt động nào khác dẫn đến sản phẩm phần mềm. Đối với các hệ thống phần mềm lớn hơn, thường là được phát triển bởi một nhóm người, một số hình thức thường được theo dõi để hướng dẫn các giai đoạn sản xuất phần mềm.

Theo định nghĩa đơn giản này (và ý kiến ​​khiêm tốn của tôi), điều này nghe có vẻ giống như xây dựng một phân tích thống kê. Nhưng tôi tưởng tượng nó không phải là đơn giản.

Điều gì dẫn tôi đến câu hỏi của tôi: bạn có thể phác thảo những khác biệt nào giữa hai hoạt động này?

Nó có thể là về khía cạnh kỹ thuật, các chiến lược hoặc phong cách làm việc khác nhau và những gì bạn nghĩ là có liên quan.

Câu hỏi này đến với tôi từ các chủ đề sau:

+0

cho một điều, tôi không thể tưởng tượng một nhà phân tích thống kê băng keo! :) – RYFN

+1

Là một nhà thống kê, tôi có thể ...: D –

+0

Chính xác thì ý của bạn là gì khi bạn nói "điều này nghe có vẻ giống như xây dựng một phân tích thống kê"?Nếu bạn đang đề cập đến giai đoạn thì mỗi "ngành công nghiệp" đi qua nhiều hay ít tương tự (ý tưởng, phân tích, nguyên mẫu, thiết kế, phát triển, thị trường, vv) giai đoạn. –

Trả lời

1

Nếu bạn đang sử dụng R, sau đó bạn có thể sẽ được viết mã để giải quyết các câu hỏi thống kê của bạn, do đó, theo nghĩa này, phân tích thống kê là một tập con của lập trình.

Mặt khác, có rất nhiều người dùng SPSS chưa bao giờ mạo hiểm một chút chỉ và nhấp vào để giải quyết các vấn đề về số liệu thống kê của họ. Điều này cảm thấy ít giống như lập trình cho tôi.

+0

Phần mềm chỉ đơn thuần là công cụ, như bút chì, giấy và một cục tẩy. Hiểu biết là tối thượng. Mã không phải là đầu ra của phân tích, kết luận của phân tích là. Phần mềm/mã được sử dụng để quản lý các bước nhưng sự hiểu biết về mặt lý thuyết bao gồm sự hiểu biết ngầm định và rõ ràng về tất cả các khía cạnh mà phân tích là không cần thiết. Máy tính là quan trọng nhưng hãy nghĩ đến việc thực hiện một nhiệm vụ thống kê bằng tay và sau đó lập luận lập trình sẽ cạn kiệt. – Jay

12

Như tôi đã nói trong my response to your other question, những gì bạn mô tả là lập trình. Vì vậy, câu trả lời ngắn gọn là: không có sự khác biệt.Câu trả lời dài hơn một chút là tính toán thống kê và khoa học cần phải kiểm soát nhiều hơn xung quanh sự phát triển hơn so với các chương trình khác.

Một tỷ lệ phần trăm nhất định của phân tích thống kê có thể được thực hiện bằng cách sử dụng Excel, hoặc theo cách tiếp cận điểm-và-nhấp bằng SPSS, SAS, Matlab hoặc S-Plus (ví dụ). Một phân tích phức tạp hơn được thực hiện bằng cách sử dụng một trong những chương trình đó (hoặc R) có liên quan đến lập trình rõ ràng là một dạng phát triển phần mềm. Và loại máy tính thống kê này có thể hưởng lợi vô cùng từ việc tuân theo tất cả các phương pháp hay nhất từ ​​phát triển phần mềm: kiểm soát nguồn, tài liệu, kế hoạch dự án, tài liệu phạm vi, kiểm soát lỗi/thay đổi, v.v.

Hơn nữa, có nhiều loại khác nhau phân tích thống kê có thể theo các cách tiếp cận khác nhau, như với bất kỳ dự án lập trình nào:

  • Phân tích dữ liệu thăm dò phải tuân theo phương pháp lặp lại, như the Agile methodology. Trong trường hợp này, khi bạn không biết rõ các bước liên quan đến phía trước, điều quan trọng là sử dụng một phương pháp phát triển thích nghi và tự phản xạ.
  • Một loại phân tích thường xuyên hơn (ví dụ: một cuộc khảo sát hàng năm của chính phủ như Tổng điều tra) có thể theo một phương pháp truyền thống hơn như cách tiếp cận waterfall vì nó sẽ tuân theo các bước rất rõ ràng.

tôi sẽ đề nghị rằng bất kỳ thống kê sẽ được hưởng lợi từ việc đọc một cuốn sách như "Code Complete" (nhìn vào the other top books in this post): càng có nhiều tổ chức bạn là với phân tích của bạn, càng có nhiều khả năng thành công.

Phân tích thống kê theo một nghĩa nào đó yêu cầu thậm chí nhiều hơn thực tiễn tốt về kiểm soát phiên bản và tài liệu so với các chương trình khác. Nếu chương trình của bạn chỉ phục vụ một số nhu cầu kinh doanh, thì thuật toán hoặc phần mềm được sử dụng thực sự có tầm quan trọng thứ cấp miễn là chương trình hoạt động theo cách các đặc tả yêu cầu. Mặt khác, với tính toán khoa học và thống kê, chính xácreproducibility là tối quan trọng. Đây là một trong số John Chambers '(tác giả của ngôn ngữ S) nhấn mạnh chính trong "Software for Data Analysis". Đó là một lý do khác để thêm lập trình biết chữ (ví dụ: Sweave) như một công cụ quan trọng trong bộ công cụ của thống kê.

+0

Rất cám ơn trả lời của bạn Shane, tôi hy vọng sẽ thấy giống như nó trong phạm vi (mặc dù hơi nghi ngờ nó :)) Chúc mừng, Tal –

+0

Phát triển phần mềm đã giúp phát triển rất nhiều các phương pháp nhưng điều này thực sự chỉ là tốt quản lý dự án hoặc quy trình làm việc phải không? Điều này áp dụng cho tất cả các lĩnh vực công việc. – Jay

+1

Tuyệt đối. Đó không phải là để nói rằng không có các loại * quy trình công việc nào khác phù hợp với các nhiệm vụ khác nhau. Nó là tốt để nhận thức được sự khác biệt, strenghts/điểm yếu. – Shane

4

Có lẽ mẫu số chung là "giải quyết vấn đề".

Ngoài ra, tôi nghi ngờ tôi nghi ngờ tôi có thể cung cấp bất kỳ cái nhìn sâu sắc, nhưng tôi ít nhất có thể cung cấp một câu trả lời hạn chế từ kinh nghiệm cá nhân.

Vấn đề này phát sinh đối với chúng tôi khi thuê - tức là, chúng tôi thuê một lập trình viên và dạy họ thống kê hay chúng tôi thuê người thống kê và dạy họ lập trình? Lý tưởng nhất là chúng ta có thể tìm thấy một người thông thạo cả hai môn, và quả thực, đó là mạng thứ ba mà chúng ta bỏ, nhưng hiếm khi thành công.

Đây là một ví dụ. Sự khác biệt ổn định nhất giữa hai hoạt động này (phần mềm dev & phân tích thống kê) có lẽ là kết quả đầu ra tương ứng của chúng, hoặc phân phối dự án. Ví dụ, trong nhóm của tôi, một người nào đó đang tiến hành phân tích thống kê về kết quả của các thí nghiệm giai đoạn và giai đoạn thử nghiệm của chúng tôi (ví dụ: từ kết quả t-test, cho dù sự khác biệt là đáng kể hay liệu thử nghiệm có nên tiếp tục) hay không. Phân tích đó sẽ được gửi đến bộ phận tiếp thị mà họ sẽ sử dụng để sửa đổi các trang web bao gồm Trang web với quan điểm hướng tới cải thiện chuyển đổi.Nhiệm vụ thứ hai liên quan đến việc trừu tượng hóa và tự động hóa một phần các phân tích đó để kết quả có thể được xử lý trong thời gian gần thực.

Đối với nhiệm vụ đầu tiên, chúng tôi sẽ chỉ định một thống kê; cho người thứ hai, một lập trình viên. Vấn đề kinh doanh mà chúng ta đang cố gắng giải quyết là giống nhau cho cả hai nhiệm vụ, nhưng đầu tiên, mấu chốt là thống kê, thứ hai, các vấn đề thống kê đã được giải quyết phần lớn và mấu chốt là nhiệm vụ lập trình lõi (I/O).

Cũng chú ý đến sự phát triển của các công cụ liên quan đến hai hoạt động đã phát triển như thế nào để phân biệt giữa hai phần mềm (phân tích phần mềm &): các ngôn ngữ phát triển chủ đạo đang được sử dụng như các công cụ phân tích theo tên miền , đồng thời, các khung công tác tiếp tục được phát triển, cho phép các nhà phát triển không xây dựng nhanh các ứng dụng có trọng lượng, nhiệm vụ theo định hướng trong DSL. Ví dụ, python, một ngôn ngữ phát triển mục đích chung có R bindings (RPy2) cùng với trình thông dịch tương tác nguyên gốc (IDLE), tạo điều kiện thuận lợi cho việc sử dụng Python trong phân tích thống kê, đồng thời, có một xu hướng rõ ràng trong phát triển gói R hướng tới phát triển ứng dụng (web): R Ràng buộc cho Qt, gWidgetsWWW và RApache - là tất cả các gói R hướng đến khách hàng hoặc phát triển ứng dụng web và bản phát hành ban đầu của tôi là (tôi nghĩ) trong 18 tháng qua . Bên cạnh đó, vì ít nhất là quý cuối cùng của năm ngoái, tôi đã nhận thấy tần suất tăng tốc của các bài đăng trên blog, bản trình bày, v.v. về chủ đề phát triển ứng dụng web trong R.

Cuối cùng, tôi tự hỏi nếu câu hỏi của bạn có lẽ là bằng chứng về sự phổ biến ngày càng tăng của R. Đây là ý tôi. Một thập kỷ trước, khi chủ lao động của tôi mua một giấy phép trang web, tôi bắt đầu học và sử dụng một trong những sản phẩm máy tính thống kê chính (không có điểm nào ở đây để nói cái nào, nó bắt đầu bằng chữ "S"). tôi thấy nó không tự nhiên và không linh hoạt. Không giống như Perl (mà tôi đang sử dụng vào thời điểm đó) công cụ này không phải là một phần mở rộng của bộ não của tôi (mà không phải là một thuộc tính tùy chọn của một công cụ phân tích, với tôi nó là nhiều hơn hoặc ít hơn định nghĩa của một). Tương tác với hệ thống này giống như sử dụng máy bán hàng tự động - tôi đã chọn một số chức năng thống kê mà tôi muốn và sau đó đợi "đầu ra", thường là một bộ biểu đồ và bảng đầy màu sắc, có tác động cao. Gần như luôn luôn mặc dù những gì tôi muốn là để sửa đổi đầu vào của tôi hoặc sử dụng đầu ra đó cho bước phân tích tiếp theo. Điều đó dường như yêu cầu một chuyến đi riêng biệt đến máy bán hàng tự động. Thực tế là công cụ này đã được nhận thức theo ngữ cảnh - tức là, nó biết thống kê - trong khi Perl không, không bù đắp cho sự tương tác khó xử. Phân tích thống kê được thực hiện theo cách này sẽ không bao giờ bị lẫn lộn với phát triển phần mềm. (Một lần nữa, đây chỉ là một bản tóm tắt kinh nghiệm của riêng tôi, tôi không tuyên bố nó có thể được trừu tượng hóa. Nó cũng không phải là một đại dịch chống lại bất kỳ (hoặc tất cả) các nền tảng phân tích dữ liệu thương mại - hàng triệu người sử dụng chúng và chúng kiếm được hàng tỷ những người tạo ra chúng, vì vậy chúng ta hãy giả sử đó là những hạn chế của riêng tôi gây ra sự thất bại trong việc liên kết.)

Tôi chưa bao giờ nghe nói đến R cho đến khoảng 18 tháng trước, và tôi chỉ phát hiện ra nó trong khi quét PyPI (Giao diện Web) tới kho lưu trữ gói bên ngoài của Python) cho các thư viện thống kê cho python. Có tôi đi qua RPy, mà dường như rực rỡ nhưng yêu cầu một phụ thuộc được gọi là "R" (RPy tất nhiên thực sự chỉ là một tập hợp các ràng buộc Python để R).

Có lẽ R kháng cáo cho người lập trình và không lập trình bình đẳng, vẫn còn cho một lập trình viên/nhà phân tích, đây là một ơn trời. Nó đánh vào mọi thứ trong danh sách mong muốn của tôi cho một nền tảng phân tích dữ liệu: một công cụ dựa trên một ngôn ngữ lập trình tổng quát đầy đủ tính năng (trong trường hợp này là hậu duệ đã được chứng minh), một mô hình chức năng cơ bản, trình thông dịch tương tác tích hợp, dữ liệu gốc các loại được xây dựng từ đầu để phân tích dữ liệu và kiến ​​thức về miền được đưa vào. Phân tích dữ liệu trở nên giống mã hóa hơn. Cuộc sống là tốt.

Các vấn đề liên quan