이경수 선생님의 수학실험실

2017년 1월 주가수익률(PER)의 분포는 어떤 모양일까? 본문

Algorithm Trading

2017년 1월 주가수익률(PER)의 분포는 어떤 모양일까?

(이경수) 2017. 1. 31. 14:00

주가수익률(Price Earnings Ratio, PER)은 주가를 1주당 순이익 (EPS)으로 나눈 값으로 PBR(주가순자산비율), PCR(주가현금흐름비율) 등과 함께 주식회사의 가치를 가늠해 볼 수 있는 중요한 지표 역할을 합니다. 오늘은 국내 증시에 상장된 종목(KOSPI, KOSDAQ)들의 PER 분포를 알아보고자 합니다.

 

아무 생각없이 데이터베이스에 있는 PER 값들을 불러와 히스트로그램을 그렸더니 위와 같은 모양으로 나타났습니다.

극단적인 값들에 의해 그려진 의미없는 그래프입니다. 그래서 사분위수를 살펴보았습니다.

 

 

 

중앙값은 6.12 인데 최댓값이 5938.89입니다. 0.00인 data도 최소 25% 이상입니다.

극단적인 값들을 제외하고 그려보면 어느정도 의미있는 그래프가 그려질 것 같습니다.

 

참고로 회사의 이익이 적자이거나 EPS가 매우 작은 경우에 PER이 0.00으로 표시된다고 합니다. 그리고 그래프를 그리는데 사용하고 있는 data에 우선주, ETN, ETF가 포함되어 있는데 이들 또한 0.00의 빈도수를 올리는데 큰 역할을 하고 있습니다.

0.00을 필터링해 보니 총 1142개의 data로 전체 2494개 data 중 거의 절반 가까이를 차지하고 있습니다. 

 

 

 그리고 PER이 300이상인 data는 28개입니다.


 


그러면 이제 이들을 제외한 나머지 data들에 대해서 히스토그램을 그려보도록 하겠습니다.

계급의 크기는 1입니다.

 

 

PER이 0보다 크고 300보다 작은 종목들의 수는 1324개 이고, 이들의 평균은 30.18입니다.


data가 밀집해 있는 (0, 100) 구간을 그려보겠습니다.

계급의 크기는 1/3입니다.

 

 

개발환경

- kiwoom

- python3.5

- sqlite3

 

import sqlite3
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import style

con = sqlite3.connect("C:\\Users\\Kyoungsoo\\PycharmProjects\\Analysis\\stock_info.db")
cursor = con.cursor()
cursor.execute("SELECT PER FROM opt10001 WHERE Date='2017-01-30' and PER > 0 and PER <100")
rows = cursor.fetchall()
con.close()

per = []
for row in rows:
    try:
        per.append(float(row[0]))
    except:
        pass

style.use('ggplot')
fig = plt.figure(figsize=(10, 6))
fig.add_subplot(1, 1, 1)

plt.hist(per, bins=300)
plt.xlabel("PER")
plt.ylabel("frequency")
plt.show()

x = pd.Series(per)
print(x.describe())


Comments