SPSS Modeler에서 열 이름을 정규식으로 변경

Modeler에서 많은 열 이름과 비슷한 변환을 원할 수 있습니다.
그런 경우에는 Modeler 스크립트에서 정규 표현식을 사용하면 쉽게 할 수 있습니다.

예를 들면 다음과 같이 집계를 한 후의 「_Sum」의 문자를 일괄로 없애고 싶습니다.


도구 스트림 속성 - 실행에서 스크립트 편집기를 엽니 다.


스크립트가 'Python'으로 설정되어 있는지 확인하고 다음 Python 코드를 붙여 넣습니다.

import modeler.api
import re
stream = modeler.script.stream()
#フィルターをつなげたいノード名を指定します。。例はレコード集計
startnode   = stream.findByType(None, u"レコード集計")
filternode  = stream.createAt("filter",u"列名変更", startnode.getXPosition() + 120, startnode.getYPosition())
stream.link(startnode, filternode)

for c in filternode.getOutputDataModel().columnIterator():
    originalName = c.getColumnName()
    #置き換えたい文字列を指定。例は_sum
    p = re.compile('_Sum')
   #置換後の文字列を指定。例は''なので消去を意味します
    changedName = p.sub('',originalName)
    filternode.setKeyedPropertyValue("new_name", originalName, changedName)

붙여넣으면 "이 스크립트 실행"버튼을 눌러 실행해 봅시다.



열 이름 변경이라는 필터 노드가 추가되었습니다.
속성을 보면 "_sum"문자열이 제거되었습니다.
미리보기 버튼을 클릭하여 미리보기를 확인해 봅시다.


모든 열 이름에서 "_Sum"문자열이 제거되었습니다.


조금 프로그램을 살펴 보겠습니다.
다음 줄에서 필터 노드를 연결할 노드를 지정합니다. 「_Sum」은 「레코드 집계」노드의 처리 후에 부가되므로, 「레코드 집계」노드의 뒤에 붙이고 있습니다.
startnode   = stream.findByType(None, u"レコード集計")

다음 부분에서 문자열을 대체하고 있습니다.
p = re.compile('_Sum')의 '_Sum'이 대체 대상 문자입니다.
changedName = p.sub('',originalName)의 ''가 대체 후 문자입니다. 이것은 빈 문자이므로 결과적으로 문자를 지우는 의미입니다.
    #置き換えたい文字列を指定。例は_sum
    p = re.compile('_Sum')
   #置換後の文字列を指定。例は''なので消去を意味します
    changedName = p.sub('',originalName)



정규 표현을 사용할 수 있으므로 다양한 변환을 할 수 있습니다.
예를 들면
p = re.compile('_.+')
그렇다면 '_Sum'도 '_Mean'도 '_Sdev'도 모두 변환 대상으로 할 수 있습니다.

다음 기사 등을 참고하십시오.
정규식 HOWTO
htps : // / cs. py 응. rg/그럼/2.7/호 w와/레게 x. html # 세아 rch-an d-re p pse

샘플 Stream 파일은 다음과 같습니다.
https://github.com/hkwd/spsssample/raw/master/200410%E5%88%97%E5%90%8D%E5%A4%89%E6%9B%B4modeler%E3%82%B9%E3% 82%AF%E3%83%AA%E3%83%97%E3%83%88/200410%E5%88%97%E5%90%8D%E5%A4%89%E6%9B%B4modeler%E3% 82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88.str

테스트 환경



SPSS Modeler 18.2.1
Windows 10

좋은 웹페이지 즐겨찾기