Taipy:ユーザーフレンドリーな本番用データサイエンティストアプリケーションを構築するためのツール

Taipy:本番用データサイエンティストアプリケーションを構築するユーザーフレンドリーなツール

フルスタックデータアプリケーションを簡単かつ迅速かつ効率的に構築する方法

Image by Campaign Creators on Unsplash

はじめに

データサイエンティストとして、データの可視化のためのダッシュボードの作成やデータの可視化、さらにはビジネスアプリケーションの実装など、ステークホルダーが実行可能な意思決定を行うための支援が必要となることがあります。

これらのタスクを実行するためには、オープンソースやプロプライエタリなソフトウェアを含む、さまざまなツールやテクノロジーを使用することができます。ただし、以下の理由からこれらは理想的ではありません:

  • いくつかのオープンソース技術は学習コストが高く、適切な専門知識を持つ人材を雇う必要があります。その結果、新しい従業員のオンボーディング時間の増加、高い教育コスト、適格な候補者を見つける上での潜在的な課題に直面する可能性があります。
  • 他のオープンソースのソリューションはプロトタイプには適していますが、本番用のアプリケーションにスケールしない場合があります。
  • 同様に、プロプライエタリなツールも自身の課題を抱えており、高いライセンス料、限られたカスタマイズ性、他のソリューションに切り替えることの難しさなどがあります。

オープンソースでありながら、学習が容易であり、フルアプリケーションにスケールできるツールがあれば素晴らしいですね。

そこで、Taipyが便利です 🎉

この記事では、Taipyとは何か、それが解決できるビジネスケースと共に説明し、さらにはフルウェブアプリケーションを作成するためのすべての手順を説明します。

Taipyとは何か、そしてなぜそれに注目すべきか

Taipyは、オープンソースの100%Pythonライブラリであり、Pythonプログラミングの基本的な知識のみが必要です。これにより、データサイエンティストや機械学習エンジニア、およびその他のPythonプログラマーは、データと機械学習モデルを素早く完全な機能を備えたウェブアプリケーションに変換することができます。

今日の急速に変化する環境では、堅牢で柔軟かつ強力なツールの需要が必須となります。以下に、Taipyを特別なプラットフォームにするいくつかの機能を示します:

  • パイロット専用のデザインではなく、産業化プロジェクトにも拡張できます。
  • Taipyのシンプルさとパワフルな機能を組み合わせることで、プログラミングのバックグラウンドが最小限のPython開発者でも短時間で堅牢なソリューションを構築することができます。
  • 高いカスタマイズ性により、ユーザーは迅速にTaipyの機能を変更および適応することができ、これは多くのオープンソースツールが提供できない個別のエクスペリエンスを提供します。
  • Taipyが提供する同期および非同期呼び出しにより、複数のタスクを同時に実行することができ、全体的なパフォーマンスが向上します。
  • PythonスクリプトまたはJupyterノートブックを使用してTaipyアプリケーションを開発することができます。
  • Taipyのパイプラインのバージョニング機能により、ユーザーは異なるプロジェクトバージョンを効果的に管理することができます。

Taipyスタジオ拡張機能をVisual Studio Codeにインストールすることで、Taipyアプリケーションの開発を大幅に加速させることができます。

Taipyの主な特徴

Taipyはフロントエンドまたはバックエンドの開発に優れていますが、フロントエンドとバックエンドのコンポーネントを備えたフルウェブアプリケーションを開発する際の真の潜在能力が発揮されます

それぞれの主な機能を詳しく見てみましょう:

Taipyフロントエンドの機能

  • ユーザーインターフェースの作成は、Pythonプログラミングの基本的な知識を使用して行われます。
  • Taipyはユーザーフレンドリーに設計されており、ユーザーインターフェースの作成がシンプルで直感的です。
  • ウェブデザインの知識は必要ありませんし、CSSやHTMLの事前知識も不要です。
  • ユーザーが望むウェブページの作成をサポートするために、拡張されたマークダウン構文を活用しています。

Taipyバックエンドの機能

  • Taipyは、さまざまなシナリオを処理するための堅牢なパイプラインの作成をサポートしています。
  • Directed Acyclic Graphs (DAGs)のモデリングを簡単に行うことができます。
  • データキャッシュ機能により、Taipyアプリケーションの全体的なパフォーマンスが向上します。
  • パイプラインの実行の登録。
  • パイプラインのバージョニング。
  • TaipyのKPIトラッキングツールを使用して、アプリケーションのパフォーマンスを追跡および評価することができます。
  • パイプラインと関連するデータのビジュアル化が組み込まれています。

