Press "Enter" to skip to content

Taipy:一个用于构建用户友好的生产就绪数据科学家应用的工具

一个简单、快速、高效的构建全栈数据应用的方法

Image by Campaign Creators on Unsplash

介绍

作为一名数据科学家,您可能希望创建数据可视化仪表盘,可视化数据,甚至实现业务应用程序,以帮助利益相关者做出可操作的决策。

可以使用多种工具和技术来执行这些任务,无论是开源还是专有软件。然而,出于以下原因,这些可能并不理想:

  • 一些开源技术需要一个陡峭的学习曲线和拥有适当专业知识的人才。因此,组织可能面临着新员工的入职时间增加、培训成本增加以及找到合格候选人的潜在挑战。
  • 其他开源解决方案适用于原型,但不能扩展到生产就绪的应用程序。
  • 同样,专有工具也具有其自身的挑战,包括更高的许可成本、有限的定制性以及企业难以切换到其他解决方案的困难。

如果有一个既是开源又容易学习,并且能够扩展成一个完整应用程序的工具,那岂不是很好?

这就是 Taipy 的用武之地 🎉

本文将解释什么是 Taipy,以及它可以解决的一些业务案例,然后探讨其关键功能。此外,它将说明创建完整 Web 应用程序的所有步骤。

什么是 Taipy,为什么您应该关注它?

Taipy 是一个开源的、100% Python 库,只需要基本的 Python 编程知识。它允许数据科学家、机器学习工程师和任何其他 Python 程序员快速将其数据和机器学习模型转化为完全功能的 Web 应用程序。

在当今快速变化的环境中,强大、灵活和强大的工具需求变得至关重要,以下是使 Taipy 成为如此独特平台的一些特性:

  • 它不仅仅是为飞行员设计的,还可以扩展到工业化项目。
  • Taipy 的简单性与强大的功能相结合,使具有最小编程背景的 Python 开发人员能够在短时间内构建强大的解决方案。
  • 高度可定制性使用户能够快速修改和调整 Taipy 的功能,为他们提供了许多开源工具无法提供的个性化体验。
  • Taipy 提供的同步和异步调用允许同时执行多个任务,提高了整体性能。
  • Taipy 应用程序可以使用 Python 脚本或 Jupyter Notebook 开发。
  • 通过 Taipy 的管道版本控制功能,用户可以有效管理不同的项目版本。

可以安装 Taipy Studio 扩展到 Visual Studio Code,以显著加速 Taipy 应用程序的开发。

Taipy 的主要功能

尽管 Taipy 在前端或后端开发方面表现出色,但其真正的潜力在于开发具有前端和后端组件的完整 Web 应用程序

让我们更详细地看一下每一个的主要功能:

Taipy 前端功能

  • 使用基本的 Python 编程知识创建用户界面。
  • Taipy 设计为用户友好,使用户界面的创建简单直观。
  • 无需网页设计知识,消除了对 CSS 和 HTML 的所有先决条件。
  • 它利用增强的 Markdown 语法来帮助用户创建所需的网页。

Taipy 后端功能

  • Taipy 支持创建处理不同场景的强大流水线。
  • 它使有向无环图(DAG)的建模变得简单。
  • 数据缓存功能提高了 Taipy 应用程序的整体性能。
  • 流水线执行的注册。
  • 流水线版本控制。
  • 用户可以使用 Taipy 的 KPI 跟踪工具跟踪和评估他们的应用程序性能。
  • 内置可视化工具,可查看管道和关联数据。

开始使用Taipy

现在您对Taipy有了更好的了解,让我们深入实现一个端到端的案例。

核心的Taipy文档和社区贡献中包含了相关的信息,本文不会取代它们,但可以作为一个替代的学习Taipy在实际场景中的地方。

为了更好地说明我们的案例,我们将使用美国卫生与人类服务部办公室维护的与健康相关的数据泄露。它提供了有关500多个个人未经保护的健康信息的泄露的信息。

这一部分将分为两个部分:

  • 使用Taipy构建一个图形界面,帮助最终用户全面了解不同类型的泄露,以支持决策制定。
  • 开发一个Taipy后端框架,与分类机器学习模型进行交互,以预测给定信息的泄露类型。

