Các công cụ và giao thức cho khoa học dữ liệu có thể tái tạo bằng Python


50

Tôi đang làm việc trên một dự án khoa học dữ liệu bằng Python. Dự án có nhiều giai đoạn. Mỗi giai đoạn bao gồm lấy một tập dữ liệu, sử dụng tập lệnh Python, dữ liệu phụ, cấu hình và tham số và tạo một tập dữ liệu khác. Tôi lưu trữ mã trong git, vì vậy phần đó được bảo hiểm. Tôi muốn nghe về:

  1. Công cụ kiểm soát phiên bản dữ liệu.
  2. Công cụ cho phép tái tạo các giai đoạn và thí nghiệm.
  3. Giao thức và cấu trúc thư mục đề xuất cho một dự án như vậy.
  4. Công cụ xây dựng / chạy tự động.

2
Đâu là câu hỏi trong câu hỏi này? Vui lòng dành chút thời gian để xem lại hướng dẫn của Trung tâm trợ giúp , cụ thể: "Nếu động lực của bạn khi đặt câu hỏi là 'Tôi muốn tham gia vào một cuộc thảo luận về ______', thì bạn không nên hỏi ở đây."
Không khí

"Bạn chỉ nên hỏi những câu hỏi thực tế, có thể trả lời dựa trên những vấn đề thực tế mà bạn gặp phải."
Yuval F

Đây là thực tế, có thể trả lời và dựa trên một vấn đề thực tế theo cách tương tự như "Hãy cho tôi biết cách thực hiện khoa học dữ liệu" là thực tế, có thể trả lời và dựa trên một vấn đề thực tế.
Không khí

Câu trả lời:


46

Chủ đề nghiên cứu tái sản xuất (RR) ngày nay rất phổ biến và do đó, rất lớn , nhưng tôi hy vọng rằng câu trả lời của tôi sẽ đủ toàn diện như một câu trả lời và sẽ cung cấp đủ thông tin cho nghiên cứu tiếp theo , nếu bạn quyết định làm như vậy.

Mặc dù các công cụ dành riêng cho Python dành cho RR chắc chắn tồn tại ngoài đó, tôi nghĩ sẽ tập trung hơn vào các công cụ phổ quát hơn (bạn không bao giờ biết chắc ngôn ngữ lập trình và môi trường máy tính nào bạn sẽ làm việc trong tương lai). Đã nói rằng, hãy xem những công cụ có sẵn trong danh sách của bạn.

1) Công cụ kiểm soát phiên bản dữ liệu . Trừ khi bạn có kế hoạch làm việc với (rất) dữ liệu lớn , tôi đoán, sẽ có ý nghĩa khi sử dụng tương tự git, mà bạn sử dụng để kiểm soát phiên bản mã nguồn. Cơ sở hạ tầng đã có. Ngay cả khi các tệp của bạn là nhị phân và lớn, lời khuyên này có thể hữu ích: https://stackoverflow.com/questions/540535/managing-large-binary-files-with-git .

