Taipy:將數據轉化為生產級 Web 應用的利器

作者: Calpa Liu
字數:2246
出版:2025年3月30日

Taipy 是一個功能強大的開源 Python 框架,專為數據科學家和機器學習工程師設計,使他們能夠輕鬆地將資料和 AI 演算法轉化為全棧式 Web 應用程式。本文將深入探討 Taipy 的優勢,並通過氣象資料視覺化的實例展示其功能,同時比較它與其他類似工具的差異。

Taipy 的主要優勢

生產級應用開發

Taipy 不僅僅是一個原型工具,它能夠讓開發者在短時間內構建生產就緒的應用程式。與主要用於原型設計的 Streamlit 不同,Taipy 從設計之初就考慮到了生產環境的需求。

Python 中心化開發體驗

Taipy 完全整合在 Python 生態系統中,開發者不需要學習新的語言或框架就能創建全棧式應用。這對於數據科學家和機器學習工程師來說是一大優勢,他們可以專注於自己熟悉的 Python 環境。

高效的回調機制

Taipy 採用先進的回調機制,只更新必要的組件,而不是在每次變更時重新運行整個代碼。這種方法顯著提高了應用效能,特別是對於資源密集型應用,速度最高可提升 10 倍。

強大的大數據支援

Taipy 內建了對大型資料集的支援,例如圖表的抽取器,能夠智慧地減少數據點數量,節省時間和記憶體,同時保持資料的本質形狀。相比之下,其他函式庫在處理大型資料集時往往會遇到效能下降和記憶體使用過度的問題。

前後端分離架構

Taipy 的前端和後端在不同線程上運行,確保即使在背景執行計算時,應用界面也不會凍結。這種架構使得用戶體驗更加流暢,尤其是在處理長時間運行的任務時。

隱私和資料安全

Taipy 完全在本地運行,不需要登錄或將資料傳送到外部伺服器。這對於處理敏感資料的組織特別重要,如企業內部資料分析系統。

Taipy 與其他工具的比較

Taipy vs Streamlit

特性TaipyStreamlit
程式語言RustPython
回調機制只運行需要的代碼重新運行整個代碼
大數據支援更好的後端管理有限
前後端分離是(在不同線程上)
同步/異步呼叫兩者都支援僅同步
Jupyter Notebooks 支援
VSCode 擴展有(自動完成和檢查)
主要用途原型和生產主要為原型
資料隱私完全本地運行可配置遙測

Taipy 在多方面超越了 Streamlit,尤其是在後端管理、同步/異步呼叫支援以及與 Jupyter Notebooks 的整合方面。此外,Taipy 提供更多自定義選項,使開發者能夠創建更加靈活的界面。

Taipy vs Dash

Dash 和 Taipy 都基於 Flask 微框架。然而,Taipy 提供了更高層次的抽象,使用户能夠定義更接近 Streamlit 的用户控制界面,同時保持 Dash 的靈活性。可以說,Taipy 結合了兩者的優點,提供了更完整的解決方案。

使用 Taipy 可視化氣象資料

以下將展示如何使用 Taipy 創建一個視覺化氣象資料的應用程式,我們將使用 NumPy 生成七天的模擬氣象資料。

示例資料準備

首先,讓我們創建七天的模擬氣象資料到 generate_weather_data.py

import numpy as np
import pandas as pd
from datetime import datetime, timedelta

# 生成七天的日期
start_date = datetime.now()
dates = [start_date + timedelta(days=i) for i in range(7)]
date_strs = [date.strftime("%Y-%m-%d") for date in dates]

# 生成隨機氣象資料
np.random.seed(42)  # 設置隨機種子以保證結果可重現
temperatures = np.round(np.random.normal(25, 5, 7), 1)  # 溫度均值 25°C,標準差 5
humidity = np.round(np.random.uniform(40, 90, 7), 1)  # 濕度在 40%-90% 之間
wind_speed = np.round(np.random.uniform(0, 30, 7), 1)  # 風速在 0-30 km/h之間
pressure = np.round(np.random.normal(1013, 5, 7), 1)  # 氣壓均值 1013 hPa,標準差 5
rainfall = np.round(np.random.exponential(5, 7), 1)  # 降雨量,指數分佈

# 天氣狀況
weather_conditions = ['晴朗', '多雲', '陰天', '小雨', '大雨', '雷暴', '霧']
weather = np.random.choice(weather_conditions, 7)