タイピーの始め方

タイピーの理解が深まったので、エンドツーエンドの実装に進んでみましょう。

コアなタイピーのドキュメントやコミュニティの貢献には関連する情報が含まれており、この記事はそれらを代替するものではありませんが、実世界のシナリオでタイピーについて学び始めるための代替の場所として利用できます。

ケースをより具体的に説明するために、アメリカ保健福祉省人権事務所が管理している健康に関連するデータ漏洩の例を使用します。これには、500人以上の個人の保護された健康情報の報告された漏洩に関する情報が提供されます。

このセクションは2つの目的があります:

  • グラフィカルインターフェースを構築することで、エンドユーザーが実行可能な意思決定のための異なる種類の漏洩の全体像を把握できるようにする。
  • 分類の機械学習モデルと対話するためのタイピーのバックエンドフレームワークを開発し、与えられた情報の漏洩のタイプを予測する。

クイックインストール

タイピーを使用するには、Python 3.8以上が必要です。Anaconda Pythonディストリビューション(conda)とVisual Studio Code IDEを使用して、次のようにタイピーをインストールします:

名前がtaipy-envの仮想環境を作成し、Python 3.8をインストールします

conda create –-name taipy-env python=3.8

以前に作成した環境をアクティブにします

conda activate taipy-env

次のコマンドで仮想環境にtaipyライブラリをインストールします

pip install taipy

タイピーAppの実行

  • Pythonのスクリプトファイル<taipy_app.py>を作成します
  • 以下のコードを入力し、ファイルを保存します:
from taipy import Gui
analytics_choice = ["Breach types distribution",
                 "Breach by State",
                 "Top 10 Risky States",
                 "Covered Entity Type",
                 ""]
choice = ""
my_app_page = """# Security Breach Analytics Dashboard
## Breach Analysis
以下のリストから選択して分析を開始してください
<|{choice}|selector|lov={analytics_choice}|dropdown|>Your choice: <|{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が生成され、自動的にブラウザウィンドウが開きます:

AppにアクセスするためのURL
著者の画像

すごいですね!

では、前述のコードについて理解してみましょう。

  • ダッシュボードの作成に使用するGuiモジュールをインポートします。
  • analytics_choiceは可能な選択肢のリストです。
  • 変数choiceanalytics_choiceからの値を保持し、これらの変数の補間は<|…|>構文を使用して行われます。
  • my_pageには以下の情報がマークダウン形式で含まれています:
  • Security Breach Analytics Dashboardは単一の「#」記号で表されるH1レベルです。
  • Breach Analysisは「#」記号を2つ使用して表されるH2レベルで、その後に「Please choose from … analysis」というテキストが続きます。
  • 元のanalytics_choiceとchoice変数を使用してドロップダウンリストを作成します。
  • ユーザーが選択した選択肢を表示します。

最後に、my_app_pageを指定してポートとホストを指定してアプリケーションを実行します。サーバーポートを指定しない場合はデフォルトのポート(5000)で開きます。この具体的な例では、アプリケーションは9696http://localhost:9696上で開きます。

タイピーダッシュボードをゼロから作成する時間です

完全なダッシュボードを実装することで、タイピーの知識を次のレベルに引き上げましょう。ダッシュボードのメインセクションでは、以下のタイピーの視覚要素を活用します:

  • セレクター を使用してオプションのリストから選択を行います。
  • ボタン をクリックしてアクションをトリガーします。
  • テーブル で生データを表示します。

グラフィカルな結果を チャート で表示します。

上記のすべての視覚化要素は、以下のマークダウン構文を導入することで作成されます:

<|{変数}|視覚要素名|param1=param1|param2=param2|…|>

最終的なダッシュボードは以下のように表示され、最終的なソースコードは記事の最後に利用できます。

タイピーGUIで作成された最終的なダッシュボード(著者による画像)

ステップバイステップの説明を行うために、各コンポーネントの例が別々のファイルに示され、各ファイルは次のコマンドで実行されます:

python file_name.py

セレクター

これらはユーザーがドロップダウンリストから選択する機会を提供し、これは「タイピーアプリの実行」セクションで実装した内容に対応します。

ボタンとテーブル

ユーザーインターフェースのボタンは、クリックまたは押下されたときに特定の機能を開始します。ボタンの押下時にはon_action関数がトリガーされます。

テーブルは、データを整理するために使用され、ページング、allow_all_rowsunpaginated、およびauto_loadingの3つの表示モードを提供します。公式ドキュメンテーションでは、それぞれのモードについて詳細な情報を提供しています。以下のコードを使用して新しいファイル button.py を作成します:

from taipy import Guiimport pandas as pdbreach_data = pd.read_csv("data/breach_report_data.csv")def toggle_table_dialog(state): state.show_table_dialog = not state.show_table_dialogshow_table_dialog = Falsemy_app_page = """<center> セキュリティ侵害分析ダッシュボード</center>------------------------------<br/><center> データを表示するには以下のボタンをクリックしてください </center><br/><center><|Display Raw Data|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のデータフレームに読み込みます。次に、「Display Raw Data」を選択すると、以下のようにデータ全体がテーブル形式で表示されます:

