일상생활 (EveryDay)

가격대 다른 주식 비교 데이터 분석 시각화 차트

날으는물고기 2023. 11. 1. 00:44

FinanceDataReader를 사용하여 증권 데이터를 수집하는 단계별 코드입니다. FinanceDataReader는 한국 주식 및 미국 주식 등 다양한 금융 데이터를 제공하는 파이썬 라이브러리입니다. 아래는 FinanceDataReader를 설치하고 사용하여 삼성과 애플의 주가 데이터를 수집하는 예제 코드입니다.

 

FinanceDataReader 설치하기

먼저, FinanceDataReader 라이브러리를 설치합니다. 이것은 pip를 사용하여 쉽게 수행할 수 있습니다.

pip install finance-datareader

 

FinanceDataReader 가져오기

FinanceDataReader를 가져옵니다.

import FinanceDataReader as fdr

 

삼성과 애플의 주가 데이터 수집

아래 코드를 사용하여 삼성과 애플의 주가 데이터를 수집합니다. 삼성의 시작일을 기준으로 애플의 데이터를 가져오겠습니다.

# 삼성과 애플의 주가 데이터 수집
samsung = fdr.DataReader("005930")  # 삼성 주가 데이터 가져오기
samsung_first_date = str(samsung.index[0])[:10]  # 삼성의 첫 데이터의 날짜
apple = fdr.DataReader("AAPL", samsung_first_date)  # 애플 주가 데이터 가져오기

위 코드에서 주요 부분을 설명하면:

  • fdr.DataReader("005930"): "005930"은 삼성전자의 종목 코드입니다. 이 코드를 사용하여 삼성 주가 데이터를 가져옵니다.
  • samsung_first_date: 삼성의 첫 데이터의 날짜를 얻습니다. 이를 기반으로 애플 데이터를 가져올 시작일을 결정합니다.
  • fdr.DataReader("AAPL", samsung_first_date): "AAPL"은 애플의 종목 코드입니다. samsung_first_date를 기준으로 애플 주가 데이터를 가져옵니다. "티커", "시작일", "종료일" 순으로 입력하고, 시작일이나 종료일은 입력하지 않아도 됩니다.

데이터가 성공적으로 가져와지면 samsungapple 데이터프레임에 저장됩니다.

 

결과 확인

삼성과 애플의 주가 데이터가 samsungapple 데이터프레임에 저장됩니다. 결과를 확인하려면 다음과 같이 사용할 수 있습니다.

# 삼성의 주가 데이터 출력
print("삼성의 주가 데이터:")
print(samsung)

# 애플의 주가 데이터 출력
print("애플의 주가 데이터:")
print(apple)

이제 위의 코드를 실행하면 삼성과 애플의 주가 데이터를 비교하고 분석할 수 있습니다. 주가 데이터는 데이터프레임 형식으로 제공되며, Pandas를 사용하여 데이터 분석 및 시각화를 수행할 수 있습니다.

 

데이터 분석을 위해 결측치를 처리하는 단계별 코드와 설명입니다.

 

결측치 확인

결측치가 데이터 분석에 방해가 되므로 먼저 결측치를 확인합니다. isna().sum() 메서드를 사용하여 결측치의 개수를 계산합니다.

samsung_isna = samsung.isna().sum()
apple_isna = apple.isna().sum()

이 코드를 실행하면 samsung_isnaapple_isna에 각 데이터프레임의 열 별 결측치 개수가 저장됩니다.

 

결측치 처리

결측치는 데이터 분석에서 문제를 일으킬 수 있으므로 어떻게 처리할지 결정해야 합니다. 여기서는 결측치를 0으로 대체하는 방법을 사용합니다.

samsung = samsung.fillna(0)

위 코드에서 fillna(0) 메서드는 데이터프레임의 모든 결측치를 0으로 대체합니다. 이 경우, 삼성의 첫 데이터에서 발생한 결측치를 0으로 처리했습니다. 이 결정은 변동률을 삼성의 첫 데이터 시작일에서 구할 수 없는 상황에서 결측치를 0으로 가정하기 때문입니다.

 

결측치를 다른 값으로 대체하는 경우, 그 값이 해당 상황에 맞도록 결정되어야 합니다.

이제 결측치가 처리된 데이터프레임 samsung을 사용하여 데이터 분석을 계속 진행할 수 있습니다.

 

시각화를 통해 두 주식을 비교하는 과정을 단계별로 코드와 설명입니다.

 

맷플롯립 가져오기

시각화를 구현하기 위해 matplotlib.pyplot을 가져옵니다.

import matplotlib.pyplot as plt

 

종가로 두 주식의 수익률 비교하기

주식 데이터의 시각화를 시작합니다. 두 주식의 종가를 비교하는 코드를 작성합니다.

