본문 바로가기
무모한 도전-주식 인공지능 만들기

RLTrader에서 주식 데이터 전처리 모듈 만들기

by 인터넷떠돌이 2018. 10. 29.
반응형

안녕하세요?


이번 포스팅에서는 인공지능 주식투자를 위해서, 이전 포스팅에서 가져왔던 주식데이터를 어떻게 RLTrader에서 가져와서 전처리 과정이라고 하는 것을 거쳐야 하는데, 그 전처리 과정을 담당하는 모듈을 만드는 것을 이번 포스팅에서 다루고자 합니다.



먼저 PyCharm에서 rltrader폴더를 선택한 다음 우클릭을 해서 Python File을 선택해서 생성하도록 합니다.



새 모듈의 이름은 data_manager.py로 지었습니다.



여기서 pd.read_csv()함수에서 중간에 thousands=','라는 부분은 천단위로 콤마(,)가 붙는 값을 숫자로 인식하라는 명령입니다. 그리고 이어서 뒤에 오는 header는 csv파일에 헤더가 없다는 의미로, 만약 csv파일을 만들면서 헤더값을 주었으면, 이렇게 header=None이라는 파라미터를 설정할 필요는 없습니다.




이렇게 차트 데이터를 그냥 쓰지 않고 전처리 과정을 거치는 이유는 현재의 주가와 과거의 주가가 크게 차이가 나기 때문에 그냥 그대로 학습에 사용할 수는 없기 때문에, 다양한 값, 현재 종가과 전일 종가의 비율, 이동평균 증가의 비율 등을 계산해야 하기 때문입니다.



위 스크린샷에서 나오는 13번 줄에서 windows = []안에 들어가 있는 값들은 이동평균 윈도우의 5, 10, 20, 60, 120 으로 설정하는 것을 의미합니다. 그리고 이 값은 float형식이기 때문에 소숫점이 가능합니다.



다음 윈도우는 전처리된 데이터로 학습 데이터를 만드는 build_training_data()라는 함수의 초반부를 보여주는 중인데, 먼저 22번 줄에서 나오는 prep_data라는 값은 전처리가 된 데이터이며, 24~27번째 줄은 시가/전일 종가 비율(open_lastclose_ratio)를 구합니다.


그리고 위 파이썬의 코드를 보면 \ 이 있는 것을 볼 수 있는데, 이 백 슬래쉬는 너무 파이썬에서 문장이 길면 눈으로 보는데 별로 좋지 않기 때문에, 이 기호를 써서 아랫쪽 줄에 있는 내용이 이어져서 나온다는 것을 나타내는 문자 부호라고 보시면 됩니다.


그리고 다음으로 언급하고 넘어가야 하는 것이 바로 iloc[]라는 것인데, 순서를 나타내는 정수 기반의 2차원 배열을 인덱싱해서 찾는 함수인데, 일단 파이썬에서 DataFrame변수를 가지고서 이런 식으로 열의 내용을 기본적으로 가지고 올 수 있습니다.


DataFrame변수["열(column)이름"]


그런데 행을 가지고 오기 위해서는 .loc[]와 .iloc[]를 사용할 수 있는데, 일단 행은 0번 부터 시작을 하는 것임에 유의를 해야 합니다. 그래서 DataFrame변수.iloc[3] 이라고 입력을 하면, 0번째 부터 행부터 계산을 해서 3번째 행을 가지고 오라는 것을 의미합니다.


그런데 헷갈릴 수 있는 것이 DataFrame변수.iloc[:3]이라고 하면, 3번째 행까지 라는 의미가 아니라, 0번째 행부터 3을 세어서 0번째 행, 1번째 행, 2번째 행 이렇게 처음부터 3개의 행을 가지고 오라는 의미가 됩니다. 그리고 .iloc[-5:]라고 하면, 마지막 행부터 뒤에서 5개의 행을 세어서 가지고 오라는 의미가 됩니다.


그리고 거래량/전일 거래량 비율을 계산에서 첫번째 데이터는 거래량의 값이 0이기 때문에 그냥 계산을 해서는 안되고, 만일 0이라는 값이 나오면 Pandas의 replace()함수를 이용해서 특정 값을 이전의 값이나 이후의 값으로 대체해서 계산을 하는 것을 볼 수 있습니다.



이어서 build_training_data()함수의 나머지 부분입니다. 여기서는 % 산술 연산자는 나머지를 구하라는 것인데, 이 연산자까지 사용해서 이동평균 종가 비율과 이동평균 거래량 비율을 구하는 코드입니다. 이렇게 하는 것으로 어떻게 학습할 데이터를 전처리 해서 가지고 오는 모듈까지 만드는 데 성공했습니다.

반응형