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)