KNIME

[KNIME] String to Date&Time 노드 실습(format 설정)

슈퍼짱짱 2024. 8. 27. 17:37
반응형

KNIME에서 string type으로 불러와진 시간에 관련된 컬럼을 Date Time type으로 변경하는 실습을 해보도록 하겠다.

시간에 관련된 컬럼을 String 타입 그대로 사용하는게 아니라 Date(or Date Time) 타입으로 바꿔주는 이유는 시간에 관련된 처리를 하기 위함이다.

 

예를 들어 특정 시간을 기준으로 직전까지와 이후 시간으로 데이터를 나누고 싶거나,  얼마의 시간을 더하거나 빼거나 등 시간에 대한 처리를 하기 위해 Date 타입으로 바꿔주어야 한다.

 


 

실습에 사용할 데이터는 다음과 같다.

 

datetime2.xlsx
0.23MB

 

 

11,210건의 행과 4개의 열을 가지고 있다.

 

datetime2

 

xlsx 파일이므로 Excel Reader 노드로 읽어오면되고 해당 노드에 대한 설명은 이전 포스팅

(2024.08.27 - [KNIME] - [KNIME] 엑셀(xlsx) 파일 읽기)

에 자세히 설명되어있다.

 

date와 timestamp 컬럼은 자동으로 Date, Date Time type으로 불러와졌으나, time1과 time2 컬럼은 String type으로 불러와졌다.

 

 

(KNIME에서 데이터를 불러올때 시간으로 인식되는 컬럼은 자체적으로 시간 타입으로 불러오나, 인식이 어려운 애들은 그냥 String으로 불러와지는 듯 하며, 그 기준은 모르겠다.)

 

date는 날짜만 있기때문에 Date type이며, timestamp는 날짜와 시간이 같이있기때문에 Date Time type으로 인식되었다.

timestamp컬럼에 T라는 문자는 날짜와 시간을 구분해주는 문자이며, KNIME에는 Date Time에 대해 기본적으로 날짜T시간 형태를 가지는 듯 하다.

 

이제

1. date와 time1 컬럼을 합치고 Date Time type으로 바꿔서 timestamp 컬럼과 동일하게 바꿔주는 실습을 해보고

2. date와 time2 컬럼을 합치고 Date Time type으로 바꿔서 timestamp 컬럼과 동일하게 바꿔주는 실습을 해보겠다.

 


 

먼저 date컬럼과 time1 컬럼을 합친다.

"2019-01-01" 과 "오전 7시 30분 0초"를 합치되 사이에 띄어쓰기를 해서 "2019-01-01 오전 7시 30분 0초"의 형태로 합쳐준다.

이는 String Manipulation 노드를 활용한다.

 

String Manipulation 노드

 

 

옵션창으로 들어가서 두 컬럼을 합치는 행위를 해야함으로 Function에서 join() 을 찾아 더블클릭해준다.

또는 Expression에 직접 join()이라고 쳐도 된다.

(오른쪽에 Description을 보면 해당 function을 어떻게 사용하면 되는지에 대한 예시도 확인해 볼 수 있다.)

 

 

date와 time1 컬럼을 합쳐줄것이므로 Expression에 다음과 같이 쳐준다.

 

join($date$," ",$time1$)

 

 

 

date와 time1은 왼쪽 Column List에서 더블클릭해줘도 된다.

두 컬럼을 합치되, 사이에 띄어쓰기를 붙여주어야 하므로 " " 를 추가해준다.

모든 구분은 콤마(,) 로 한다.

 

date 및 time1에 $ 표시는 컬럼명이라는 뜻으로 KNIME에서 기본적으로 사용하는 문법인 듯 하다. 

나중에 다뤄볼 Flow Variable을 사용하면 앞 뒤에 $표시가 두개씩 붙는다. 

 

Expression 아래 Append Column은 새로운 컬럼을 생성하겠다는 뜻이고 Replace Column은 기존에 있는 컬럼을 대체하겠다는 뜻이다.

default 값 그대로 new column이라는 이름의 새로운 컬럼을 생성해보겠다.

 

 

 

맨 오른쪽에 new column이라는 이름으로 새로운 컬럼이 생성되었으며, date컬럼과 time1 컬럼을 합치되 가운데 띄어쓰기가 추가되었다.

 


 

이제 생성한 new column의 타입을 Date Time type으로 변환해주겠다.

String to Date&Time 노드를 사용한다.

 

String to Date&Time 노드

 

옵션창으로 들어가서 대상인 new column만 Include에 남겨준다.

 

 

Type and Format Selection에서 

New type은 바꿀 컬럼이 날짜만 있냐(Date), 시간만 있냐(Time), 날짜와 시간이 같이있냐(Date&time)에 대한 옵션이다.

new column은 날짜와 시간이 둘 다 있으므로 Date&time으로 설정해준다.

 

New type

 

Locale은 언어와 지역에 대한 설정이다.

