활동/연구학점제

5년치 코스피&코스닥 티커 따서 야후 파이낸스에서 adj close(수정종가) 따오기

짐니♡ 2023. 7. 19. 19:10

Chapter 2. 데이터 크롤링

 

2-(4) 5년치 코스피 티커 따서 야후 파이낸스에서 adj close(수정종가) 따오기

2-(5) 5년치 코스닥 티커 따서 야후 파이낸스에서 adj close(수정종가) 따오기

2-(6) 코스피,코스닥 자료들 엑셀 파일로 저장하기

 


 

2-(4) 5년치 코스피 티커 따서 야후 파이낸스에서 adj close(수정종가) 따오기

 

필요한 라이브러리 설명

 

import pandas as pd
import yfinance as yf

 

- yfinanceYahoo Finance API를 통해 금융 데이터를 가져오는 파이썬 라이브러리입니다.

- 코드에서 주요 함수는 yf.download() 입니다. 이 함수는 주식, 환율, 지수 등의 금융 데이터를 가져오는 역할을 합니다.

- yf.download() 함수의 인자로 주식의 티커(symbol)와 가져올 데이터의 기간을 지정합니다. startend 매개변수를 사용하여 기간을 설정할 수 있습니다.

- 실행하면 주어진 기간 동안 주식의 시가, 종가, 고가, 저가, 거래량 등의 데이터를 포함한 데이터프레임이 출력될 것입니다.

adj close(수정종가)는 한국거래소에서는 확인 불가능하고 Yahoo Finance사이트(https://finance.yahoo.com/) 에서 확인 가능

adj close(수정종가)? : 기업의 배당 등 이익 배분 활동에 대한 지급액을 재투자한다는 가정하에 계산된 종가

 

ticker_pi = kospi ['종목코드']
ticker_name = kospi ['종목명']

ticker_pi 라는 변수에 kospi의 종목코드 데이터를 저장

ticker_name 라는 변수에 kospi의 종목명 데이터를 저장

 

ticker_pi_ks = ticker_pi + ".KS"

- ticker_pi 변수에는 주식 종목의 종목 코드가 저장되어 있습니다. 여기에 ".KS"를 더하는 코드는 한국 코스피 시장에서 해당 주식 종목을 구분하는 데 사용되는 코드를 생성하는 작업입니다.

- 한국 코스피 시장에서 주식 종목의 코드는 보통 "종목코드.KS" 형식으로 구성됩니다. 이때, "종목코드"는 특정 주식 종목을 식별하는 고유한 코드이고, "KS"는 한국 코스피 시장을 나타내는 코드입니다.

- 예시) ticker_pi 변수가 "005930" (삼성전자)와 같은 종목 코드를 갖고 있다고 가정. 그러면 ticker_pi + ".KS"를 계산하면 "005930.KS"가 됩니다. 이렇게 생성된 "005930.KS"와 같은 형식의 코드를 사용하여 한국 코스피 시장에서 삼성전자 주식을 구분하고 해당 주식에 대한 데이터를 가져올 수 있습니다.

 

 

 

kospi_info = pd.DataFrame ()

for i in range (0 ,len (ticker_pi )):
  kospi_info_sub = yf.download (ticker_pi_ks [i ], start = '2018-05-08',end= '2023-05-08')# yf.download(티커 , 시작일자, 마지막일자)
  kospi_info_sub ['name'] = ticker_name [i ]
  kospi_info_sub ['code'] =ticker_pi_ks [i ]
  kospi_info_sub ['market'] = 'kospi'
  kospi_info = kospi_info.append (kospi_info_sub )

위 코드는 yfinance를 통해 해당 주식 데이터를 가져오고, 이를 하나의 데이터 프레임인 kospi_info에 순차적으로 추가하는 코드

 

3. ticker_pi_ks[i]: ticker_pi 리스트의 i번째 원소인 주식 종목의 코드를 가져와 yf.download() 함수에 전달합니다.