快速安装

使用Taipy需要Python 3.8或更高版本。可以使用Anaconda Python发行版(conda)和visual studio code IDE来安装Taipy,具体步骤如下:

创建名为taipy-env的虚拟环境并安装Python 3.8:

conda create –-name taipy-env python=3.8

激活之前创建的环境:

conda activate taipy-env

以下命令在虚拟环境中安装taipy库:

pip install taipy

运行Taipy应用

  • 创建一个Python脚本文件<taipy_app.py>
  • 输入下面的代码,然后保存文件:
from taipy import Gui
analytics_choice = ["泄露类型分布",
                   "按州划分的泄露",
                   "前10个高风险州",
                   "覆盖实体类型",
                   ""]
choice = ""
my_app_page = """# 安全泄露分析仪表盘
## 泄露分析
请选择下面的列表中的一项开始分析
<|{choice}|selector|lov={analytics_choice}|dropdown|>
您的选择:<|{choice}|text|>"""
if __name__ == '__main__':
    Gui(page=my_app_page).run(host="0.0.0.0", port=9696)

在conda控制台中,从taipy_app.py输入以下命令:

python taipy_app.py

成功执行上述代码会生成以下URL,并自动打开一个浏览器窗口:

访问应用的URL
作者图像

太棒了!

现在,让我们了解一下前面的代码:

  • 导入Gui模块,用于创建仪表盘。
  • analytics_choice是可能选择的列表。
  • 然后,变量choice将保存analytics_choice中的一个值,使用<|…|>语法进行变量插值。
  • my_page以markdown格式包含以下信息:
  • 安全泄露分析仪表盘使用单个“#”符号表示H1级别。
  • 泄露分析使用双“#”符号表示H2级别,后面跟着一个简单的文本“请选择从…分析开始”
  • 我们使用原始的analytics_choicechoice变量创建一个下拉列表。
  • 显示用户所做的选择。

最后,通过提供my_app_page并指定端口和主机来运行应用程序。如果不指定服务器端口,将在默认端口(5000)上打开。对于这个具体的示例,应用程序在9696上打开,访问地址为http://localhost:9696

从头开始创建一个Taipy仪表盘的时间

让我们通过实现一个完整的仪表盘将我们的Taipy知识提升到一个新的水平。仪表盘的主要部分将利用Taipy的以下可视元素:

  • 使用选择器从选项列表中进行选择。
  • 通过点击按钮来触发动作。
  • 表格中显示原始数据。

使用图表显示图形结果。

上述所有的可视化元素都是通过引入以下标记语法来创建的:

<|{变量}|可视元素名称|参数1=参数1|参数2=参数2|…|>

最终的仪表盘将如下所示,最终的源代码可在文章末尾找到。

用Taipy GUI创建的最终仪表盘(作者提供的图片)

为了逐步进行说明,每个组件的示例将在单独的文件中给出,每个文件都使用以下命令运行:

python文件名.py

选择器

这些允许用户从下拉列表中进行选择,对应于我们在“运行Taipy应用程序”部分中实现的内容。

按钮和表格

用户界面中的按钮在点击或按下时会启动特定的功能。按钮按下后会触发on_action函数。

另一方面,表格用于组织数据,提供三种显示模式:分页、允许所有行、不分页和自动加载。官方文档提供了有关每种模式的更多信息。创建一个名为button.py的新文件,其中包含以下代码:

from taipy import Gui
import pandas as pd

breach_data = pd.read_csv("data/breach_report_data.csv")

def toggle_table_dialog(state):
    state.show_table_dialog = not state.show_table_dialog

show_table_dialog = False

my_app_page = """
<center>安全漏洞分析仪表盘</center>
------------------------------
<br/>
<center>点击下面的按钮显示数据</center>
<br/>
<center><|显示原始数据|button|on_action=toggle_table_dialog|></center>
<|{show_table_dialog}|dialog|on_action=toggle_table_dialog|width=90vw|labels=Cancel|<center><|{breach_data}|table|width=fit-content|height=65vh|></center>|>
"""