기본적으로 언어-지역 으로 설정한다.

 

언어를 설정하는 이유는 예로 오전/오후와 같이 한국어가 있으면 한국어(ko)로, AM/PM과 같이 영어가 있으면 영어(en)로 설정해주기 위함이고

 

지역을 설정하는 이유는 예로 미국과 유럽 국가의 경우 날짜를 표기하는 순서가 다르기 때문이다.

영어권은 일, 월, 년 순인데 유럽은 월, 일, 년 순서라 날짜 표기 순서를 알려주기 위함이다.

 

Locale

 

new column은 오전/오후 라는 단어가 있으므로 ko-로 시작하는 옵션을 설정해주면 되고 따로 특이사항이 없기때문에 default값인 ko-KR 그대로 설정해준다.

 

Date format은 날짜 및 시간을 표현하는 규칙이다. 각자의 데이터에 맞는 format을 설정해주어야 하는데 

new column의 첫 번째 값을 보면 "2019-01-01 오전 7시 30분 0초"로 되어있다.

즉, 날짜는 년도를 네글자로 표현하고 있고 월과 일을 두글자씩 표현하고있으며 -로 년월일을 연결하고있다.

이를 먼저 format으로 표현하면 yyyy-MM-dd이다. 

 

년도는 year이므로 y로 표현한다.

은 month이므로 m으로 표현하는데, 분을 표현하는 minute과 m이 겹치므로 대문자 M을 사용한다.

그리고 은 day의 d를 사용한다.

연도가 네글자이므로 y를 네개쓰고, 월과 일은 두글자이므로 각각 두개씩 쓴다.

가운데 연결해주는 - 까지 똑같이 따라쓰면된다.

 

그리고 뒤에 시간은 a h시 m분 s초 라 표현한다.

오전, 오후나 AM, PMa로 표현한다.

시간은 h로 표현하는데 오전, 오후를 구분하는 12시간제는 소문자 h로 표현하고 오전, 오후 구분 없이 24시간제는 대분자 H로 구분한다.

minute로 m으로 표현하고

는 second로 s로 표현한다.

마찬가지로 띄어쓰기와 사이사이 말도 그대로 써준다.

 

시간과 초는 한글자로 되어있어서 h와 s도 한글자로 표현하는데 분은 30이라는 두글자지만 한글자만 표현했다.

그 이유는 아래와 같이 30분이 아닌 한 글자로 표현할 수 있는 분은 한 글자로 표현된다.

 

즉, 00분이 아니라 0분이라고 표현된다.

30분이 두 글자인 이유는 두 글자여야만 하기 때문이다.

이런건 format에서 두 글자가 아니라 한 글자로 표현하면 된다.

 

 

 

최종, new column의 Date format은 yyyy-MM-dd a h시 m분 s초으로 표현하면 된다.

 

 

OK하고 실행하면

timestamp 컬럼과 동일해진 new column을 볼 수 있다.

 

 

 

Date format에 대한 자세한 설명 및 예시는 String to Date&Time 노드 설명에가면 볼 수 있다.

 

String to Date&Time 노드 누르고 맨 왼쪽 위에 누르면 노드 설명이 있다.

Options 누르고 세 번째 Type and Format Selection 누르면 foramt에 대한 자세한 설명을 볼 수 있다.

 

String to Date&Time 노드 설명

 

format 설명

 


 

date와 time2 컬럼을 합쳐서 Date Time type으로 변경하는것도 동일하게 해주면 된다.

String Manipulation 노드로 두 컬럼을 합쳐주고 String to Date&Time 노드로 타입을 변경한다.

 

String Manipulation 노드에서 join()으로 두 컬럼을 합쳐주고 

Append Column에 컬럼명을 new column2로 한다.

 

String Manipulation 노드

 

 

그럼 가장 오른쪽에 new column2 컬럼이 생성된다.

 

 

 

그리고 String to Date&Time 노드로 new column2의 타입을 바꿔준다.

이번에는 new column2가 대상이므로 new column2만 Include에 남겨주고

Date foramt을 yyyy-MM-dd hh:mm:ss a 로 설정해준다.

(이번에는 시간에 대해 7이 아니라 07로 정확히 두 글자로 생겼기때문에 h가 아니라 hh로 해준다.)

 

Locale에 AM/PM은 영어이므로 en- 으로 시작하는 옵션을 선택해준다.

지역은 특이사항이 없으므로 보통 US로 해준다. 

 

 

new column2 역시 timestamp와 동일한 타입으로 변경되었다.

 

반응형

'KNIME' 카테고리의 다른 글

[KNIME] Hyper parameter optimization  (1) 2024.09.02
[KNIME] Loop 실습(3)  (0) 2024.08.29
[KNIME] Loop 실습(2)  (0) 2024.08.29
[KNIME] Loop 실습(1)  (1) 2024.08.28
[KNIME] 엑셀(xlsx) 파일 읽기 :: Excel Reader  (0) 2024.08.27