본문 바로가기

Library/Streamlit

Streamlit - UI Functions

반응형

UI Functions

 

 

 

 

streamlit의 다양한 UI Function을 알아보자

 

 

 

일단 기본적인 작업 셋팅 구성은 아래와 같다.

 

 

import streamlit as st


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

 

이 안에 여러 코드를 적어 streamlit 작업을 실행하면 된다.

 

 

 

streamlit에 활용할 다양한 코드는 아래와 같다.

 

 

 

import streamlit as st

def main() :
    st.title('웹 대시보드')
    st.text('웹 대시보드 개발하기')

    name = '홍길동'

    # 제 이름은 홍길동 입니다.
    print('제 이름은 {} 입니다.'.format(name))

    st.text('제 이름은 {} 입니다.'.format(name))

    st.header('이 영역은 헤더 영역')

    st.subheader('이 영역은 subheader영역')

    st.success('작업이 성공했을때 사용하자')

    st.warning('경고 문구를 보여주고 싶을때 사용하자.')

    st.info('정보를 보여주고 싶을때')

    st.error('문제가 발생했을때 사용')

    # 파이썬의 함수 사용법을 보여주고 싶을때

    st.help(sum)
    st.help(len)



if __name__ == '__main__' :
    main()

 

import streamlit as st
import pandas as pd

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

    st.dataframe(df)

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

    st.text('아이리스 꽃은' + species + '으로 되어있다.')

    st.dataframe(df.head())
    st.write(df.head())


if __name__ == '__main__' :
    main()

 

import streamlit as st
import pandas as pd
from tables import Col

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

    # 버튼 만들기
    
    # if st.button('데이터 보기') :
    #     st.dataframe(df)
    
    # 대문자 버튼을 만들고,
    # 버튼을 누르면, species 컬럼의 값들을 대문자로 변경한
    # 데이터 프레임을 보여주세요.

    if st.button('대문자') :
        df['species'] = df['species'].str.upper()
        st.dataframe(df)

    # 라디오 버튼 : 여러개중에 한개 선택할때
    my_order = ['오름차순 정렬', '내림차순 정렬']

    status = st.radio('정렬 방법 선택', my_order)
    
    if status == my_order[0] :
        # petal_lenth 컬럼을 오름차순으로 정렬해서 화면에 보여준다.
        # df.sort_values('petal_length')
        st.dataframe(df.sort_values('petal_length'))
    elif status == my_order[1] :
        # df.sort_values('petal_length', ascending = False)
        st.dataframe(df.sort_values('petal_length', ascending = False))


    status = st.radio('정렬 방법 선택2', my_order)
    if status == my_order[0] :
        # petal_lenth 컬럼을 오름차순으로 정렬해서 화면에 보여준다.
        df = df.sort_values('petal_length')
        st.dataframe(df)
    elif status == my_order[1] :
        df = df.sort_values('petal_length', ascending = False)
        st.dataframe(df)

    # 체크박스  : 체크 해제 / 체크
    if st.checkbox('헤드 5개 보기') :
        st.dataframe(df.head())
    else :
        st.text('헤드 숨겼습니다.')
    
    # select 박스 : 여러개에서 한개만 고르는 UI
    language = ['Python', 'C', 'Java', 'Go', 'PHP']
    my_choice = st.selectbox('좋아하는 언어 선택', language)

    if my_choice == language[0] :
        st.write('파이썬을 선택했습니다.')
    elif my_choice == language[1] :
        st.write('C언어가 좋아요')
    elif my_choice == language[2] :
        st.write('자바 선택')

    # 멀티 셀렉트 : 여러개 중에서 여러개 선택하는 UI
    st.multiselect('여러개 선택 가능', language)


    # 멀티 셀렉트를 이용해서, 특정 컬럼들만 가져오기.
    # 유저에게 iris df의 컬럼들을 다 보여주고,
    # 유저가 선택한 컬럼들만, 데이터프레임을 화면에 보여줄 것.
    column_list = df.columns
    choice_list = st.multiselect('컬럼을 선택하세요', column_list)

    
    st.dataframe(df[choice_list])

    # 슬라이더 : 숫자를 조정하는데 주로 사용
    age = st.slider('나이', 1, 120, 30)
    # st.slider('나이', 1.0, 120.0, 30.0, 0.1)
    st.text('제가선택한 나이는 {}입니다.'.format(age))


    # 익스펜더
    with st.expander('Hello') :
        st.text('안녕하세요')
        st.dataframe(df)






