當前位置:
首頁 > 知識 > Python 是數據科學基石的原因

Python 是數據科學基石的原因

由來

幾周前我們在 AdTriba 開發了一個模擬工具。其中需要解決一些關於凸優化的問題,我們不想自己動手去寫一些程序,所以需要藉助第三方軟體包。對於任何統計分析問題,我們首先想到的就是 R 語言。 R 語言中有各種各樣的軟體包。但是我們並沒有去 CRAN 中查看,反而直接去 PyPI 查找。

為什麼呢?因為我們的開發工具需要在多個計算機上運行。我們需要為用戶提供服務並需要一個數據產品。 對於像我們這樣的小團隊來說,快速更新和減小開支是很重要的。多虧了這種簡潔的方法,我們從第一行代碼到完整的產品只花了三天時間,我們的用戶可以用它來優化他們的營銷預算。

1Python應用於數據產品

使用 Pyhton 的決定可能並不明智,所以讓我來解釋一下我們的原因。 Python 擅長兩個領域:機器學習和 web 開發。咋一看,它們兩個好像並不相關,但是仔細查看可以發現兩者互為補充。你可以使用你喜歡的工具,例如 IPython 和 pandas 去清理你的數據並對其建立機器學習模型。然後你可以從豐富的 Python web 框架中從選取一個來把你的模型轉化為一個真正的產品。沒必要糾結使用什麼語言,也不用重複編寫代碼[1]

作為數據產品的基礎,使用 Python 是很簡單的。唯一的要求就是你需要有點編程技巧。作為一名數據科學家,你應該有能力去編寫高質量的代碼,其可以在版本控制中進行檢測,並至少有一些結構,例如分離函數和定義良好的輸入、輸出。如果你的機器學習代碼滿足了這些要求,那麼你的模型就完成了一半。

2將你的程序腳本轉化為產品

為了說明建立數據產品的基本過程,我為你展示一下我們開發模擬工具的步驟:

1. 使用 IPytho 互動式環境,使用全局變數來實現程序腳本從而驗證自己的想法。

2. 將 IPython 中的代碼寫入正常的 *.py 文件,並且為之建立結構。重構一個名為 simulate 函數,可以在輸入數據和返回結構化數據的時候方便調用。

3. 然後基於 simulate 建立一個 RESTful 應用程序介面(API),這個介面接受 JSON 數據輸入,返回 JSON 數據輸出。

4. 在 AdTrida 頁面建立前端應用,推廣 RESTful 應用程序介面。

5. 任務完成!

另外,在第三步中,你使得 simulate 方法返回虛設數據。使用這種辦法的話,你可以從兩方面跟蹤問題: 一方面是機器學代碼,另一方面是 web 框架的整合。因為你約定了交互的方式: simulate接受特定格式的數據並返回特定格式的數據,這兩個方面工作的完全獨立,互不依靠,這可以為你帶來很大的好處。在機器學習端你可以隨時應用你的模型,並設定 simulate 接受虛設的數據並輸出真實的數據。在 web 開發端,你不需要改變任何東西,因為約定的數據格式已然有效,只是在 HTTP 終端會根據輸入數據產生正確的輸出。

我們已經在 AdTriba 多次應用這一流程。 它使得我們能夠不斷的快速更新服務。web 端的開發人員無需等待數據科學家完成機器學習的代碼後再開展工作。你將不會因此時間浪費,因為沒人會妨礙你的工作。

如何你是獨自一人,從機器學習端開始並繼續會更有意義。這種方法的優點就是你無需糾結於確定的數據格式,只要你準備好了,你只需要關注於你的模型並定義數據結構。當然,在解決一個問題時應盡量不要更換工作內容。

3了解你的網路工具

假設你已經了解了如何去構建機器學習模型的一些知識,你可能就得開始 web 開發部分了。

你遇到的第一個問題就是:我們應該用哪個 web 框架?當然這取決你你自己。有兩個比較流行的 Python web 框架,分別是 Djando 和 Flask。兩者都很強大但原理不同。

  • Flask 是一個微型框架。僅僅包含一些必要的東西,如果你需要別的東西,你需要通過插件庫來添加或者你自己編寫程序。

  • Django 則森羅萬象。你不必考慮用戶管理,資料庫交互等問題。 Django 幫你解決。

這兩個框架我都用過,它們都很棒。 如果你想深入其中的任何一個,我強烈推薦下面的幾本書:

  • Django: Two Scoops of Django 1.11 Daniel 和 Audrey Roy Greenfeld 編著

  • Flask: Flask Web Development Miguel Grinberg 編著

因為我們的模擬工具不需要任何的維護和用戶管理,所以我決定使用 Flask 框架。這個決定可以讓我們在不藉助任何模板程序的前提下寫出輕量級的服務程序。這只是我們模擬邏輯中的一小部分而已。

當我開始在 BBY.io 工作的時候,我毫不猶豫的選擇了 Django。 為什麼呢? 因為其中涉及到資料庫,用戶管理,並需要創建,修改,刪除 A/B 測試等功能。(在 web 開發中稱為 CRUD: 創建(CREATE),讀取(read),更新(update),刪除(delete))。

如果你不知道該用哪個框架,我有一個很簡單的經驗:對於那些沒有太多邏輯性的內部工具的開發使用 Flask,其他的就使用 Django。 每個項目都會成長,其需求也會改變。當那一刻到來時, 為 Flask 添加功能的開銷將會大於一開始就使用 Django 的開銷。

後記

我知道你不可能使用 Python 來開發所有的數據產品。在大公司中,對於面向用戶的服務,可能需要其他的語言,例如 Java。或者有些數據科學家對 Python 不太熟練。但是如果你需要完成端對端的開發過程(或者你正在做某一部分的項目)Python 應該是你的不二之選。


英文原文:http://blog.datalifebalance.com/python-rocks-data-products/
譯者:無

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

asyncio让我崩溃
每位CTO都應該閱讀的十本書
魯班大師,智商250之後的硬傷,是中國製造業的硬傷
探索Python F-strings是如何工作
一个纯python、快速、可扩展的Markdown解释器

TAG:Python部落 |