Nghĩ python pdf github
Cấu trúc dự án hợp lý, được tiêu chuẩn hóa hợp lý nhưng linh hoạt để thực hiện và chia sẻ công việc khoa học dữ liệu Show
Tại sao sử dụng cấu trúc dự án này?
Khi nghĩ về phân tích dữ liệu, chúng ta thường chỉ nghĩ về các báo cáo kết quả, thông tin chi tiết hoặc trực quan hóa. Mặc dù các sản phẩm cuối này thường là sự kiện chính, nhưng thật dễ dàng để tập trung vào việc làm cho các sản phẩm trông đẹp mắt và bỏ qua chất lượng của mã tạo ra chúng. Vì những sản phẩm cuối cùng này được tạo theo chương trình nên chất lượng mã vẫn rất quan trọng. Và chúng tôi không nói về việc thay đổi tính thẩm mỹ của vết lõm hoặc các tiêu chuẩn định dạng mô phạm - cuối cùng, chất lượng mã khoa học dữ liệu là về tính chính xác và khả năng tái tạo Không có gì bí mật rằng các phân tích tốt thường là kết quả của những khám phá rất ngẫu hứng và ngẫu nhiên. Các thử nghiệm dự kiến và các phương pháp thử nghiệm nhanh có thể không thành công đều là một phần của quy trình để đạt được nội dung tốt và không có viên đạn thần kỳ nào để biến việc khám phá dữ liệu thành một tiến trình tuyến tính, đơn giản Điều đó đang được nói, một khi đã bắt đầu, nó không phải là một quá trình khiến bản thân nó phải suy nghĩ cẩn thận về cấu trúc của mã hoặc bố cục dự án của bạn, vì vậy tốt nhất là bắt đầu với một cấu trúc hợp lý, rõ ràng và tuân theo nó trong suốt quá trình. Chúng tôi nghĩ rằng đó là một chiến thắng khá lớn khi sử dụng một thiết lập khá chuẩn như thế này. Đây là lý do tại sao Người khác sẽ cảm ơn bạn
Một cấu trúc dự án tiêu chuẩn, được xác định rõ ràng có nghĩa là một người mới có thể bắt đầu hiểu một phân tích mà không cần đào sâu vào tài liệu mở rộng. Điều đó cũng có nghĩa là họ không nhất thiết phải đọc 100% mã trước khi biết nơi tìm kiếm những thứ rất cụ thể Mã được tổ chức tốt có xu hướng tự viết tài liệu trong đó tổ chức tự cung cấp ngữ cảnh cho mã của bạn mà không cần nhiều chi phí. Mọi người sẽ cảm ơn bạn vì điều này vì họ có thể
Một ví dụ điển hình về điều này có thể được tìm thấy trong bất kỳ khung phát triển web chính nào như Django hoặc Ruby on Rails. Không ai ngồi một chỗ trước khi tạo một dự án Rails mới để tìm ra nơi họ muốn đặt quan điểm của mình; . Bởi vì cấu trúc dự án mặc định đó là tiêu chuẩn hợp lý và hợp lý trong hầu hết các dự án, nên sẽ dễ dàng hơn nhiều đối với những người chưa bao giờ xem một dự án cụ thể để tìm ra nơi họ sẽ tìm thấy các bộ phận chuyển động khác nhau Một ví dụ tuyệt vời khác là Tiêu chuẩn phân cấp hệ thống tệp cho các hệ thống giống Unix. Thư mục 4 có một mục đích rất cụ thể, cũng như thư mục 5 và mọi người (ít nhiều) đồng ý tôn trọng hợp đồng xã hội đó. Điều đó có nghĩa là người dùng Red Hat và người dùng Ubuntu đều biết đại khái nơi tìm kiếm một số loại tệp nhất định, ngay cả khi sử dụng hệ thống của nhau — hoặc bất kỳ hệ thống tuân thủ tiêu chuẩn nào khác cho vấn đề đóLý tưởng nhất, đó là cách nên diễn ra khi một đồng nghiệp mở ra dự án khoa học dữ liệu của bạn Bạn sẽ cảm ơn bạnBạn đã bao giờ cố gắng tái tạo một phân tích mà bạn đã thực hiện cách đây vài tháng hoặc thậm chí vài năm chưa? . Dưới đây là một số câu hỏi mà chúng tôi đã học cách hỏi với cảm giác sợ hãi về sự tồn tại
Những loại câu hỏi này rất khó và là triệu chứng của một dự án vô tổ chức. Một cấu trúc dự án tốt khuyến khích các phương pháp giúp quay lại công việc cũ dễ dàng hơn, chẳng hạn như tách các mối quan tâm, phân tích trừu tượng dưới dạng DAG và các phương pháp hay nhất về kỹ thuật như kiểm soát phiên bản Không có gì ở đây là ràng buộc
Không đồng ý với một vài tên thư mục mặc định? Cứ liều thử đi. Đây là một cấu trúc nhẹ và được coi là điểm khởi đầu tốt cho nhiều dự án. Hoặc, như PEP 8 đã nói
Bắt đầuVới suy nghĩ này, chúng tôi đã tạo một mẫu cookiecutter khoa học dữ liệu cho các dự án trong Python. Phân tích của bạn không nhất thiết phải bằng Python, nhưng mẫu cung cấp một số bản mẫu Python mà bạn muốn xóa (ví dụ: trong thư mục 3 và khung tài liệu Sphinx trong 4)Yêu cầuBắt đầu một dự án mớiBắt đầu một dự án mới dễ dàng như chạy lệnh này tại dòng lệnh. Không cần tạo thư mục trước, cookiecutter sẽ làm điều đó cho bạn
Thí dụCấu trúc thư mục
ý kiếnCó một số ý kiến tiềm ẩn trong cấu trúc dự án đã phát triển từ kinh nghiệm của chúng tôi về những gì hiệu quả và những gì không khi cộng tác trong các dự án khoa học dữ liệu. Một số ý kiến về quy trình làm việc và một số ý kiến về các công cụ giúp cuộc sống dễ dàng hơn. Đây là một số niềm tin mà dự án này được xây dựng dựa trên—nếu bạn có suy nghĩ, vui lòng đóng góp hoặc chia sẻ chúng Dữ liệu là bất biếnĐừng bao giờ chỉnh sửa dữ liệu thô của bạn, đặc biệt là không được chỉnh sửa thủ công và đặc biệt là không được chỉnh sửa trong Excel. Đừng ghi đè lên dữ liệu thô của bạn. Không lưu nhiều phiên bản của dữ liệu thô. Coi dữ liệu (và định dạng của nó) là bất biến. Mã bạn viết sẽ di chuyển dữ liệu thô qua một đường dẫn đến phân tích cuối cùng của bạn. Bạn không cần phải chạy tất cả các bước mỗi khi muốn tạo một hình mới (xem phần Phân tích là một DAG), nhưng bất kỳ ai cũng có thể tạo ra các sản phẩm cuối cùng chỉ với mã trong 3 và dữ liệu trong 6Ngoài ra, nếu dữ liệu là bất biến, nó không cần kiểm soát nguồn giống như mã. Do đó, theo mặc định, thư mục dữ liệu được bao gồm trong tệp 7. Nếu bạn có một lượng nhỏ dữ liệu hiếm khi thay đổi, bạn có thể muốn đưa dữ liệu vào kho lưu trữ. Github hiện cảnh báo nếu các tệp vượt quá 50 MB và từ chối các tệp trên 100 MB. Một số tùy chọn khác để lưu trữ/đồng bộ hóa dữ liệu lớn bao gồm AWS S3 với công cụ đồng bộ hóa (e. g. , 8), Lưu trữ tệp lớn Git, Phụ lục Git và dữ liệu. Hiện tại, theo mặc định, chúng tôi yêu cầu bộ chứa S3 và sử dụng AWS CLI để đồng bộ hóa dữ liệu trong thư mục 9 với máy chủSổ tay là để khám phá và giao tiếpCác gói máy tính xách tay như máy tính xách tay Jupyter, máy tính xách tay Beaker, Zeppelin và các công cụ lập trình biết chữ khác rất hiệu quả để phân tích dữ liệu khám phá. Tuy nhiên, những công cụ này có thể kém hiệu quả hơn để tái tạo một phân tích. Khi sử dụng sổ tay trong công việc, chúng tôi thường chia nhỏ thư mục 20. Ví dụ: 21 chứa các khám phá ban đầu, trong khi đó 22 là tác phẩm bóng bẩy hơn có thể được xuất dưới dạng html sang thư mục 23Vì sổ ghi chép là đối tượng thách thức để kiểm soát nguồn (e. g. , khác biệt của 24 thường không thể đọc được bằng con người và việc hợp nhất gần như không thể), chúng tôi khuyên bạn không nên cộng tác trực tiếp với người khác trên sổ ghi chép Jupyter. Có hai bước chúng tôi khuyên dùng để sử dụng sổ ghi chép một cách hiệu quả
Bây giờ, theo mặc định, chúng tôi biến dự án thành gói Python (xem tệp 20). Bạn có thể nhập mã của mình và sử dụng mã đó trong sổ ghi chép có ô như sau 2Phân tích là một DAGThông thường, trong một phân tích, bạn có các bước chạy dài để xử lý trước dữ liệu hoặc đào tạo mô hình. Nếu các bước này đã được chạy rồi (và bạn đã lưu đầu ra ở đâu đó chẳng hạn như thư mục 28), bạn không muốn đợi để chạy lại chúng mỗi lần. Chúng tôi thích 22 hơn để quản lý các bước phụ thuộc vào nhau, đặc biệt là các bước chạy dài. Make là một công cụ phổ biến trên các nền tảng dựa trên Unix (và có sẵn cho Windows). Làm theo tài liệu 22, quy ước Makefile và hướng dẫn về tính di động sẽ giúp đảm bảo Makefile của bạn hoạt động hiệu quả trên các hệ thống. Dưới đây là một số ví dụ để bắt đầu. Một số người dùng dữ liệu sử dụng 22 làm công cụ lựa chọn của họ, bao gồm cả Mike BostockCó các công cụ khác để quản lý DAG được viết bằng Python thay vì DSL (e. g. , Paver, Luigi, Airflow, Snakemake, Ruffus hoặc Joblib). Vui lòng sử dụng chúng nếu chúng phù hợp hơn cho phân tích của bạn Xây dựng từ môi trường lênBước đầu tiên trong việc tái tạo một phân tích luôn là tái tạo môi trường tính toán mà nó được chạy trong đó. Bạn cần các công cụ giống nhau, cùng thư viện và cùng phiên bản để làm cho mọi thứ hoạt động tốt với nhau Một cách tiếp cận hiệu quả cho vấn đề này là sử dụng virtualenv (chúng tôi khuyên dùng virtualenvwrapper để quản lý virtualenv). Bằng cách liệt kê tất cả các yêu cầu của bạn trong kho lưu trữ (chúng tôi bao gồm tệp 25), bạn có thể dễ dàng theo dõi các gói cần thiết để tạo lại phân tích. Đây là một quy trình làm việc tốt
Nếu bạn có các yêu cầu phức tạp hơn để tạo lại môi trường của mình, hãy xem xét phương pháp tiếp cận dựa trên máy ảo như Docker hoặc Vagrant. Cả hai công cụ này đều sử dụng các định dạng dựa trên văn bản (Dockerfile và Vagrantfile tương ứng) bạn có thể dễ dàng thêm vào kiểm soát nguồn để mô tả cách tạo một máy ảo với các yêu cầu mà bạn cần Giữ bí mật và cấu hình ngoài kiểm soát phiên bảnBạn thực sự không muốn rò rỉ khóa bí mật AWS hoặc tên người dùng và mật khẩu Postgres của mình trên Github. Nói đủ rồi — hãy xem các nguyên tắc của Ứng dụng Mười hai Yếu tố về điểm này. Đây là một cách để làm điều này Lưu trữ bí mật và các biến cấu hình của bạn trong một tệp đặc biệtTạo tệp 30 trong thư mục gốc của dự án. Nhờ có 7, tệp này sẽ không bao giờ được cam kết vào kho lưu trữ kiểm soát phiên bản. Đây là một ví dụ 2Sử dụng gói để tải các biến này tự độngNếu bạn xem tập lệnh sơ khai trong 27, thì nó sử dụng gói có tên python-dotenv để tải lên tất cả các mục nhập trong tệp này dưới dạng biến môi trường để chúng có thể truy cập được bằng 33. Đây là một đoạn ví dụ được điều chỉnh từ tài liệu 34 3Cấu hình AWS CLIKhi sử dụng Amazon S3 để lưu trữ dữ liệu, một phương pháp đơn giản để quản lý quyền truy cập AWS là đặt các khóa truy cập của bạn thành các biến môi trường. Tuy nhiên, việc quản lý nhiều bộ khóa trên một máy (e. g. khi làm việc trên nhiều dự án) thì tốt nhất nên sử dụng tệp thông tin đăng nhập, thường nằm trong 35. Một tập tin điển hình có thể trông giống như 1Bạn có thể thêm tên hồ sơ khi khởi tạo một dự án; Thận trọng trong việc thay đổi cấu trúc thư mục mặc địnhĐể giữ cho cấu trúc này có thể áp dụng rộng rãi cho nhiều loại dự án khác nhau, chúng tôi nghĩ cách tiếp cận tốt nhất là tự do thay đổi các thư mục xung quanh dự án của bạn, nhưng hãy thận trọng trong việc thay đổi cấu trúc mặc định cho tất cả các dự án Chúng tôi đã tạo nhãn bố cục thư mục dành riêng cho các sự cố đề xuất thêm, bớt, đổi tên hoặc di chuyển thư mục xung quanh. Tổng quát hơn, chúng tôi cũng đã tạo nhãn thảo luận về nhu cầu cho các vấn đề cần được thảo luận kỹ lưỡng và hỗ trợ rộng rãi trước khi triển khai Đóng gópDự án Khoa học dữ liệu Cookiecutter có quan điểm, nhưng không sợ sai. Thực tiễn tốt nhất thay đổi, công cụ phát triển và bài học được rút ra. Mục tiêu của dự án này là làm cho việc bắt đầu, cấu trúc và chia sẻ phân tích trở nên dễ dàng hơn. Yêu cầu kéo và nộp các vấn đề được khuyến khích. Chúng tôi muốn biết những gì phù hợp với bạn và những gì không Nếu bạn sử dụng dự án Khoa học dữ liệu Cookiecutter, hãy liên kết lại trang này hoặc gọi cho chúng tôi và cho chúng tôi biết Cấu trúc dự án và khả năng tái sản xuất được nói đến nhiều hơn trong cộng đồng nghiên cứu R. Dưới đây là một số dự án và bài đăng trên blog nếu bạn đang làm việc trong R có thể giúp ích cho bạn Cuối cùng, xin chân thành cảm ơn dự án Cookiecutter (github), dự án này đang giúp tất cả chúng ta dành ít thời gian hơn để suy nghĩ và viết bản mẫu và có nhiều thời gian hơn để hoàn thành công việc |