タイピーでのボタン作成結果(著者による画像)

チャート

上記のコンポーネントの理解を深めることで、これらを組み合わせてグラフを作成することができます。総合的なpoltly.jsグラフライブラリに基づいてチャートを作成します。それ以外の場合は、タイピーのドキュメンテーションには、スタートポイントとして役立つ素晴らしい例が多数提供されています。前のセクションと同様に、以下のコードを使用して 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(著者による画像)

画像の表示

Taipy GUIで画像を表示することも簡単で、image属性を使用して実現できます。以下のコードは、generate_word_cloudによって生成されたワードクラウドを表示します。画像の幅は2400ピクセル、高さは1000ピクセルです。ユーザーのマウスが画像上にあるときには、hover_text属性の値が表示されます:この特定のシナリオでは、「Breach Locationのワードクラウド」です。

<|{breach_location_image}|image|width="2400px"|height="1000px"|hover_text="Breach Locationのワードクラウド"|>
Word cloud of the location of breach information(著者による画像)

また、ヘルパー関数generate_word_cloudは以下のように定義されています:

from wordcloud import WordCloudfrom PIL import Imagefrom io import BytesIOdef generate_word_cloud(data, column_name):  # すべての場所情報を1つの長い文字列に結合する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}|>>>

このレイアウトの理解をもとに、次のような5つのメインチャートを持つ最終的なダッシュボードを作成できます:

  • チャート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>Security Breach Analytics Dashboard 🚨</center><center>**Chart 1:**General Trend Location of Breached Information </center><center><|{breach_location_image}|image|width=2400px|height=1000px|hover_text=Word cloud of Breach Location|></center>------------------------------<|layout|columns=2 5 5|gap=1.5rem|<column_1|### Type of Breach:<|{breach_type}|selector|lov={breach_types}|dropdown|width=100%|>------------------------------<|Display Raw Data|button|on_action=toggle_table_dialog|><|{show_table_dialog}|dialog|on_action=toggle_table_dialog|width=90vw|labels=Cancel|<center><|{breach_df}|table|width=fit-content|height=65vh|></center>|>|column_1><column_2|**Chart 2:** Individuals Affected by State<|{df}|chart|type=bar|x=State|y=Individuals_Affected|>**Chart 4:** Individuals Affected by Year<|{df}|chart|type=bar|x=Year|y=Individuals_Affected|>|column_2><column_3|**Chart 3:** Individuals Affected by Type of Breach<|{df}|chart|type=bar|x=Type_of_Breach|y=Individuals_Affected|>**Chart 5:** Individuals Affected per Covered Entity Type<|{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列が作成され、それがChart 4のx軸として使用されます。

すべてのコードを実行すると、上記の最初のダッシュボードが生成されます。

Taipyバックエンドの活用

次のセクションでは、Taipyのバックエンド機能を使用して、データパイプラインを簡単かつ効率的に作成、管理、実行し、ランダムフォレスト分類器をトレーニングし、与えられた侵害情報の侵害のタイプを特定します。

このセクションには2つの主要なパートがあります。まず、Taipy Studioを使用してワークフローの完全なグラフィカル表現を構築します。次に、対応するPythonコードを記述します。

Taipy Studio

Taipy Studioは、Visual Studio Codeの拡張機能であり、以下のようにインストールできます。

Taipyのインストールプロセス(著者による画像)

インストールが完了したらVSCodeを再起動し、左下のTaipyロゴをクリックするとTaipy Studioのインターフェースが表示されます。これにはConfig Files、Data Notes、Tasks、Pipelines、Scenariosなどの4つのメインタブが表示されます。