if __name__ == '__main__' :
    main()

 

 

import streamlit as st
import pandas as pd

# 이미지 처리를 위한 라이브러리
from PIL import Image

def main() :
    # 1. 저장되어있는, 이미지 파일을 화면에 표시하기
    img = Image.open('data2/image_03.jpg')
    
    st.image(img)
    st.image(img, use_column_width=True)

    # 2. 인터넷상에 있는 이미지를 화면에 표시하기
    #    url이 있는 이미지를 말한다.
    url = 'https://www.spcmagazine.com/wp-content/uploads/2019/07/%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B0%B0%EC%8A%A4%ED%82%A8%EB%9D%BC%EB%B9%88%EC%8A%A4_-%EC%9D%B8%EA%B8%B0-%ED%94%8C%EB%A0%88%EC%9D%B4%EB%B2%84-2%EC%A2%85-%EC%9E%AC%EC%B6%9C%EC%8B%9C.jpg'

    st.image(url)

    # 3. video파일을 화면에 표시하기
    video_file = open('data2/secret_of_success.mp4', 'rb')

    st.video(video_file)

    audio_file = open('data2/song.mp3', 'rb')

    st.audio(audio_file.read(), format='audio/mp3' )



if __name__ == '__main__' :
    main()

 

import streamlit as st

def main() :
    
    # 유저한테 입력을 받는 방법
    
    #. 1. 이름 입력 받기
    name = st.text_input('이름을 입력하세요')
    if name != '' :
        st.subheader(name + '님 안녕하세요')
    
    # 2. 입력글자 갯수 제한
    address = st.text_input('주소를 입력하세요', max_chars=10)
    st.subheader(address)

    # 3. 여러 행을 입력 가능하도록
    message = st.text_area('메세지를 입력하세요', height = 3)
    st.subheader(message)

    # 4. 숫자 입력, 정수
    st.number_input('숫자 입력', 1, 100)

    # 5. 숫자 입력, 실수
    st.number_input('숫자 입력', 1.0, 100.0)

    # 6. 날짜 입력
    my_date = st.date_input('약속 날짜')
    st.write(my_date)

    # 요일 찍기
    st.write( my_date.weekday())
    st.write(my_date.strftime('%A'))

    # 7. 시간 입력
    my_time = st.time_input('시간선택')
    st.write(my_time)

    # 8. 색깔 입력
    color = st.color_picker('색을 선택하세요')
    st.write(color)

    # 9. 비밀번호 입력
    password = st.text_input('비밀번호 입력', type='password')
    st.write(password)






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

 

 

##### 파일을 업로드 하는 방법 #####
##### 이미지 파일, csv파일 업로드 #####

import streamlit as st
from PIL import Image
import pandas as pd
import os
from datetime import datetime

def save_uploaded_file(directory, file) :
    # 1.디렉토리가 있는지 확인하여, 없으면 디렉토리부터만든다.
    if not os.path.exists(directory) :
        os.makedirs(directory)
    # 2. 디렉토리가 있으니, 파일을 저장.
    with open(os.path.join(directory, file.name), 'wb') as f :
        f.write(file.getbuffer())
    return st.success("Saved file : {} in {}".format(file.name, directory))

