트랜드 분석 - 시퀀스-일일 단순 등락 레이블링
데이터의 구간을 시간단위로 나누어서 레이블링 해야할 경우가 있다.(ex. 캔들차트 분석) seq_len의 길이로 묶어진 데이터는 하나의 데이터처럼 취급되며 연속된 두 레이블링된 데이터는 공통된 데이터를 가지게 된다.
(원래데이터의 길이 - seq_len + 1) 의 길이를 가진 레이블링된 데이터가 생성된다.
만들어진 데이터셋을 어떻게 레이블링 할 것인지는 정하기 나름인데, 이 예제에서는 각 시퀀스의 바로 다음 하루가 마지막날대비 상승했는지, 하락했는지에 따라서 1 또는 0으로 레이블링 하였다.
def seqEnd_trend(fname, seq_len):
print("Creating label . . .")
print("type : sequence_end")
df = pd.read_csv(fname, parse_dates=True, index_col=0)
df.fillna(0)
df.reset_index(inplace=True)
outputname = "{}_label_{}.txt".format(fname[0:-4], seq_len) # ticker 명과 sequence 길이를 파일이름에 포함
removeOutput(outputname)
df['Date'] = df['Date'].map(mdates.date2num) # Y-M-D 포멧에서 num 포멧으로 변경
for i in range(0, len(df)-int(seq_len)):
tmp_df = df.iloc[i:i + int(seq_len)] # seq_len 만큼 데이터프레임 슬라이싱
starting = 0
endvalue = 0
label = ""
starting = tmp_df["Open"].iloc[-2] # seq 마지막날의 전날 종가
endvalue = tmp_df["Close"].iloc[-1] # seq 마지막날 종가
tmp_rtn = endvalue / starting - 1
if tmp_rtn > 0:
label = 1
else:
label = 0
with open(outputname, 'a') as the_file:
the_file.write("{}--{},{}".format(outputname, i, label))
the_file.write("\n")
print("Create label finished.")