Metadados: Informações sobre os dados
Como os nós são conectados em um fluxo, as informações sobre as colunas ou os campos disponíveis em cada nó estão disponíveis. Por exemplo, na interface do usuário SPSS Modeler, isso permite selecionar por quais campos classificar ou agregar. Essas informações são chamadas de modelo de dados.
Os scripts também podem acessar o modelo de dados observando os campos que entram ou saem de um nó. Para alguns nós, os modelos de dados de entrada e saída são os mesmos (por exemplo, um nó Sort simplesmente reordena os registros, mas não altera o modelo de dados). Alguns, como o nó Derive, podem adicionar novos campos. Outros, como o nó Filter, podem renomear ou remover campos.
No exemplo a seguir, o script usa um fluxo padrão IBM® SPSS® Modeler druglearn.str e, para cada campo, constrói um modelo com um dos campos de entrada descartados. Isso é feito por meio de:
- Acessar o modelo de dados de saída do nó Type.
- Percorrer cada campo no modelo de dados de saída.
- Modificar o nó Filter para cada campo de entrada.
- Alterar o nome do modelo que está sendo construído.
- Execução do nó de construção do modelo.
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([])
O objeto DataModel fornece vários métodos para acessar informações sobre os campos ou colunas no modelo de dados. Esses métodos estão resumidos na tabela a seguir.
| Método | Tipo de retorno | Descrição |
|---|---|---|
d.getColumnCount() |
int | Retorna o número de colunas no modelo de dados. |
d.columnIterator() |
Iterador | Retorna um iterador que retorna cada coluna na ordem "natural" de inserção. O iterador retorna instâncias de Column. |
d.nameIterator() |
Iterador | Retorna um iterador que retorna o nome de cada coluna na ordem "natural" de inserção. |
d.contains(name) |
Booleano | Retorna True se existir uma coluna com o nome fornecido neste DataModel, False caso contrário. |
d.getColumn(name) |
Coluna | Retorna a coluna com o nome especificado. |
d.getColumnGroup(name) |
ColumnGroup | Retorna o grupo de colunas nomeado ou None se esse grupo de colunas não existir. |
d.getColumnGroupCount() |
int | Retorna o número de grupos de colunas nesse modelo de dados. |
d.columnGroupIterator() |
Iterador | Retorna um iterador que retorna cada grupo de colunas por vez. |
d.toArray() |
Coluna [] | Retorna o modelo de dados como uma matriz de colunas. As colunas são ordenadas em sua ordem "natural" de inserção. |
Cada campo (objetoColumn ) inclui vários métodos para acessar informações sobre a coluna. A tabela a seguir mostra uma seleção destes.
| Método | Tipo de retorno | Descrição |
|---|---|---|
c.getColumnName() |
sequência | Retorna o nome da coluna. |
c.getColumnLabel() |
sequência | Retorna o rótulo da coluna ou uma cadeia de caracteres vazia se não houver rótulo associado à coluna. |
c.getMeasureType() |
MeasureType | Retorna o tipo de medida para a coluna. |
c.getStorageType() |
StorageType | Retorna o tipo de armazenamento da coluna. |
c.isMeasureDiscrete() |
Booleano | Retorna True se a coluna for discreta. As colunas que são um conjunto ou um sinalizador são consideradas discretas. |
c.isModelOutputColumn() |
Booleano | Retorna True se a coluna for uma coluna de saída do modelo. |
c.isStorageDatetime() |
Booleano | Retorna True se o armazenamento da coluna for um valor de hora, data ou registro de data e hora. |
c.isStorageNumeric() |
Booleano | Retorna True se o armazenamento da coluna for um número inteiro ou real. |
c.isValidValue(value) |
Booleano | Retorna True se o valor especificado for válido para esse armazenamento e valid quando os valores válidos da coluna forem conhecidos. |
c.getModelingRole() |
ModelingRole | Retorna a função de modelagem da coluna. |
c.getSetValues() |
Objeto [] | Retorna uma matriz de valores válidos para a coluna ou None se os valores não forem conhecidos ou se a coluna não for um conjunto. |
c.getValueLabel(value) |
sequência | Retorna o rótulo do valor na coluna ou uma cadeia de caracteres vazia se não houver rótulo associado ao valor. |
c.getFalseFlag() |
Objeto | Retorna o valor do indicador "false" da coluna ou None se o valor não for conhecido ou se a coluna não for um sinalizador. |
c.getTrueFlag() |
Objeto | Retorna o valor "verdadeiro" do indicador da coluna ou None se o valor não for conhecido ou se a coluna não for um sinalizador. |
c.getLowerBound() |
Objeto | Retorna o valor do limite inferior para os valores na coluna ou None se o valor não for conhecido ou se a coluna não for contínua. |
c.getUpperBound() |
Objeto | Retorna o valor do limite superior para os valores na coluna ou None se o valor não for conhecido ou se a coluna não for contínua. |
Observe que a maioria dos métodos que acessam informações sobre uma coluna tem métodos equivalentes definidos no próprio objeto DataModel . Por exemplo, as duas declarações a seguir são equivalentes:
dataModel.getColumn("someName").getModelingRole()
dataModel.getModelingRole("someName")