plt.figure(figsize=(15, 10))  # 그래프의 크기 설정

plt.plot(samsung["Close"], label="SAMSUNG")  # 삼성 주가 데이터를 그래프로 표시
plt.plot(apple["Close"], label="APPLE")  # 애플 주가 데이터를 그래프로 표시

plt.legend(fontsize=16)  # 레전드(설명) 추가

plt.show()  # 그래프를 화면에 출력

위 코드의 주요 부분을 설명하면:

  • plt.figure(figsize=(15, 10)): 그래프의 크기를 가로 15인치, 세로 10인치로 설정합니다. 그래프의 크기는 화면에 어떻게 표시될지를 제어합니다.
  • plt.plot(samsung["Close"], label="SAMSUNG"): 삼성 주가 데이터의 종가를 그래프로 표시하며, 레이블(legend)은 "SAMSUNG"으로 설정합니다.
  • plt.plot(apple["Close"], label="APPLE"): 애플 주가 데이터의 종가를 그래프로 표시하며, 레이블(legend)은 "APPLE"로 설정합니다.
  • plt.legend(fontsize=16): 레전드(설명)를 추가하고, 폰트 크기를 16픽셀로 설정합니다.
  • plt.show(): 그래프를 화면에 출력합니다.

 

단계 3: 결과 확인

코드를 실행하면 삼성과 애플의 종가 데이터가 같은 그래프에 나타납니다. 그러나 두 주식의 가격대가 크게 다르므로 종가로 비교하는 것은 적절하지 않을 수 있습니다. 주가 데이터의 스케일을 맞추거나 다른 지표를 사용하여 더 유용한 비교를 할 수 있습니다.

 

일간 변동률을 사용하여 두 주식을 비교하는 단계별 코드와 설명입니다.

 

일간 변동률 계산

주식의 일간 변동률을 계산합니다. 이전의 코드에서 일부 데이터를 수정하였으므로, 아래 코드를 사용하여 일간 변동률을 계산합니다.

# 이상한 데이터 수정
apple.loc["2016-02-29"]["Change"] = -0.025

# 일간 변동률 계산
samsung["Change"] = samsung["Close"].pct_change()  # 삼성 주식의 일간 변동률 계산
apple["Change"] = apple["Close"].pct_change()  # 애플 주식의 일간 변동률 계산

위 코드에서 pct_change() 메서드를 사용하여 종가 데이터를 이용하여 일간 변동률을 계산합니다.

 

일간 변동률로 두 주식 비교

일간 변동률을 사용하여 두 주식을 비교하는 그래프를 그립니다.

plt.figure(figsize=(15, 10))  # 그래프의 크기 설정

plt.plot(samsung["Change"], label="SAMSUNG")  # 삼성 주식의 일간 변동률 그래프로 표시
plt.plot(apple["Change"], label="APPLE")  # 애플 주식의 일간 변동률 그래프로 표시

plt.legend(fontsize=16)  # 레전드(설명) 추가

plt.show()  # 그래프를 화면에 출력

일간 변동률로 두 주식을 비교하는 그래프가 생성됩니다.

이러한 방식으로 주식의 일간 변동률을 비교하면 주식의 상대적인 성과 및 변동성을 더 잘 파악할 수 있습니다.

 

일간 변동률의 누적곱을 사용하여 두 주식을 비교하는 단계별 코드와 설명입니다.

 

일간 변동률 계산 및 이상한 데이터 수정

주식의 일간 변동률을 계산하고 이상한 데이터를 수정합니다.

# 이상한 데이터 수정
apple.loc["2016-02-29"]["Change"] = -0.025

# 삼성 주식의 일간 변동률 계산
sam_change_cp = ((samsung["Change"] + 1).cumprod() - 1)

# 애플 주식의 일간 변동률 계산
aapl_change_cp = ((apple["Change"] + 1).cumprod() - 1)

위 코드에서는 먼저 이상한 데이터를 수정하고, 누적곱을 계산하기 위해 각 주식의 일간 변동률에 1을 더하고 cumprod() 메서드로 누적곱을 계산한 다음 1을 빼줍니다.

 

단계 2: 누적곱으로 두 주식 비교

누적곱을 사용하여 두 주식을 비교하는 그래프를 그립니다.

plt.figure(figsize=(15, 10))  # 그래프의 크기 설정

plt.plot(sam_change_cp, label="SAMSUNG")  # 삼성 주식의 누적 변동률 그래프로 표시
plt.plot(aapl_change_cp, label="APPLE")  # 애플 주식의 누적 변동률 그래프로 표시

plt.legend(fontsize=16)  # 레전드(설명) 추가

plt.show()  # 그래프를 화면에 출력

