注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整的體驗。

我們如何為非開發人員建立 Python 開發框架

Python 是 Bluevine 核心的程式語言,為我們的後端、資料工程、資料科學、質量保證自動化,乃至最近的資料分析提供支援。

在資料分析中,我們使用 SQL 查詢來獲取和轉換資料,特別是使用 PostgreSQL 資料庫。

Bluevine 的整體銀行解決方案專為小型企業設計,旨在幫助它們在快節奏的環境中蓬勃發展。我們實現這一目標的一種方式是讓企業主儘快瞭解他們是否已獲批准使用 Bluevine 服務。為此,我們需要及時對他們的資料進行風險評估。當我們的多數查詢執行時間過長並在我們僅有的幾個副本之間爭奪資源時,這被證明是一個巨大的挑戰。

我們使用的查詢很長(最長的超過 3,000 行!)並且對資料庫功能的利用效率低下,更不用說難以閱讀、難以更新和構建。面對這些查詢和我們對快速響應的需求,解決方案顯而易見。我們可以使用 Python 來執行繁重的工作和資料轉換。

不幸的是,分析團隊對 Python 的經驗很少。如果沒有適當的關注,遷移我們的一些最重要操作可能會導致糟糕的程式碼。這些糟糕的程式碼將難以管理,甚至可能遭受與 SQL 指令碼相同的問題,讓我們回到起點。

我們設計了以下解決方案

  1. 首先,根據角色為所有工程師提供 Python 培訓,特別是資料導向的第三方庫,例如 pandas 和 NumPy。
  2. 其次,設計並構建一個 Python 框架,使團隊能夠專注於工作,同時抽象出軟體工程原則。這將使他們能夠執行和測試程式碼、更新或建立新流程。

設計框架需要我們識別 SQL 指令碼中重複出現的模式,並將其建立為模組化且易於重用或擴充套件的構建塊。

我們確定了 SQL 查詢中可以應用於指令碼的常見結構

  1. 根據特定條件獲取客戶
  2. 從不同的表中豐富資料
  3. 執行邏輯以做出決策

許多指令碼使用相似的查詢來獲取客戶,因此我們能夠提供引數化函式,這些函式執行 ORM 查詢,提供相同的功能並避免程式碼重複。

對於第二步,我們不是在資料庫中進行繁重的查詢和資料轉換,而是僅拉取客戶的原始資料並提供通用函式,這些函式大量使用 pandas 來豐富資料。我們能夠使用向量化操作來對資料及其豐富的資料結構執行復雜的聚合和轉換,例如轉置和透視。

這種方法帶來了多重好處,既提高了效能,又透過避免低效操作釋放了資料庫資源。

邏輯執行更加棘手,因為每個過程都會檢查不同的內容。為了提供靈活性,我們提供了一個鬆散的預定義模組結構供他們遵循。例如,每個過程都需要遵循特定結構的一些模組,例如:- preprocessing.py - calculations.py - conditions.py - decisions.py

框架載入這些模組並以特定順序執行其中的入口點函式。這會返回一個 Decision 類的例項。Decision 物件包含我們需要將其傳送回客戶端的所有資訊和功能。

該框架設計易於使用,即使是最缺乏經驗的使用者也能掌握,但又足夠靈活,允許開發人員構建新的功能以供重用和改進。

我們很高興地宣佈,我們已將所有流程遷移到此新框架上執行,並且所有新流程都使用它建立。自轉換以來,我們已經看到了改進

  1. Python 的使用者友好性使我們的分析師能夠快速學習並及時建立新規則。
  2. 我們總體上大幅提高了流程執行時間。
  3. 我們的資料庫正在執行更簡單、更精細的查詢,總體上降低了負載。
  4. 透過日誌和監控庫實現可追溯性和改進的可觀察性。

我們很自豪地分享我們的專案取得了成功,但重要的是要記住,利用 Python 可能不適合所有人。在考慮類似工作時,請考慮以下幾點

  • 您的客戶(在此案例中是分析師)是否具備所需的技術能力來交付更高質量的程式碼?
  • 您是否能夠根據公司時間表兼顧舊系統的支援和新框架的開發?
  • 此框架將滿足未來的需求還是僅改進現有流程?