KRX에서 개별종목의 티커 정보를 구성하기 위해서 아래 2가지 정보를 취합해 크롤링을 했다.
업종분류 현황
- http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020506
PER/PBR/배당수익률
- http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020502
DB에 저장 우선해서 PK 를 고려하지 않고 저장을 한 후에 인덱스를 주기위해서 테이블을 altering 하려는데 "2023-06-26" 일자에 중복된 데이터가 보였다.
-- 2601 건
SELECT COUNT(*) FROM tickers_kr WHERE 기준일 LIKE '2023-06-26%';
-- 2600건
SELECT COUNT(DISTINCT 종목코드) FROM tickers_kr WHERE 기준일 LIKE '2023-06-26%';
종목코드가 중복된 자료를 찾아 보았다.
SELECT 종목코드, COUNT(종목코드) FROM tickers_kr
WHERE 기준일 LIKE '2023-06-26%'
GROUP BY 종목코드
HAVING COUNT(종목코드) > 1;
해당일에 "락"이 걸린 종목이 있다. 종목명에 "락"을 붙여 락업 등의 표현을 하는데 DataFrame 으로 2개의 정보를 결합시 새 row 를 만들고 있고 있었다...
아직 완전히 데이터를 구축하는 단계는 아니라서 데이터가 그리 많지 않지만 전체 데이터에 대해서도 중복 처리를 해야 한다.
전체 데이터 중복 조사
SELECT MIN(기준일), MAX(기준일) FROM tickers_kr; -- 어느 범위 인지
/* 일자별로 중복된게 문제이므로 기준일을 중심으로 group */
-- 중복이 나타난다. 개수를 세어보자.
SELECT 기준일, 종목코드, COUNT(*) FROM tickers_kr
GROUP BY 기준일,종목코드
HAVING COUNT(*) > 1;
-- 그룹한 전체 개수는
-- 개수 합이 42개 -> 21개 종목이 중복...
select SUM(K.CNT)
FROM
( SELECT 기준일, 종목코드, COUNT(*) CNT FROM tickers_kr
GROUP BY 기준일,종목코드
HAVING COUNT(*) > 1) AS K;
21개 종목에서 2개씩 중복되어 있다. 해당 중복한 종목 데이터 목록를 출력해 보자.
SELECT T.기준일, T.종목코드, T.종목명
FROM tickers_kr T,
( SELECT 기준일, 종목코드, COUNT(*) FROM tickers_kr
GROUP BY 기준일,종목코드
HAVING COUNT(*) > 1) as K
WHERE T.`기준일` = K.기준일
AND T.`종목코드` = K.종목코드
ORDER BY 기준일, 종목코드;
검색한 종목의 패턴을 보니 "[락]" 또는 "(락)" 이 종목명에 포함되어 있다. 이 개수를 세고 중복한 목록의 개수와 비교한 후에 지워야 겠다.
-- '[락]' OR E '(락)' 을 찾아 보자.
-- 21개
select COUNT(*) from tickers_kr
WHERE 종목명 LIKE '%[락]' OR 종목명 LIKE '%(락)';
-- 종목명에 '[락]' OR E '(락)' 을 포함한 row 를 지우자...
SELECT * from tickers_kr
WHERE 종목명 LIKE '%[락]' OR 종목명 LIKE '%(락)';
delete from tickers_kr
WHERE 종목명 LIKE '%[락]' OR 종목명 LIKE '%(락)';
오늘의 배운점.
1. DB table 은 확실히 constraints 를 선언하자.
2. 중복 점검을 꼭 하자.
728x90
'Notes' 카테고리의 다른 글
2023-10-12 미국 장 마감 (0) | 2023.10.13 |
---|---|
공부 - 채권 장-단기 금리차 역전에 대해... (0) | 2023.10.06 |
ELS 지수별 낙인(Knock-In) 가능성 (0) | 2022.03.15 |
HTS 선물 현재가 화면 읽기 (0) | 2022.03.12 |
KOSPI200 선물스프레드 거래 (1) | 2022.03.08 |
댓글