5個用於數據科學再現的工具

5個用於數據科學再現的工具

在科學上,再現的定義是"當一個實驗重複時所獲得的一致結果的程度"。數據是可以更改的,特別是數據庫中保存的數據。此外,數據科學很大程度上是基於隨機抽樣、概率和實驗的。因此,在這個領域中,模型的結果和輸出可以由同事或你自己在將來的某個時間點複製,生成分析和構建這種模型是非常具有挑戰性的。

儘管獲取數據比較困難,但是有很多原因可以解釋為什麼再現性對於好的數據科學來說是至關重要的。

  1. 再現性支持合作。數據科學項目很少是單獨進行的。在大多數情況下,數據科學家與其他數據科學家和其他團隊一起工作,查看項目的全過程,並將其集成到業務流程中。為了有效地協作,其他人能夠重複、構建和維護你的工作是很重要的。
  2. 再現性也支持效率。為了能夠最有效地工作,你和你的同事能夠在你所完成的工作的基礎上繼續努力是很重要的。如果結果或過程不能精確地重複,那麼就很難在現有工作的基礎上進行開發,相反,你將發現必須重新開始一個項目。
  3. 再現性構建信任。如前所述,數據科學是一門建立在概率和實驗基礎上的學科。在這個領域中,對結果的信任是非常重要的,這樣才能開發項目的買進,並與其他團隊有效地合作。

在下一篇文章中,我將分享5個工具,以促進數據科學的再現性。這些工具提供的函數,以解決特定的挑戰,創建可複製的數據科學項目,這些包括:

  • 記錄項目中使用的工具、庫和版本。
  • 為數據科學項目創建自包含的、一致的環境。
  • 開發一致的、易於閱讀的文件結構。
  • 為代碼編寫測試。
  • 使用版本控制。

Watermark

Watermark是一個IPython神奇的擴展,它可以在任何IPython Shell或Jupyter筆記本會話中打印有關軟件版本、硬件、日期和時間的信息。

Watermark提供了一種非常快速和簡單的方法來跟蹤項目中涉及的工具、庫、版本、作者和日期。它特別適用於臨時或一次性的工作,而不是隻在筆記本上進行的大型項目。這意味著,如果一個同事想要重複一項工作,他們就會對需要安裝的工具和庫有一個很好的概念,知道誰創建了這項工作,以及何時將它放在一起。

要安裝Watermark運行下列在你的終端。

<code>pip install watermark/<code>

要在Jupyter筆記本或IPython shell中使用擴展,請運行以下命令。

<code>% load_extWatermark/<code>

你可以通過指定許多標誌來選擇打印的信息。可用標誌的完整列表在文檔中列出。但是下面的代碼打印了當前日期、我使用的python和IPython的版本、我安裝和導入的庫的版本以及關於我使用的硬件的信息。輸出如下面的代碼所示。

<code>%watermark -d -m -v -p numpy,matplotlib,sklearn,seaborn,pandas /<code>
5個用於數據科學再現的工具

Pipenv

在數據科學中,項目創建的環境(即安裝的工具、庫和版本)對複製相同的結果有很大的影響,而且在許多情況下可以在另一臺計算機上運行代碼。

虛擬環境是為單個項目提供包含環境的工具。這些環境包含一個通常稱為需求文件的文件,該文件列出了項目的依賴項(工具、庫和版本)。創建虛擬環境時,可以選擇從該文件中安裝所有依賴項,從而重現項目最初創建時所在的環境。

創建虛擬環境的工具有很多,但是如果你使用python,那麼pipenv是最好的工具之一。要安裝pipenv,請運行以下步驟。

<code>$ brew install pipenv/<code>

使用特定版本的python創建新環境。創建一個新目錄,然後從新目錄運行以下命令。

<code>mkdir pip-testcd pip-testpipenv --python 3.7/<code>

要激活運行pipenv-shell的環境,你現在將處於一個名為"pip-test"的新環境中。

5個用於數據科學再現的工具

如果我們檢查目錄的內容,我們將看到pipenv創建了一個名為Pipfile的新文件。這是pipenv等效的需求文件。

<code>ls/<code>
5個用於數據科學再現的工具