누적 변동률을 사용하여 두 주식을 비교하는 그래프가 생성됩니다.

누적곱을 사용하면 일간 변동률이 0인 경우에도 데이터를 올바르게 비교할 수 있으므로 시계열 데이터의 상대적 성과를 파악하는 데 유용합니다.

 

지수화(indexation)를 사용하여 두 주식을 비교하는 단계별 코드와 설명입니다.

 

지수화 계산

지수화를 계산합니다. 이를 위해 각 주식의 종가 데이터를 첫 날짜의 종가 데이터로 나눕니다.

# 삼성 주식의 지수화 계산
sam_exp = (samsung["Close"] / samsung["Close"][samsung_first_date])

# 애플 주식의 지수화 계산
aapl_exp = (apple["Close"] / apple["Close"][samsung_first_date])

위 코드에서 samsung_first_date는 삼성의 데이터 시작일을 나타냅니다. 이를 기준으로 지수화를 계산합니다.

 

지수화로 두 주식 비교

지수화를 사용하여 두 주식을 비교하는 그래프를 그립니다.

plt.figure(figsize=(15, 10))  # 그래프의 크기 설정

plt.plot(sam_exp, label="SAMSUNG")  # 삼성 주식의 지수화 그래프로 표시
plt.plot(aapl_exp, label="APPLE")  # 애플 주식의 지수화 그래프로 표시

plt.legend(fontsize=16)  # 레전드(설명) 추가

plt.show()  # 그래프를 화면에 출력

지수화를 사용하여 두 주식을 비교하는 그래프가 생성됩니다.

지수화를 통해 첫 날짜를 기준으로 주식의 성과를 추적하므로, 상대적 성과 및 변동성을 파악하는 데 유용합니다.

 

누적곱과 지수화를 사용한 그래프를 비교하는 단계별 코드와 설명입니다.

 

누적곱 및 지수화 계산

첫 번째 그래프에는 누적곱을 사용하여 변동률을 비교하고, 두 번째 그래프에는 지수화를 사용하여 종가 데이터를 비교하겠습니다.

# 누적곱 계산
sam_change_cp = ((samsung["Change"] + 1).cumprod() - 1)

# 지수화 계산
sam_exp = (samsung["Close"] / samsung["Close"][samsung_first_date]) - 1

 

그래프 비교

이제, 두 그래프를 비교합니다.

plt.figure(figsize=(15, 10))  # 그래프의 크기 설정

plt.plot(sam_change_cp, label="cumulative product")  # 누적곱 그래프로 표시
plt.plot(sam_exp, "--", label="indexation")  # 지수화 그래프로 표시 (점선 스타일)

plt.legend(fontsize=16)  # 레전드(설명) 추가

plt.show()  # 그래프를 화면에 출력

첫 번째 그래프는 누적곱을 사용한 그래프로 표시되고, 두 번째 그래프는 지수화를 사용한 그래프로 표시됩니다.

두 그래프를 비교하면 거의 일치하는 것을 확인할 수 있습니다. 누적곱 및 지수화는 상대적인 성과 및 변동성을 파악하는 데 유용한 방법 중 하나입니다.

 

두 데이터 간의 차이를 확인하고 일치하는 소수 자릿값을 찾는 과정의 단계별 코드와 설명입니다.

 

데이터프레임 생성과 오차 확인

import pandas as pd

# 두 데이터의 오차 확인 (몇 번째 소수 자릿값까지 일치하는지)
compare_df = pd.DataFrame({"CP": sam_change_cp, "INDEX": sam_exp})
i_list = []  # 소수 자릿값 리스트

for date, cp, index in compare_df.itertuples():
    for i in range(1, 15):
        if round(cp, i) != round(index, i):  # i번째 소수까지 반올림
            i_list.append(i)
            print(i, date, cp, index)

print(min(i_list))  # 소수 자릿값의 최소값

 

데이터프레임 생성

누적곱과 지수화로 생성한 데이터를 비교하기 위한 데이터프레임 compare_df를 생성합니다.

 

오차 확인

데이터프레임을 이용하여 소수 자릿값을 반올림하면서 두 데이터 간의 오차를 확인합니다. i_list 리스트에 각 날짜별로 일치하지 않는 소수 자릿값을 기록하고 출력합니다.

 

결과 확인

min(i_list)를 사용하여 소수 자릿값의 최소값을 출력합니다.

이 결과를 통해 두 데이터가 소수 10번째 자릿값까지 일치한다는 것을 확인할 수 있습니다. 이는 크롤링 과정에서 발생한 약간의 오차가 있을 수 있지만, 주식 데이터의 비교에 있어서 큰 문제가 없음을 의미합니다.

 

출처 : 경제와 데이터 bigdata-doctrine.tistory.com

728x90