streamlitをGooglColaboratoryで動かしたい男

# はじめに
世間ではサム・アルトマンがOpenAIから解雇された話題で持ちきりですね（ﾍｲｼｬｱ!!では全く話題になっていない）。
ChatGPTのサービス終了だけはしないでくださいお願いします！！GPT-4の値段10倍になってもいいです、お願いします！！生きていけません！！
・・・やっぱ10倍は厳しいです！2倍で勘弁してください！

取り乱しました、すみません。
さて、前回記事でPyCaretをstreamlit上に構築することに成功しました。これを社内展開しようと目論んだのですが、ﾍｲｼｬｱの全員のパソコンにPython環境があるわけではないので、どうしたものかと思いました。

前回記事↓

https://qiita.com/MAsa_min/items/4e654a6cb5c3cc976fff

# 作戦
①Python環境を全パソコンに構築（無理ゲー）
②アプリをexe化して配布（保守管理がむずい。できなくはない。）
③Python専用パソコンを購入し、共有化（お金ない）
④GooglColabで実行（ワンチャン）

というわけでGooglColabでstreamlitを実行してみることにしました。
何事も先駆者はいらっしゃいますので参考にさせていただきましょう。

https://qiita.com/gudapys/items/62eda02bdb3de5530a23

# GooglColab
では実際にやってみます。

GooglColabにはstreamlitがインストールされていないので、何はともあれstreamlitのインストールです。
```python:コードセル_1
!pip install streamlit
```

なお、どんなライブラリが入っているかは以下のコードで一覧が出力できます。
```python:
pip freeze
```

続いてPyCaretもGooglColabにはインストールされていないのでインストールしましょう。依存ライブラリが多すぎてエラー吐きがちなのでSuccessするまでセルの実行を繰り返します。
```python:コードセル_2
#エラー吐きがちなので成功するまで実行
!pip install pycaret
```

メインのapp.pyファイルを作成します。
```python:コードセル_3
%%writefile /content/app.py

# Streamlit
import streamlit as st

# Streamlitアプリケーションの実行
st.set_page_config(page_title='データ解析 & 機械学習', layout='wide')
st.set_option('deprecation.showPyplotGlobalUse', False)
st.title('データ解析 & 機械学習')
st.write("半自動でデータ解析と機械学習が行えます。サイドバーから行う作業を選択してください。")
```

今回のアプリはページに分けたので、「pages」フォルダを作成してその中にPythonファイルを作成していきます。
```python:コードセル_4
!mkdir "pages"
```

作成したpagesフォルダにpythonファイルを作成していきます。中身のコードは前回記事を参照してください。
```python:コードセル_5
%%writefile /content/pages/データ解析.py

# Streamlit
import streamlit as st
# EDA
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

@st.cache_data()
def load_data(uploaded_file):
    return pd.read_csv(uploaded_file)

def load_and_explore_data():
    uploaded_file = st.file_uploader('データを読み込んで下さい。', type=['csv'])

...省略
```

```python:コードセル_6
%%writefile /content/pages/回帰モデル.py

# Streamlit
import streamlit as st
# EDA
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.figure as figure
# ML
from pycaret.regression import *


def load_and_explore_data():
    uploaded_file = st.file_uploader('データを読み込んで下さい。', type=['csv'])

...省略
```

```python:コードセル_7
%%writefile /content/pages/分類モデル.py

# Streamlit
import streamlit as st
# EDA
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import metrics
# ML
from pycaret.classification import *

@st.cache_data()
def load_data(uploaded_file):
    return pd.read_csv(uploaded_file)

def load_and_explore_data():
    uploaded_file = st.file_uploader('データを読み込んで下さい。', type=['csv'])

...省略
```

はい、これで準備はできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/b8dabf05-f838-9e0a-2b67-3645897a9184.png)

# streamlitの実行
GooglColabからstreamlitを起動するにはlocaltunnelやngrokを使用してローカルで実行中のアプリを外部公開する手順が必要となります。ngrokは登録が必要そうなので、簡単に使用できるlocaltunnelを使ってみます。

:::note warn
外部公開になるので、アドレスを知っている人は誰でもアクセスできます。注意してください。
:::

必要ないかもしれませんが、app.pyを開いておきます。
```python:コードセル_8
from google.colab import files
files.view("/content")
files.view("app.py")
```

localtunnel経由で実行します。
```python:コードセル_9
!streamlit run app.py & sleep 3 && npx localtunnel --port 8501
```

すると以下のような出力が得られます。your url is:https://***.loca.ltにアクセスしてみます。
```python:
You can now view your Streamlit app in your browser.

  Network URL: http://***.***.***.***:8501
  External URL: http://***.***.***.***:8501

npx: installed 22 in 4.766s
your url is: https://***-***-***.loca.lt
```

するとエンドポイントの入力を求められます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/d499001e-9de1-4fac-4937-80fcd5cfba3d.png)

ここに、先ほど出力された
```python:
External URL:http://***.***.***.***:8501
```
の***のIPアドレスを入力して、Submitします。

すると・・・？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/7746c751-c888-31e7-6169-3d96ae986f25.png)

はい、できました。結構すんなりできました。エンドポイントのIPアドレスがどれかわからずあれこれ試したくらいです。

でもあれれ？エラーが出てるよ？
まぁ、追々直します。モデル構築は問題なさそうですし。（←直してから投稿しろ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/1fb9e1fd-816d-e96a-3e94-79cec59c6dcf.png)

# おわりに
とりあえずGooglColabでstreamlitを起動できることは確認できました！もはや半分以上趣味になっていますが、機能追加して、誰でも簡単にEDAやMLができるようブラッシュアップしていきます！

ではまた。