Taipy Studioのインターフェース(著者による画像)

これらのすべてのタブを使用して、エンドツーエンドのパイプラインの実装を目指すことができます。最初のステップは、4つのロゴを選択した後、「Taipy: Show View」アイコンをクリックすると表示される「taipy_config.toml」という名前の設定ファイルを作成することです。

Taipy Studioのコンポーネント(著者による画像)
Taipyのタブのイラスト

以下は実装される主な機能と、それぞれの前述のタブの簡単な説明です。

  • filter_columns関数は、データから関連する列を選択し、Pandasのデータフレームを生成する責任があります。
  • preprocess_columnsは、特徴エンジニアリングを実行するために使用されます。
  • encode_featuresは、関連する特徴を正しい形式でエンコードする責任があります。
  • split_dataは、データをトレーニングデータセットとテストデータセットに分割する関数です。
  • train_modelは、モデルのトレーニングに使用されます。
  • show_performanceは、モデルのパフォーマンスを表示するための最終段階です。

シナリオとパイプライン

パイプラインを設定する際に最初に行うことです。シナリオは1つ以上のパイプラインで構成されます。実行の登録として機能します。次のように、シナリオ名をDATA_BREACH_SCENARIO、パイプライン名をDATA_BREACH_PIPELINEとしてシナリオを作成します。

シナリオからパイプラインへ(著者による画像)

タスク

タスクは実行可能なPython関数を指します。filter_columnsからshow_performanceまでの合計6つのタスクが実装されます。

パイプラインの出力は、各タスクの入力に接続されます。

パイプラインからタスクへ

次のステップは、各Python関数を対応するタスクに接続することで、Taipy Studioでこれらのタスクを設定することです。しかし、その前に、以下のようにdata_breach_tasks.pyファイルにこれらの関数のシグネチャを作成する必要があります:

import pandas as pdfrom sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom 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_dfdef 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 dfdef 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 predictionsdef 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] })

次に、各タスクを対応するPythonにリンクするために、以下の3つのステップに従います。イラストはfilter_columnsタスクのためのものですが、すべてのタスクに対して実行する必要があります。

タスクをスクリプトにリンクするための3つの主要ステップ(著者提供)

データノード

データノードには実際のデータは含まれていませんが、データを読み書きするために必要なすべての情報が含まれています。これらはテキスト、CSV、JSONなどの任意のデータ型への参照になります。

例えば、filter_columns関数には以下のものがあります:

  • 1つの入力ノード( filtering_node )は.CSVファイルであり、
  • 1つの出力ノード( filtered_df )も.CSVファイルとして保存されます。これはその後、preprocess_columns関数の入力として使用されます。

インタラクションのノードは以下のように定義されており、ストレージタイプがピクルから.csvに変更されていることが示されています:

filtering_nodeの入力タイプの定義(著者提供)
更新後のfiltering_nodeの入力タイプ(著者提供)

次のステップは、元の入力データセットへのパスを定義することです。これは、データノード内の「新しいプロパティ」属性を使用して行います。次に、Enterを入力し、.CSVファイルへのパスを指定します。

フィルタリングノードのプロパティの定義(画像作者)
フィルタリングノードへのパスの定義(画像作者)

.CSVファイルが必要なすべての入力に対して同じプロセスを繰り返し、すべてのデータノードとその関係性を指定した後、最終的なダイアグラムは次のようになります。

すべてのデータノードとその関係性を指定した後のワークフローの状態(画像作者)

パイプラインの構成が完了したら、全体のダイアグラムの.tomlスクリプト形式がtaipy_config.tomlファイルに生成され、以下のアニメーションに示すもののようになります。

taipy_config.tomlファイルの内容

次に、この.tomlファイルをPythonスクリプトで読み込んでパイプラインを実行できます。ファイル名を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はフロントエンドとバックエンドの間でシームレスに統合できるCoreビジュアル要素を提供し、ユーザーが努力をかけずにパワフルなビジネスオブジェクトを作成できるようにしています。これらの統合は、公式ウェブサイトから利用できます。

Taipyの使用にまだ迷っている場合は、時間とエネルギー、そして何よりもお金を節約するために試してみる時です。最後に、Taipyの素晴らしいチュートリアルは、学習をさらに深め、スキルセットを強化するのに役立ちます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more