def main() :
    
    # 사이드바 만들기
    st.title('파일 업로드 프로젝트')

    menu = ['Image', 'CSV', 'About']
    choice = st.sidebar.selectbox('메뉴', menu)

    if choice == menu[0] :
        st.subheader('이미지 파일 업로드')
        upload_file = st.file_uploader('이미지 파일 선택', type=['jpg','png','jpeg'])
        if upload_file is not None :
            print(upload_file.name)
            print(upload_file.size)
            print(upload_file.type)

        # 파일명을 유니크하게 만들어서 저장
        # 현재시간을 활용해서, 파일명을 만든다.
            current_time = datetime.now()
            print(current_time.isoformat().replace(':','_'))
        
            new_filename = current_time.isoformat().replace(':','_') + '.jpg'

            upload_file.name = new_filename
            save_uploaded_file('temp',upload_file)

        elif choice == menu[1] :
            st.subheader('CSV 파일 업로드')
        

            upload_file = st.file_uploader('CSV 파일 선택', type=['csv'])

            if upload_file is not None :
                current_time = datetime.now()
                print(current_time.isoformat().replace(':','_'))
            
                new_filename = current_time.isoformat().replace(':','_') + '.csv'

                upload_file.name = new_filename
                save_uploaded_file('temp',upload_file)

        else :
            st.subheader('파일 업로드 프로젝트 입니다.')






if __name__ == '__main__' :
    main()

 

 

### 파일 여러개를 한꺼번에 올리는 앱 ###

from typing import ClassVar
import streamlit as st
import pandas as pd
from PIL import Image
import os
from datetime import datetime


## 파일 업로드 함수 ##

def save_uploaded_file(directory, file) :
    # 1.디렉토리가 있는지 확인하여, 없으면 디렉토리부터만든다.
    if not os.path.exists(directory) :
        os.makedirs(directory)
    # 2. 디렉토리가 있으니, 파일을 저장.
    with open(os.path.join(directory, file.name), 'wb') as f :
        f.write(file.getbuffer())
    return st.success("Saved file : {} in {}".format(file.name, directory))


def main() :
    st.title('여러 파일 한번에 업로드하는 앱')

    # 사이드바 메뉴
    menu = ['Image', 'CSV', 'About']
    choice = st.sidebar.selectbox( 'menu', menu )

    # accept_multiple_files=True을 셋팅하면 여러 파일들을 한꺼번에 받을 수 있다.

    if choice == menu[0]:
        upload_files = st.file_uploader('이미지 파일을 선택', type=['jpg', 'png', 'jpeg','csv'], accept_multiple_files=True)
    
        # upload_files는 여러파일들을 저장하고 있는 리스트
        # 업로드한 파일이 있는 경우에만, 아래 코드를 실행해야 한다.
        if upload_files is not None :
        
            # 업로드한 파일이 리스트이니깐, 하나씩 가져와서
            # temp 폴더에 저장할 것이다.
            for file in upload_files :
            
            # 파일명을 유니크하게 만들어서 저장
            # 현재시간을 활용해서, 파일명을 만든다.
                current_time = datetime.now()         
                new_filename = current_time.isoformat().replace(':','_') + '.png'

                file.name = new_filename
                save_uploaded_file('temp',file)
            
            # 저장이 다 끝나면, 웹 브라우저에 이미지 표시
            for file in upload_files :
                img = Image.open(file)
                st. image(img)


    ## CSV 파일을 여러개 올리면, 이 파일들을 temp에 저장하고
    ## 데이터프레임으로 읽어서 화면에 표시

    elif choice == menu[1] :
        st.subheader('CSV 파일 업로드')
        

        upload_files = st.file_uploader('CSV 파일 선택', type=['csv'],accept_multiple_files=True)

        if upload_files is not None :
            # 업로드한 파일이 리스트이니깐, 하나씩 가져와서
            # temp 폴더에 저장할 것이다.
            for file in upload_files :
            
                current_time = datetime.now()                          
                new_filename = current_time.isoformat().replace(':','_') + '.csv'

                file_name = new_filename
                save_uploaded_file('temp',file)

            # 저장이 다 끝나면, 웹 브라우저에 이미지 표시
            for file in upload_files :
                df = pd.read_csv(file)
                st. dataframe(df)



if __name__ == '__main__' :
    main()

 

반응형