KT AIVLE/Daily Review

241010

bestone888 2024. 10. 10. 23:36

import streamlit as st
import pandas as pd
from datetime import datetime
import altair as alt
import plotly.express as px


# 1. text
st.header('1. text')

st.title('Title')
st.header('Header')
st.subheader('Subheader')
st.text('Text')
st.markdown('**markdown_진하게**')
st.markdown('_markdown_기울임_')

# code: 코드블록
st.code('x = 1234')

# latex: 수식을 시각적으로 표현
st.latex(r'a+ar+ar^2')

df = pd.DataFrame({'first column': [1, 2, 3, 4],
                   'second column': [10, 20, 30, 40]})
st.write('Below is a DataFrame:', df, 'Above is a dataframe.')



# 2. media
st.header('2. media')

# caption: 간단한 텍스트 설명
st.caption('Caption')
st.audio('MusicSample.mp3')
st.video('VideoSample.mp4')



# 3. data
st.header('3. data')

# metric: 측정항목 - label = 타이틀, value = 값, delta = 변동값
st.metric(label = 'Temperature', value = '25C', delta = '-2.5C')

# columns: 여러 metric을 같이 표시
col1, col2, col3 = st.columns(3)
col1.metric(label = '기온', value = '25C', delta = '2.5C')
col2.metric(label = '풍속', value = '9mph', delta = '-8%')
col3.metric(label = '습도', value = '86%', delta = '4%')

# table: 고정 형태 테이블(스크롤바 없음)
df = pd.read_csv('https://raw.githubusercontent.com/huhshin/streamlit/master/data_titanic.csv')
st.table(df.head())

# data_editor: 데이터프레임 수정
edited_df = st.data_editor(df)
st.write(edited_df)



# 4-1 input
st.header('4-1 input')

# link_button: 누르면 링크 연결
st.link_button('Widget Link', 'https://docs.streamlit.io/library/api-reference/widgets')

# radio: 라디오 버튼
genre = st.radio('좋아하는 영화 장르를 선택하세요', ('코미디', 'SF', '액션'))
if genre == '코미디':
    st.write('유쾌')
elif genre == 'SF':
    st.write('저도 좋아합니다')
else:
    st.write('멋지십니다')

# button
if st.button('Say hello'):
    st.write('hi')
else:
    st.write('bye')

# checkbox
agree = st.checkbox('i agree')
if agree:
    st.write(':)')

# toggle
on = st.toggle('activate feature')
if on:
    st.write('on!')

# selectbox
option = st.selectbox('어떻게 연락드릴까요?', ['Email', 'Mobile', 'Office'])
st.write('네', option, '알겠습니다')

# multiselect: 초기값 설정 가능
color = st.multiselect('좋아하는 색깔은',['green', 'yellow', 'red', 'blue'],  ['yellow', 'red'])
st.write('좋아하는 색은', ', '.join(color), '입니다')

# text_input
text = st.text_input('최애영화 입력', 'sound of music')
st.write(text)

# number_input: 최소 최대 초기값 step 설정
num = st.number_input('숫자입력하세요', min_value = 1, max_value = 10, value = 5, step =1)
st.write('current number is', num)

# date_input: 초기값 설정
ymd = st.date_input('when is your birthday', datetime(2000,9,6))
st.write('당신의 생일은', ymd)


# chat_input: 채팅 어플리케이션
prompt = st.chat_input('say something')
if prompt:
    st.write(f'user has sent the following prompt: {prompt}')




# 4-2. input
st.header('4-2 input')

# slider: 최소 최대 초기값 설정
age = st.slider('나이가 어떻게 되세요?', 0, 130, 25)
st.write('my age', age)

date = st.slider('날짜 구간 입력', datetime(2022,6,1), datetime(2022, 7,31))
st.write(date)

# 날짜구간 데이터 조회
slider_date = st.slider('날짜 구간 선택하세요.', datetime(2021,1,1), datetime(2021,12,31), value = (datetime(2021, 7, 1), datetime(2021, 7, 31)))
seoul = pd.read_csv('data_subway_in_seoul.csv', encoding = 'cp949')
seoul['날짜'] = pd.to_datetime(seoul['날짜'], format = '%Y-%m-%d')
seoul.loc[seoul['날짜'].between(slider_date[0], slider_date[1])]



