Python入門トップページ


Streamlit で Web アプリを作成しよう:目次

  1. 仮想環境を構築して Streamlit をインストールする
  2. ソルバーのクラスを準備する
  3. Streamlit アプリのひな形を作成して実行する
  4. CSV ファイルのアップロード機能を実装する
  5. 予算設定のスライドバーを実装する
  6. ソルバーを呼び出してアプリを完成させる
  7. GitHub でリポジトリを公開する
  8. Streamlit Community Cloud でアプリを公開する

Streamlit で Web アプリを作成しよう

ソルバーのクラスを準備する

ここで作成したソルバーのクラスを準備します.ファイル名は GochiSolver.py として streamlit フォルダに保存します.

GochiSolver.py
import numpy as np
import pandas as pd
from ortoolpy import knapsack

class GochiSolver:
    """
    ゴチのソルバー
    """
    def __init__(self):
        self.W = [] # 価格
        self.C = 0  # 設定金額
        self.ID = []
        self.Menu = []
        self.Size = []

        self.total = 0
        self.order_ids = []

        self.menu_df = None
        self.order_df = None # 注文するメニューのデータフレーム

    def set_data(self, weight_df, capacity):
        self.W = weight_df['price'].tolist()
        self.C = capacity
        self.ID = weight_df['no'].tolist()
        self.Menu = weight_df['menu'].tolist()
        self.Size = weight_df['size'].tolist()

    def show(self):
        print("W:", self.W)
        print("C: ", self.C)
        print("ID: ", self.ID)
        print("Menu: ", self.Menu)
        print("Size: ", self.Size)

    def solve(self):
        # 問題を解く
        self.total, self.order_ids = knapsack(self.W, self.W, self.C)
        # 注文するかしないか
        orders = np.zeros(len(self.ID), dtype=np.int64) # ゼロで初期化
        orders[self.order_ids] = 1 # 注文するメニューを設定
        # 全メニューのデータフレームに注文データ(0-1変数)も追加する
        self.menu_df = pd.DataFrame(
            {
                'no': self.ID,
                'menu': self.Menu,
                'size': self.Size,
                'price': self.W,
                'order' : orders
            }
        )
        # 注文メニューだけのデータフレーム
        self.order_df = self.menu_df[self.menu_df.order > 0]

目次に戻る