讓我們檢查一下這個文件的內容。如有必要,將"Sublime Text"作為你首選的文本編輯器。

<code>open -a "Sublime Text" Pipfile/<code>

新文件包含以下內容。

5個用於數據科學再現的工具

我們目前沒有在環境中安裝任何包,但如果我們安裝了,我們會在這個文件中看到它們。讓我們安裝panda來測試這個。

<code>pipenv install pandas/<code>

如果我們再次打開該文件,我們可以看到panda現在已經被添加到Pipfile中。

5個用於數據科學再現的工具

現在讓我們假設一位同事想在另一臺計算機上完成你的項目。如果他們從Github克隆你的repo, Pipfile會包含在其中。然後,它們可以簡單地通過運行以下命令重新創建你一直使用的環境。

<code>pipenv install --devpipenv shell/<code>

這將在你工作的目錄中創建一個pipenv環境,並從pip文件安裝所有依賴項。

如果你想在一個Jupyter筆記本會話中使用這個環境,那麼你需要運行這段代碼。你可以更改名稱並將其顯示為對你的環境有意義的名稱。當你開始一個木星筆記本會話時,它現在會作為一個圖標出現在啟動屏幕上(如下面的代碼所示)。使用該內核創建的任何新筆記本都將包含pipenv環境中的所有依賴項。

<code>python -m ipykernel install --user --name myenv --display-name "Python (pipenv test)"/<code>
5個用於數據科學再現的工具


Cookiecutter

為數據科學定義一致的項目結構可以使協作、共享和構建項目變得更加容易。數據科學是一種工具,它在一行代碼中創建一個標準的項目框架結構。

要安裝,請運行以下命令。

<code>pip install cookiecutter/<code>

要創建一個新項目,只需運行即可。

<code>cookiecutter https://github.com/drivendata/cookiecutter-data-science/<code>

該工具將提示你輸入許多詳細信息,其中許多是可選的。

5個用於數據科學再現的工具

現在已經創建了下面的項目結構,這對於大多數數據科學項目來說已經足夠了。

5個用於數據科學再現的工具


Pytest

Pytest是對python代碼進行單元測試的工具。單元測試是一種可重複的操作,你可以將其添加到代碼中,以檢查各個代碼單元是否按預期工作。單元測試是向編寫的代碼添加信任的良好實踐。

Pytest可以安裝和導入,如下所示。

<code>pipenv install pytestimport pytest/<code>

一個簡單的測試可能是檢查導入的數據是否沒有更改。

<code>import pandas as pdfrom sklearn.datasets import load_bostonboston = load_boston()boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)len(boston_df)assert len(boston_df) == 506/<code>

你可以向語句中添加一個有用的錯誤消息,以便更容易地調試代碼。

<code>assert len(boston_df) == 506, "Len(df) should be 506"/<code>

如果我們隨後更改數據,則會顯示錯誤消息。

<code>import pandas as pdfrom sklearn.datasets import load_wineboston = load_wine()boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)len(boston_df)assert len(boston_df) == 506, "len(df) should be 506"/<code>
5個用於數據科學再現的工具

Github

版本控制是開發可重複項目、共享工作和促進協作的重要工具。維護項目的遠程和本地版本允許其他人訪問和開發他們自己的本地版本,回滾和監視代碼更改,並安全地合併更改和新特性。

Github是版本控制中最著名和使用最廣泛的平臺之一。Github使用一個名為Git的應用程序來對代碼進行版本控制。項目的文件存儲在稱為存儲庫的中央遠程位置。每次你在本地機器上進行更改並推送到Github時,你的遠程版本都會更新,並記錄提交的存儲。如果你想在提交之前回滾到項目的前一個版本,那麼這個記錄允許你這樣做。

此外,由於項目文件是遠程存儲的,任何具有訪問權限的人都可以下載repo並對項目進行更改。分支的概念,本質上意味著你創建一個完全獨立的項目的臨時副本,意味著你可以先在那裡進行更改而不用擔心破壞任何東西。

總結

與傳統的軟件開發不同,目前在數據科學項目中只有很少的標準實踐。然而,上面描述的工具在創建標準實踐方面走了很長的路,這些標準實踐反過來將導致更多可再現的數據科學項目。


分享到:


相關文章: