주식투자를 위해 '파이썬 증권데이터 분석' 책을 보고 공부하기 시작했다. 내 손으로 직접 나에게 맞는 주식 투자 방법을 개발하는 날을 위해 공부를 할 예정이다. 그중 파이썬 팬더스를 이용해 상장법인 목록을 가져오는 방법을 작성해보겠다.
팬더스(Pandas)란?
파이썬의 데이터분석 라이브러리로 구조화된 데이터를 쉽고 빠르게 가공할 수 있는 자료형과 함수를 제공한다.
팬더스는 R에서 사용되던 data.frame 구조를 본뜬 DataFrame이라는 구조를 사용하기 때문에, R의 data.frame에서 사용하던 기능 상당수를 무리없이 사용할 수 있도록 만들었다.(시리즈, 데이터프레임 자료형 객체 등)
또한 파이썬 기반 데이터 시각화 라이브러리인 파이플롯과도 쉽게 호환되기 때문에 데이터 과학용 기본 라이브러리로도 널리 활용된다.
한국거래소 기업공시채널에서 상장법인목록 가져오기
먼저 한국거래소 기업공시채널(https://kind.krx.co.kr/)에 접속한다.
상장법인상세정보-상장법인목록
EXCEL 버튼을 눌러 상장법인 목록을 받아온다.
메모장으로 해당 파일을 열어보면 html로 되어있는 것을 확인할 수 있다.
파이썬으로 상장법인목록 가져오기
팬더스의 read_html() 함수로 상장법인 목록을 읽는다.
import pandas as pd
krx_list = pd.read_html('C:/Users/User/Downloads/상장법인목록.xls')
krx_list[0]
회사명 종목코드 ... 홈페이지 지역
0 길교이앤씨 456700 ... 길교.com 경상북도
1 버넥트 438700 ... http://www.virnect.com 서울특별시
2 뷰티스킨 406820 ... http://beautyskincorp.co.kr/ 인천광역시
3 SK증권제9호스팩 455910 ... NaN 서울특별시
4 와이랩 432430 ... http://ylabcomics.com 서울특별시
... ... ... ... ... ...
2639 유한양행 100 ... http://www.yuhan.co.kr 서울특별시
2640 CJ대한통운 120 ... http://www.cjlogistics.com 서울특별시
2641 경방 50 ... http://www.kyungbang.co.kr 서울특별시
2642 유수홀딩스 700 ... http://www.eusu-holdings.com 서울특별시
2643 한진중공업홀딩스 3480 ... http://www.hhic-holdings.com 경기도
[2644 rows x 9 columns]
만약 html5lib이나 lxml 라이버리를 추가로 설치하라는 에러가 발생한다면
터미널에서 pip install html5lib 또는 pip install lxml 으로 해당 라이브러리를 설치한다.
종목코드에서 앞의 0은 생략되어 불러오는 것을 볼 수 있다.
krx_list[0].종목코드 = krx_list[0].종목코드.map('{:06d}'.format)
krx_list[0]
회사명 종목코드 ... 홈페이지 지역
0 길교이앤씨 456700 ... 길교.com 경상북도
1 버넥트 438700 ... http://www.virnect.com 서울특별시
2 뷰티스킨 406820 ... http://beautyskincorp.co.kr/ 인천광역시
3 SK증권제9호스팩 455910 ... NaN 서울특별시
4 와이랩 432430 ... http://ylabcomics.com 서울특별시
... ... ... ... ... ...
2639 유한양행 000100 ... http://www.yuhan.co.kr 서울특별시
2640 CJ대한통운 000120 ... http://www.cjlogistics.com 서울특별시
2641 경방 000050 ... http://www.kyungbang.co.kr 서울특별시
2642 유수홀딩스 000700 ... http://www.eusu-holdings.com 서울특별시
2643 한진중공업홀딩스 003480 ... http://www.hhic-holdings.com 경기도
[2644 rows x 9 columns]
map 함수를 이용해 각 list요소의 종목코드를 6자리 정수형태로 변형해주면서 앞의 공백은 0으로 채울 수 있도록 한다.
URL을 이용해 상장법인목록 불러오기
df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
df.종목코드 = df.종목코드.map('{:06d}'.format)
df
회사명 종목코드 ... 홈페이지 지역
0 AJ네트웍스 095570 ... http://www.ajnet.co.kr 서울특별시
1 BNK금융지주 138930 ... http://www.bnkfg.com 부산광역시
2 DSR 155660 ... http://www.dsr.com 부산광역시
3 GS 078930 ... NaN 서울특별시
4 HDC현대산업개발 294870 ... http://www.hdc-dvp.com 서울특별시
... ... ... ... ... ...
2639 카이바이오텍 446600 ... http://www.kaibiotech.com/ 전라북도
2640 코스텍시스템 169670 ... http://www.kosteks.com/ 경기도
2641 타임기술 318660 ... http://timett.co.kr 경상남도
2642 테크엔 308700 ... http://www.techen.co.kr 대구광역시
2643 한국미라클피플사 331660 ... http://www.kmpc.co.kr 경기도
[2644 rows x 9 columns]
read_html의 인수로 URL을 주고, read_html()함수 뒤에 [0]을 붙여 결과값을 데이터프레임으로 받았다.
만약 종목코드의 오름차순으로 정렬하고 싶다면
df = df.sort_values(by='종목코드')
df
회사명 종목코드 ... 홈페이지 지역
1056 동화약품 000020 ... http://www.dong-wha.co.kr 서울특별시
1986 KR모터스 000040 ... http://www.krmotors.com 경상남도
1684 경방 000050 ... http://www.kyungbang.co.kr 서울특별시
50 삼양홀딩스 000070 ... http://www.samyang.com 서울특별시
443 하이트진로 000080 ... http://www.hitejinro.com 서울특별시
... ... ... ... ... ...
1767 JTC 950170 ... http://www.groupjtc.com/korean/ 일본
2119 미투젠 950190 ... http://www.me2zen.com 홍콩
2140 소마젠 950200 ... http://psomagen.com 미국
2060 프레스티지바이오파마 950210 ... http://www.prestigebiopharma.com 싱가포르
486 네오이뮨텍 950220 ... http://neoimmunetech.co.kr 미국
[2644 rows x 9 columns]
sort_values()함수로 종목코드의 오름차순으로 정렬했다. 내림차순으로 정렬하고 시다면 ascending=False 인수를 추가해준다.
참고문헌
파이썬 증권데이터 분석 - 김황후 지음
'Python' 카테고리의 다른 글
[파이썬/Python] 삼성전자 캔들차트 그리기 (0) | 2023.07.26 |
---|
댓글