# 創建資料框
weather_data = pd.DataFrame({
    'Date': date_strs,
    'Temperature': temperatures,
    'Humidity': humidity,
    'Wind_Speed': wind_speed,
    'Pressure': pressure,
    'Rainfall': rainfall,
    'Weather': weather
})

print(weather_data)

之後你可以將 generate_weather_data.py 的輸出保存到一個 CSV 文件中,或者直接使用 weather_data 作為資料來源。你可以在 Terminal 看到輸出的資料:

         Date  Temperature  Humidity  Wind_Speed  Pressure  Rainfall Weather
0  2025-03-30         27.5      41.0        15.7    1016.8       4.7      大雨
1  2025-03-31         24.3      88.5        13.0    1020.3       0.9      多雲
2  2025-04-01         28.2      81.6         8.7    1011.9       0.3      小雨
3  2025-04-02         32.6      50.6        18.4    1013.3      14.9      小雨
4  2025-04-03         23.8      49.1         4.2    1005.9      16.9
5  2025-04-04         23.8      49.2         8.8    1010.3       8.3      小雨
6  2025-04-05         32.9      55.2        11.0    1013.6       1.8

使用 Taipy 可視化氣象資料

現在,讓我們使用 Taipy 來創建一個互動式氣象資料儀表板:

from taipy.gui import Gui
from generate_weather_data import weather_data

# 設置 Taipy 的頁面配置
weather_data_orig = weather_data.copy()
selected_date = weather_data['Date'][0]
selected_metric = 'Temperature'

# 定義 Taipy 頁面
page = """
# 七天天氣預報儀表板

## 選擇指標
<|{selected_metric}|selector|lov=Temperature;Humidity;Wind_Speed;Pressure;Rainfall|dropdown|>

## 天氣趨勢圖
<|{weather_data}|chart|x=Date|y={selected_metric}|rebuild|>

## 七天天氣概況
<|{weather_data}|table|>


## 當日天氣詳情
<|{selected_date}|selector|lov={weather_data['Date']}|dropdown|>

### 所選日期的天氣詳情
- **日期:** <|{selected_date}|>
- **溫度:** <|{weather_data[weather_data['Date']==selected_date]['Temperature'].values[0]}|> °C
- **濕度:** <|{weather_data[weather_data['Date']==selected_date]['Humidity'].values[0]}|> %
- **風速:** <|{weather_data[weather_data['Date']==selected_date]['Wind_Speed'].values[0]}|> km/h
- **氣壓:** <|{weather_data[weather_data['Date']==selected_date]['Pressure'].values[0]}|> hPa
- **降雨量:** <|{weather_data[weather_data['Date']==selected_date]['Rainfall'].values[0]}|> mm
- **天氣狀況:** <|{weather_data[weather_data['Date']==selected_date]['Weather'].values[0]}|>
"""

def on_change(state, var_name, var_value):
    if var_name == "selected_date" or var_name == "selected_metric":
        # 更新圖表
        return

if __name__ == "__main__":
    gui = Gui(page)
    gui.run(use_reloader=True, port="auto")

這個例子展示了 Taipy 如何使用擴展的 Markdown 語法和 Python API 來創建互動式界面。注意 Taipy 如何通過回調機制實現高效更新,只在必要時更新相關組件,而不是重新運行整個應用程式。

Taipy 的架構深度解析

Taipy 分為兩個主要部分:前端 (GUI) 和後端 (Core)。

Taipy GUI

Taipy GUI 允許開發者創建複雜的互動式圖形用戶界面,使用擴展的 Markdown 語法和 Python API。這使得即使沒有前端開發經驗的數據科學家也能創建專業級的界面。

# 一個簡單的 Taipy GUI 示例
import taipy as tp
from taipy.gui import Gui

data = {"value": 10}

def on_slider_change(state, var_name, var_value):
    state.data["value"] = var_value

page = """
# 簡單的 Taipy 應用

## 調整數值
<|{data["value"]}|slider|min=0|max=100|on_change=on_slider_change|>

## 當前值
當前值是:<|{data["value"]}|text|>
"""

if __name__ == "__main__":
    Gui(page).run()

Taipy Core

Taipy Core 提供了專用框架,用於創建、組織和管理情景、管道和版本控制。這些功能對於構建完整的數據管道和 AI 工作流程尤為重要。

