삶의 공유
[Python활용]종목별 Valuation 및 저평가 주식 Search 자동화 Project[3] 본문
[Python활용]종목별 Valuation 및 저평가 주식 Search 자동화 Project[3]
dkrehd 2022. 1. 30. 21:38안녕하세요 ~~~
지난번 포스팅에 이어서 3번째 시간으로 크롤링한 삼성전자의 재무제표에서 주요 정보만 산출하고 그 데이터의 컬럼명을 선정 후 데이터프레임형태로 만들어보겠습니다. 우선 필요한 컬럼명 입니다.
- 최근 3년 평균 성장률(매출, 영업이익, 순이익, EPS)
- 직전 연도 부채 비율
- EPS, PER, PBR, BPS, PEG, PSR, 적정주가
의 컬럼이 필요합니다.
위에 해당하는 각각의 값들을 하나씩 구해보겠습니다.
1) 최근 3년 평균 성장률(매출, 영업이익, 순이익, EPS)
- 매출액 성장률
revenue_growth_rate = 0
temp = 0
for i in range(len(df_semi['매출액'])):
if i < 3:
temp += (df_semi['매출액'][i+1] - df_semi['매출액'][i]) / df_semi['매출액'][i]
revenue_growth_rate = (temp / (len(df_semi['매출액'])-1)) *100
revenue_growth_rate
- 영업이익 성장률
semiincome_growth_rate = 0
temp = 0
for i in range(len(df_semi['영업이익'])):
if i < 3:
temp += (df_semi['영업이익'][i+1] - df_semi['영업이익'][i]) / df_semi['영업이익'][i]
semiincome_growth_rate = (temp / (len(df_semi['영업이익'])-1)) *100
semiincome_growth_rate
- 당기 순이익 성장률
income_growth_rate = 0
temp = 0
for i in range(len(df_semi['당기순이익'])):
if i < 3:
temp += (df_semi['당기순이익'][i+1] - df_semi['당기순이익'][i]) / df_semi['당기순이익'][i]
income_growth_rate = (temp / (len(df_semi['당기순이익'])-1)) *100
income_growth_rate
- EPS 증가율
EPS_growth_rate = 0
temp = 0
for i in range(len(df_semi['EPS(원)'])):
if i < 3:
temp += (df_semi['EPS(원)'][i+1] - df_semi['EPS(원)'][i]) / df_semi['EPS(원)'][i]
EPS_growth_rate = (temp / (len(df_semi['EPS(원)'])-1)) *100
EPS_growth_rate
2) 직전 연도 부채 비율
- 부채비율
debt = df_semi['부채비율'][2]
debt
3) EPS, PER, PBR, BPS, PEG, PSR, 적정주가
- EPS
EPS_C = df_semi['EPS(원)'][2]
EPS_E = df_semi['EPS(원)'][3]
print(EPS_C,"/" ,EPS_E)
- ROE
ROE_C = df_semi['ROE(지배주주)'][2]
ROE_E = df_semi['ROE(지배주주)'][3]
print(ROE_C,"/" ,ROE_E)
- 적정 주가 구하기 (EPS*ROE)
right_price_C = EPS_C * ROE_C
right_price_E = EPS_E * ROE_E
print(right_price_C,"/" ,right_price_E)
- PSR 구하기
: PSR을 구하기에 앞서 현재 주가와 시가 총액을 구해야 합니다.
※ PSR = 시가 총액 / 매출액
앞서 재무제표를 크롤링한것과 동일한 url에서 위치만 다르기 때문에 코드에서 숫자만 바꿔주면 됩니다.
아래 지표에서 현재가와 시가 총액을 가져 올 것 입니다.
code = '005930'
URL = f"https://finance.naver.com/item/main.nhn?code={code}"
r = requests.get(URL)
df_2 = pd.read_html(r.text)[4]
df_2.index=df_2['종목명']
df_2 = df_2.transpose()
df_2 = df_2.drop([df_2.index[0]]) # 컬럼명 중복 인덱스 삭제
company_name = df_2.index[0].split('*')[0] # 종목명
price_C = float(df_2['현재가'][0]) # 현재가
total_company_value = float(df_2['시가총액(억)'][0]) # 시가총액
print(price_C,"/" ,total_company_value)
이제 위의 값을 기준으로 PSR을 구해보겠습니다.
PSR_C = total_company_value / df_semi['매출액'][-2]
PSR_E = total_company_value / df_semi['매출액'][-1]
print(PSR_C,"/" ,PSR_E)
DataFrame화 하기
자 이제 모든 준비는 다 되었습니다. 이렇게 구하신 값들을 key, value의 조합으로 이루어지는 딕셔너리 형태로 만들어주겠습니다. 그런 다음 딕셔너리를 DataFrame화 할 것 입니다.
raw_list = {
'종목명' : company_name,
'현재가' : price_C,
'시가총액(억)' : total_company_value,
'매출액성장률' : revenue_growth_rate,
'영업이익성장률' : semiincome_growth_rate,
'당기순이익성장률' : income_growth_rate,
'부채비율' : debt,
'EPS(직전)': EPS_C,
'EPS(예측)' : EPS_E,
'PER(직전)' : PER_C,
'PER(예측)' : PER_E,
'ROE(직전)' : ROE_C,
'ROE(예측)' : ROE_E,
'PBR(직전)' : PBR_C,
'PBR(예측)' : PBR_E,
'적정주가(직전)' : right_price_C,
'적정주가(예측)' : right_price_E,
'PEG(직전)' : PEG_C,
'PEG(예측)' : PEG_E,
'PSR(직전)' : PSR_C,
'PSR(예측)' : PSR_E
}
df_final = pd.DataFrame([raw_list])
df_final
아래와 같이 잘 나온 것을 볼 수 있습니다.
이제 이 코드를 활용해서 코스피, 코스닥 전 종목에 대해서 크롤링하여 데이터 베이스화를 한 뒤에 Excel 형태로 저장해서 DB화 하겠습니다.
오늘 포스팅은 이만 마치도록 하겠습니다.
다음 포스팅에 이어서 코스피, 코스닥 전종목에 대해서 크롤링 후 Excel로 저장하는 방법에 대해서 말씀드리도록 하겠습니다.
글을 읽어 주셔서 감사합니다.
'Data Scientist > Python' 카테고리의 다른 글
[개발환경] 맥북 Visual Studio Code에 Python 환경 설정하기 (0) | 2022.02.10 |
---|---|
[Python활용]종목별 Valuation 및 저평가 주식 Search 자동화 Project[4] (0) | 2022.02.03 |
[Python활용]종목별 Valuation 및 저평가 주식 Search 자동화 Project[2] (0) | 2022.01.30 |
[Python활용]종목별 Valuation 및 저평가 주식 Search 자동화 Project[1] (0) | 2022.01.24 |
[Python활용]텍스트 마이닝을 위한 konlpy 설치(MAC) (5) | 2022.01.17 |