【技術書典】300ページ超えのStreamlitの入門書を頒布した話

# はじめに
こんにちは。データエンジニアの山口歩夢です！

11/3の技術書典のオフラインイベントにて、300ページ超えのStreamlitの入門書を頒布してきました。

Streamlitの基本的な内容から、Streamlitで用意されている関数のパラメータなどについても一つひとつ解説し、ユースケースの紹介もさせていただきました。
![IMG_3921.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/39f8aee2-5ab7-ced6-8972-9e4bc705a3bb.jpeg)


以下のURLから電子版が購入可能なため、是非チェックしてみていただけると幸いです。
発売時期は未定ですが、商業本についても準備を進めております！

https://techbookfest.org/product/fhiwFCAW3weeFibUeFc4p1?productVariantID=1m3McjcE7dvXzMZcwQDz8c

当日会場にて手に取ってくださった皆様、興味を持ってくださった皆様、誠にありがとうございます。
そして、レビューやブースでの販売、告知などお力を貸してくださった皆様、本当にありがとうございました。

# Streamlitとは
StreamlitはPythonベースのフレームワークです。
Streamlitを使用することで、WEBアプリを簡単かつ少ないコードで開発することができます。
便利な関数がたくさん用意されていて、以下のような短いコードで、WEB開発の知識がない方でも簡単にアプリケーションを作成できてしまうところが魅力的なフレームワークとなっております。

```python
import streamlit as st
import pandas as pd

# シンプルなダミーデータ
data = pd.DataFrame({
    '月': ['1月', '2月', '3月'],
    '電子機器': [1200, 1400, 1600],
    '衣料品': [3400, 3200, 3000],
    '食品': [2800, 2600, 2500]
})

# カテゴリ選択と表示
category = st.selectbox("カテゴリを選択", data.columns[1:])
st.bar_chart(data[['月', category]].set_index('月'))
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/b6101be4-3163-3762-6545-9381de99b9d0.png" width=49%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/8d3671c2-bd71-0854-5356-e7b7530b751d.png" width=49%>




# 頒布した同人誌について
今回の頒布物はこちらです。
300ページ以上に渡って、Streamlitの基礎について網羅的に解説しました。

https://techbookfest.org/product/fhiwFCAW3weeFibUeFc4p1?productVariantID=1m3McjcE7dvXzMZcwQDz8c

前回の頒布物(以下)を、より詳しく解説した内容となっております！

https://techbookfest.org/product/t5GBwbFm4kUhXrTPkGpAnY?productVariantID=vFXbHRnFv5i0drjM591i0J

## 目次
目次を見ながら、書籍にどんなことを書いているのか紹介させていただきます！

### 第1章 Streamlitとは
1章ではStreamlitやSnowflakeの特徴利点について紹介しました。
Streamlitを使用するメリットや実際の使用例についても解説してあります。
```
第1章 Streamlitとは
1.1 Streamlitの概要
1.2 Snowflakeの概要
1.3 Streamlit in Snowflake の概要
1.4 Streamlit in Snowflake の詳細
    1.4.1 制限事項
    1.4.2 バージョンについて
    1.4.3 外部パッケージの使用について
    1.4.4 料金体系について
1.5 Streamlitの構造
    1.5.1 サーバー側の処理
    1.5.2 クライアント側の処理
    1.5.3 アプリケーション設計の注意点
1.6 Pythonスクリプト実行の仕組み
1.7 Streamlitの魅力や将来性
```

### 第2章 基本的な機能
2章では、Streamlitの基本的な使い方から設定、さらにはアプリケーションの外観や動作のカスタマイズ方法まで、網羅的に解説しました。
また、セッション間での変数の保持方法についても学ぶことができます。
```
第2章 基本的な機能
2.1 Streamlitの始め方
    2.1.1 Streamlitのインストール
    2.1.2 pyファイルを作成
    2.1.3 コマンドラインでアプリケーションを実行
2.2 アプリケーションの外観や動作の設定
    2.2.1 set_page_configの設定
    2.2.2 config.tomlでデザインを設定
    2.2.3 config.tomlで静的ファイルを取り扱う
    2.2.4 CSSを使って背景に画像を使う
2.3 マルチページ機能の実装
    2.3.1 必要なディレクトリーやファイルを用意する
    2.3.2 Pythonスクリプトを用意する
    2.3.3 config.tomlに追記をする
