Python

[Streamlit] Input widgets(예시/연습)

jsys 2024. 1. 29. 20:38

* 참조 링크

Input widgets - Streamlit Docs

 

Streamlit Docs

Join the community Streamlit is more than just a way to make data apps, it's also a community of creators that share their apps and ideas and help each other make their work better. Please come join us on the community forum. We love to hear your questions

docs.streamlit.io

 

 

 

 

 

* 라이브러리 불러오기

# -*- coding:utf-8 -*-
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.graph_objects as go

 

 

 

 

 

 

1. st.slider

* 형식 : st.slider('라벨', 최소값, 최대값, 초기값, 스텝)

  > 라벨 : 슬라이더 옆에 표시될 설명

  > 스텝 : 슬라이더 값이 변경되는 간격, 생략 가능, 기본값 1

@st.cache_data
def cal_sales_revenue(price, total_sales):
    revenue = price * total_sales

    return revenue
def main():
    st.title("Button Widget")
    price = st.slider("단가:", 100, 10000, value = 5000)
    total_sales = st.slider("전체 판매 갯수:", 1, 1000, value = 500)

    st.write(price, total_sales)

    if st.button("매출액 계산"):
        revenue = cal_sales_revenue(price, total_sales)
        st.write(revenue)

>> 버튼을 누르면 슬라이더를 통해 선택된 price와 total_sales를 곱해 매출액을 계산하도록 함(cal_sales_revenue)

 

 

 

 

 

2. st.checkbox

st.title("Check Box Control")
    x = np.linspace(0, 10, 100)
    y = np.sin(x)

    show_plot = st.checkbox("시각화 보여주기")
    st.write(show_plot)

    fig, ax = plt.subplots()
    ax.plot(x,y)

    if show_plot:  # 체크박스 클릭이 되면 시각화 보여주기
        st.pyplot(fig)
    else:
        st.write("안녕, ")

>> 체크박스 클릭이 되면 시각화를 보여주고, 클릭이 되지 않으면 "안녕,"이라는 텍스트가 보이게 함

 

 

 

 

 

 

3. st.radio

# 데이터 불러오기
@st.cache_data
def load_data():
    df = sns.load_dataset('iris')
    return df
def plot_matplotlib(df):
    st.title('Scatter Plot with Matplotlib')
    fig, ax = plt.subplots()
    ax.scatter(df['sepal_length'], df['sepal_width'])
    st.pyplot(fig)
def plot_seaborn(df):
    st.title('Scatter Plot with Seaborn')
    fig, ax = plt.subplots()
    sns.scatterplot(df, x = 'sepal_length', y = 'sepal_width')
    st.pyplot(fig)
def plot_plotly(df):
    st.title('Scatter Plot with Plotly')
    fig = go.Figure()
    fig.add_trace(
        go.Scatter(x = df['sepal_length'],
                   y = df['sepal_width'],
                   mode='markers')
    )
    st.plotly_chart(fig)
plot_type = st.radio(
        "어떤 스타일의 산점도를 보고 싶은가요?",
        ("Matplotlib","Seaborn","Plotly")
    )

    st.write(plot_type)
    
if plot_type == "Matplotlib":
        plot_matplotlib(iris)
    elif plot_type == "Seaborn":
        plot_seaborn(iris)
    elif plot_type == "Plotly":
        plot_plotly(iris)
    else:
        st.write("Error!!")

    st.title("SelectBox 사용")

>> st.radio로 Matplotlib, Seaborn, Plotly 중 하나를 선택할 수 있게 하고 그에 맞는 차트를 보여줌

 

 

 

 

 

 

4. st.selectbox

# 행 추출
    st.write(iris.species.unique())
    val = st.selectbox("1개의 종을 선택하세요!!", iris.species.unique())
    st.write("선택된 species:", val)

    result = iris.loc[iris['species'] == val, :].reset_index(drop=True)
    st.data_editor(result)

>> 선택된 종에 해당하는 자료만 보여줌

 

 

 

 

 

 

5. st.multiselect

    cols = st.multiselect("복수의 컬럼을 선택하세요!!", iris.columns)
    st.dataframe(iris.loc[:, cols])

>> 두 개의 컬럼을 선택하면 그 자료만 보여줌

 

 

 

 

 

 

* st.data_editor

Data elements

데이터를 수정할 수 있음

st.title("라이브러리 선택")
    iris = load_data()
    st.data_editor(iris)

>> 위 코드는 특정 열을 선택하면 데이터가 그에 따라 정렬됨

 

 

 

 

 

 

if __name__ == "__main__":
    main()