Allen's 데이터 맛집

[2] 여러 종목 수익률 비교 및 각종 시각화 본문

Project/파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기

[2] 여러 종목 수익률 비교 및 각종 시각화

Allen93 2023. 7. 28. 01:42

해당 포스트는 파이썬을 사용하여 주식 데이터를 수집하고, 시각화하는 내용을 좀 더 구체적으로 다뤄 보겠습니다.

코드는 FinanceDataReader 라이브러리를 사용하여 주식 데이터를 가져와 개별 종목을 수집합니다

FinanceDataReader를 통해 여러 종목 수익률을 비교 및 시각화를 해서 인사이트를 찾고  pandas를 사용하여 데이터를 가공하고 시각화합니다.

추가로 네이버금융 개별종목을 requests, beautifulsoup4 라이브러리를 사용하여 keyword로 html파일을 읽어와서 데이터를 수집하고 데이터 분석 전문 시각화 도구인 plotly를 통해 일별 시세를 시각화합니다.

 


개별종목 수집하기

 

DataReader를 통해서 원하는 종목의 코드를 첫 번째 인자, 그리고 몇 년도부터 몇 년도까지 수집할지 연도를 적어줍니다.

기간별로 간단한 시각화를 해서 종가를 알아봅니다.

삼성 전자의 경우 2019년 초반에는 종가가 주춤하였지만, 시간이 지날수록 상승하는 것을 볼 수 있습니다.

 

종목명으로 해당 종목의 종목코드를 가져오는 간단한 함수를 만들어 보았습니다

종목의 이름을 치면 종목코드가 출력이 되고, 잘못된 상장사를 입력했을 때 간단한 예외처리도 하였습니다.

 

 

이번엔 종목명으로 일별 시세를 받아오는 함수를 만들었습니다

위의 item_code_by_item_name함수를 사용하여 종목코드를 가져오고 year를 지정한 연도의 데이터를 가져옵니다.

default값은 2020년으로 지정하였습니다.

 

 

예시로 하이브 데이터를 가져와서 stock_daily변수에 담고 해당 종목의 종가를 그래프로 그려봅니다.

하이브의 경우 2022년의 경우 특히 매출이 상승했었는데, 조사를 해 보니 소속가수 BTS의 '인 더 섬 with BTS’ 란 게임을 출시하였고, 다른 소속 가수들의 월드투어 콘서트가 있었음을 확인했습니다.

 

 

전체 데이터를 선 그래프로도 나타내 보고 이렇게 하면 스케일이 다르기 때문에 subplots를 사용해 각 항목별로 나타내봅니다.

 

히스토그램 그래프로도 각종 항목에 대해서 시각화를 해보고 secondary_y 옵션을 사용해서 2축 그래프도 그려보았습니다.

 

여러 종목 수익률을 시각화하여 비교해 보기

 

다음은 삼성전자, SK하이닉스, 현대차, 셀트리온, LG화학, POSCO, 삼성물산, NAVER의 종목들을 분석해 보겠습니다.

전체 데이터의 종가를 시각화해 보았고, 눈에 띄게 LG화학의 종가가 높고, 그리고 시간이 지날수록 높아짐을 확인할 수 있습니다. LG화학과 삼성전자를 따로 비교를 했을 땐 삼성전자는 2020년 초부터 2021년 초까진 거의 일정한 종가를 유지했음을 알 수 있습니다.

 

각 종목의 수익률에 대해서 히스토그램을 그려보고 왜도를 구해봅니다.

기초 통계에서 배운 것처럼 왜도값이 양수일 때, 음수일 때의 변화를 확인할 수 있습니다.

 

 

네이버금융 개별종목 수집

 

수집할 곳을 네이버금융으로 지정하여 해당 URL을 만들어줍니다.

링크에서 해당 코드처럼 item_code와 item_name을 정해줍니다.

requests 라이브러리를 통해서 url을 넘겨주고 headers를 지정해 줍니다. 그리고 beautifulsoup을 통해서 table 태그를 찾아줍니다

 

 

 

 

찾은 table태그를 사용하여 pandas로 데이터를 한 번에 수집합니다.

 

 

일별 시세를 수집하는 get_item_list를 만들어서 종목코드와 종목명만 입력하여서 데이터를 수집할 수 있습니다.

 

시각화 라이브러리 plotly를 사용하여 일별 시세 시각화 해보기

 

plotly에 내장되어 있는 주식(stocks()) 데이터를 사용하여 분석하고 시각화를 해보겠습니다.

데이터의 시작점인 2018-01-01을 기준으로 잡기 위해 -1을 해줍니다.

 

 

GOOGLE의 경우 2018-01-01을 기점으로 수익률이 양수일 때와 음수일 때를 막대그래프로 한눈에 알아볼 수 있습니다.

 

facet_col을 사용해서 subplot을 그려봤습니다.

그래프의 면적이 색칠이 되어서 좀 더 한눈에 알아보기 수월해졌습니다.

Facebook의 경우 2018-01-01 날짜의 수익률을 기준으로 2018년과 2019년도에는 적자가 많이 나고 있음을 확인할 수 있습니다.

APPLE사의 OHLC(시가-고가-저가-종가) 그래프를 Candlestick으로 그릴 수 있습니다.

이것이 저희에게 익숙한 양봉차트입니다!

 

 

areaplot을 사용하면 각 항목들의 수치 차이가 극명하게 표현될 수 있어서 한눈에 파악이 용이합니다.

 

통계에서 중요한 분포를 알아보기 위해서, 아래 그림처럼 산점도, 박스플롯 그리고 바이올린 플롯을 사용하여 데이터들이 어떻게 분포되어 있는지 확인이 가능합니다.

 


위의 코드를 통해 주식 데이터를 수집하고, 시계열 데이터를 다양한 시각화 방법으로 표현하는 방법을 익힐 수 있습니다. 이를 통해 주식 데이터 분석과 특히 여러 가지 시각화를 사용하여 시계열 데이터를 한눈에 파악하기 쉽게 만들어 보았습니다.

데이터 분석에 대해서 학습할수록 시각화의 중요함이 많이 느껴집니다.

 

 

GITHUB : https://github.com/siilver94/Stock-data-collection-analysis-and-visualization

 

GitHub - siilver94/Stock-data-collection-analysis-and-visualization

Contribute to siilver94/Stock-data-collection-analysis-and-visualization development by creating an account on GitHub.

github.com