シェルスクリプトマガジン

Pythonあれこれ(Vol.89掲載)

著者:飯尾 淳

本連載では「Pythonを昔から使っているものの、それほど使いこなしてはいない」という筆者が、いろいろな日常業務をPythonで処理することで、立派な「蛇使い」に育つことを目指します。その過程を温かく見守ってください。皆さんと共に勉強していきましょう。第19回では、データの可視化などにも活用できるWebアプリケーションフレームワーク「Streamlit」の基本的な使い方を紹介します。

シェルスクリプトマガジン Vol.89は以下のリンク先でご購入できます。

図7 「magic.py」ファイルに記述するコード

import streamlit as st

# 素のテキストはマークダウンで表示される(docstring以外)
'''
# Magicという仕組み

説明を _markdown_ で書けます。
'''

'### 文字列や変数の取り扱い'
a = st.number_input("整数aの値を入れてください:+1:", value=0)
b = st.number_input("整数bの値を入れてください:+1:", value=0)
x = a + b
'a + b = ', x  # 文字列と変数の値を並べて直接描画する

'### 表の取り扱い'
import pandas as pd
df = pd.DataFrame({'名前': ['あや','ゆみ','みなこ','とめ'],
                   '年齢': [24,22,32,95]})
df  # データフレームを直接描画する

'### チャートの取り扱い'
import matplotlib.pyplot as plt
import numpy as np

arr = np.random.normal(1, 1, size=100)
fig, ax = plt.subplots()
ax.hist(arr, bins=20)

fig  # チャートも直接描画できる

図9 キャッシュを設定するコードの例

'### チャートの取り扱い'
import matplotlib.pyplot as plt
import numpy as np

@st.cache_data
def make_chart():
    arr = np.random.normal(1, 1, size=100)
    fig, ax = plt.subplots()
    ax.hist(arr, bins=20)
    return fig

fig = make_chart()
fig  # チャートも直接描画できる

図10 山手線の駅の位置を地図上にプロットするWebアプリのコード

import streamlit as st
import pandas as pd
import json

with open('yamate.geojson','r') as f:
    data = json.load(f)

coords = [f['geometry']['coordinates'] \
    for f in data ['features'] if f['geometry']['type'] == 'Point']

map_data = pd.DataFrame(coords, columns=['lon', 'lat'])

st.map(map_data)

図12 ウィジェットをサイドバーに配置するコードの例

import streamlit as st

selected = st.sidebar.selectbox(
    'なに食べる?',
    ('ramen', 'curry', 'katsudon'),
)

st.image(selected + '.jpg')