주식 데이터 가져오기 (Pandas)

우선 주가 데이터를 가져오는 방법 부터 알아 보겠습니다. 

주가를 받아오는 방법은 크게 아래 세가지 방법이 있습니다. 

  1. 증권사 API 를 이용
  2. 다음, 네이버등의 웹페이지를 크롤링
  3. Google, Yahoo, Morningstar 등이 제공하는 API 를 이용 

우선 이번 포스트에서는 가장 쉽게 데이터를 얻어 올 수 있는 3번 방법으로 주가 데이터를 가져와보겠습니다. 

다양한 업체들이 API를 제공하지만 우선 가장 역사가 깊은 Yahoo 에서 데이터를 받아오는 코드를 작성해보겠습니다.

(다만 Yahoo 의 경우 Kospi, Kosdaq의 최근 데이터는 제공하지 않습니다.. 이 부분은 다음 혹은 다다음 포스트에서 다 받을 수 있는 방법을 포스트 하겠습니다. 다만 Nasdaq 과 같은 데이터는 Full 주가 데이터를 제공하니 참고하시기 바랍니다.)

 

Pandas datareader 라이브러리로 Yahoo 에서 주가 가져오기 

코드를 작성하기 전해 우선 CMD 상에서 가상환경을 활성화 하고 아래 명령어로 라이브러리를 설치해 줍니다.

(Pycharm 에서 설치할 수 있습니다. 프로젝트를 열고 File > Settings… > Project Interpreter > 오른쪽 “+” 버튼 > pandas-datareader 검색 > install)

pip install pandas-datareader

 설치가 성공적으로 완료 되었으면 네이버의 주가 데이터를 가져오는 코드를 만들어 보겠습니다.

Pycharm을 열고 아래코드를 작성합니다. 

from pandas_datareader import data

# '035420.KS' = Naver종목코드.KospiCode
naver = data.get_data_yahoo('035420.KS')
print(naver.head())
print(naver.tail())

코드 실행 결과로 아래와 같은 화면이 출력될 것입니다. 

2010-01-04 ~ 2019-03-22 까지 데이터를 가져 왔는데 2월 1일 부터 3월 21 일 까지 주가데이터는 없습니다. 

데이터 를 파일로 저장하기 

위 코드에서 naver 라는 변수에 저장된 pandas Dataframe을 엑셀, csv, pickle 같은 여러가지 형태로 저장할 수 있습니다. 

위 코드 다음에 아래 코드를 작성한 뒤 실행해 보세요 

naver.to_csv('naver.csv')
naver.to_pickle('naver.pickle')

autoTradeLesson Folder 에 보면 아래와 같이 파일이 만들어저 있는 것을 볼 수 있습니다.

참고로 exel 형식인 xlsx 형식으로 저장하고 싶다면 CMD 환경에서 아래 명령어로 라이브러리를 설치합니다. 

pip install openpyxl

그런 다음 아래 코드를 추가 합니다. 

naver.to_excel('naver.xlsx')

Pycharm에서 코드를 실행시키면 excel 파일 형식의 데이터를 얻을 수 있습니다. 

 

Result 

from pandas_datareader import data

# '035420.KS' = Naver종목코드.KospiCode
naver = data.get_data_yahoo('035420.KS')
print(naver.head())
print(naver.tail())

naver.to_csv('naver.csv')
naver.to_excel('naver.xlsx')
naver.to_pickle('naver.pickle')

 

이것으로 이번 포스트를 마치겠습니다. 

주가를 받아오는 방법을 알았으니 이제 어떤 주식이 있는지에 대한 정보도 알아야겠죠 ? 그래서 다음 포스트 에서는 Kospi, Kosdaq 의 종목코드를 내려받아 모든 종목 혹은 특정 원하는 기업의 이름정보를 입력받아 주가를 내려받아오는 코드를 만들어 보겠습니다. 

You may also like...

2 Responses

  1. CBigO 댓글:

    혹시 high low open 등등 순서를 바꾸고 싶으면 어떻게 해야하나요?

댓글 남기기

이메일은 공개되지 않습니다.