Project

PROJECT 1-(6) SelectBox(μ…€λ ‰νŠΈλ°•μŠ€) ν™œμš©ν•˜κΈ°

567Rabbit 2024. 5. 9. 15:01

 

μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 라이브러리λ₯Ό μž„ν¬νŠΈν•©λ‹ˆλ‹€

python
λ‹«κΈ°
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

 

bash
λ‹«κΈ°
​​​​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둜 ν•˜μ—¬ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ§€μ •ν•©λ‹ˆλ‹€.

python
λ‹«κΈ°
​​​​​​​​# 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λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚΄μš©μ„ μ μ—ˆμŠ΅λ‹ˆλ‹€

python
λ‹«κΈ°
​​​​​​​​# 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)에 ν•΄λ‹Ήν•˜λŠ” 데이터 행을 κ°€μ Έμ˜€λ„λ‘ ν•  것이닀. 

 

python
λ‹«κΈ°
​​​​​​​​# 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)