我们首先将漏洞数据加载到Pandas的数据帧中。然后,选择“显示原始数据”将以表格格式显示所有数据,如下所示:

用Taipy创建的按钮结果(作者提供的图片)

图表

通过更好地理解上述组件,我们可以将它们组合起来创建图表,这是建立在全面的poltly.js图形库之上的。否则,Taipy的文档提供了很好的示例作为起点。与前一节类似,创建一个名为charts.py的文件,其中包含以下代码:

创建了一个条形图,x轴上是状态(State),y轴上是比例(Proportion)。

# 导入库
my_app_page = """
<center>安全漏洞分析仪表盘</center>
------------------------------
<center>图表3:受影响最严重的前10个州</center>
<br/>
<|{breach_df}|chart|type=bar|x=State|y=Individuals_Affected|>
"""
# 在这里放置'__main__'部分

最终结果是受到州影响的个体数量的动态图表,加利福尼亚州似乎受到的影响最大。

Chart with Taipy (Image by Author)

显示图片

在Taipy GUI中显示图片也很简单,可以使用image属性实现。以下代码显示了由generate_word_cloud生成的词云。图像的宽度为2400像素,高度为1000像素。当用户的鼠标悬停在图像上时,将显示hover_text属性的值:在这个特定场景中是“违规位置的词云”

<|{breach_location_image}|image|width="2400px"|height="1000px"|hover_text="违规位置的词云"|>
Word cloud of the location of breach information (Image by Author)

此外,辅助函数generate_word_cloud的定义如下:

from wordcloud import WordCloudfrom PIL import Imagefrom io import BytesIOdef generate_word_cloud(data, column_name):  # 将所有位置信息连接成一个长字符串text = ' '.join(data[str(column_name)]) wordcloud = WordCloud(     background_color="#1E3043" ) # 生成词云my_wordcloud = wordcloud.generate(text) image = my_wordcloud.to_image() my_buffer = BytesIO() image.save(my_buffer, format = 'PNG') return my_buffer.getvalue()

回调函数

目标是创建一个根据用户选择更新的动态GUI。这可以通过Taipy的回调函数来实现,它会自动触发本地命名空间中名为on_change的任何函数作为全局回调函数。具体实现如下:

def update_Type_of_Breach(state, var_name, var_value): if var_name == "Type_of_Breach":         state.df = breach_df[breach_df.Type_of_Breach == var_value]

布局

多个图表可以提供有价值的业务见解,但是垂直依次显示它们可能不是最有效的方法

相反,我们可以创建一个布局,将组件组织成layout.startlayout.end块之间的规则网格。每个组件都在part.startpart.end块内创建。

以下基本语法创建了一个具有1.8根元素字体大小的2列网格:

<|layout.start|columns= 1 2|gap=1.8rem| <optional_id|part|>  <|{first content}|>|optional_id>… <  <|{second content}|>>>

通过对布局的理解,我们可以创建包含五个主要图表的最终仪表板:

  • 图表1显示与违规信息位置相关的词云。
  • 图表2显示受州影响的个体数量。
  • 图表3确定受违规类型影响的个体总数。
  • 图表4给出每年受影响的个体总数。
  • 图表5显示每个被覆盖实体受影响的个体数量。
# DateTime列的预处理breach_df['Breach_Submission_Date'] = pd.to_datetime(breach_df['Breach_Submission_Date'])breach_df["Year"] = breach_df["Breach_Submission_Date"].dt.yearmarkdown = """<|toggle|theme|># <center>安全违规分析仪表盘 🚨</center><center>**图表1:** 违规信息位置的一般趋势 </center><center><|{breach_location_image}|image|width=2400px|height=1000px|hover_text=违规位置的词云|></center>------------------------------<|layout|columns=2 5 5|gap=1.5rem|<column_1|### 违规类型:<|{breach_type}|selector|lov={breach_types}|dropdown|width=100%|>------------------------------<|显示原始数据|button|on_action=toggle_table_dialog|><|{show_table_dialog}|dialog|on_action=toggle_table_dialog|width=90vw|labels=取消|<center><|{breach_df}|table|width=fit-content|height=65vh|></center>|>|column_1><column_2|**图表2:** 受州影响的个体数量<|{df}|chart|type=bar|x=State|y=Individuals_Affected|>**图表4:** 每年受影响的个体数量<|{df}|chart|type=bar|x=Year|y=Individuals_Affected|>|column_2><column_3|**图表3:** 受违规类型影响的个体数量<|{df}|chart|type=bar|x=Type_of_Breach|y=Individuals_Affected|>**图表5:** 每个被覆盖实体类型受影响的个体数量<|{df}|chart|type=bar|x=Covered_Entity_Type|y=Individuals_Affected|>|column_3>|>"""if __name__ == "__main__": gui = Gui(page=markdown) gui.run(dark_mode=False, host="0.0.0.0", port=9696)

