본문 바로가기

MySQL13

국내 주식 주가 데이터 크롤링 주가 정보를 수집할 수 있는 방법은 매우 많습니다. 그러나 퀀트 투자를 위한 백테스트나 종목선정을 위해서는 '수정주가'가 필요합니다. 수정주가란 액면분할 전 주가와 이후의 주가가 연속적으로 보이게 수정된 주가입니다. 수정주가 정보를 구할 수 있는 곳 중 하나로 '네이버 증권'을 이용하겠습니다. [네이버 증권] -> [삼성전자 검색] -> [차트]에 들어가신 후, 개발자 도구 화면에서 네트워크를 키십니다. (링크) 그리고 차트에서 [일] 버튼을 클릭하면 주가 정보를 어떻게 얻는지를 개발자 도구 화면에서 알 수 있습니다. 여기서 맨 위에 'siseJson.naver? ~' 부분을 클리하시고 request url에서 수정주가 정보를 받아오는 것을 알 수 있습니다. 해당 url을 복사하여 브라우저 검색창에 입력.. 2023. 9. 11.
국내 주식 섹터 데이터 크롤링 FnGuide Index에서는 WICS 산업분류를 발표합니다. 해당 사이트에서 [WICS] -> [에너지]에 들어가시면 에너지 섹터에 대한 정보가 나옵니다. 여기서 [Components] 탭에 들어가시면 구성종목을 보실 수 있습니다. 이것을 크롤링 해보겠습니다. 우선 해당 페이지에서 개발자 도구 화면을 열고 네트워크를 눌러줍니다. 그리고 페이지에서 조회 날짜를 2023년 9월 5일로 찍어보면 개발자 도구화면에서 통신과정을 볼 수 있습니다. (조회 버튼을 누르는게 아니라 달력에서 해당 날짜를 클릭하세요) 통신과정에서 'GetIndexComponents~' 부분을 클릭 후, request url을 복사해주세요. 그리고 이것을 브라우저 주소창에 붙여넣고 엔터 눌러주세요. 그러면 아래의 이미지 처럼 섹터 정보가.. 2023. 9. 6.
국내 주식 티커 데이터 크롤링하기_2 - MySQL로 데이터 옮기기 먼저 mysql에 데이터를 옮겨둘 데이터베이스와 테이블을 만듭시다. create database stock_db; use stock_db; create table kor_ticker ( 종목코드 varchar(6) not null, 종목명 varchar(20), 시장구분 varchar(6), 종가 float, 시가총액 float, 기준일 date, EPS float, 선행EPS float, BPS float, 주당배당금 float, 종목구분 varchar(5), primary key(종목코드, 기준일) ); 이제 저번 포스트에서 만들었던 데이터를 파이썬을 통해 옮겨봅시다. #mysql로 데이터 옮기기 import pymysql con = pymysql.connect(user='root', passwd =.. 2023. 9. 6.
MySQL - 윈도우 함수 윈도우 함수 사용방법 [윈도우 함수] over ([partition by [열 리스트]] order by [정렬용 열 리스트]) 여기서 partition by는 생략 가능합니다 #윈도우 함수로 사용할 수 있는 함수 -윈도우 전용 함수 rank, dense_rank, row_number 등 rank: 같은 순위인 행이 여러개 있으면 후순위로 건너뜀 예) 1위가 3개인 경우: 1위, 1위, 1위, 4위, ··· dense_rank: 같은 순위인 행이 여러개 있어도 후순위를 건너뛰지 않음 예) 1위가 3개인 경우: 1위, 1위, 1위, 2위, ··· row_number: 순위와 상관없이 연속 번호를 부여 예) 1위가 3개인 경우: 1위, 2위, 3위, 4위, ··· 윈도우 전용 함수는 원칙적으로 select .. 2023. 8. 20.
MySQL - 테이블 결합, inner join, outer join 테이블 결합 작업에는 'join'이 사용됩니다. join의 종류를 다음과 같이 시각화할 수 있습니다. #inner join 두 테이블에서 공통되는 열을 기준으로 합칩니다. 사용 예시 select * from nameoftalbe_1 as t1 inner join nameoftable_2 as t2 on t1.col_1 = t2.col_1; → nameoftable_1 을 t1, nameoftable_2 을 t2로 가져옵니다. 두 테이블에서 t1의 col_1과 t2의 col_1을 기준으로 합칩니다. 그런데 만약 여기서 * 대신에 col_1을 쓰면 오류가 발생합니다. 두 테이블 모두다 col_1을 갖고 있기때문에 발생하는 오류입니다. 명시적으로 어디 테이블의 col_1인지 알려줘야합니다. 예를 들어 sele.. 2023. 7. 31.
MySQL - case #case case 식은 경우에 따라 값을 구분할 수 있습니다. 사용 방법 case when [조건식1] then [식1] when [조건식2] then [식2] when [조건식3] then [식3] ··· else [식n] end else는 위에서 만족하는 조건이 없을때의 반환값입니다. 생략할 수 있지만 명시적으로 작성하는것이 바람직합니다. 사용 예시 select col_1, col_2, case when col_2 >= 6000 then 'high' when col_2 >= 3000 and col_2 < 6000 then 'middle' when col_2 < 3000 then 'low' else null end as col2_classify from nameoftable; 2023. 7. 31.