2) Công cụ để quản lý quy trình và thí nghiệm RR . Dưới đây là danh sách các công cụ phổ biến nhất trong danh mục này, theo sự hiểu biết tốt nhất của tôi (theo thứ tự phổ biến giảm dần):

  • Hệ thống quản lý quy trình làm việc của công ty Taverna ( http://www.taverna.org.uk ) - rất chắc chắn, nếu hơi quá phức tạp, bộ công cụ. Công cụ chính là một phần mềm máy tính để bàn dựa trên Java. Tuy nhiên, nó tương thích với cổng thông tin kho lưu trữ công việc trực tuyến myExperiment ( http://www.myexperiment.org ), nơi người dùng có thể lưu trữ và chia sẻ quy trình công việc RR của họ. Cổng RR dựa trên web, tương thích hoàn toàn với Taverna được gọi là Taverna Online , nhưng nó đang được phát triển và duy trì bởi một tổ chức hoàn toàn khác ở Nga (gọi tắt là OnlineHPC : http://onlinehpc.com ).

  • Dự án Kepler ( https://kepler-project.org )

  • VisTrails ( http://vistrails.org )

  • Madagascar ( http://www.reproducibility.org )

VÍ DỤ . Đây là một bài viết thú vị về quy trình làm việc khoa học với một ví dụ về thiết kế quy trình và phân tích dữ liệu thực tế , dựa trên việc sử dụng các dự án KeplermyExperiment : http://f1000research.com/articles/3-110/v1 .

Có nhiều công cụ RR thực hiện mô hình lập trình biết chữ , được minh họa bởi LaTeXhọ phần mềm. Các công cụ trợ giúp trong việc tạo và trình bày báo cáo cũng là một danh mục lớn, trong đó Sweaveknitrcó lẽ là những công cụ được biết đến nhiều nhất. Sweavelà một công cụ, tập trung vào R, nhưng nó có thể được tích hợp với các dự án dựa trên Python, mặc dù có một số nỗ lực bổ sung ( https://stackoverflow.com/questions/2161152/sweave-for-python ). Tôi nghĩ rằng đó knitrcó thể là một lựa chọn tốt hơn, vì nó hiện đại, có sự hỗ trợ rộng rãi của các công cụ phổ biến (như RStudio) và trung lập về ngôn ngữ ( http://yihui.name/knitr/demo/engines ).

3) Giao thức và cấu trúc thư mục được đề xuất . Nếu tôi hiểu chính xác những gì bạn ngụ ý bằng cách sử dụng giao thức hạn ( quy trình công việc ), nói chung tôi nghĩ rằng quy trình phân tích dữ liệu RR tiêu chuẩn bao gồm các giai đoạn tuần tự sau: thu thập dữ liệu => chuẩn bị dữ liệu (làm sạch, chuyển đổi, hợp nhất, lấy mẫu) => phân tích dữ liệu => trình bày kết quả (tạo báo cáo và / hoặc thuyết trình). Tuy nhiên, mọi quy trình công việc là dành riêng cho dự án và do đó, một số tác vụ cụ thể có thể yêu cầu thêm các bước bổ sung.

Đối với cấu trúc thư mục mẫu, bạn có thể xem tài liệu cho gói R ProjectTemplate( http://projecttemplate.net ), như một nỗ lực để tự động hóa các quy trình và dự án phân tích dữ liệu:

nhập mô tả hình ảnh ở đây

4) Công cụ xây dựng / chạy tự động . Vì câu trả lời của tôi tập trung vào các công cụ RR phổ biến (trung lập ngôn ngữ), nên các công cụ phổ biến nhất là make. Đọc bài viết sau để biết một số lý do để sử dụng makelàm công cụ tự động hóa quy trình làm việc RR ưa thích: http://bost.ocks.org/mike/make . Chắc chắn, có những công cụ tương tự khác , giúp cải thiện một số khía cạnh makehoặc thêm một số tính năng bổ sung. Ví dụ: ant(chính thức, Apache Ant: http://ant.apache.org ), Maven("thế hệ tiếp theo ant": http://maven.apache.org ), rake( https://github.com/ruby/rake ) , Makepp( http://makepp.sourceforge.net). Để biết danh sách toàn diện các công cụ như vậy, hãy xem Wikipedia: http://en.wikipedia.org/wiki/List_of_build_automation_software .


Một liên kết về lập trình biết chữ ở đây : về cơ bản, đó là về việc nhận xét mã đủ để mã trở thành một tài liệu độc lập.
gabious

@gabious: Tôi biết về ý nghĩa của lập trình biết chữ và không bao gồm bất kỳ liên kết nào đến mô hình, vì có nhiều nguồn cho điều đó và chúng rất dễ tìm thấy. Tuy nhiên, cảm ơn bạn đã bình luận của bạn.
Alexanderr Blekh

1
Tôi đoán nó, đó là lý do tại sao tôi đã thêm thông tin này như một bình luận cho người đọc quan tâm :)
gabious

4
Đây là một câu trả lời rất toàn diện, nhưng tôi ngạc nhiên rằng một khía cạnh dường như bị thiếu. Xác nhận chéo là một thành phần quan trọng của hầu hết các dự án DS và thường yêu cầu một mẫu ngẫu nhiên, điều này có thể gây khó khăn cho việc tái sản xuất. Tôi đề nghị bạn nên chạm nhanh vào việc sử dụng cùng một hạt giống cho các trình tạo ngẫu nhiên để có thể tái tạo kết quả bất kể sự thay đổi thống kê. Cảm ơn!
AN6U5

@ AN6U5: Cảm ơn bạn vì những lời tốt đẹp! Tôi đồng ý - Tôi đã bỏ qua khía cạnh đó (+1). Xin vui lòng cập nhật câu trả lời của tôi, thêm thông tin ngắn gọn có liên quan về xác nhận chéo.
Alexanderr Blekh

24

Kể từ khi tôi bắt đầu nghiên cứu trong học viện, tôi đã liên tục tìm kiếm một quy trình làm việc thỏa đáng. Tôi nghĩ rằng cuối cùng tôi đã tìm thấy một cái gì đó tôi hạnh phúc với:

1) Đặt mọi thứ dưới sự kiểm soát phiên bản, ví dụ: Git:

Đối với các dự án nghiên cứu sở thích, tôi sử dụng GitHub, để nghiên cứu tại nơi làm việc, tôi sử dụng máy chủ GitLab riêng do trường đại học của chúng tôi cung cấp. Tôi cũng giữ bộ dữ liệu của mình ở đó.

2) Tôi thực hiện hầu hết các phân tích của mình cùng với tài liệu về máy tính xách tay IPython. Nó rất có tổ chức (đối với tôi) để có mã, cốt truyện và thảo luận / kết luận tất cả trong một tài liệu Nếu tôi đang chạy các tập lệnh lớn hơn, tôi thường sẽ đặt chúng vào các tệp .py tập lệnh riêng biệt, nhưng tôi vẫn sẽ thực thi chúng từ sổ ghi chép IPython thông qua% run ma thuật để thêm thông tin về mục đích, kết quả và các tham số khác.

Tôi đã viết một phần mở rộng ma thuật tế bào nhỏ cho máy tính xách tay IPython và IPython, được gọi là "watermark" mà tôi sử dụng để thuận tiện tạo tem thời gian và theo dõi các phiên bản gói khác nhau mà tôi đã sử dụng và cả băm Git

Ví dụ


%watermark

29/06/2014 01:19:10

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit


%watermark -d -t

29/06/2014 01:19:11 


%watermark -v -m -p numpy,scipy

CPython 3.4.1
IPython 2.1.0

numpy 1.8.1
scipy 0.14.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit

Để biết thêm thông tin, xem tài liệu ở đây .


2
Tôi thích ma thuật thủy ấn. Đối với những người không biết, GitHub hiện cung cấp tối đa 5 kho riêng tư miễn phí cho người dùng liên kết với các tổ chức học thuật.
bogatron

19

Công cụ tái tạo tốt nhất là tạo nhật ký hành động của bạn, đại loại như thế này:

experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported

Điều này có thể được viết ra giấy, nhưng, nếu các thử nghiệm của bạn phù hợp với khung tính toán, bạn có thể sử dụng các công cụ tính toán để tự động hóa một phần hoặc hoàn toàn quá trình ghi nhật ký đó (đặc biệt là bằng cách giúp bạn theo dõi các bộ dữ liệu đầu vào có thể rất lớn và đầu ra số liệu).

Một công cụ tái tạo tuyệt vời cho Python với đường cong học tập thấp dĩ nhiên là IPython / Jupyter Notebook (đừng quên các phép thuật % logon và% logstart ). Mẹo: để đảm bảo máy tính xách tay của bạn có thể tái tạo được, hãy khởi động lại kernel và thử chạy tất cả các ô từ trên xuống dưới (nút Run All Cells): nếu nó hoạt động, thì hãy lưu mọi thứ trong tệp lưu trữ ("đóng băng"), khác, đáng chú ý nếu bạn cần chạy các ô theo kiểu phi tuyến tính và không tuần tự và không rõ ràng để tránh lỗi, bạn cần làm lại một chút.

Một công cụ tuyệt vời mà là rất gần đây (2015) là recipy , rất giống như sumatra (xem dưới đây), nhưng thực hiện cụ thể cho Python. Tôi không biết nếu nó hoạt động với Jupyter Notebooks, nhưng tôi biết tác giả thường xuyên sử dụng chúng vì vậy tôi đoán rằng nếu nó hiện không được hỗ trợ, nó sẽ có trong tương lai.

Git cũng tuyệt vời và nó không bị ràng buộc với Python. Nó sẽ giúp bạn không chỉ lưu giữ lịch sử của tất cả các thử nghiệm, mã, bộ dữ liệu, số liệu, v.v. mà còn cung cấp cho bạn các công cụ để duy trì ( git pickaxe ), cộng tác ( đổ lỗi ) và gỡ lỗi ( git - bisect ) bằng cách sử dụng một khoa học phương pháp gỡ lỗi (gọi là gỡ lỗi delta ). Đây là một câu chuyện về một nhà nghiên cứu hư cấu đang cố gắng tạo ra hệ thống ghi nhật ký thí nghiệm của riêng mình, cho đến khi nó kết thúc bằng một bản fax của Git.

Một công cụ nói chung làm việc với bất kỳ ngôn ngữ (với một API Python trên pypi ) là Sumatra , được thiết kế đặc biệt để giúp bạn làm nhân rộng nghiên cứu ( có thể nhân rộng nhằm mục đích để tạo ra kết quả tương tự cho cùng một mã chính xác và phần mềm, trong khi tái lập mục tiêu để sản xuất kết quả tương tự được đưa ra cho bất kỳ phương tiện nào, khó hơn rất nhiều và tốn thời gian và không thể tự động hóa).

Đây là cách Sumatra hoạt động: đối với mỗi thử nghiệm mà bạn thực hiện thông qua Sumatra, phần mềm này sẽ hoạt động giống như một "trạng thái trò chơi lưu" thường thấy trong các trò chơi video. Chính xác hơn, nó sẽ tiết kiệm:

  • tất cả các thông số bạn cung cấp;
  • trạng thái mã nguồn chính xác của toàn bộ ứng dụng và tệp cấu hình thử nghiệm của bạn;
  • đầu ra / lô / kết quả và bất kỳ tệp nào được tạo bởi ứng dụng thử nghiệm của bạn.

Sau đó, nó sẽ xây dựng một cơ sở dữ liệu với dấu thời gian và các metadatas khác cho mỗi thử nghiệm của bạn, sau đó bạn có thể thu thập dữ liệu bằng cách sử dụng webGUI. Vì Sumatra đã lưu toàn bộ trạng thái ứng dụng của bạn cho một thử nghiệm cụ thể tại một thời điểm cụ thể, bạn có thể khôi phục mã tạo ra kết quả cụ thể bất cứ lúc nào bạn muốn, do đó bạn có thể nghiên cứu có thể sao chép với chi phí thấp (ngoại trừ lưu trữ nếu bạn làm việc trên các bộ dữ liệu khổng lồ, nhưng bạn có thể định cấu hình các ngoại lệ nếu bạn không muốn lưu mọi thứ mọi lúc).

Một công cụ tuyệt vời khác là Zeitgeist của Gnome (trước đây được mã hóa bằng Python nhưng giờ đã được chuyển sang Vala), một hệ thống nhật ký hành động toàn năng, ghi lại mọi thứ bạn làm và nó có thể sử dụng máy học để tóm tắt trong một khoảng thời gian bạn muốn có mối quan hệ giữa các mục về sự giống nhau và mô hình sử dụng, ví dụ như trả lời các câu hỏi như "Điều gì phù hợp nhất với tôi, trong khi tôi đang làm việc trong dự án X, trong một tháng năm ngoái?" . Thật thú vị, Zim Desktop Wiki , một ứng dụng ghi chú tương tự như Evernote, có một plugin để hoạt động với Zeitgeist.

Cuối cùng, bạn có thể sử dụng Git hoặc Sumatra hoặc bất kỳ phần mềm nào khác mà bạn muốn, chúng sẽ cung cấp cho bạn khả năng nhân rộng tương tự, nhưng Sumatra được thiết kế riêng cho nghiên cứu khoa học để cung cấp một vài công cụ ưa thích như GUI web để thu thập dữ liệu kết quả của bạn, trong khi Git phù hợp hơn với bảo trì mã (nhưng nó có các công cụ gỡ lỗi như git-bisect vì vậy nếu các thử nghiệm của bạn liên quan đến mã, nó thực sự có thể tốt hơn). Hoặc tất nhiên bạn có thể sử dụng cả hai!

/ EDIT: DSign đã chạm đến một điểm rất quan trọng ở đây: khả năng sao chép thiết lập của bạn cũng quan trọng như khả năng nhân rộng của ứng dụng của bạn. Nói cách khác, ít nhất bạn nên cung cấp một danh sách đầy đủ các thư viện và trình biên dịch mà bạn đã sử dụng cùng với các phiên bản chính xác của chúng và các chi tiết về nền tảng của bạn .

Cá nhân, trong điện toán khoa học với Python, tôi đã thấy rằng việc đóng gói một ứng dụng cùng với các thư viện là quá đau đớn, vì vậy bây giờ tôi chỉ sử dụng gói python khoa học tất cả trong một như Anaconda (với conda trình quản lý gói tuyệt vời ), và chỉ khuyên người dùng sử dụng cùng một gói. Một giải pháp khác có thể là cung cấp một tập lệnh để tự động tạo virtualenv hoặc đóng gói mọi thứ bằng ứng dụng Docker thương mại như được trích dẫn bởi dsign hoặc Vagrant mã nguồn mở (ví dụ như pylearn2-in-a-box sử dụng Vagrant để có thể phân phối lại dễ dàng gói môi trường ảo).

Cuối cùng, để thực sự đảm bảo rằng bạn có một môi trường làm việc đầy đủ mọi lúc bạn cần, bạn có thể tạo một máy ảo (xem VirtualBox) và thậm chí bạn có thể lưu trạng thái của máy (ảnh chụp nhanh) với thử nghiệm của bạn sẵn sàng để chạy bên trong. Sau đó, bạn chỉ có thể chia sẻ máy ảo này với mọi thứ được bao gồm để bất kỳ ai cũng có thể sao chép thử nghiệm của bạn với thiết lập chính xác của bạn. Đây có lẽ là cách tốt nhất để sao chép một thử nghiệm dựa trên phần mềm. Các container có thể là một sự thay thế nhẹ hơn, nhưng chúng không bao gồm toàn bộ môi trường, do đó độ trung thực của bản sao sẽ kém mạnh mẽ hơn.

/ EDIT2: Đây là một video tóm tắt tuyệt vời (để gỡ lỗi nhưng điều này cũng có thể được áp dụng cho nghiên cứu) điều cơ bản để thực hiện nghiên cứu có thể tái tạo: ghi lại các thí nghiệm của bạn và từng bước khác của phương pháp khoa học, một loại "thử nghiệm rõ ràng" .


14

Hãy chắc chắn để kiểm tra docker ! Và nói chung, tất cả những điều tốt đẹp khác mà công nghệ phần mềm đã tạo ra trong nhiều thập kỷ để đảm bảo sự cô lập và khả năng tái tạo.

Tôi muốn nhấn mạnh rằng nó không đủ để chỉ có các quy trình công việc có thể tái tạo, nhưng cũng dễ dàng để tái tạo các quy trình công việc. Hãy để tôi cho thấy những gì tôi có ý nghĩa. Giả sử rằng dự án của bạn sử dụng Python, cơ sở dữ liệu X và Scipy. Chắc chắn bạn sẽ sử dụng một thư viện cụ thể để kết nối với cơ sở dữ liệu của mình từ Python và Scipy sẽ lần lượt sử dụng một số thói quen đại số thưa thớt. Đây hoàn toàn là một thiết lập rất đơn giản, nhưng không hoàn toàn đơn giản để thiết lập, chơi chữ. Nếu ai đó muốn thực thi các tập lệnh của bạn, cô ấy sẽ phải cài đặt tất cả các phụ thuộc. Hoặc tệ hơn, cô ấy có thể có các phiên bản không tương thích của nó đã được cài đặt. Sửa những thứ đó cần có thời gian. Bạn cũng sẽ mất thời gian nếu bạn cần chuyển các tính toán của mình sang một cụm, đến một cụm khác hoặc đến một số máy chủ đám mây.

Đây là nơi tôi tìm thấy docker hữu ích. Docker là một cách để chính thức hóa và biên dịch công thức nấu ăn cho môi trường nhị phân. Bạn có thể viết như sau trong một dockerfile (Tôi đang sử dụng tiếng Anh đơn giản thay vì cú pháp Dockerfile):

  • Bắt đầu với một môi trường nhị phân cơ bản, như của Ubuntu
  • Cài đặt libspude-dev
  • (Pip) Cài đặt numpy và scipy
  • Cài đặt X
  • Cài đặt libX-dev
  • (Pip) Cài đặt python-X
  • Cài đặt IPython-Notebook
  • Sao chép tập lệnh / sổ ghi chép python của tôi vào môi trường nhị phân của tôi, các tệp dữ liệu này và các cấu hình này để làm những việc linh tinh khác. Để đảm bảo khả năng tái tạo, hãy sao chép chúng từ một url được đặt tên thay vì tệp cục bộ.
  • Có thể chạy IPython-Notebook.

Một số dòng sẽ cài đặt mọi thứ trong Python bằng pip, vì pip có thể thực hiện công việc rất sạch sẽ trong việc chọn các phiên bản gói cụ thể. Kiểm tra nó quá!

Và đó là nó. Nếu sau khi bạn tạo Dockerfile, nó có thể được xây dựng, thì nó có thể được xây dựng ở bất cứ đâu, với điều kiện là họ cũng có quyền truy cập vào các tệp dành riêng cho dự án của bạn, ví dụ như vì bạn đặt chúng vào url công khai được tham chiếu từ Dockerfile). Điều gì là tốt nhất, bạn có thể tải lên môi trường kết quả (được gọi là "hình ảnh") lên máy chủ công cộng hoặc riêng tư (được gọi là "đăng ký") để người khác sử dụng. Vì vậy, khi bạn xuất bản quy trình công việc của mình, bạn có cả một công thức có thể tái tạo hoàn toàn dưới dạng Dockerfile và một cách dễ dàng để bạn hoặc người khác tái tạo những gì bạn làm:

