DataScience/DataBase

CREATE TABLE, REPLACE INTO

mkk4726 2022. 4. 28. 10:00

파이썬 증권 데이터 분석 책을 참고하여 테이블을 만들고 데이터를 최신화하는 법에 대해 알아봤습니다.

 

 MariaDB를 사용하고 있고 MariaDB는 HeidiSQL을 통해 GUI로 접근할 수 있습니다.

 

그림1. 테이블 생성_HeidiSQL

먼저 HeidiSQL창에서 다음과 같인 테이블이 존재하지 않는다면 test란 테이블을 만들도록 작성했습니다. 

PRIMAY KEY (기본키)는 code(종목코드)로 설정했습니다. 

정확히는 USE FOR_TRAIN을 쓴 후에 생성해줘야하는데, 사용할 데이터베이스를 더블클릭하게 되면 진한 글씨체로 바뀌고, 그러면 쓰지않고 생성해줘도 됩니다.

그림2. 새로고침 후 확인

그 후 새로고침을 하면 오른쪽 화면과 같이 테이블이 생성되었음을 알 수 있습니다.

 

이와 같은 과정은 pymysql을 이용해서도 가능합니다.

그림3. 테이블 생성_ pymysql

pymysql의 connection객체를 생성 후에 cursor()객체를 생성해서 사용하는 방식입니다.

daily_price라는 테이블에는 주가정보를, company_info 테이블에는 회사정보를 담을 것입니다.

 

이렇게 생성한 테이블에 데이터를 추가합니다. 

테이블에 이미 해당 데이터가 존재하는 경우 에러가 발생할 수 있기에 INSERT INTO 구문대신 REPLACE INTO 구문을 사용합니다.

 

그림4. REPLACE INTO _ company_info

company_info에 데이터를 추가하는 코드입니다.

company_info 테이블에는 last_update라는 열이 존재하는데, 현재 날짜와 비교하여 오늘 날짜가 최신날짜가 아니라면 업데이트하는 방식입니다.

REPALCE INTO 구문은 REPLACE INTO table이름 ( column name) VALUES (값들) 와 같이 사용할 수 있습니다.

(값들)에  값이 들어갈 때는 f-string과 같은 방식으로 문자열로 변환 후 넣어줄 수 있습니다. 

그림5. pandas read_sql

그 후에는 pandas의 read_sql로 정보들을 dataframe으로 쉽게 읽어올 수 있습니다.

 

daily_price에 주가 정보를 추가해줄건데 그러기 위해서 네이버 금융에서 카카오 주가 정보를 수집해옵니다.

https://mkk4726.tistory.com/28

 

네이버 금융 web scraping

* 코드는 Jupyter Notebook에서 작성되었습니다. 다음과 같은 네이버 금융 홈페이지에서 날짜, 종가, 전일비, 시가,고가, 거래량 정보를 따오는 코드를 공유해보려한다. 네이버 금융 홈페이지에 카카

mkk4726.tistory.com

이렇게 뽑아온 데이터를 형식에 맞게 바꿔줍니다.

그림6. 카카오 주가 정보

이제 이 데이터를 daily_price에 추가해줍니다.

그림7. daily_price에 주가정보 추가

이렇게 추가한 정보를 앞서 설명한 read_sql로 쉽게 사용할 수 있습니다.

그림8. read_sql 결과 _ daily_price


이 책의 데이터베이스 부분의 컨셉은 회사정보와 주가정보를 매일 데이터베이스에 업데이트하고, 

그렇게 저장된 정보들을 가지고 데이터분석을 통해 퀀투투자 전략을 세우겠다는 것입니다.

 

이렇게 하기 위해서 이러한 코드들을 두 개의 class ( 업데이트하는 것, 조회하는 것)로 만들고

Run 레지스트리에 업데이트하는 class 등록해 컴퓨터가 켜질 때마다 실행될 수 있도록 설정합니다.

그리고 조회하는 class를 이용해 사용합니다.

 

잘 짜여진 코드를 따라 쳐보는 과정에서 정말 많은 것들을 배울 수 있는 것 같습니다.