Project

PROJECT 1-(6) SelectBox(์…€๋ ‰ํŠธ๋ฐ•์Šค) ํ™œ์šฉํ•˜๊ธฐ

567Rabbit 2024. 5. 9. 15:01

 

์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž„ํฌํŠธํ•ฉ๋‹ˆ๋‹ค

from PIL import Image #ํŒŒ์ด์ฌ ์ด๋ฏธ์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ PIL
import streamlit as st
import pandas as pd
import numpy as np

 

 

 

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ์ฃผํ”ผํ„ฐ๋…ธํŠธ๋ถ์—์„œ 2024/4/29์ž๋กœ ๊ตญ๋‚ด ETF ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค

์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

KRETF.csv
0.07MB

 

    col1, col2, col3 = st.columns([1, 2.5, 1])  # ํ™”๋ฉด์„ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค
    
    with col2 :
        
        # 1. ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
        etf_list = pd.read_csv('./KRETF.csv')
        
        # 2. ์ „์ฒด ์„ค๋ช…ํ•˜๊ธฐ
        st.title('โ…ข. ๊ตญ๋‚ด ETF ์ฃผ์‹๊ฐ€์น˜๋น„๊ต')
        st.header(' : Comparing domestic ETF stock valuations')
        st.text('ETF๋ฐ์ดํ„ฐ๋Š” 2024/4/29 ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.')
        st.text('ETF๋Š” ํ•˜๋‚˜์˜ ์ฃผ์‹์œผ๋กœ ๊ฑฐ๋ž˜๋˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์ž์‚ฐ์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.')
        st.text('์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ฑ„๊ถŒ๊ณผ ์ฃผ์‹, ์ž์‚ฐ์„ ๋‹ด๊ณ ์žˆ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.')
        st.text('์ฃผ์‹์€ ๋ถ„์‚ฐํˆฌ์žํ•˜๋Š” ๊ฒฝ์šฐ, risk๊ฐ€ ์„œ๋กœ ์ƒ์‡„๋˜์–ด ์•ˆ์ „์„ฑ์ด ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์—')
        st.text('๊ทธ ์ž์ฒด๋กœ ๋ถ„์‚ฐํˆฌ์ž๊ฐ€ ๊ฐ€๋Šฅํ•œ ETF๋Š” ์›๊ธˆ์ƒ์‹ค์œ„ํ—˜์ด ์ ์€ ์•ˆ์ „ํ•œ ํˆฌ์ž๋Œ€์ƒ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค')
        st.header('')

 

 

 

 

์ด์ž์œจ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜๊ธฐ

ascending=True(์˜ค๋ฆ„์ฐจ์ˆœ)์ด sort_values์˜ ๊ธฐ๋ณธ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ascending=False๋กœ ํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

        # 3. ์ด์ž์œจ ๋†’์€ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ํ™”๋ฉด์— ํ‘œ์‹œ
        st.subheader('์ด์ž์œจ(EarningRate) ๋†’์€ ์ˆœ์„œ๋กœ ๋ณด๊ธฐ')
        st.text('์ด์ž์œจ(EarningRate)์€ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์–ป๋Š” ์ˆ˜์ž…์ด๋‚˜ ์ˆ˜์ต์˜ ์†๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.')
        
        # 3-(1) etf_list DataFrame์—์„œ 'EarningRate' ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
        etf_list = etf_list.sort_values(by='EarningRate', ascending=False)

        # 3-(2) ์ •๋ ฌ๋œ DataFrame์„ streamlit์˜ st.dataframe()์— ์ „๋‹ฌ
        etf_list = etf_list.iloc[:,[2,3,4,6,7,9]]  #ํŠน์ • ์—ด๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
        
        # 3-(3) ํ™”๋ฉด์— ํ‘œ์‹œ
        st.dataframe(etf_list)

 

 

 

 

 