docker run dockerregistery.thewheezylab.org/nowyouwillbelieveme

Hoặc nếu họ muốn chọc vào kịch bản của bạn và cứ thế:

docker run -i -t dockerregistery.thewheezylab.org/nowyouwillbelieveme /bin/bash

8

Thật không may, tôi không có đủ điểm danh tiếng để trả lời bài đăng của Plank, vì vậy phải trả lời cho toàn bộ chủ đề - xin lỗi về điều đó.

Tôi thực sự là nhà phát triển của Khung kiến ​​thức tập thể nguồn mở đã đề cập ở trên. Nó cố gắng đơn giản hóa việc chia sẻ các tạo phẩm và quy trình công việc thử nghiệm dưới dạng các thành phần Python có thể tái sử dụng và tái tạo với API JSON và JSON JSON hợp nhất được chia sẻ qua GitHub. Chúng cũng có thể được kết nối với các phân tích dự đoán với API JSON hợp nhất tương tự.

Chúng tôi vừa phát hành phiên bản mới v1.8.1 và cung cấp tài liệu mở rộng nên hy vọng sẽ dễ hiểu các khái niệm hơn bây giờ: http://github.com/ctuning/ck/wiki

Hiện tại chúng tôi có nhiều dự án học thuật và công nghiệp dựa trên khung này, vì vậy bạn có thể kiểm tra một trong số chúng - tối ưu hóa chương trình cộng đồng trên các thiết bị di động được cung cấp bởi các tình nguyện viên theo cách có thể tái tạo: http://cledgeledge.org/repo