# 5. layout
st.header('5. layout')

# sidebar (with로 코드 가독성 높일 수 있음)
with st.sidebar:
    st.header('Sidebar')
    how_contact = st.selectbox('어떻게 연락 드릴까요?', ['Email', 'Mobile phone', 'Office phone'])
    st.write('선택한 연락 방법은', how_contact)


col1, col2, col3 = st.columns(3)
with col1:
    st.text('A cat')
    st.image('https://images.pexels.com/photos/2071873/pexels-photo-2071873.jpeg?auto=compress&cs=tinysrgb')

with col2:
    st.text('A dog')
    st.image('https://images.pexels.com/photos/3361739/pexels-photo-3361739.jpeg?auto=compress&cs=tinysrgb')

with col3:
    st.text('A owl')
    st.image('https://images.pexels.com/photos/3737300/pexels-photo-3737300.jpeg?auto=compress&cs=tinysrgb')


# tabs
tab1, tab2, tab3 = st.tabs(['고양이', '개', '올빼미'])
with tab1:
    st.caption('A cat')
    st.image('https://images.pexels.com/photos/2071873/pexels-photo-2071873.jpeg?auto=compress&cs=tinysrgb', width = 200)

with tab2:
    st.caption('A dog')
    st.image('https://images.pexels.com/photos/3361739/pexels-photo-3361739.jpeg?auto=compress&cs=tinysrgb', width = 200)

with tab3:
    st.caption('A owl')
    st.image('https://images.pexels.com/photos/3737300/pexels-photo-3737300.jpeg?auto=compress&cs=tinysrgb', width = 200)


# 페이지 선언
def main_page():
    st.title('Main page')
    st.sidebar.title('side main')

def page2():
    st.header('Page 2')
    st.text('Setosa')
    st.image('https://m.media-amazon.com/images/I/61pLvdbjC7L._AC_.jpg')

    st.text('Versicolor')
    st.image('https://upload.wikimedia.org/wikipedia/commons/2/27/Blue_Flag%2C_Ottawa.jpg')

    st.text('Virginica')
    st.image('https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Iris_virginica_2.jpg/1920px-Iris_virginica_2.jpg')

def page3():
    st.header('Page 3')
    st.header('Setosa')
    st.image('https://m.media-amazon.com/images/I/61pLvdbjC7L._AC_.jpg', width=500)       

    st.header('Versicolor')
    st.image('https://upload.wikimedia.org/wikipedia/commons/2/27/Blue_Flag%2C_Ottawa.jpg', width=500)      

    st.header('Virginica')
    st.image('https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Iris_virginica_2.jpg/1920px-Iris_virginica_2.jpg', width=500)   


page_names_to_funcs = {"Main Page": main_page, "Page 2": page2, "Page 3": page3}
selected_page = st.sidebar.selectbox('select a page', page_names_to_funcs.keys())
page_names_to_funcs[selected_page]()


# 6-2. chart

chart_data = pd.read_csv('https://raw.githubusercontent.com/huhshin/streamlit/master/data_sales.csv')

# line_chart
st.line_chart(chart_data)

# bar_chart
st.bar_chart(chart_data)


# altair chart: mark_line, mark_bar, mark_circle...
df = pd.read_csv('https://raw.githubusercontent.com/huhshin/streamlit/master/data_retail.csv')
df_melted = pd.melt(df, id_vars = ['date'], var_name = 'teams', value_name = 'sales')

chart = alt.Chart(df_melted, title = '일별팀매출비교').mark_line().encode(
    x = 'date', y = 'sales', color = 'teams', strokeDash = 'teams').properties(width = 650, height = 350)

'KT AIVLE > Daily Review' 카테고리의 다른 글

241014  (0) 2024.10.14
241011  (0) 2024.10.13
241007~241008  (0) 2024.10.09
241004  (0) 2024.10.06
241002  (0) 2024.10.03