Pythonで作るWebアプリ開発!【Streamlit】
皆さんこんにちは!飯塚学生サポーターの角です!
ブログを書くのが久々な気がします...
みなさん、授業で扱ったPythonでのデータ分析やAIのモデルを作るだけ作ったあとそのまま消すのはもったいない...でもHTML/CSSを書いて、JavaScriptで動きをつけてポートフォリオにするまでやるやる気はない...ということがありますよね?
そんな後者の問題を軽くしてくれるのが今回紹介する Streamlitです。
Streamlitとは?
Streamlitとは、PythonだけでインタラクティブなWebアプリを構築できるオープンソースのフレームワークです。通常、Webアプリを作るにはフロントエンドやバックエンドの知識が必要となってきますが、Streamlitを用いるとこれらが一切不要となります。普段使っているPythonのスクリプトに数行書き足すだけで、モダンできれいなデザインのUiが自動的に生成されます。
Streamlitのメリット
①圧倒的な手軽さ
UIに必要なパーツ(ボタン、スライダー、テキスト入力、サイドバー等)が関数として用意されているため、st.button()やst.slider()と書くだけで画面に配置できます。また、pythonの環境にstreamlitをインストールするだけでいいのもいいところです。
②データ可視化ライブラリとの高い親和性
matplotlibやpandasのデータフレームをそのまま渡すだけで、綺麗で動的なグラフやテーブルを画面に描画しくれます。データのダッシュボードを作るには最適です。
どれくらい簡単なのか?
例えば音のスペクトログラムを可視化するアプリの場合はコードは下記の通りで作ることができます。
import streamlit as st
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
st.title("音声スペクトログラム可視化")
uploaded_file = st.file_uploader(
"音声ファイルをアップロード",
type = ["wav", "mp3"]
)
if uploaded_file is not None:
y, sr = librosa.load(uploaded_file, sr = None)
uploaded_file.seek(0)
st.audio(uploaded_file)
# STFT
D = librosa.amplitude_to_db(
np.abs(librosa.stft(y)),
ref = np.max
)
#描画
fig, ax = plt.subplots(figsize=(10,4))
img = librosa.display.specshow(
D,
sr=sr,
x_axis = 'time',
y_axis = 'log',
ax = ax
)
fig.colorbar(img, ax = ax, format="%+2.0f dB")
ax.set_title("Spectrogram")
st.pyplot(fig)
st.line_chart(y[:5000])
mel = librosa.feature.melspectrogram(y=y, sr = sr)
fig_mel, ax_mel = plt.subplots(figsize=(10, 4))
mel_db = librosa.power_to_db(mel, ref=np.max)
img_mel = librosa.display.specshow(
mel_db,
sr=sr,
x_axis='time',
y_axis='mel',
ax=ax_mel
)
fig_mel.colorbar(img_mel, ax=ax_mel, format="%+2.0f dB")
ax_mel.set_title("MelSpectrogram")
st.pyplot(fig_mel)
簡単ですね!!
まとめ
Streamlitは研究や実験のデモなどPythonで作った何かを手軽に可視化させたいときなどでつよいフレームワークです!(あんまりビジネスとかには向きませんが...)
是非皆さんも一回お試しください!