Chúng tôi cũng theo dõi các tài nguyên khác nhau liên quan đến khoa học tái tạo tại đây: https://github.com/ctuning/ck/wiki/Eneac-open-science

Mặc dù tôi chủ yếu tập trung vào việc tái tạo nghiên cứu của các hệ thống máy tính, tôi đã có những cuộc trò chuyện thú vị với các đồng nghiệp từ các lĩnh vực khác và có vẻ như họ có những vấn đề rất giống nhau. Vì vậy, tôi sẽ rất vui nếu khuôn khổ của chúng tôi có thể giúp ích cho các cộng đồng khác! Nếu bạn có bất kỳ câu hỏi hoặc đề nghị, hãy liên hệ!


1
Mùa hè này về nghiên cứu tái sản xuất (bao gồm các liên kết đến các công cụ, bộ dữ liệu, bài viết và sự kiện liên quan) cũng có thể được quan tâm: github.com/ctuning/ck/wiki/Eneac-open-science-blog-20160919
gfursin

7

Có toàn bộ khóa học dành cho nghiên cứu tái sản xuất. https://www.coursera.org/learn/reproducible-research Khóa học này dựa trên R, nhưng ý tưởng cơ bản có thể được học.

Một cách đơn giản là có một máy tính xách tay Ipython và tiếp tục lưu mọi công việc bẩn thỉu bạn làm, có thể là làm sạch dữ liệu, phân tích khám phá hoặc xây dựng mô hình.