2.4 SessionStateについて
    2.4.1 基本的な使い方
    2.4.2 SessionStateとウィジェット系関数の関係
    2.4.3 コールバックの実行
    2.4.4 st.fragment でアプリケーションの一部のみ更新する
2.5 キャッシュについて
    2.5.1 st.cache_data
    2.5.2 st.cache_resource
    2.5.3 キャッシュのサイズや持続時間を設定する
    2.5.4 キャッシュ時に引数はハッシュ化されている
```

### 第3章 用意されている便利な関数
3章ではStreamlitの基本的な関数をいくつか紹介しました。

テキストやデータフレーム、グラフを表示するものや、アプリケーション使用者に対してインタラクティブな操作を可能にするものなど、様々な便利な関数を取り上げました。
便利な関数が多く用意されており、そちらを活用することで非常に手軽に高度なアプリケーションを構築できるのがStreamlitの大きな魅力です！
```
第3章 用意されている便利な関数
3.1 テキストを表示するための関数
    3.1.1 st.title
    3.1.2 st.header
    3.1.3 st.subheader
    3.1.4 st.markdown
    3.1.5 st.write
    3.1.6 st.caption
    3.1.7 st.code
    3.1.8 st.echo
    3.1.9 st.latex
    3.1.10 st.text
    3.1.11 st.divider
3.2 レイアウトの変更
    3.2.1 st.columns
    3.2.2 st.container
    3.2.3 st.dialog
    3.2.4 st.sidebar
    3.2.5 st.empty
    3.2.6 st.expander
    3.2.7 st.popover
    3.2.8 st.tabs
3.3 データの可視化
    3.3.1 st.line_chart
    3.3.2 st.bar_chart
    3.3.3 st.area_chart
    3.3.4 st.scatter_chart
    3.3.5 st.pyplot
    3.3.6 st.altair_chart
    3.3.7 st.plotly_chart
    3.3.8 st.bokeh_chart
    3.3.9 st.pydeck_chart
    3.3.10 st.map
    3.3.11 st.graphviz_chart
3.4 データ表示のための関数
    3.4.1 st.dataframe
    3.4.2 st.data_editor
    3.4.3 st.table
    3.4.5 st.json
3.5 データフレームのカラムの詳細設定
    3.5.1 st.column_config.Column
    3.5.2 st.column_config.TextColumn
    3.5.3 st.column_config.NumberColumn
    3.5.4　st.column_config.CheckboxColumn
    3.5.5 st.column_config.SelectboxColumn
    3.5.6 st.column_config.DatetimeColumn
    3.5.7 st.column_config.DateColumn
    3.5.8 st.column_config.TimeColumn
    3.5.9 st.column_config.ListColumn
    3.5.10　st.column_config.LinkColumn
    3.5.11 st.column_config.ImageColumn
    3.5.12 st.column_config.AreaChartColumn
    3.5.13 st.column_config.LineChartColumn
    3.5.14 st.column_config.BarChartColumn
    3.5.15 st.column_config.ProgressColumn
3.6 インタラクティブなウィジェット
    3.6.1 st.button
    3.6.2 st.download_button
    3.6.3 st.file_uploader
    3.6.4 st.link_button
    3.6.5 st.text_input
    3.6.6 st.text_area
    3.6.7 st.checkbox
    3.6.8 st.toggle
    3.6.9 st.radio
    3.6.10 st.selectbox
    3.6.11 st.multiselect
    3.6.12 st.slider
    3.6.13 st.select_slider
    3.6.14 st.color_picker
    3.6.15 st.number_input
    3.6.16 st.date_input
    3.6.17 st.time_input
3.7 メッセージの出力
    3.7.1 st.success
    3.7.2 st.info
    3.7.3 st.warning
    3.7.4 st.error
3.8 ウィジェットに記入完了した内容を処理する
    3.8.1 st.form
    3.8.2 st.form_submit_button
3.9 Streamlitの隠された関数(おまけ)
    3.9.1 BottomContainer
    3.9.2 Chartannotations
```

### 第4章 実践的なアプリケーション開発
4章では、Streamlitを用いた実践的なアプリケーションの構築方法を詳細に紹介しました。

Snowflakeのデータ操作からマスタデータのメンテナンス、ドリルダウン機能の実装、インタラクティブなカテゴリ選択アプリの作成、クリップボードへのデータコピー、そして位置情報の可視化まで、多岐にわたるテーマを取り上げました。
```
第4章 実践的なアプリケーション開発
4.1 StreamlitでSnowflakeのデータを可視化
    4.1.1 Snowflake環境の用意
    4.1.2 StreamlitからSnowflakeへの接続
    4.1.3 StreamlitからSnowflakeのデータを抽出する