์นดํ…Œ๊ณ ๋ฆฌ(Category) ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์„ค๋ช…

header, subheader, text๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด์šฉ์„ ์ ์—ˆ์Šต๋‹ˆ๋‹ค

        # 4. ETF ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ด์ž์œจ ๋ณด๊ธฐ
        st.header('')
        st.header('# ETF ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ด์ž์œจ ๋ณด๊ธฐ')
        st.header('')
        
        # 4-(1) ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•œ ์„ค๋ช…
        st.subheader('1. ๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF')
        st.text('๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF๋Š” ์šฐ๋ฆฌ๋‚˜๋ผ ์ฆ์‹œ๋ฅผ ์ถ”์ข…ํ•˜๋Š” ETF์ž…๋‹ˆ๋‹ค')
        st.subheader('2. ๊ตญ๋‚ด์—…์ข…/ํ…Œ๋งˆ ETF')
        st.text('TIGER 2์ฐจ์ „์ง€ํ…Œ๋งˆ, KODEX์‚ผ์„ฑ๊ทธ๋ฃน๊ณผ ๊ฐ™์€ ํŠน์ • ํ…Œ๋งˆ์— ํˆฌ์žํ•˜๋Š” ETF๋“ค์ด ์ƒ์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค')
        st.subheader('3. ๊ตญ๋‚ดํŒŒ์ƒ')
        st.text('๊ตญ๋‚ดํŒŒ์ƒETF์ƒํ’ˆ์€ ๋ ˆ๋ฒ„๋ฆฌ์ง€, ์ธ๋ฒ„์Šค ETF๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค')
        st.text('๋ ˆ๋ฒ„๋ฆฌ์ง€ ETF๋Š” ์ถ”์ข…์ง€์ˆ˜์˜ 2๋ฐฐ์ˆ˜๋กœ ์ˆ˜์ต๋ฅ ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ƒํ’ˆ์ž…๋‹ˆ๋‹ค')
        st.text('๋ฐ˜๋Œ€๋กœ ์ง€์ˆ˜๊ฐ€ 1% ํ•˜๋ฝํ•˜๋ฉด ETF๋Š” 2% ์†์‹ค์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค')
        st.subheader('4. ํ•ด์™ธ์ฃผ์‹')
        st.text('๋ฏธ๊ตญ์˜ S&P500์ง€์ˆ˜ ๋˜๋Š” ๋‚˜์Šค๋‹ฅ์ง€์ˆ˜๋ฅผ ์ถ”์ข…ํ•˜๋Š” ETF ๋“ฑ ํ•ด์™ธ์ฃผ์‹์„ ์ถ”์ข…ํ•˜๋Š” ETF๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.')
        st.subheader('5. ์›์ž์žฌ')
        st.text('์›์ž์žฌ ETF๋Š” ์›์œ , ๊ธˆ์„ ๋ฌผ ๋“ฑ์˜ ์‹œ์„ธ๋ฅผ ์ถ”์ข…ํ•˜๋Š” ETF ์ž…๋‹ˆ๋‹ค ํŠน์ง•์€ ๋กค์˜ค๋ฒ„๋น„์šฉ, ๊ดด๋ฆฌ์œจ์ด ํฌ๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ')
        st.text('์ถ”์ข…์ง€์ˆ˜๋ฅผ ์ž˜ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ํˆฌ์ž์‹œ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.')
        st.subheader('6. ์ฑ„๊ถŒ')
        st.text('์ฑ„๊ถŒํ˜• ETF๋Š” ๊ตญ์ฑ„ ๋“ฑ์˜ ์ง€์ˆ˜์— ํˆฌ์žํ•˜๋Š” ์ƒํ’ˆ์ž…๋‹ˆ๋‹ค')
        st.subheader('7. ๊ธฐํƒ€')
        st.text('KODEX๋‹ฌ๋Ÿฌ์„ ๋ฌผ ETF, TIGER์ผ๋ณธ์—”์„ ๋ฌผ ETF ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค')
        st.text('๋‹ฌ๋Ÿฌ๊ฐ€๊ฒฉ ์ƒ์Šน ๋˜๋Š” ์ผ๋ณธ์—”ํ™”์˜ ์ƒ์Šน์„ ์˜ˆ์ƒํ•œ๋‹ค๋ฉด ํˆฌ์žํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ’ˆ๋“ค์ž…๋‹ˆ๋‹ค')
        st.header('')

 

 

 

 

 

 

 