6

Gần đây tôi đã bắt gặp công cụ sau - http://github.com/ctuning/ck . Nó đã được viết bằng Python và dường như bao gồm những gì bạn cần (đồng nghiệp của tôi đang sử dụng nó trong dự án thí điểm để tự động nhận dạng hình ảnh).

Ưu điểm:

  1. rất nhỏ, di động và tùy biến
  2. bao gồm máy chủ web để phân phối thử nghiệm và xử lý chúng bằng cách sử dụng các phân tích dự đoán
  3. có một ví dụ sử dụng tuyệt vời để crowdsource và tái tạo tối ưu hóa trình biên dịch - http://cledgeledge.org/repo

Nhược điểm:

  1. mức độ hơi thấp - bạn cần triển khai luồng công việc của riêng mình từ các thành phần Python được chia sẻ qua GitHub bằng API JSON hoặc dòng lệnh
  2. tài liệu hơi phức tạp - tôi thực sự hy vọng rằng họ sẽ tìm thấy thời gian để cập nhật sớm.

6

Tôi đã tạo và gần đây đã phát hành một công cụ nguồn mở http://dvc.org hoặc DVC thực hiện chính xác những gì bạn đang cố gắng tiếp cận:

  1. [Công cụ kiểm soát phiên bản dữ liệu.] DVC hoạt động trên Git, thêm kiểm soát phiên bản tệp dữ liệu (các tệp được lưu trữ bên ngoài Git) và theo dõi các phụ thuộc giữa mã và tệp dữ liệu. DVC tự động lấy biểu đồ phụ thuộc (DAG) cho mã và dữ liệu.
  2. [Công cụ cho phép tái tạo các giai đoạn và thử nghiệm.] dvc repro data/scores.csvTái tạo tất cả các bước cần thiết liên quan đến DAG.
  3. [Giao thức và cấu trúc thư mục được đề xuất cho một dự án như vậy.] DVC yêu cầu một thư mục dữ liệu ( datatheo mặc định) nơi bạn phải lưu trữ tất cả các tệp dữ liệu. Tuy nhiên, DVC chuyển nội dung thực tế sang .cachethư mục và tạo các liên kết tượng trưng (vâng, tôi cũng đã làm cho nó hoạt động trên Windows). Thư mục .cachekhông được đồng bộ hóa với Git nhưng nó có thể được đồng bộ hóa qua đám mây (S3 hoặc GCP) bằng lệnh dvc sync data/scores.csv(nó đồng bộ hóa tệp dữ liệu tương ứng từ bộ đệm như .cache/scores.csv_29de545)
  4. [Công cụ xây dựng / chạy tự động.] Xem từ bên trên.

Hướng dẫn DVC là một điểm khởi đầu tốt - "Điều khiển phiên bản dữ liệu: học máy lặp" .


5

TUYÊN BỐ TỪ CHỐI: Tôi làm việc tại một công ty, Datmo , tạo ra một công cụ nguồn mở để làm việc này.

Thực hành tốt nhất cho khả năng tái sản xuất là như sau:

1) Trước tiên, chứa môi trường của bạn vào môi trường Docker bằng cách tạo Dockerfile và đảm bảo rằng tất cả các phụ thuộc được bao phủ trong tệp đó. Tôi thấy tài nguyên này là tốt nhất ( https://arxiv.org/pdf/1410.0846.pdf )

2) Một khi bạn có điều đó, bạn sẽ muốn quyết định nơi bạn có thể theo dõi tất cả các số liệu và cấu hình hiệu suất (để bạn có thể xem lại nó để thử nghiệm trong tương lai)

3) Cuối cùng, hãy viết một số tài liệu để người thử nghiệm / nhà phát triển mới có thể xem lại mã của bạn, sao chép nó với môi trường và xem nơi bạn đã giữ cấu hình và số liệu hiệu suất của mình.

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.