お問い合わせ
2 分で読むことができます。

#30DaysOfStreamlit Day24 st.cache_data, cache_resource

執筆者 Budo Ogimoto 更新日時 2023年12月19日

Topics: Python streamlit

目次

はじめに


この記事では、#30DaysOfStreamlitの内容の紹介を行います。
#30DaysOfStreamlitについてはコチラの記事を参照してください。

st.cache_data, st.cache_resorce

Streamlitでは、st.cache_data, st.cache_resorceでキャッシュのコントロール可能です。
以下、各機能の説明です。

st.cache_data
データの計算をキャッシュする。
例えば、DataFrameの変形や、NumPy配列の計算、機械学習モデルの推論など。 想定される利用法としては、以下の三点があげられます。

  • CSVからロードされたDataFrame
  • Numpy配列の変形結果
  • APIへのクエリの結果

st.cache_resorce
共有される資源(global resource)の初期化をキャッシュする。
例えば、データベースとの接続や機械学習モデルなど。

元々はst.cacheという一つの機能として提供されていました。
ですが、st.cacheが多くのケースに対応しようとした結果、動作が遅くなってしまった為、機能が別れました。

今回はst.cache_dataの検証を行います。

構築する目標

st.cache_dataを利用した時と利用してない時での表示速度を理解できるアプリケーションを構築します。

アプリケーションの構築

以下のようなPythonスクリプトを準備します。

上記のコードを実行すると下記のような画面が展開します。
初回のアクセスだと速度差はほぼない状況です。

Untitled (1)-2

ページをリロードしてみます。

Untitled (2)-3

st.cache_dataを利用しているパターンでは、若干ロード時間が早くなっています

コードの解説

まずは必要なライブラリのインポートとページタイトルの設定を行います。

続いて、st.cache_dataを利用した場合の実装を行います。

今回の実装では、2,000,000件のレコード、5件のカラムを持つデータフレームを生み出す関数を実装します。(値は乱数で実装します。)
この関数をst.cache_dataのデコレーターをつけて実行させています。
また、timeライブラリを利用して実行時間を計測しています。
最後にst.infoで実行時間を表示します。

さらに、st.cache_dataを利用しない場合の実装を行います。

内容としては、st.cache_dataを利用したときと同様の実装内容です。
唯一の違いはst.cache_dataのデコレーターがないところです。

Budo Ogimoto

執筆者 Budo Ogimoto

柔術を操るデータサイエンティスト