4.2 マスタデータのメンテナンス
    4.2.1 マスタデータの用意
    4.2.2 Snowparkの使用手順
    4.2.3 StreamlitからSnowflakeのデータを更新
4.3 ドリルダウン機能を実装する
    4.3.1 前準備
    4.3.2 前月との売上の比較
    4.3.3 ドリルダウン可能なグラフを表示
    4.3.4 完成したスクリプト
4.4 インタラクティブなカテゴリ選択
    4.4.1 前準備
    4.4.2 サイドバーにカテゴリを選択機能を実装
    4.4.3 データの表示
    4.4.4 完成したスクリプト
4.5 クリップボードにデータをコピーする
    4.5.1 前準備
    4.5.2 データの表示とコピー機能の実装
    4.5.3 完成したスクリプト
4.6 位置情報と関連する属性情報の地図上での可視化
    4.6.1 PydeckのLayerについて
    4.6.2 PydeckのViewStateについて
    4.6.3 完成したスクリプト
4.7 インタラクティブなデータ探索
    4.7.1 PyGWalkerを使ったアプリケーション開発
    4.7.2 インタラクティブにグラフを操作
    4.7.3 その他の基本的な操作
```

### 第5章 Streamlit in Snowflake でのデータカタログの作成
5章では、Streamlitを使用してデータカタログを作成した方法について、実際の事例を通して具体的に解説しました。

作成したデータカタログをユーザーへ共有するために、Streamlit in Snowflakeにアプリケーションをデプロイする方法も解説しました。

```
第5章 Streamlit in Snowflake でのデータカタログの作成
5.1 データカタログとは
5.2 Streamlitでデータカタログを作成するまで
    5.2.1 Streamlit でデータカタログを作成するまでの経緯
    5.2.2 Streamlit でデータカタログを作成するメリット
    5.3 Streamlit in Snowflake にデータカタログをデプロイする
5.4 データカタログを使ってみる
    5.4.1 データの用意
5.5 データカタログの操作
    5.5.1 ドロップダウンメニューでテーブルを選択
    5.5.2 選択したテーブルのカラム情報・プレビューを表示
    5.5.3 テーブルの概要を検索
```

### 第6章 StreamlitでChatBotを開発する
6章では、Snowflakeが提供する大規模言語モデル(LLM)であるSnowflake Cortexの概要について説明しました。

そして、StreamlitでChatBotを作成する際に便利な関数の使い方について解説し、それらの関数を活用して、実際にChatBot開発をハンズオン形式で開発できるように紹介させていただきました。
```
第6章 StreamlitでChatBotを開発する
6.1 SnowflakeCortexの概要
6.2 SnowflakeCortexのLLM関数の解説
    6.2.1 COMPLETE関数
    6.2.2 EMBED_TEXT_768 関数・EMBED_TEXT_1024 関数
    6.2.3 EXTRACT_ANSWER関数
    6.2.4 SENTIMENT関数
    6.2.5 SUMMARIZE関数
    6.2.6 TRANSLATE関数
6.3 ChatBot開発に役立つStreamlit関数
    6.3.1 st.chat_message
    6.3.2 st.chat_input
6.4 ChatBotアプリケーションの構築
    6.4.1 前準備
    6.4.2 Pythonスクリプトの作成
    6.4.3 Fine-Tuningについて
```

以上が書籍の内容となっております！
半年以上かけて、情報を集めて執筆させていただきましたので、是非読んでいただけると幸いです。

# 購入したもの
ずっと自分のブースにいたので、他のブースを回れていないのですが、前から買おうと決めていたものは買うことができました。
DatabricksやSnowflakeについての書籍や、ボードゲームを購入しました！
勉強させていただきます🏋️
![IMG_3936.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883573/d85df4c4-b3e0-ce2f-0af2-9d41ac8c050e.jpeg)

# まとめ
おかげさまで、前回に引き続き今回も2時間半ほどで物理本が完売しました。
今回は300ページ以上の分厚い書籍となったため、物理本の売れ行きは抑えめになるのかなと思っていたので、大変嬉しかったです。ありがとうございます。
電子版は引き続き技術書典からご購入いただけますが、物理本をお買い求めの方は商業本発売まで少々お待ちください🙇