본문 바로가기

API

[FinanceDataReader] 검색년도 CAGR(연평균 성장률) 상위 회사확인

반응형

FinanceDataReader를 이용해서 지정한 년도(여기서는 2021년)의 CAGR 상위 회사를 알아보겠습니다.

CAGR계산에 대한 기본 정보는 1번에서 확인이 가능하니 필요하신 분은 참조 부탁드립니다.

 

1. FinanceDataReader 주가 확인 및 CAGR계산

2. 전체 회사에 대한 CAGR계산

3. 전체 및 Market별 상위 회사 확인

 

 

1. FinanceDataReader 주가 확인 및 CAGR계산(Skip가능)

https://yenpa.tistory.com/52

 

[FinanceDataReader] 주가 및 CAGR(연평균 성장률) 확인

FinanceDataReader를 이용해서 주가를 확인하고 CAGR을 계산해보겠습니다. FinanceDataReader의 설치 및 기본사용법이 필요하신분은 1번 참조 부탁드립니다. 1. FinanceDataReader 설치 및 주가정보확인(Skip가능)

yenpa.tistory.com

 

2. 전체 회사에 대한 CAGR계산

데이터 수집에 대한 전체코드 남겨드립니다.

총 2600개 정도의 회사리스트가 있고, 각 회사에 대해서  2021년 1년 치의 주가 데이터를 수집한 후

CAGR을 계산해서 전체 결과를 DataFrame에 저장하는 흐름입니다.

year='2021'
startdate=year + '-01-01'
enddate=year + '-12-31'

result_all=[]
for i, r in df_list.iterrows():
    
    result_dic={}
    #if i == 3:
    #    break
        
    result_dic['name']=r['Name']
    result_dic['code']=r['Code']
    result_dic['market']=r['Market']
    #print(result_dic['code'])

    df_result=fdr.DataReader(result_dic['code'],startdate,enddate)
    
    #6개월정도 미만은 skip
    if df_result.shape[0] < 130:
        continue
    
    df_result['누적수익률']=((df_result['Change'] + 1).cumprod()-1)
    cagr_result=df_result['누적수익률']+1

    경과년도=(cagr_result.index[-1]-cagr_result.index[0]).days / 365
    result_dic['cagr'] = cagr_result.iloc[-1] ** (1/경과년도) -1
    result_dic['cagr(%)'] = result_dic['cagr'] * 100
    
    result_all.append(result_dic)

df=pd.DataFrame(result_all)
df

회사 리스트 정보와 cagr 계산 정보가 잘 저장이 되었습니다.

전체 회사리스트를 수집하고 각 회사별 주가 확인을 위해 for문을 넣었습니다.

df_list=fdr.StockListing('KRX')
for i, r in df_list.iterrows():

result_dic은 각 회사별 정보 및 cagr 등을 저장하는 dictionary이고, 

전체 회사의 정보는 result_all list에 담았습니다.

result_all=[]
result_dic={}

회사 정보 수집 및 주가 정보를 수집하는 단계입니다.

result_dic['name']=r['Name']
result_dic['code']=r['Code']
result_dic['market']=r['Market']
#print(result_dic['code'])

df_result=fdr.DataReader(result_dic['code'],startdate,enddate)

거래일수가 6개월정도 미만의 회사는 제외했습니다.

#6개월정도 미만은 skip
if df_result.shape[0] < 130:
    continue

 

cagr을 계산해서 result_all list에 저장했습니다.

df_result['누적수익률']=((df_result['Change'] + 1).cumprod()-1)
cagr_result=df_result['누적수익률']+1

경과년도=(cagr_result.index[-1]-cagr_result.index[0]).days / 365
result_dic['cagr'] = cagr_result.iloc[-1] ** (1/경과년도) -1
result_dic['cagr(%)'] = result_dic['cagr'] * 100

result_all.append(result_dic)

list -> DataFrame으로 변환했습니다.

df=pd.DataFrame(result_all)

 

3. 전체 및 Market별 상위 회사 확인

시장 전체에서의 상위 20개만 확인해볼까요.

top20=df.sort_values('cagr',ascending=False).iloc[:20,]
sns.barplot(data=top20,x='cagr(%)',y='name')
plt.title('2021년 CAGR 상위 20위 회사')
plt.show()

 

코스피의 경우는 아래와 같습니다.

top20_kospi=df.loc[df['market']=='KOSPI',:].sort_values('cagr',ascending=False).iloc[:20,]
sns.barplot(data=top20,x='cagr(%)',y='name')
plt.title('2021년 KOSPI CAGR 상위 20위 회사')
plt.show()

 

코스닥입니다.

top20_kodaq=df.loc[df['market']=='KOSDAQ',:].sort_values('cagr',ascending=False).iloc[:20,]
sns.barplot(data=top20,x='cagr(%)',y='name')
plt.title('2021년 KOSDAQ CAGR 상위 20위 회사')
plt.show()

KONEX입니다.

top20_konex=df.loc[df['market']=='KONEX',:].sort_values('cagr',ascending=False).iloc[:20,]
sns.barplot(data=top20_konex,x='cagr(%)',y='name')
plt.title('2021년 KONEX CAGR 상위 20위 회사')
plt.show()

 

FinanceDataReader를 이용해서 2021년의 CAGR 상위 회사를 알아봤습니다.

 

반응형