DASHBOARD APP 개발/Streamlit Library

Streamlit 기본 lib : Web 화면에 Dataframe 보여주기 & 버튼 만들기 (st.dataframe/button 등..)

신강희 2024. 5. 7. 14:52
728x90

<Web 화면에 Dataframe 보여주기 & 버튼 만들기>

# 기본적으로 모든 코드들은

def main() :
if __name__ == '__main__' :
    main()

ㄴ 이 기본형식 안에서 쓰여저야 실행된다. 혹시 실행이 되지 않을경우 하단에 마무리 코드를 적지 않았는지 확인!

 

< app3.py로 작성 (데이터 프레임 보여주기) >

# 판다스 데이터 프레임을 웹 화면에 보여주는 방법

import streamlit as st
import pandas as pd

def main():
    df = pd.read_csv('./streamlit/data/iris.csv')

    # 프린트함수는 디버깅용
    print(df)

    st.dataframe (df)

 

# 하단 터미널에 데이터 프레임 출력확인되고, 서버 실행

 

# 해당 문구는 app3.py로 생성하여 작성하였으므로

$ streamlit run app3.py

 

# Web 실행 화면

ㄴ 데이터 프레임이 화면에서 출력되는것 확인 가능

 

 # species 컬럼의 유니크 값을 화면에 표시

    print(df['species'].unique())

    st.write(df['species'].unique())

    st.text('아이리스 꽃은' + df['species'].unique() + '로 되어있다.')

 

# 웹화면에 유니크한 값은 문구로 출력하여 보여준다.

### app3.py 전체 코드 ###

# 판다스 데이터 프레임을 웹 화면에 보여주는 방법

import streamlit as st
import pandas as pd

def main():
    df = pd.read_csv('./data/iris.csv')

    # 프린트함수는 디버깅용
    print(df)

    st.dataframe (df)

    # species 컬럼의 유니크 값을 화면에 표시

    print(df['species'].unique())

    st.write(df['species'].unique())

    st.text('아이리스 꽃은' + df['species'].unique() + '로 되어있다.')

if __name__ == '__main__' :
    main()

 

< app4.py로 작성 (UI 함수) >

# UI 함수들 (버튼 등등)

import streamlit as st
import pandas as pd

def main() :
    df = pd.read_csv('./streamlit/data/iris.csv')

    # 버튼 만들기
    # 유저가 버튼을 누르면 데이터프레임을 보여준다.
    if st.button('데이터 보기') :
        st.dataframe(df)

 

# 저장 후

$ streamlit run app4.py 로 서버 실행 후 확인

ㄴ 버튼이 생성되고 버튼을 누를경우 데이터를 보여준다.

 

# '대문자' 버튼을 만들고,
    # 버튼을 누르면, species 컬럼의 값들을 대문자로
    # 변경한 데이터 프레임을 화면에 보여주세요.

    if st.button('대문자') :
        st.dataframe(df['species'].str.upper())
    else :
        st.text('아무것도 안눌렀습니다.')

 

# 대문자 버튼이 생성되고, 선택하지 않을경우 안내 문구가 나오고

 

# 누를경우 'species' 컬럼의 값들을 대문자로 보여줌.

# 라디오 버튼과 정렬

 
    # 라디오 버튼 : 여러개중에서 한개 선택하게 할때.
    my_order = ['오름차순 정렬', '내림차순 정렬']
    status = st.radio('정렬방법 선택하세요', my_order)

    # petal_length 컬럼으로 정렬해서 df 보여준다.
    if status == my_order[0] :
        st.dataframe(df.sort_values('petal_length', ascending=True))
    elif status == my_order[1] :
        st.dataframe(df.sort_values('petal_length', ascending=False))

 

# 원하는 라디오 버튼을 선택시 정렬하여 보여준다.


# 체크박스

# 체크박스 : 둘중에 하나만 선택하게끔 만들때. (체크/해제)
    # 체크하면, 헤드 5개 보여주고, 해제하면 안보여주도록
    if st.checkbox('헤드 5개보기', False) :
        st.dataframe(df.head())

 

# 셀렉트 박스

# 셀렉트 박스 : 여러개에서 한개만 고르게 하되,
    #              리스트가 많을때 사용한다.
    language = ['Python', 'C', 'Java', 'Go', 'PHP', 'Dart']
   
    my_choice = st.selectbox('좋아하는 언어 선택하세요.', language)

    if my_choice == language[0] or my_choice == language[2] :
        st.text('정말 재미있는 언어입니다.')
    elif my_choice == language[3] or my_choice == language[5] :
        st.text('배우고 싶습니다.')
    else :
        st.text('오래된 언어입니다.')

 

# 원하는 항목을 선택할경우 코딩한 언어가 출력됨

 