import taipy as tp
from taipy import Config, Core

# 配置數據節點
input_data_node_cfg = Config.configure_data_node(id="input_data")
output_data_node_cfg = Config.configure_data_node(id="output_data")

# 配置任務
def process_data(input_data):
    # 處理數據的邏輯
    return input_data * 2

task_cfg = Config.configure_task("process_task", process_data, 
                                input_data_node_cfg, output_data_node_cfg)

# 配置情景
scenario_cfg = Config.configure_scenario("my_scenario", [task_cfg])

# 運行 Core 服務
Core().run()

# 創建並執行情景
scenario = tp.create_scenario(scenario_cfg)
scenario.input_data.write(10)
scenario.submit()
result = scenario.output_data.read()

當你運行以上代碼時,你會看到一些 depreciation 警告,因為 Taipy 正在逐步淘汰 Core 服務,取而代之的是 Orchestrator 服務。

DeprecationWarning: 'Core' is deprecated. Use the 'Orchestrator' class instead.
  Core().run()
[2025-03-30 17:54:04.865][Taipy][WARNING] The `Core` service is deprecated and replaced by the `Orchestrator` service. An `Orchestrator` instance has been instantiated instead.
[2025-03-30 17:54:04.865][Taipy][INFO] Updating configuration with command-line arguments...
[2025-03-30 17:54:04.865][Taipy][INFO] Managing application's version...
[2025-03-30 17:54:04.865][Taipy][INFO] Development mode: Clean all entities of version 7fff00c5-3ab6-44e0-8039-86ebf3650115
[2025-03-30 17:54:04.867][Taipy][INFO] Checking application's version...
[2025-03-30 17:54:04.867][Taipy][INFO] Blocking configuration update...
[2025-03-30 17:54:04.867][Taipy][INFO] Starting job dispatcher...
[2025-03-30 17:54:04.867][Taipy][INFO] Orchestrator service has been started.
[2025-03-30 17:54:04.884][Taipy][INFO] job JOB_process_task_ff0980f0-1700-4a7d-9f99-3ecfe89a5b23 is completed.

為何選擇 Taipy?

適合不同角色

  1. 對於數據科學家:Taipy 允許您利用情景功能試驗機器學習流程,調整參數並評估結果差異。

  2. 對於 Python 開發者:簡化完整項目開發,簡化 GUI、後端和 DevOps 任務,實現高效的 IT 整合。

  3. 對於決策者:Taipy 提高團隊生產力,連接數據科學家、IT 開發人員、DevOps 和終端用戶,使組織能夠構建更成功的應用程式。

產業實踐案例

Taipy 已在多個大型企業獲得驗證,包括 Textile Apparel Limited 和 TSMC 等。例如,Group Les Mousquetaires (GLM) Datalab 的經理 Stephane Leray 提到:“使用 Taipy 實施 CFM 項目是一個改變遊戲規則的舉措。我們的前端和後端設置速度極快。當您將 Taipy 與 Databricks 結合時,它們就像拼圖的兩塊完美契合在一起。“

與其他平台的整合

Taipy 能夠無縫連接多個領先的數據平台,如 Databricks、Dataiku、Google Colab 和 AWS SageMaker。這種整合能力使得 Taipy 在企業環境中更具吸引力。

結論

Taipy 是一個強大且靈活的 Python 框架,旨在幫助數據科學家和機器學習工程師輕鬆地將其算法和數據轉化為生產級 Web 應用程式。與同類工具相比,Taipy 在性能、設計靈活性、大數據支援和後端管理方面提供了顯著優勢。

其回調機制、前後端分離架構和對同步/異步呼叫的支援使其成為開發數據密集型應用的理想選擇。此外,Taipy 的完全本地運行特性確保了資料隱私和安全,這對於處理敏感資訊的組織尤為重要。

隨著數據科學和 AI 應用的不斷發展,Taipy 這樣的工具將繼續發揮重要作用,幫助組織更快、更有效地將其數據和算法轉化為有價值的應用程式。如果您正在尋找一個能夠快速構建生產級數據應用的框架,Taipy 無疑是一個值得考慮的選擇。

感謝您閱讀我的文章。歡迎隨時分享你的想法。
關於 Calpa

Calpa 擅長使用 TypeScriptReact.jsVue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。