본문 바로가기
  • Rising Moon
개발로 돈 벌기/파이썬 금융 데이터 분석

파이썬으로 네이버와 카카오 주식차트 비교하기

by 라이징문 2022. 8. 4.
이전 글들에서 다룬 것을 바탕으로
네이버와 카카오 주식 데이터를 가져오고
간단한 차트로 시각화해보자.

이번엔 설명보단
예시 코드와 결과 위주로 포스팅할 예정이다.
단계별 설명이 궁금하다면 아래 링크들을 참고하면 된다.

 

- 이전 링크들

1. 파이썬으로 야후 파이낸스(yfinance)에서 금융 데이터 가져오기

2. 판다스로 주식, 암호화폐 데이터 다듬기

3. 금융 자산 데이터 시각화하기 (matplotlib)

 

1. yfinance로 주식 데이터 가져오기

# 필요한 모듈 임포트 -> 없으면 pip install로 설치
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

# 필요시 가격 소수점 자리수 개수 지정
# pd.options.display.float_format = "{:.4f}".format

# 기간 지정
start = "2017-01-01"
end = "2022-08-04"

# 티커 심볼 리스트 -> 야후 파이낸스 검색
tickers_kr = {
    "035420.KS" : "NAVER",
    "035720.KS" : "KAKAO"
    }
tickers = list(tickers_kr.keys()) # ["035420.KS", "035420.KS"]

# yfinance로 데이터 가져오기
df = yf.download(tickers, start, end)

# 컬럼명 한글로 바꾸기
df.rename(columns=tickers_kr, inplace=True)

df

 

df 결과 사진 (클릭시 확대)

 

티커 심볼에 따라 숫자 범위가 다양하기 때문에

필요에 따라 소수점 자릿수의 개수를 지정할 수 있다.

 

국내 주식의 티커 심볼은 숫자로 표기되기 때문에

보기 편하게 다루기 위해 컬럼명을 바꿔주었다.

우선 딕셔너리 형태를 만들고

rename 메서드에 inplace 옵션을 주어 변경했다.

추후 더 나은 방법이 생각나면 다시 다루겠다.

 

2. 종가 데이터 추출하기

# 종가 데이터만 가져오기
close = df.Close.copy()

close

# 결과
 		NAVER	     KAKAO
Date		
2017-01-02	155400.0	15452.8
2017-01-03	153400.0	16117.7
2017-01-04	162000.0	16984.0
2017-01-05	158200.0	16923.5
2017-01-06	159800.0	16863.1
...	...	...
2022-07-27	246000.0	71900.0
2022-07-28	247000.0	72400.0
2022-07-29	259000.0	74800.0
2022-08-01	259000.0	74000.0
2022-08-02	259000.0	71800.0
1369 rows × 2 columns

 

종가 데이터만 다룰 것이기 때문에

close 변수에 복사해서 담았다.

 

3. 정규화하기

# 정규화하기
norm = close.div(close.iloc[0]).mul(1)

norm

# 결과
		NAVER   KAKAO
     Date		
2017-01-02	1.0	1.0
2017-01-03	1.0	1.0
2017-01-04	1.0	1.1
2017-01-05	1.0	1.1
2017-01-06	1.0	1.1
...	...	...
2022-07-27	1.6	4.7
2022-07-28	1.6	4.7
2022-07-29	1.7	4.8
2022-08-01	1.7	4.8
2022-08-02	1.7	4.6
1369 rows × 2 columns

 

모든 날짜별 가격을 시작 날의 가격으로 나누었다.

따라서 시작 날이 1이 되고 기준점이 된다.

카카오 가격은 시작 날 대비 4.6배 오른 것이다.

 

4. 시각화해서 비교하기

4-1. 정규화를 안하고 시각화하기

# 시각화는 seaborn 라이브러리 사용
plt.style.use("seaborn")

# 정규화를 하지 않은 상태로 시각화
close.dropna().plot(figsize=(18, 10), fontsize=14)
plt.legend(fontsize=14)
plt.show

 

결과 이미지 (클릭시 확대)

그래프의 모양만 보면

네이버의 변동성이나 상승이 더 높아 보인다.

카카오는 Y축 가격이 구체적이지 않아 판단하기가 어렵다.

그럼, 아래 정규화된 데이터의 차트를 보자.

 

4-2. 정규화해서 시각화하기

# 정규화한 것을 시각화하기
norm.dropna().plot(figsize=(18, 10), fontsize=14)
plt.legend(fontsize=14)
plt.show

 

결과 이미지 (클릭시 확대)

얼핏보면 두 결과가 뒤바뀐 것 같다.

정규화된 결과에는 Y축이 가격이 아니라 가격의 변동률이다.

즉, 두 회사의 주식 가격이 동일하게 1에서 시작했다고 가정한다.

(정규화 과정에서 이것을 10이나 100 단위 등으로 조정 가능하다.)

만약 Y 값이 2라면 가격이 두배 오른 것이고, 10을 넘었다면 10배가 넘게 오른 것이다.

 

한마디로, 절대 가격이 아닌 상대 가격으로 비교하는 차트이다.

 

5. 마치며

이처럼 몇 줄의 코드만 있으면

원하는 금융 상품을 쉽게 비교해 볼 수 있다.

다양한 티커 심볼을 찾아서 차트로 그려보자.

 

일단 코드가 정상적으로 실행된다면,

다양한 설정값을 마음대로 바꿔보자.

입력에 따라 결과가 바뀌는 것을 보면

원리를 이해하기 쉬워지고 응용하는데 도움이 될 것이다.

 

또한 정규화를 해보면서

절대값이 아닌 상대값으로 금융 상품을 비교해보았다.

실제로 대다수의 재무 분석가나 투자자, 트레이더들은

절대가격이 아닌 비율을 활용한다.

 

그렇다면 다음 시간엔

"비율" 무엇이고 왜 중요한지 자세히 알아보자.

댓글