# 멀티셀렉트

# 멀티셀렉트 : 여러개중에서, 여러개를 선택하게 할때.

    # 유저가 선택한 컬럼을, 데이터프레임으로 보여주되
    # 아무것도 선택안하면, 아무것도 나오지 않게 하시오.
    choice_list = st.multiselect('원하는 컬럼을 선택하세요', df.columns)

    if len(choice_list) !=  0 : # if choice_list == [] : 이렇게 적어도됨 방법은 여러가지
        st.dataframe (df[choice_list])
    else :
        st.write()

 

 

# 선택한 컬럼이 없을경우 빈칸으로

 

# 슬라이더

# 슬라이더 : 숫자 조정하는데 주로 사용
    st.slider('데이터 선택', -5.0, 10.5, 0.0, 0.5)

    # 나이를 슬라이더로 입력받는다.
    # 1세부터 120세까지 입력받을 수 있도록 한다.
    # 선택한 나이가 웹화면에 출력되도록 한다. "선택한 나이는 33세 입니다."
    age = st.slider('나이 선택', 1, 120, 1, 1 )

    st.info( f'선택한 나이는 {age}세 입니다.' )

 

# 익스펜더

# 익스펜더
    with st.expander('Hello'):
        st.info('데이터 프레임입니다.')
        st.dataframe(df)

ㄴ 접기/펼치기 형식의 버튼 누르면,

ㄴ 설명문과 데이터프레임이 출력됨

 

### app4.py 전체 코드 ###

# UI 함수들 (버튼 등등)

import streamlit as st
import pandas as pd

def main() :
    df = pd.read_csv('./data/iris.csv')

    # 버튼 만들기
    # 유저가 버튼을 누르면 데이터프레임을 보여준다.
    if st.button('데이터 보기') :
        st.dataframe(df)

    # '대문자' 버튼을 만들고,
    # 버튼을 누르면, species 컬럼의 값들을 대문자로
    # 변경한 데이터 프레임을 화면에 보여주세요.

    if st.button('대문자') :
        st.dataframe(df['species'].str.upper())
    else :
        st.text('아무것도 안눌렀습니다.')

    # 라디오 버튼 : 여러개중에서 한개 선택하게 할때.
    my_order = ['오름차순 정렬', '내림차순 정렬']
    status = st.radio('정렬방법 선택하세요', my_order)

    # petal_length 컬럼으로 정렬해서 df 보여준다.
    if status == my_order[0] :
        st.dataframe(df.sort_values('petal_length', ascending=True))
    elif status == my_order[1] :
        st.dataframe(df.sort_values('petal_length', ascending=False))
   
    # 체크박스 : 둘중에 하나만 선택하게끔 만들때. (체크/해제)
    # 체크하면, 헤드 5개 보여주고, 해제하면 안보여주도록
    if st.checkbox('헤드 5개보기', False) :
        st.dataframe(df.head())

    # 셀렉트 박스 : 여러개에서 한개만 고르게 하되,
    #              리스트가 많을때 사용한다.
    language = ['Python', 'C', 'Java', 'Go', 'PHP', 'Dart']
   
    my_choice = st.selectbox('좋아하는 언어 선택하세요.', language)

    if my_choice == language[0] or my_choice == language[2] :
        st.text('정말 재미있는 언어입니다.')
    elif my_choice == language[3] or my_choice == language[5] :
        st.text('배우고 싶습니다.')
    else :
        st.text('오래된 언어입니다.')
   
    # 멀티셀렉트 : 여러개중에서, 여러개를 선택하게 할때.

    # 유저가 선택한 컬럼을, 데이터프레임으로 보여주되
    # 아무것도 선택안하면, 아무것도 나오지 않게 하시오.
    choice_list = st.multiselect('원하는 컬럼을 선택하세요', df.columns)

    if len(choice_list) !=  0 : # if choice_list == [] : 이렇게 적어도됨 방법은 여러가지
        st.dataframe (df[choice_list])
    else :
        st.write()

    # 슬라이더 : 숫자 조정하는데 주로 사용
    st.slider('데이터 선택', -5.0, 10.5, 0.0, 0.5)

    # 나이를 슬라이더로 입력받는다.
    # 1세부터 120세까지 입력받을 수 있도록 한다.
    # 선택한 나이가 웹화면에 출력되도록 한다. "선택한 나이는 33세 입니다."
    age = st.slider('나이 선택', 1, 120, 1, 1 )

    st.info( f'선택한 나이는 {age}세 입니다.' )

    # 익스펜더
    with st.expander('Hello'):
        st.info('데이터 프레임입니다.')
        st.dataframe(df)
   
if __name__ == '__main__' :
    main()

 

다음 게시글로 계속

반응형