在配置仪表板之前,从Breach_Submission列创建一个新的Year列,然后将其用作图表4的x轴。

运行所有代码应生成上图所示的第一个仪表板。

Taipy后端操作

在下一节中,您将使用Taipy的后端功能轻松高效地创建、管理和执行数据管道,以训练随机森林分类器,并确定给定违规信息的违规类型。

本节分为两个主要部分。首先,您将使用Taipy Studio构建完整的工作流程的图形表示。然后,编写相应的Python代码。

Taipy Studio

Taipy Studio是Visual Studio Code的扩展,可以按照以下步骤进行安装:

Taipy安装过程(图像作者)

安装完成后重新启动VSCode,然后在单击左下角的Taipy标志后,将显示Taipy Studio界面。这将显示四个主要选项卡,例如Config Files、Data Notes、Tasks、Pipelines和Scenarios。

Taipy Studio界面(图像作者)

所有这些选项卡都可以用来实现我们实现端到端流水线的目标,而第一步是创建一个配置文件(taipy_config.toml),该文件将包含由选择“Taipy: Show View”图标后右上角的4个标志表示的所有这些选项卡。

Taipy:一个用于构建用户友好的生产就绪数据科学家应用的工具 四海 第10张

Taipy Studio组件(图像作者)
Taipy选项卡说明

以下是将要实现的主要功能以及对每个先前选项卡的简要说明。

  • filter_columns函数负责从数据中选择相关列并生成Pandas数据帧。
  • preprocess_columns用于执行特征工程。
  • encode_features负责以正确的格式对相关特征进行编码。
  • split_data是将数据分割为训练集和测试集的函数。
  • train_model用于训练模型。
  • show_performance是显示模型性能的最后阶段。

场景和管道

这是设置管道时要做的第一件事。一个场景由一个或多个管道组成。它作为执行的注册表。让我们按照以下方式创建一个名为DATA_BREACH_SCENARIO的场景,后跟管道DATA_BREACH_PIPELINE:

从场景到管道(图像作者)

任务

任务指的是可以执行的Python函数,总共有六个任务将被实现,从filter_columnsshow_performance

管道的输出连接到每个任务的输入,如下所示:

从管道到任务

下一步是通过将每个Python函数连接到相应的任务来在Taipy Studio中配置这些任务。但在此之前,我们需要在data_breach_tasks.py文件中创建这些函数的签名,如下所示:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import (confusion_matrix, accuracy_score, precision_score, recall_score, f1_score)

def filter_columns(df, list_columns_to_skip):
    filtered_df = df.drop(list_columns_to_skip, axis=1)
    return filtered_df

def preprocess_columns(df):
    df['Breach_Submission_Date'] = pd.to_datetime(data['Breach_Submission_Date'])
    df['Breach_Submission_Month'] = df['Breach_Submission_Date'].dt.month
    df['Breach_Submission_Year'] = df['Breach_Submission_Date'].dt.year
    df.drop("Breach_Submission_Date", axis=1, inplace=True)
    return df

def encode_features(df):
    list_columns_to_encode = ['State', 'Location_of_Breached_Information', 'Business_Associate_Present', 'Covered_Entity_Type']
    le = LabelEncoder()
    for col in list_columns_to_encode:
        df[col] = le.fit_transform(df[col])
    X = df.drop('Type_of_Breach', axis=1)
    y = le.fit_transform(df['Type_of_Breach'])
    return {"X": X, "y": y}

