Project

PROJECT 1-(7) ๊ทธ๋ž˜ํ”„ ํ•œ๊ธ€ํ™” ํ•˜๊ธฐ, ๊ทธ๋ž˜ํ”„ ๋””์ž์ธํ•˜๊ธฐ

567Rabbit 2024. 5. 9. 15:06

๊ทธ๋ž˜ํ”„ ํ•œ๊ธ€ํ™”ํ•˜๊ธฐ

 

matplotlib ์•ˆ์— ํ•œ๊ธ€์„ ๋„ฃ๊ณ ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค

#๊ทธ๋ž˜ํ”„ ํ•œ๊ธ€ํ™”ํ•˜๊ธฐ
import platform
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Linux':
    rc('font', family='NanumGothic')
def run_compare() :

    #๊ทธ๋ž˜ํ”„ ํ•œ๊ธ€ํ™”ํ•˜๊ธฐ
    plt.rcParams['axes.unicode_minus'] = False
    if platform.system() == 'Linux':
        rc('font', family='NanumGothic')
    elif platform.system() == 'Windows':
        font_path = "c:\Windows\Fonts\BATANG.TTC"  # ํ•œ๊ธ€ ํฐํŠธ ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ •ํ•˜๊ธฐ
        font_name = font_manager.FontProperties(fname=font_path).get_name()
        rc('font', family=font_name)

 

 

 

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

 

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

๋ฐ์ดํ„ฐ๋Š” ์ฃผํ”ผํ„ฐ๋…ธํŠธ๋ถ์—์„œ 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('')

 

 

 

 

์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ตœ์ €, ์ตœ๋Œ€ ์ด์ž์œจ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅํ•˜๊ธฐ st.datafarame()

 

        # 5. ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ตœ์ €, ์ตœ๋Œ€ ์ด์ž์œจ
        st.header('')
        st.header('')
        st.subheader('Category๋ณ„ ์ตœ์ €, ์ตœ๋Œ€ ์ด์ž์œจ')
        st.header('')
        st.text('์ตœ์ €, ์ตœ๋Œ€ ์ด์ž์œจ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ž์œจ์ด ๋งˆ์ด๋„ˆ์Šค์ธ ๊ฒฝ์šฐ, ์›๊ธˆ๋ณด์žฅ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค')

        # 5-(1) max() ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ ์ด์ž์œจ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
        etf_list3 = etf_list.groupby('Category')['EarningRate'].max().reset_index()
        etf_list3['Category_Name'] = etf_list2['Category_Name']
        etf_list3 = etf_list3.sort_values('EarningRate',ascending=False)
        etf_list3 = etf_list3[['Category','Category_Name','EarningRate']]
        st.dataframe(etf_list3)
        
        # 5-(2) min() ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ € ์ด์ž์œจ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
        etf_list4 = etf_list.groupby('Category')['EarningRate'].min().reset_index()
        etf_list4['Category_Name'] = etf_list2['Category_Name']
        etf_list4 = etf_list4.sort_values('EarningRate')
        etf_list4 = etf_list4[['Category','Category_Name','EarningRate']]
        st.dataframe(etf_list4)

 

 

 

 

        # 5-(3) ์ตœ๋Œ€, ์ตœ์ € ์ด์ž์œจ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ
        fig1 = plt.figure(figsize=(6,6))
        plt.grid(True)
        plt.bar(data=etf_list ,x='Category',height='EarningRate', width=0.6, color='pink')
        plt.axhline(y=0, color='black')  # y์ถ• ์ง„ํ•˜๊ฒŒ
        plt.xticks([2,4,5,3,1,7,6],['๊ตญ๋‚ด์—…์ข…/ํ…Œ๋งˆ ETF','ํ•ด์™ธ์ฃผ์‹','์›์ž์žฌ','๊ตญ๋‚ดํŒŒ์ƒ','๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF','๊ธฐํƒ€','์ฑ„๊ถŒ'],rotation=45)
        plt.title('์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ตœ์ €,์ตœ๋Œ€ ์ด์ž์œจ ๊ทธ๋ž˜ํ”„')
        plt.ylabel('์ด์ž์œจ')
        st.pyplot(fig1)

 

 

 

 

 

 

 

        # 6. Category๋ณ„ ์ด์ž์œจ ํ‰๊ท  ๊ทธ๋ž˜ํ”„ ํ‘œ์‹œํ•˜๊ธฐ
        st.header('')
        st.header('')
        st.subheader('Category๋ณ„ EarningRate์˜ ํ‰๊ท ')
        st.header('')
        
        # 6-(1) Category๋ณ„ ์ด์ž์œจ ํ‰๊ท ์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
        etf_list2.sort_values(by='EarningRate',ascending=False, inplace=True)
        st.dataframe(etf_list2)
        st.text('์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ด์ž์œจ ํ‰๊ท ์„ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค')
        
        
        # 6-(2) Category๋ณ„ ์ด์ž์œจ ํ‰๊ท ์˜ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ
        fig = plt.figure(figsize=(6,6))
        
        X = [1, 3, 5, 7, 9, 11, 13]  # X ๊ฐ„๊ฒฉ ์„ค์ •
        
        plt.title('์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ด์ž์œจ ํ‰๊ท  ๊ทธ๋ž˜ํ”„')
        plt.bar(X, etf_list2['EarningRate'], width=1.25, color='orange')
        plt.axhline(y=0, color='black')  # y์ถ• ์ง„ํ•˜๊ฒŒ
        plt.grid(True)
        plt.ylabel('์ด์ž์œจ ํ‰๊ท ')   
        
        ticklabel = ['๊ตญ๋‚ด์‹œ์žฅ์ง€์ˆ˜ ETF', '๊ตญ๋‚ด์—…์ข…/ํ…Œ๋งˆ ETF', 'ํ•ด์™ธ์ฃผ์‹', '์›์ž์žฌ', '๊ธฐํƒ€', '๊ตญ๋‚ดํŒŒ์ƒ', '์ฑ„๊ถŒ'] # ๋ผ๋ฒจ 1234567์—์„œ ๋ฐ”๊พธ๊ธฐ
        plt.xticks(X, ticklabel, rotation=45)
        
        st.pyplot(fig)