1652268660
Web開発は、データサイエンティストのコアコンピテンシーではありません。ほとんどのデータサイエンティストは、それを行うためにさまざまなテクノロジーをわざわざ学ぶ必要はありません。それは彼らのコーヒーではありません。
ただし、ほとんどのデータサイエンスプロジェクトには、ソフトウェア開発コンポーネントもあります。開発者は、問題について異なる理解を持っている場合があり、個別のテクノロジを使用します。それはしばしば問題を引き起こし、両方のチームの貴重な時間を非生産的に浪費します。
また、TableauやPower BIなどの視覚化ツールは、データ探索に重点を置いています。それでも、それは完全なデータサイエンスプロジェクトの一部にすぎません。機械学習モデルを統合する必要がある場合、それらは完璧にはほど遠いです。
Streamlitを使用すると、データサイエンスプロジェクト用のWebアプリを開発できます。このオープンソースライブラリのAPIは完全にPythonです。したがって、それを使用するために他のWebテクノロジーを学ぶ必要はありません。また、習得が簡単で、変更に柔軟に対応できます。
この記事はStreamlitの紹介です。ユーザー入力を受け取り、K-meansアルゴリズムを実行し、結果をWebインターフェイスに即座にプロットするインタラクティブなWebアプリを構築します。
短い記事の終わりまでに、私たちはカバーしたでしょう
デプロイされたバージョンへのリンクは次のとおりです。スニークピークが必要な場合は、それをチェックしてください。
開発用にStreamlitを設定します。
この並外れたツールのセットアップは非常にシンプルで、ほとんどすべてのPythonユーザーがこのツールに精通しています。PyPIを使用します。
pip install streamlit
condaやその他の一般的なPythonパッケージマネージャーを使用することもできます。
完了したら、インストールに付属しているhelloworldアプリでテストできます。ターミナルウィンドウで以下のコマンドを実行し、開発サーバーを起動します。
streamlit hello
hello worldアプリは、Streamlitで実行できる優れた視覚化のセットです。上記のコマンドは、ローカル開発サーバーを起動し、デフォルトのブラウザでリンクを開きます。同じページでソースコードを見つけることもできます。さらに、このサンプルアプリには、自分自身を教育するための多くの高度なチュートリアルへのリンクもあります。
セットアップが完了したので、機械学習モデルと対話するためのアプリを作成しましょう。
StreamlitWebアプリで機械学習モデルを使用する。
以下のアプリは、Pandas、Scikit-Learn、Matplotlib、Seaborn、およびStreamlitを使用しています。開始する前に、必要なすべてのパッケージがインストールされていることを確認してください。そうでない場合は、以下のコマンドで実行できます。
pip install pandas scikit-learn matplotlib seaborn streamlit
以下の内容で「quickstart.py」という名前のファイルを作成します。
# Imports
# -----------------------------------------------------------
import streamlit as st
import pandas as pd
# -----------------------------------------------------------
# Helper functions
# -----------------------------------------------------------
# Load data from external source
df = pd.read_csv(
"https://raw.githubusercontent.com/ThuwarakeshM/PracticalML-KMeans-Election/master/voters_demo_sample.csv"
)
# -----------------------------------------------------------
# Sidebar
# -----------------------------------------------------------
# -----------------------------------------------------------
# Main
# -----------------------------------------------------------
# Create a title for your app
st.title("Interactive K-Means Clustering")
# A description
st.write("Here is the dataset used in this analysis:")
# Display the dataframe
st.write(df)
# -----------------------------------------------------------
著者からのコードスニペット。
上記のファイルは簡単です。説明のために、ファイルにセクションを追加しました。
メインのアプリセクションには、3行あります。ページにタイトルと説明を追加しました。次に、ページにデータフレームを表示します。「st.write」関数はオールインワンソリューションです。この関数にはほとんど何でも渡すことができ、StreamlitはUIに正しいウィジェットを表示するのに十分スマートです。さまざまなStreamlit関数について学ぶために、ここにチートシートがあります。
以下のコマンドで最初のアプリを実行してみましょう。
streamlilt run quickstart.py
helloアプリと同様に、このコマンドは新しい開発サーバーを起動します。ブラウザに以下が表示されます。
著者からのスクリーンショット。
おめでとうございます。最初のWebアプリを作成しました。HTML、CSSがなく、JavaScriptもまったくありません。
しかし、これは初歩的なことです。Webアプリはたくさんのクールなことをすることができます。リアルタイムでユーザーと対話し、コンテンツを更新できます。どうすればそれができるか見てみましょう。
StreamlitWebアプリでインタラクションをもたらすのは簡単です。Streamlit APIには、いくつかのウィジェットが含まれています。それらを使用して、ユーザー入力を取得し、その値を変数に格納できます。残りは他のPythonプログラムと同じです。
データセットの表示を切り替えるチェックボックスを追加しましょう。結局のところ、生データを表示するWebアプリを開発する人は誰もいません。データフレーム表示(30行目)を以下の内容に置き換えてください。
# Display the dataframe
df_display = st.checkbox("Display Raw Data", value=True)
if df_display:
st.write(df)
著者からのコードスニペット。
ブラウザを更新すると、データフレームの表示を切り替えるためのチェックボックスが表示されます。
著者からのスクリーンショット。
しかし、アプリの中央にあるトグルボタンは快適ではありません。サイドバーに移動しましょう。
アプリにサイドバーを追加する
繰り返しますが、別の楽なアクション。StreamlitAPIにはサイドバープロパティがあります。メインアプリで作成したすべてのウィジェットは、このサイドバープロパティでも利用できます。
'st.sidebar'プロパティを使用してサイドバー変数を作成します。次に、メインアプリセクションで追加したチェックボックスの割り当てをサイドバーセクションに移動します。'st.checkbox'の代わりに'st.sidebar.checkbox'を使用していることに注意してください。
# SIDEBAR
# -----------------------------------------------------------
sidebar = st.sidebar
df_display = sidebar.checkbox("Display Raw Data", value=True)
n_clusters = sidebar.slider(
"Select Number of Clusters",
min_value=2,
max_value=10,
)
# -----------------------------------------------------------
著者からのコードスニペット。
上記のコードでは、サイドバーにスライダーも追加しました。このウィジェットは、ユーザーが選択した数のクラスターをキャプチャします。出力は次のようになります。
著者からのスクリーンショット。
次に、ユーザーが選択した数のクラスターを使用してKmeansアルゴリズムを実行します。
以下のコードを使用して、インポート、ヘルパー関数、およびメインアプリセクションを拡張します。
# Imports
# -----------------------------------------------------------
...
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
# -----------------------------------------------------------
# Helper functions
# -----------------------------------------------------------
...
def run_kmeans(df, n_clusters=2):
kmeans = KMeans(n_clusters, random_state=0).fit(df[["Age", "Income"]])
fig, ax = plt.subplots(figsize=(16, 9))
#Create scatterplot
ax = sns.scatterplot(
ax=ax,
x=df.Age,
y=df.Income,
hue=kmeans.labels_,
palette=sns.color_palette("colorblind", n_colors=n_clusters),
legend=None,
)
return fig
# -----------------------------------------------------------
# MAIN APP
# -----------------------------------------------------------
...
# Show cluster scatter plot
st.write(run_kmeans(df, n_clusters=n_clusters))
# -----------------------------------------------------------
著者からのコードスニペット。
上記のコードでは、K-Meansアルゴリズムを実行する関数を作成しました。データフレームとクラスターの数を引数として取り、Matplotlibの数値を返します。
K-Meansクラスタリングの図は、このプロジェクトの範囲を超えています。これは機械学習アルゴリズムであり、それが私たちの関心事です。しかし、あなたはそれを説明している私の以前の投稿を参照することができます。
run_forecast関数の2番目の引数として、前のセクションのスライダー値をキャプチャするn_clusters変数を使用します。
ページを更新すると、ユーザー入力を受け取り、機械学習アルゴリズムを実行し、UIを即座に更新するダッシュボードが表示されます。
著者からのスクリーンショット。
経験豊富な開発者であっても、このレベルの相互作用とバックエンドMLとの統合は困難な作業です。特に、Webアプリの開発方法を知らないデータサイエンティストの場合は、数週間かかる場合があります。
キャッシュによるパフォーマンスの向上。
データサイエンスパイプラインの一部のタスクには時間がかかります。しかし、そのようなタスクが同じ入力に対して異なる結果を生成することはめったにありません。Streamlitの組み込みキャッシュ機能を使用して、将来の使用のためにそれらの値を保存できます。
複雑に聞こえるかもしれませんが、streamlitでそれを行うのは簡単です。時間のかかるタスクは関数である必要があり、@ts.cacheデコレータでラップします。入力パラメーターが同じで、関数の本体が変更されていない限り、Streamlineはそれをキャッシュからフェッチします。
作成したアプリでは、外部URLを呼び出してデータをダウンロードします。ライブAPIの場合は、キャッシュしたくない場合があります。しかし、私たちの場合はそうではありません。したがって、行を次のコードに置き換えてキャッシュしましょう。
# Load data from external source
@st.cache
def load_data():
df = pd.read_csv(
"https://raw.githubusercontent.com/ThuwarakeshM/PracticalML-KMeans-Election/master/voters_demo_sample.csv"
)
return df
df = load_data()
著者からのコードスニペット。
最初のリロード時に、ブラウザに「Processingload_data」というメッセージが表示される場合があります。しかし、その後のリロードにはそのメモはありません。これは、リクエストが外部URLからダウンロードするのではなく、キャッシュからフェッチされるためです。
インターネットでの展開
Streamlitコンソールに気付いた場合は、ネットワークURLも表示されます。つまり、ファイアウォールで許可されている場合は、イントラネットを介してアプリにアクセスできます。
ただし、ネットワークの外部で共有したい場合は、多くのオプションがあります。ドキュメントに記載されているように、StreamlitアプリはPythonアプリが機能する場所ならどこでも機能します。
展開に関するStreamlitのコミュニティガイドを必ず読んで、利用可能な多数のオプションを調べてください。
このチュートリアルアプリをStreamlitShareにデプロイした方法は次のとおりです。繰り返しになりますが、Streamlitはその便利さで私を驚かせることに失敗しませんでした。
ステップI:コードをGitHubパブリックリポジトリに配置します。このGitHubリポジトリ
にコードを追加しました。すべての依存関係を含むrequirement.txtファイルが含まれていることを確認する必要があります。
ステップII:GitHubアカウントを使用してStreamlitにログインします。
ステップIII:Streamlitコンソールで新しいアプリを作成します。
ドロップダウンまたはURLの過去からgitハブリポジトリを選択します。展開に使用するブランチを選択します。最後に、メインのファイル名を選択して、[デプロイ]をクリックします。
著者によるスクリーンショット。
約1分で、私のアプリはStreamlitShareで公開されます。ただし、展開までの時間は、プロジェクトの要件によって異なる場合があります。
ストリームリット共有は現在、招待のみのものであることに注意してください。しかし、私はそれを手に入れるのにそれほど長く待ちませんでした。Streamlitのデプロイメントドキュメントには、これに関するさらに多くの役立つ情報が含まれています。
結論
言うまでもなく、Streamlitはデータサイエンスプロジェクトの重大な問題を解決します。これにより、データサイエンティストは、機械学習モデルと対話するためのWebアプリを構築することができます。
この紹介記事では、K-MeansクラスタリングでStreamlitを使用する方法について説明しました。些細なアプリケーションですが、このテクノロジーのコアコンセプトを示しています。開発に加えて、Streamlitでパフォーマンスのためにキャッシュを管理するのがいかに簡単かを見てきました。最後に、展開オプションについて説明しました。
Streamlitはこれ以上のものです。優れたチュートリアルが満載の公式ドキュメントを確認してください。また、APIチートシートは迅速な開発に役立ちます。
1652268660
Web開発は、データサイエンティストのコアコンピテンシーではありません。ほとんどのデータサイエンティストは、それを行うためにさまざまなテクノロジーをわざわざ学ぶ必要はありません。それは彼らのコーヒーではありません。
ただし、ほとんどのデータサイエンスプロジェクトには、ソフトウェア開発コンポーネントもあります。開発者は、問題について異なる理解を持っている場合があり、個別のテクノロジを使用します。それはしばしば問題を引き起こし、両方のチームの貴重な時間を非生産的に浪費します。
また、TableauやPower BIなどの視覚化ツールは、データ探索に重点を置いています。それでも、それは完全なデータサイエンスプロジェクトの一部にすぎません。機械学習モデルを統合する必要がある場合、それらは完璧にはほど遠いです。
Streamlitを使用すると、データサイエンスプロジェクト用のWebアプリを開発できます。このオープンソースライブラリのAPIは完全にPythonです。したがって、それを使用するために他のWebテクノロジーを学ぶ必要はありません。また、習得が簡単で、変更に柔軟に対応できます。
この記事はStreamlitの紹介です。ユーザー入力を受け取り、K-meansアルゴリズムを実行し、結果をWebインターフェイスに即座にプロットするインタラクティブなWebアプリを構築します。
短い記事の終わりまでに、私たちはカバーしたでしょう
デプロイされたバージョンへのリンクは次のとおりです。スニークピークが必要な場合は、それをチェックしてください。
開発用にStreamlitを設定します。
この並外れたツールのセットアップは非常にシンプルで、ほとんどすべてのPythonユーザーがこのツールに精通しています。PyPIを使用します。
pip install streamlit
condaやその他の一般的なPythonパッケージマネージャーを使用することもできます。
完了したら、インストールに付属しているhelloworldアプリでテストできます。ターミナルウィンドウで以下のコマンドを実行し、開発サーバーを起動します。
streamlit hello
hello worldアプリは、Streamlitで実行できる優れた視覚化のセットです。上記のコマンドは、ローカル開発サーバーを起動し、デフォルトのブラウザでリンクを開きます。同じページでソースコードを見つけることもできます。さらに、このサンプルアプリには、自分自身を教育するための多くの高度なチュートリアルへのリンクもあります。
セットアップが完了したので、機械学習モデルと対話するためのアプリを作成しましょう。
StreamlitWebアプリで機械学習モデルを使用する。
以下のアプリは、Pandas、Scikit-Learn、Matplotlib、Seaborn、およびStreamlitを使用しています。開始する前に、必要なすべてのパッケージがインストールされていることを確認してください。そうでない場合は、以下のコマンドで実行できます。
pip install pandas scikit-learn matplotlib seaborn streamlit
以下の内容で「quickstart.py」という名前のファイルを作成します。
# Imports
# -----------------------------------------------------------
import streamlit as st
import pandas as pd
# -----------------------------------------------------------
# Helper functions
# -----------------------------------------------------------
# Load data from external source
df = pd.read_csv(
"https://raw.githubusercontent.com/ThuwarakeshM/PracticalML-KMeans-Election/master/voters_demo_sample.csv"
)
# -----------------------------------------------------------
# Sidebar
# -----------------------------------------------------------
# -----------------------------------------------------------
# Main
# -----------------------------------------------------------
# Create a title for your app
st.title("Interactive K-Means Clustering")
# A description
st.write("Here is the dataset used in this analysis:")
# Display the dataframe
st.write(df)
# -----------------------------------------------------------
著者からのコードスニペット。
上記のファイルは簡単です。説明のために、ファイルにセクションを追加しました。
メインのアプリセクションには、3行あります。ページにタイトルと説明を追加しました。次に、ページにデータフレームを表示します。「st.write」関数はオールインワンソリューションです。この関数にはほとんど何でも渡すことができ、StreamlitはUIに正しいウィジェットを表示するのに十分スマートです。さまざまなStreamlit関数について学ぶために、ここにチートシートがあります。
以下のコマンドで最初のアプリを実行してみましょう。
streamlilt run quickstart.py
helloアプリと同様に、このコマンドは新しい開発サーバーを起動します。ブラウザに以下が表示されます。
著者からのスクリーンショット。
おめでとうございます。最初のWebアプリを作成しました。HTML、CSSがなく、JavaScriptもまったくありません。
しかし、これは初歩的なことです。Webアプリはたくさんのクールなことをすることができます。リアルタイムでユーザーと対話し、コンテンツを更新できます。どうすればそれができるか見てみましょう。
StreamlitWebアプリでインタラクションをもたらすのは簡単です。Streamlit APIには、いくつかのウィジェットが含まれています。それらを使用して、ユーザー入力を取得し、その値を変数に格納できます。残りは他のPythonプログラムと同じです。
データセットの表示を切り替えるチェックボックスを追加しましょう。結局のところ、生データを表示するWebアプリを開発する人は誰もいません。データフレーム表示(30行目)を以下の内容に置き換えてください。
# Display the dataframe
df_display = st.checkbox("Display Raw Data", value=True)
if df_display:
st.write(df)
著者からのコードスニペット。
ブラウザを更新すると、データフレームの表示を切り替えるためのチェックボックスが表示されます。
著者からのスクリーンショット。
しかし、アプリの中央にあるトグルボタンは快適ではありません。サイドバーに移動しましょう。
アプリにサイドバーを追加する
繰り返しますが、別の楽なアクション。StreamlitAPIにはサイドバープロパティがあります。メインアプリで作成したすべてのウィジェットは、このサイドバープロパティでも利用できます。
'st.sidebar'プロパティを使用してサイドバー変数を作成します。次に、メインアプリセクションで追加したチェックボックスの割り当てをサイドバーセクションに移動します。'st.checkbox'の代わりに'st.sidebar.checkbox'を使用していることに注意してください。
# SIDEBAR
# -----------------------------------------------------------
sidebar = st.sidebar
df_display = sidebar.checkbox("Display Raw Data", value=True)
n_clusters = sidebar.slider(
"Select Number of Clusters",
min_value=2,
max_value=10,
)
# -----------------------------------------------------------
著者からのコードスニペット。
上記のコードでは、サイドバーにスライダーも追加しました。このウィジェットは、ユーザーが選択した数のクラスターをキャプチャします。出力は次のようになります。
著者からのスクリーンショット。
次に、ユーザーが選択した数のクラスターを使用してKmeansアルゴリズムを実行します。
以下のコードを使用して、インポート、ヘルパー関数、およびメインアプリセクションを拡張します。
# Imports
# -----------------------------------------------------------
...
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
# -----------------------------------------------------------
# Helper functions
# -----------------------------------------------------------
...
def run_kmeans(df, n_clusters=2):
kmeans = KMeans(n_clusters, random_state=0).fit(df[["Age", "Income"]])
fig, ax = plt.subplots(figsize=(16, 9))
#Create scatterplot
ax = sns.scatterplot(
ax=ax,
x=df.Age,
y=df.Income,
hue=kmeans.labels_,
palette=sns.color_palette("colorblind", n_colors=n_clusters),
legend=None,
)
return fig
# -----------------------------------------------------------
# MAIN APP
# -----------------------------------------------------------
...
# Show cluster scatter plot
st.write(run_kmeans(df, n_clusters=n_clusters))
# -----------------------------------------------------------
著者からのコードスニペット。
上記のコードでは、K-Meansアルゴリズムを実行する関数を作成しました。データフレームとクラスターの数を引数として取り、Matplotlibの数値を返します。
K-Meansクラスタリングの図は、このプロジェクトの範囲を超えています。これは機械学習アルゴリズムであり、それが私たちの関心事です。しかし、あなたはそれを説明している私の以前の投稿を参照することができます。
run_forecast関数の2番目の引数として、前のセクションのスライダー値をキャプチャするn_clusters変数を使用します。
ページを更新すると、ユーザー入力を受け取り、機械学習アルゴリズムを実行し、UIを即座に更新するダッシュボードが表示されます。
著者からのスクリーンショット。
経験豊富な開発者であっても、このレベルの相互作用とバックエンドMLとの統合は困難な作業です。特に、Webアプリの開発方法を知らないデータサイエンティストの場合は、数週間かかる場合があります。
キャッシュによるパフォーマンスの向上。
データサイエンスパイプラインの一部のタスクには時間がかかります。しかし、そのようなタスクが同じ入力に対して異なる結果を生成することはめったにありません。Streamlitの組み込みキャッシュ機能を使用して、将来の使用のためにそれらの値を保存できます。
複雑に聞こえるかもしれませんが、streamlitでそれを行うのは簡単です。時間のかかるタスクは関数である必要があり、@ts.cacheデコレータでラップします。入力パラメーターが同じで、関数の本体が変更されていない限り、Streamlineはそれをキャッシュからフェッチします。
作成したアプリでは、外部URLを呼び出してデータをダウンロードします。ライブAPIの場合は、キャッシュしたくない場合があります。しかし、私たちの場合はそうではありません。したがって、行を次のコードに置き換えてキャッシュしましょう。
# Load data from external source
@st.cache
def load_data():
df = pd.read_csv(
"https://raw.githubusercontent.com/ThuwarakeshM/PracticalML-KMeans-Election/master/voters_demo_sample.csv"
)
return df
df = load_data()
著者からのコードスニペット。
最初のリロード時に、ブラウザに「Processingload_data」というメッセージが表示される場合があります。しかし、その後のリロードにはそのメモはありません。これは、リクエストが外部URLからダウンロードするのではなく、キャッシュからフェッチされるためです。
インターネットでの展開
Streamlitコンソールに気付いた場合は、ネットワークURLも表示されます。つまり、ファイアウォールで許可されている場合は、イントラネットを介してアプリにアクセスできます。
ただし、ネットワークの外部で共有したい場合は、多くのオプションがあります。ドキュメントに記載されているように、StreamlitアプリはPythonアプリが機能する場所ならどこでも機能します。
展開に関するStreamlitのコミュニティガイドを必ず読んで、利用可能な多数のオプションを調べてください。
このチュートリアルアプリをStreamlitShareにデプロイした方法は次のとおりです。繰り返しになりますが、Streamlitはその便利さで私を驚かせることに失敗しませんでした。
ステップI:コードをGitHubパブリックリポジトリに配置します。このGitHubリポジトリ
にコードを追加しました。すべての依存関係を含むrequirement.txtファイルが含まれていることを確認する必要があります。
ステップII:GitHubアカウントを使用してStreamlitにログインします。
ステップIII:Streamlitコンソールで新しいアプリを作成します。
ドロップダウンまたはURLの過去からgitハブリポジトリを選択します。展開に使用するブランチを選択します。最後に、メインのファイル名を選択して、[デプロイ]をクリックします。
著者によるスクリーンショット。
約1分で、私のアプリはStreamlitShareで公開されます。ただし、展開までの時間は、プロジェクトの要件によって異なる場合があります。
ストリームリット共有は現在、招待のみのものであることに注意してください。しかし、私はそれを手に入れるのにそれほど長く待ちませんでした。Streamlitのデプロイメントドキュメントには、これに関するさらに多くの役立つ情報が含まれています。
結論
言うまでもなく、Streamlitはデータサイエンスプロジェクトの重大な問題を解決します。これにより、データサイエンティストは、機械学習モデルと対話するためのWebアプリを構築することができます。
この紹介記事では、K-MeansクラスタリングでStreamlitを使用する方法について説明しました。些細なアプリケーションですが、このテクノロジーのコアコンセプトを示しています。開発に加えて、Streamlitでパフォーマンスのためにキャッシュを管理するのがいかに簡単かを見てきました。最後に、展開オプションについて説明しました。
Streamlitはこれ以上のものです。優れたチュートリアルが満載の公式ドキュメントを確認してください。また、APIチートシートは迅速な開発に役立ちます。