안녕하세요.
오늘은 DART의 2021년 1분기 손익계산서를 사용해, 영업이익률이 좋은 종목을 찾아보겠습니다.
본격적인 설명에 앞서, 절대 어떤 종목을 추천하기 위한 글이 아니며, 본 글로 인해 투자한 종목의 손실에 대해서는 절대 누구도 책임지지 않는다는 것을 기억해주시기 바랍니다.
데이터의 정확성 역시 일차적으로는 검토했지만, 데이터 수집 시점이나 과정에서 발생한 실수로 부정확할수도 있으니 양해바랍니다.
DART의 2021년 1분기 손익계산서를 다운받아 DB화하는 과정은 아래 글을 참고해주세요.
https://sweetquant.tistory.com/263?category=1163308
업로드한 테이블인 'up_손익계산서_20211q'를 SELECT해보면서 어떤 값들이 있는지 눈여겨 보시기 바랍니다. 테이블에 어떤 데이터가 있는지 잘 알고 있어야, 자신만이 원하는 것을 분석할 수 있으니까요.
DART의 손익계산서 파일에서, 매출액의 항목코드는 ifrs-full_Revenue 입니다. 영업이익 항목코드는 이전 글에서 살펴본 것처럼 dart_OperatingIncomeLoss 로 파악됩니다.
먼저 영업이익률을 간단히 정의해보면 아래와 같습니다.
- 영업이익률 = 영업이익 / 매출액 * 100
어떻게 SQL을 작성하는지에 대한 자세한 설명은 생략하고 결과만 빠르게 살펴보겠습니다. SQL의 원리는 '평생 필요한 데이터 분석' 책을 통해 공부해주시기 바랍니다.
DART 포괄-손익계산서-연결 기준 2021년 1분기에 영업이익률 Top-10 종목을 찾아보면 아래와 같습니다. 여기서는 매출액이 500억 이상인 종목만 대상으로 했습니다. (일부 종목의 경우 USD로 보고된것이 있습니다. USD를 별도 KRW로 변경하지 않고 처리했습니다. 그러므로 USD로 수치가 보고된 데이터 일부는 누락되었을수 있습니다.)
WITH RES01 AS(
SELECT T1.종목코드 ,T1.회사명
,MAX(CASE WHEN T1.항목코드 = 'dart_OperatingIncomeLoss' THEN ROUND(T1.당기1분기3개월/1e8,1) END) 영업이익
,MAX(CASE WHEN T1.항목코드 = 'ifrs-full_Revenue' THEN ROUND(T1.당기1분기3개월/1e8,1) END) 매출액
FROM DB_DTECH.up_손익계산서_20211q T1
WHERE T1.항목코드 IN ('ifrs-full_Revenue','dart_OperatingIncomeLoss')
GROUP BY T1.종목코드 ,T1.회사명
)
SELECT T1.종목코드 ,T1.회사명
,T1.영업이익 ,T1.매출액
,ROUND((T1.영업이익 / T1.매출액) * 100,2) 영업이익률
FROM RES01 T1
WHERE T1.매출액 > 500
AND T1.영업이익 > 0
ORDER BY 영업이익률 DESC
LIMIT 10;
결과는 아래와 같습니다.
이번에는 DART 손익계산서에 포함된 업종명을 이용해, 업종별 영업이익률 Top-3 종목을 찾아보겠습니다. 아래와 같습니다. 마찬가지로 매출액 500억 이상인 종목만 대상으로 했습니다.
# SQL
WITH RES01 AS(
SELECT T1.종목코드 ,T1.회사명 ,T1.업종명
,MAX(CASE WHEN T1.항목코드 = 'dart_OperatingIncomeLoss' THEN ROUND(T1.당기1분기3개월/1e8,1) END) 영업이익
,MAX(CASE WHEN T1.항목코드 = 'ifrs-full_Revenue' THEN ROUND(T1.당기1분기3개월/1e8,1) END) 매출액
FROM DB_DTECH.up_손익계산서_20211q T1
WHERE T1.항목코드 IN ('ifrs-full_Revenue','dart_OperatingIncomeLoss')
GROUP BY T1.종목코드 ,T1.회사명 ,T1.업종명
)
SELECT T2.*
FROM (
SELECT T1.종목코드 ,T1.회사명 ,T1.업종명
,T1.영업이익 ,T1.매출액
,ROUND((T1.영업이익 / T1.매출액) * 100,2) 영업이익률
,RANK() OVER(PARTITION BY T1.업종명 ORDER BY ROUND((T1.영업이익 / T1.매출액) * 100,2) DESC) 업종별순위
FROM RES01 T1
WHERE T1.매출액 > 500
AND T1.영업이익 > 0
) T2
WHERE T2.업종별순위 <= 3;
위의 SQL의 조건만 조금 변경한다면, 매출액 기준이나 Top-N에 대한 기준도 각자 원하는대로 변경이 가능합니다.
결과를 살펴보면 아래와 같습니다.
결과 파일을 아래 엑셀로도 첨부드립니다.
위와 같이 주식 데이터를 마음대로 분석해볼 수 있는 SQL을 공부하고 싶다면 아래 책을 참고해주세요~!
※ 책 소개: https://sweetquant.tistory.com/243
※ 책 미리보기: https://sweetquant.tistory.com/257
※ 완전판 E-Book
▶ 유페이퍼: https://www.upaper.net/ryu1hwan/1142997
▶ 알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=273701425
▶ Yes24: http://www.yes24.com/Product/Goods/102264444?OzSrank=1
'데이터분석 > D-Tech 데이터로 하는 재테크' 카테고리의 다른 글
반전의 긴 아래 꼬리 음봉??? (0) | 2021.07.22 |
---|---|
21년1분기 영업이익과 주가변화 (0) | 2021.07.06 |
월별 주가 DB화하기(2019~2021.06) (0) | 2021.07.06 |
상따의 확률은? (1) | 2021.07.01 |
2021년 1분기 영업이익 증가 종목 찾기 (0) | 2021.06.25 |
2021년 1분기 DART 재무제표 데이터베이스화하기 (0) | 2021.06.23 |
주식시장에서 살아남는 심리 투자 법칙 (0) | 2021.06.10 |
2차 전지 ETF 들여다보기 (0) | 2021.01.17 |