SelectBox(์…€๋ ‰ํŠธ๋ฐ•์Šค) ํ™œ์šฉ

 

Category๋Š” ์ˆซ์ž๋กœ 1,2,3,4,5,6,7๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ, ์…€๋ ‰ํŠธ๋ฐ•์Šค์—๋Š” ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ์˜ name์„ ํ•œ๊ธ€ํ™”ํ•˜์—ฌ ๋„ฃ๊ณ ,

์นดํ…Œ๊ณ ๋ฆฌ์˜ name์„ ์„ ํƒํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” Category(1,2,3,4,5,6,7)์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ–‰์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค. 

 

        # 4-(2) ์…€๋ ‰ํŠธ๋ฐ•์Šค ๋งŒ๋“ค์–ด์„œ ์ปฌ๋Ÿผ ํด๋ฆญํ•˜๋ฉด ์ปฌ๋Ÿผ๋ณ„ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๊ฒŒํ•˜๊ธฐ
        etf_list2 = etf_list.groupby('Category')['EarningRate'].mean().reset_index()
        etf_list2.dropna(inplace=True)
        
        etf_list2.loc[etf_list2['Category'] == 1, 'Category_Name'] = '๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF'
        etf_list2.loc[etf_list2['Category'] == 2, 'Category_Name'] = '๊ตญ๋‚ด์—…์ข…/ํ…Œ๋งˆ ETF'
        etf_list2.loc[etf_list2['Category'] == 3, 'Category_Name'] = '๊ตญ๋‚ดํŒŒ์ƒ'
        etf_list2.loc[etf_list2['Category'] == 4, 'Category_Name'] = 'ํ•ด์™ธ์ฃผ์‹'
        etf_list2.loc[etf_list2['Category'] == 5, 'Category_Name'] = '์›์ž์žฌ'
        etf_list2.loc[etf_list2['Category'] == 6, 'Category_Name'] = '์ฑ„๊ถŒ'
        etf_list2.loc[etf_list2['Category'] == 7, 'Category_Name'] = '๊ธฐํƒ€'

        etf_list2 = etf_list2[['Category','Category_Name','EarningRate']]
        
        choice = st.selectbox('์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ ํƒํ•˜์„ธ์š”', etf_list2['Category_Name'])
        
        if choice == '๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF' :
            st.dataframe(etf_list.loc[etf_list['Category']==1], width=2000, height=350)
        elif choice == '๊ตญ๋‚ด์—…์ข…/ํ…Œ๋งˆ ETF' :
            st.dataframe(etf_list.loc[etf_list['Category']==2], width=2000, height=350)
        elif choice == '๊ตญ๋‚ดํŒŒ์ƒ' :
            st.dataframe(etf_list.loc[etf_list['Category']==3], width=2000, height=350)
        elif choice == 'ํ•ด์™ธ์ฃผ์‹' :
            st.dataframe(etf_list.loc[etf_list['Category']==4], width=2000, height=350)
        elif choice == '์›์ž์žฌ' :
            st.dataframe(etf_list.loc[etf_list['Category']==5], width=2000, height=350)
        elif choice == '์ฑ„๊ถŒ' :
            st.dataframe(etf_list.loc[etf_list['Category']==6], width=2000, height=350)
        else :
            st.dataframe(etf_list.loc[etf_list['Category']==7], width=2000, height=350)