저번 포스팅에 이어서 전처리를 마무리해보도록 하겠다.

코딩 전 엑셀로 정리를 해준 부분은 다음과 같다 


null 값이 들어있는 행을 모두 삭제하며, 그 전 보조지표로 추가했던 sma120을 삭제한다.

null값을 삭제하는 이유는 해당 데이터들이 있으면 제대로된 학습이 되지 않기 때문이며, sma120을 삭제하는 이유는 해당 지표를 변수로 쓰려면 

처음 119개 행들이 null값으로 출력되기 때문에 지나치게 데이터의 갯수가 줄어들기 때문이다. 


따라서 아래와 같이 정리해주게 된다.


정리를 해준 후, 각 행별로 타겟을 추가해주기 위한 코딩을 진행해준다. 

여기서 타겟은 해당 칼럼 기준으로 6, 12, 18, 24시간 뒤 가격을 타겟으로 쓰기 위해 해당 행에 맞게 칼럼을 추가해준다.

이해가 가지 않는다면 아래 그림을 보면 된다.


즉 우리는 low ~ signal까지의 칼럼으로 target 6, 12, 18, 24 칼럼을 예측하는 모델을 만드려 하는 것이다.


해당 과정을 진행하는 코드는 아래와 같다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import csv
 
#하루 4개씩 있어야됨, 6시간봉
= open("./중복제거최종데이터_전처리전.csv"'r', newline='')
rdr = csv.reader(f)
= open("./타겟추가데이터2_새로운방식.csv"'w', newline='')
wr = csv.writer(o)
wr.writerow(['time','low''high','open','close','volume','sma5','sma20''sma120''ema12','ema26','dn','mavg','up','pctB','rsi14','macd','signal','target_after6','target_after12','target_after18','target_after24']) # 필터 자리 놔둠
 
queue = []
for j,i in enumerate(rdr): #i는 행 값 (날짜부터 지표 다 포함)
    if(j!=0): #label 제외하고 읽어옴.
        queue.append(i) 
        if(j>4): #
            data = queue.pop(0# 1차원배열 
            data.append(queue[0][4])  # append 해서 옆쪽으로 붙인다 
            data.append(queue[1][4]) #4는 close 자리 
            data.append(queue[2][4]) 
            data.append(queue[3][4])
            wr.writerow(data)
 
 
f.close()
o.close()
cs


if문 안쪽 4번 칼럼은 close자리이고,  data.append(queue[0][4]) ~  data.append(queue[3][4]) 는 6시간~24시간을 뜻히는 것을 알 수 있다.

코드에서 볼 수 있는 것처럼 사이즈 4의 큐를 이용하여, 큐의 특성인 FIFO를 이용하여 순서에 맞게 종가를 새 칼럼으로 append 하였다. 




+ Recent posts