본문 바로가기

프로그래밍 강좌/파이썬 - 데이터 분석

[데이터 분석][Python] 파이썬 실제 주식 데이터 다루기 - 주가 yahoo finance pandas_datareader DatetimeIndex describe 판다스

네이버 블로그에서 파이썬에 관한 연재를 하고 있습니다.

https://blog.naver.com/dorergiverny/223150311138

블로그에 이어 재미있는 실데이터를 가져와서 처리를 하는 판다스 종합편으로 만들어봤습니다.

pandas-datareader 라는 패키지가 있는데, web 상에서 제공하는 데이터를 다운 받아서 데이터 프레임 type으로 만들어주는 명령어가 포함된 패키지를 install 해야 합니다.

yahoo 란 사이트 기억하시나요? yahoo finance가 데이터 제공을 하고 있는데, 이 데이터를 크롤링 해오는 것을 pandas-datareader가 해줍니다. 일단 yahoo finance 를 인스톨 해보도록 하겠습니다.

아래와 같이 각종 주식 데이터들을 모두 수집하고 있습니다.

pandas와 numpy, 그리고 pandas_datareader의 data라는 모듈, yfinance를 임포트 합니다.

삼성 전자 주식 데이터를 불러오겠습니다. 2022년 1월부터 지난주까지의 데이터 입니다.

pandas_darareader  get_data_yahoo()를 이용하여 데이터 프레임을 읽어 오는데, 주식의 종목코드 005930 이네요. 지난주 금요일에 많이 떨어졌네요.. 힘내라 삼성전자~!! 이번주에는 좀 오르길 기도해봅니다.

371개의 데이터가 있습니다. 7/6까지의 데이터만 있네요.

컬럼을 잠시 설명 드리면, 아래와 같습니다.

Open
시초가
High
고가
Low
저가
Close
종가
Adj Close
수정 종가(불할, 배당 고려한 조정된 주식 가격)
Volume
거래량

기초통계량을 분석하기 위해서는 describe() 메소드를 사용합니다. 데이터의 개수, 평균, 표준편차, 최소값, 사분위수(25%, 50,% 75%), 최대값을 계산해 줍니다. 데이터의 집중도나 분산도를 알기 위해 사분위수가 필요하며, 평균과 중위수가 차이가 많으면 데이터가 쏠려있다는 것도 알 수 있습니다.

종가의 최대값/최소값, 평균값을 보고 싶으면, 아래와 같이 하시면 됩니다.

만약 시작가 대비 종가가 높았던 날의 데이터만 보고 싶다면 어떻게 할까요? 이 날은 기분이 좋았던 날이겠죠? ㅋㅋ 총 149일이었네요.

반타작을 못했네요.. 그럼 종가 기준 가장 주가가 높았던 날의 데이터만 본다면? 그리고 종가 기준 주가 70,000원 이상(7만전자 ㅋㅋ) 이었던 날짜만 보고 싶다면? (이 데이터에서 index DatetimeIndex 형으로 되어 있네요. 그럼 dt 접근자를 사용할 수 있겠죠?)

지난주 금요일에 7만 전자를 빼앗겼으니 다시 7만 전자를 회복해야 겠습니다.

작년 제 생일에 어땠을까요? 10월 12일 데이터를 확인해보겠습니다.

데이터 중 100번째 데이터를 확인해보겠습니다.

데이터를 날짜 역순으로 바꿔보겠습니다.

그럼 종가 데이터를 가격이 높은 순서로 정렬을 해 보겠습니다.

다른 방법으로도 할 수 있겠죠?

Date가 index로 되어 있는데, index를 0부터의 숫자로 다시 세팅을 해 보겠습니다.

컬럼 명을 몇개 바꿔볼께요. rename()은 명령어기 때문에 소괄호입니다. 아래처럼 하면 df 의 컬럼명이 바뀌었을까요? 파이썬은 보수적이라고 했죠? inplace 를 사용해서 바꾸던지 아니면 새로운 객체에 대입하면 됩니다. 현재 df는 바뀌지 않았어요.

새로운 column을 생성해보겠습니다. 종가와 시작가의 차이를 계산해볼께요.

'Date' column 을 제거하는 방법은 두가지라고 했습니다. 둘 중 편한 것을 사용하시면 됩니다. 지금보니 뒤에 것도 편한 방법으로 보이네요.

Date 값을 parsing 해서 연/월/일 column을 생성해보겠습니다.

그럼 11월과 12월 데이터를 별도의 table로 만든 후 두 테이블을 위아래로 합쳐볼께요.

이렇게 되면 11월과 12월의 평균값 등 기초 통계량을 뽑을 수도 있겠죠? 계산할 수 없는 DatetimeIndex 형은 계산이 되지 않았네요.