4-1. yf.download() 함수를 통해 해당 주식의 데이터를 가져옵니다.

4-2. yf.download(ticker_pi_ks[i], start='2018-05-08', end='2023-05-08'): ticker_pi_ks[i] 코드로 지정된 주식의 201858일부터 202358일까지의 주가 데이터를 가져옵니다.

5. kospi_info_sub['name'] = ticker_name[i]: kospi_info_sub 데이터프레임에 "name"이라는 새로운 열을 추가하고, 해당 주식 종목의 이름을 ticker_name[i] 값으로 할당합니다.

6. kospi_info_sub['code'] = ticker_pi_ks[i]: kospi_info_sub 데이터프레임에 "code"라는 새로운 열을 추가하고, 해당 주식 종목의 코드를 ticker_pi_ks[i] 값으로 할당합니다.

7-1. kospi_info_sub['market'] = 'kospi': kospi_info_sub 데이터프레임에 "market"라는 새로운 열을 추가하고, 값으로 "kospi"를 할당합니다.

7-2. 이는 해당 데이터가 한국 코스피 시장에서 가져온 데이터임을 표시하는 용도입니다.

8-1. kospi_info = kospi_info.append(kospi_info_sub): kospi_info_sub 데이터프레임을 kospi_info 데이터프레임에 순차적으로 추가합니다.

8-2. 이를 통해 각 주식의 데이터가 하나의 데이터프레임인 kospi_info에 합쳐집니다.

 

kospi_info.reset_index (inplace=True )
kospi_info.index= kospi_info.index + 1
kospi_info ['seq'] = kospi_info.index
kospi_info ['Date_str'] = kospi_info ['Date'].dt.strftime ('%Y%m%d')
kospi_info ['Date_str']= kospi_info ['Date_str'].astype ('str')
kospi_info = kospi_info [['seq','Date','Date_str','market','code','name','Open','High','Low','Close','Adj Close','Volume']]

코드를 실행하면 데이터프레임 kospi_info에는 "seq" 열이 추가되고, "Date" 열은 날짜 형식으로 변환된 "Date_str" 열과 문자열 형태로 저장됩니다. 또한 필요한 열만 남은 데이터프레임으로 구성됩니다

1. kospi_info.reset_index(inplace=True): kospi_info 데이터프레임의 인덱스를 재설정합니다.

2-1. reset_index() 함수의 inplace=True 인자를 통해 원래의 데이터프레임을 수정합니다.

2-2. kospi_info.index = kospi_info.index + 1: 데이터프레임의 인덱스를 1부터 시작하도록 변경합니다. 기존의 0부터 시작하는 인덱스를 1씩 증가시켜서 모든 행의 인덱스를

1, 2, 3, ...과 같이 설정합니다.

3. kospi_info['seq'] = kospi_info.index: "seq"라는 새로운 열을 추가하고, 해당 열에 인덱스 값을 할당합니다. 이렇게 함으로써 각 행의 일련번호를 나타내는 "seq" 열이 생성됩니다.

4. kospi_info['Date_str'] = kospi_info['Date'].dt.strftime('%Y%m%d'): "Date" 열의 값을 날짜 형식으로 변경하여 "Date_str"이라는 새로운 열을 생성합니다. strftime() 함수는 날짜 형식을 지정하여 날짜를 문자열로 변환하는 함수입니다. %Y%m%d는 연도(4자리)와 월, 일을 나타내는 형식입니다.

5. kospi_info['Date_str'] = kospi_info['Date_str'].astype('str'): "Date_str" 열의 데이터 타입을 문자열로 변경합니다. astype() 함수를 사용하여 데이터프레임 열의 데이터 타입을 변경할 수 있습니다.

6-1. kospi_info = kospi_info[['seq','Date','Date_str','market','code','name','Open','High','Low','Close','Adj Close','Volume']]: 데이터프레임에서 필요한 열만 선택하여 kospi_info 데이터프레임을 다시 구성합니다.

