って一体何?と思いつつWebで調べたり書籍を買って読んでみたりした。
結局、Pythonで手軽にWebアプリが作れるもの、ということのよう。ただ、その中でも特にグラフ描画とかが簡単にできるのでデータサイエンス向け、と言われているのかな?あとは、所謂データサイエンティストであって、Web開発がメインでない人でもすぐ扱える、というところもそう言われる所以かもしれない。逆に大規模で信頼性の高いサイトが構築できるわけではなくて、データの可視化をユーザ側にインタラクティブな形で提供するお手軽ツール、というのが自分が理解したところ。たぶん、何十万ものデータを扱うのは厳しいのではないかと思う(ので自分にはあまり使い道がないかも)。
例えばここにあるコードを下記のように少し書き換えて、test.pyで保存する。
import streamlit as st
from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns
digits = load_digits()
tsne = TSNE(n_components=2, random_state=42)
digits_tsne = tsne.fit_transform(digits.data)
plt.figure(figsize=(10, 10))
plot = sns.scatterplot(x=digits_tsne[:, 0], y=digits_tsne[:, 1], hue=digits.target, palette=sns.color_palette("hsv", 10))
st.pyplot(plot.get_figure())
そして、
streamlit run test.py
で実行すると、Webブラウザが開いて、結果が表示される。あとはいろいろインタラクティブな要素を付加するとstreamlitらしくなるのではないかと思う。ということで、scikit-learnに含まれているデータを切り替えられるようにし、なおかつグラフ自体インタラクティブに操作できるplotlyに変更してみたのが以下。ただ、どうしても色が思いどおりにならない。
import streamlit as st
from sklearn.datasets import load_digits
from sklearn.datasets import load_breast_cancer
from sklearn.datasets import load_wine
from sklearn.datasets import load_iris
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
selected_dataset = st.selectbox('データセット', ['手書き文字', '乳がん', 'ワイン', 'アヤメ'])
if selected_dataset == '手書き文字':
data = load_digits()
elif selected_dataset == '乳がん':
data = load_breast_cancer()
elif selected_dataset == 'ワイン':
data = load_wine()
elif selected_dataset == 'アヤメ':
data = load_iris()
else:
pass
tsne = TSNE(n_components=2, random_state=42)
data_tsne = tsne.fit_transform(data.data)
plt.figure(figsize=(10, 10))
colors = sns.color_palette("hsv", 10).as_hex()
fig = px.scatter(data_tsne, x=data_tsne[:, 0], y=data_tsne[:, 1], color=data.target, color_discrete_sequence=colors)
st.plotly_chart(fig)