#04_01 [python] html, pandas_datareader로 주식 데이터 시각화 하기

2022. 1. 28. 20:21개발의 흔적/데이터분석

#pandas library에서 csv 뿐만 아니라 다양한 형태의 데이터 load가 가능함!

#html형식의 데이터 불러오기!

 

import pandas as pan
code = pan.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download', header=0) [0]
code 

 

# .read_html('주소', header = 몇번째 table 부터?) [x번째 table을 열어라!]

# 코스피, 코스닥에 상장된 기업명과 종목코드 알기 위한 table

한국시장의 기업명, 종목코드 등의 정보있는 table

 

#주식의 매시간당 가격 데이터를 가진 table도 가져오자!

 

import pandas_datareader.data as web
web.DataReader('005930', 'naver')

# pandas_datareader 라이브러리 : 이것역시 웹의 데이터셋을 불러오는 라이브러리!

# .DataReader('찾는 값', '회사명') -> 저 함수에 사이트명을 넣으면 자동적으로 그 사이트 종목명의 정보에 접근하도록 #프로그래밍 된 것같다.

#005930은 위의 code table을 통해 안 삼성전자의 종목코드이다

 

#삼성전자 각 장날의 시작가, 최고가, 최저가, 종가, 시가총액의 정보가 담겨있는 것을 볼 수 있다.

 

# 알고리즘 :  code table에서 찾고자 하는 기업의 종목코드 값을 위 pandas_reader.DataReader에 입력 -> 그 기업의 날 짜별 종가를 꺾은선 그래프로 시각화!

 

# 이를 자동화 할 함수를 만들자!

 

 

#우선 code table 가공 ->회사명, 종목코드 외의 정보 날리기!

 

code_result = code[['회사명', '종목코드']].rename(columns={'회사명' : 'corpName','종목코드' : 'code'} )
code_result

 

깰끔

def loadCode(x):                                                         #loadCode('기업명') -> 종목코드 찾는 함수
    corp_name = x
    condition = "corpName == '{}'".format(corp_name)

                                                                               #.format() 문자열의 함수!! 함수내의 것을 {}안에 넣어줌!
    
    corp = code_result.query(condition)                          #query(u) : pandas의 함수!! u에 부합하는 데이터 추출!

                                                                                  ex ) 삼성전자 / 5930
    
    corp = corp['code'].to_string(index = False).strip().rjust(6, '0')   

                                                                                 #to_string() : type을 String으로 변환 ex) ' 5930' (str)

                                                                                 #strip()  : 빈칸 제거                         ex) '5930'

                                                                                 #rjust(문자열 length, '채울것') : 문자열 길이만큼 늘리                                                                                       고 앞에 것을 0으로 채울것!

                                                                                                                                   ex) '005930'
    print(x + ' code : '+ corp)
    return corp

 

 

#이젠 가격관련 table과 종목코드 연결하는 함수! (웹데이터의 foreign key는 종목코드)

 

def stockInfo (x):
    stock_df = web.DataReader(loadCode(x), 'naver')
    return stock_df

 

#마지막으로 날짜별 종가데이터만 plot으로 시각화 하는 함수!

 

 

def stock_close_graph(x):
    plot = stockInfo(x)['Close'].astype(int).plot()         #String 값의 값들을 int로 변환! 
    return plot

 

 

# 이제 한번 찍어보자!

 

stock_close_graph('카카오')
stock_close_graph('LG')

 

#matplotlib으로 그래프를 찍었다면 legends로 어떤 선이 어떤 기업인지 나타낼수 있었으나 

파이썬 자체 함수이므로.... 

 

#다음장에서는 위 함수들을 다듬어보고 각 주식들의 연관성을 알아보자!