6-2. "seq", "Date", "Date_str", "market", "code", "name", "Open", "High", "Low", "Close", "Adj Close", "Volume" 열만 남게 됩니다. 이렇게 열을 선택하여 데이터프레임을 재구성하면 더 적은 정보를 포함하는 데이터프레임을 만들 수 있습니다.

 


2-(5) 5년치 코스닥 티커 따서 야후 파이낸스에서 adj close(수정종가) 따오기

2-(4) 코스피 티커 따서 야후 파이낸스에서 ajd close(수정종가)따오는 과정과 똑같이 진행

 

ticker_daq = kosdaq ['종목코드']

코스닥 데이터 가져오기

 

ticker_daq_kq = ticker_daq + ".KQ"  #뒤에 .KQ
ticker_name_daq = kosdaq ['종목명']

 

kosdaq_info = pd.DataFrame ()
for i in range (0 ,len (ticker_daq )):
  kosdaq_info_sub = yf.download (ticker_daq_kq [i ], start = '2018-05-08',end= '2023-05-08')
  kosdaq_info_sub ['name'] = ticker_name_daq [i ]
  kosdaq_info_sub ['code'] =ticker_daq_kq [i ]
  kosdaq_info_sub ['market'] = 'kosdaq'
  kosdaq_info = kosdaq_info.append (kosdaq_info_sub )

 

kosdaq_info.reset_index (inplace=True )
kosdaq_info.index= kosdaq_info.index + 1
kosdaq_info ['seq'] = kosdaq_info.index
kosdaq_info ['Date_str'] = kosdaq_info ['Date'].dt.strftime ('%Y%m%d')
kosdaq_info ['Date_str']= kosdaq_info ['Date_str'].astype ('str')
kosdaq_info = kosdaq_info [['seq','Date','Date_str','market','code','name','Open','High','Low','Close','Adj Close','Volume']]

 

 


 

2-(6) 코스피,코스닥 자료들 엑셀 파일로 저장하기

 

kospi_info1 = kospi_info [0 :int (len (kospi_info )/2 )]
kospi_info2 = kospi_info [int (len (kospi_info )/2 ):]
kosdaq_info1 = kosdaq_info [0 :int (len (kosdaq_info )/2 )]
kosdaq_info2 = kosdaq_info [int (len (kosdaq_info )/2 ):]

- kospi_info의 절반을 kospi_info1에 저장 나머지를 kospi_info2에 저장

kosdaq_info의 절반을 kosdaq_info1에 저장 나머지를 kosdaq_info2에 저장

 

writer=pd.ExcelWriter ('krx_5years_info.xlsx', engine='openpyxl')  
#하나의 엑셀 파일을 만들어 시트 네임별로 정리 -> krx_5years_info.xlsx라는 엑셀 파일 1개에 sheet 4개를 정리

ExcelWriterpandas에서 제공하는 excel 파일을 쓰는 기능을 담당하는 클래스

krx_5tears_info.xlsx은 생성할 excel 파일의 이름

openpyxlpandasExcelWriter와 함께 자주 사용되는 엔진으로, openpyxl은 다양한 Excel 파일 형식을 지원하는 파이썬 라이브러리

 

 

kospi_info1.to_excel (writer ,index=False ,sheet_name = 'kospi1')
kospi_info2.to_excel (writer ,index=False ,sheet_name = 'kospi2')
kosdaq_info1.to_excel (writer ,index=False ,sheet_name = 'kosdaq1')
kosdaq_info2.to_excel (writer ,index=False ,sheet_name = 'kosdaq2')
writer.save ()

kospi_info1, kospi_info2, kosdaq_info1, kosdaq_info2 데이터프레임을 각각 다른 시트 이름으로 "krx_5years_info.xlsx" 파일에 저장하는 코드