def split_data(features_target_dict):
    X_train, X_test, y_train, y_test = train_test_split(features_target_dict["X"], features_target_dict["y"], test_size=0.3, random_state=42)
    return {"X_train": X_train, "X_test": X_test, "y_train": y_train, "y_test": y_test}

def train_model(train_test_dictionary):
    classifier = RandomForestClassifier()
    classifier.fit(train_test_dictionary["X_train"], train_test_dictionary["y_train"])
    predictions = classifier.predict(train_test_dictionary["X_test"], train_test_dictionary["y_test"])
    return predictions

def show_performance(train_test_dictionary, predictions):
    y_test = train_test_dictionary["y_test"]
    accuracy = accuracy_score(y_test, predictions)
    precision = precision_score(y_test, predictions)
    recall = recall_score(y_test, predictions)
    f1score = f1_score(y_test, predictions)
    return pd.DataFrame({"Metrics": ['accuracy', 'precision', 'recall', 'f1_score'], "Values": [accuracy, precision, recall, f1score]})

接下来,我们按照以下3个步骤将每个任务与相应的Python脚本链接起来。下面是对filter_columns任务进行说明,但对每个任务都要进行相同的操作。

将任务链接到脚本的3个主要步骤(作者提供的图片)

数据节点

数据节点不包含实际数据,但包含读取和写入这些数据所需的所有必要信息。它们可以是对任何数据类型的引用,例如文本、CSV、JSON等。

例如,filter_columns函数具有:

  • 一个输入节点(filtering_node):它是一个.CSV文件,以及
  • 一个输出节点(filtered_df):它也被存储为.CSV文件。然后,这作为preprocess_columns函数的输入。

交互节点的定义如下,显示了存储类型从pickle更新为.csv的修改:

filtering_node输入类型的定义(作者提供的图片)
更新后的filtering_node输入类型(作者提供的图片)

下一步是定义原始输入数据集的路径。这可以通过数据节点中的“New property”属性来完成。然后,输入回车并提供.CSV文件的路径。

过滤节点属性的定义(作者提供的图像)
过滤节点路径的定义(作者提供的图像)

对所有需要.CSV文件的输入重复相同的过程,最终的图表在指定所有数据节点及其关系后将如下所示。

指定所有数据节点及其关系后的工作流状态(作者提供的图像)

在管道配置完成后,整个图表以.taipy_config.toml文件的.toml脚本格式生成,并且其外观如下动画所示。

taipy_config.toml文件的内容

然后,可以在任何Python脚本中加载此.toml文件以执行管道。让我们使用名称为run_pipeline.py的文件创建这样的文件。

from taipy import Core, create_scenariofrom taipy.core.config import Configconfig_file_name = "./taipy_config.toml"scenario_name = "DATA_BREACH_SCENARIO"Config.load(config_file_name)scenario_config = Config.scenarios[scenario_name]if __name__ == "__main__":     Core().run() pipeline_scenario = create_scenario(scenario_config) pipeline_scenario.submit() # 这将执行场景 model_metrics = pipeline_scenario.performance_data.read() print(model_metrics)

我们首先导入相关模块,然后定义配置文件和触发场景的名称。

然后,使用submit()函数执行管道。

最后,我们检索模型的性能并打印结果,如下所示:

run_pipeline.py的结果(作者提供的图像)

可以将此数据帧进一步集成到初始仪表板中,以以图形方式显示数值。

结论

本文全面介绍了Taipy以及如何将前端和后端与任何数据和机器学习模型相结合,创建完全功能的Web应用程序。

此外,通过新版本,Taipy提供了核心可视元素,允许前端和后端之间无缝集成,使用户能够轻松创建强大的业务对象,这些集成可从官方网站获取。

如果您还对使用Taipy持观望态度,现在是时候尝试一下以节省时间、精力和最重要的是金钱。最后,Taipy的这些令人惊叹的教程可以帮助您进一步学习和加强技能。

Leave a Reply

Your email address will not be published. Required fields are marked *