메타데이터: 데이터에 관한 정보
노드는 흐름 속에서 서로 연결되어 있기 때문에, 각 노드에서 사용할 수 있는 열이나 필드에 대한 정보를 사용할 수 있습니다. 예를 들어, SPSS Modeler 의 사용자 인터페이스에서, 이 기능을 사용하면 정렬하거나 집계할 필드를 선택할 수 있습니다. 이 정보를 데이터 모델이라고 합니다.
스크립트는 노드에 들어오고 나가는 필드를 살펴봄으로써 데이터 모델에 접근할 수도 있습니다. 일부 노드의 경우, 입력 데이터 모델과 출력 데이터 모델이 동일합니다(예를 들어, 정렬 노드는 단순히 레코드의 순서를 바꾸지만 데이터 모델은 변경하지 않습니다). 파생 노드와 같은 일부 노드는 새로운 필드를 추가할 수 있습니다. 필터 노드와 같은 다른 노드는 필드의 이름을 바꾸거나 제거할 수 있습니다.
다음 예제에서 스크립트는 표준 IBM® SPSS® Modeler druglearn.str 플로우를 사용하며 각 필드에 대해 입력 필드 중 하나가 삭제된 모델을 빌드합니다. 이 작업을 수행하는 방법은 다음과 같습니다
- Type 노드에서 출력 데이터 모델에 액세스합니다.
- 출력 데이터 모델의 각 필드를 순회합니다.
- 각 입력 필드에 대한 필터 노드 수정.
- 구축 중인 모델의 이름 변경.
- 모델 빌드 노드를 실행합니다.
import modeler.api
stream = modeler.script.stream()
filternode = stream.findByType("filter", None)
typenode = stream.findByType("type", None)
c50node = stream.findByType("c50", None)
# Always use a custom model name
c50node.setPropertyValue("use_model_name", True)
lastRemoved = None
fields = typenode.getOutputDataModel()
for field in fields:
# If this is the target field then ignore it
if field.getModelingRole() == modeler.api.ModelingRole.OUT:
continue
# Re-enable the field that was most recently removed
if lastRemoved != None:
filternode.setKeyedPropertyValue("include", lastRemoved, True)
# Remove the field
lastRemoved = field.getColumnName()
filternode.setKeyedPropertyValue("include", lastRemoved, False)
# Set the name of the new model then run the build
c50node.setPropertyValue("model_name", "Exclude " + lastRemoved)
c50node.run([])
DataModel 객체는 데이터 모델 내의 필드 또는 컬럼에 대한 정보에 접근하기 위한 여러 가지 방법을 제공합니다. 이러한 방법들은 다음 표에 요약되어 있습니다.
| 방법 | 리턴 유형 | 설명 |
|---|---|---|
d.getColumnCount() |
int | 데이터 모델의 열 수를 반환합니다. |
d.columnIterator() |
반복자 | 자연스러운 삽입 순서로 각 열을 반환하는 반복자를 반환합니다. 반복자는 Column 의 인스턴스를 반환합니다. |
d.nameIterator() |
반복자 | 자연스러운 삽입 순서로 각 열의 이름을 반환하는 반복자를 반환합니다. |
d.contains(name) |
부울 | True 를 반환합니다. 이 DataModel, 에 제공된 이름의 열이 존재하는 경우 False 를 반환합니다. 그렇지 않으면 |
d.getColumn(name) |
컬럼 | 지정된 이름의 열을 반환합니다. |
d.getColumnGroup(name) |
ColumnGroup | 이름이 지정된 열 그룹 또는 열 그룹이 존재하지 않으면 열 그룹 없음( None )을 반환합니다. |
d.getColumnGroupCount() |
int | 이 데이터 모델의 열 그룹 수를 반환합니다. |
d.columnGroupIterator() |
반복자 | 각 열 그룹을 차례로 반환하는 반복자를 반환합니다. |
d.toArray() |
열 [] | 데이터 모델을 열의 배열로 반환합니다. 열은 "자연스러운" 삽입 순서에 따라 정렬됩니다. |
각 필드(Column 객체)에는 열에 대한 정보에 접근하기 위한 여러 가지 방법이 포함되어 있습니다. 다음 표는 이러한 항목의 선택사항을 표시합니다.
| 방법 | 리턴 유형 | 설명 |
|---|---|---|
c.getColumnName() |
문자열 | 열의 이름을 반환합니다. |
c.getColumnLabel() |
문자열 | 열에 라벨이 연결되어 있지 않으면 열의 라벨을 반환하거나 빈 문자열을 반환합니다. |
c.getMeasureType() |
MeasureType | 열의 측정 유형을 반환합니다. |
c.getStorageType() |
StorageType | 열의 저장 유형을 반환합니다. |
c.isMeasureDiscrete() |
부울 | True 를 반환합니다. 세트 또는 깃발로 표시된 열은 개별적인 것으로 간주됩니다. |
c.isModelOutputColumn() |
부울 | 열이 모델 출력 열인 경우 True 를 반환합니다. |
c.isStorageDatetime() |
부울 | True 를 반환합니다. 열의 저장소가 시간, 날짜 또는 타임스탬프 값인 경우. |
c.isStorageNumeric() |
부울 | True 를 반환합니다. 열의 저장소가 정수 또는 실수인 경우. |
c.isValidValue(value) |
부울 | 지정된 값이 이 저장소에 유효한 경우 True 를 반환하고, 유효한 열 값이 알려진 경우 valid 를 반환합니다. |
c.getModelingRole() |
ModelingRole | 열의 모델링 역할을 반환합니다. |
c.getSetValues() |
오브젝트 [] | 열에 대한 유효한 값의 배열을 반환하거나, 값이 알려지지 않았거나 열이 집합이 아닌 경우 None 를 반환합니다. |
c.getValueLabel(value) |
문자열 | 열에 있는 값의 라벨을 반환하거나, 값에 라벨이 연결되어 있지 않으면 빈 문자열을 반환합니다. |
c.getFalseFlag() |
오브젝트 | 열에 대한 "false" 표시기 값을 반환하거나, 값이 알려지지 않았거나 열이 플래그가 아닌 경우 " None "를 반환합니다. |
c.getTrueFlag() |
오브젝트 | 열에 대한 "true" 표시기 값을 반환하거나, 값이 알려지지 않았거나 열이 플래그가 아닌 경우 " None "를 반환합니다. |
c.getLowerBound() |
오브젝트 | 열에 있는 값의 하한값을 반환하거나, 값이 알려지지 않았거나 열이 연속적이지 않은 경우 None 를 반환합니다. |
c.getUpperBound() |
오브젝트 | 열에 있는 값의 상한값을 반환하거나, 값이 알려지지 않았거나 열이 연속적이지 않은 경우 None 를 반환합니다. |
열에 대한 정보에 접근하는 대부분의 방법에는 DataModel 객체 자체에 정의된 동등한 방법이 있다는 점에 유의하십시오. 예를 들어, 다음 두 문장은 같은 의미입니다
dataModel.getColumn("someName").getModelingRole()
dataModel.getModelingRole("someName")