【Streamlit】基本文法(テキスト/表/グラフ/マジックコマンド/画像表示)

公式リファレンス

https://docs.streamlit.io/library/api-reference/write-magic/magic

# ブラウザに表示

先にブラウザで表示する方法を記述しておきます。

※main.pyは任意のファイル名に置き換えてください
```
streamlit run main.py
```
コマンドを実行すると、以下のように表示されるので、URLをブラウザにコピペすれば実行結果が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/2aec6ac2-3040-44fa-2d6e-d79a529bafb1.png)


# インポート

最初に必要なライブラリをインポートします。

asで別名を付けています。
```py:
import streamlit as st
import numpy as np
import pandas as pd
```

# 基本的な記述

### タイトル

```py:
st.title('Streamlit 基本操作')
```

### テキスト

```py:
st.write('Streamlit 練習')
```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/029e36d9-498b-6d22-0585-4e0ed3e2a10e.png)


## 表

```py:
df = pd.DataFrame({
    '1列目': [1, 2, 3, 4],
    '2列目': [10, 20, 30, 40],
})

# 表示
st.write(df)
```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/3b54c656-49f6-20f2-bf8f-59ad62b4c569.png)

1列目をクリックすると簡単にソート順を変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/2c93da56-7401-57ba-1c57-896e92d55c53.png)

# dataframe

引数を渡し、縦横の長さ(px)などを指定できます。


```py:
st.dataframe(df, width=100, height=100)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/39e652e7-c435-d3a3-4ee4-d7727e2b522a.png)

ハイライトを付けることもできます。

highlight_max → 一番多い値に色を付ける
highlight_min → 一番小さい値に色を付ける
axis=0 → 列の指定
axis=1 → 行の指定
```py:
st.dataframe(df.style.highlight_max(axis=0))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/4465a22c-6b64-20de-48d5-7eab1153b7c4.png)

# table

先ほど実行したコードのdataframe部分をtableに変えます。
```py:
st.table(df.style.highlight_max(axis=0))
```

実行すると、先ほどとは表に見た目が変わったことが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/dce049ae-15ff-a41b-f139-7e59b7fe0a03.png)

tableを使うと静的な表を作成することができます。
ただし、簡単にソート順を変更するなどの操作が出来なくなります。

# マジックコマンド

マークダウン方式で文字列を記述できます。

```py:
# 小
## 中
### 大
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/ee4b0886-6a5a-8a8a-aa6f-20437e17c7c6.png)

pythonのコードを書きたいとき
```py:
    ```Python
    import streamlit as st
    import numpy as np
    import pandas as pd
    ```
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/aa018f3e-f1ed-13d5-f79d-7c5b43cd137e.png)

簡単にコピーすることもできます。

# グラフ

※下記のデータを使い回します。
※呼び出しのコードだけ書き換えていきます。

```py:
df = pd.DataFrame(
    # 行20 列3で乱数を生成
    np.random.rand(20, 3),
    # カラム名
    columns=['a', 'b', 'c']
)
```

### 折れ線グラフ

```py:
st.line_chart(df)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/2b625547-8fd2-6afa-b804-38b88a7eb0ec.png)

SVGやPNGで保存することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/3c9a0d66-f6cf-bafc-25fe-a073aea285fb.png)


### エリアチャート

```py:
st.area_chart(df)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/695e69b0-bd8e-ab06-209e-a370f9f1e67b.png)

### 棒グラフ

```py:
st.bar_chart(df)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/9aa6749c-cfc5-91d5-c7bb-56dcf8139d20.png)

# マップ

```py:
df = pd.DataFrame(
    # 新宿付近
    np.random.rand(100, 2)/[50, 50]  + [35.69, 139.70],
    # latitude 緯度 longitude 経度
    columns=['lat', 'lon']
)

st.map(df)
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/abda8da7-f90f-f922-2330-a1e5982aba24.png)

# 画像表示

今回はmain.pyと同じ階層にsample.png

```py:
# ライブラリ追加
from PIL import Image

img = Image.open('sample.jpg')

# use_column_width 実際のレイアウトの横幅に合わせるか
st.image(img, caption='Super Mario', use_column_width=True)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/46df4e40-ec2a-4713-7e8b-acb55618b159.png)

こちらも動的なので、簡単に拡大、縮小の操作ができます。

画像以外にも動画や音声などのメディアも載せることが可能なので、公式リファレンスを参考にしてみてください。


レイアウトについてに記事を投稿しました。↓

https://qiita.com/LB16B/items/b7984f0419b7dd8d679c