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:

  1. Acessar o modelo de dados de saída do nó Type.
  2. Percorrer cada campo no modelo de dados de saída.
  3. Modificar o nó Filter para cada campo de entrada.
  4. Alterar o nome do modelo que está sendo construído.
  5. Execução do nó de construção do modelo.
Nota: antes de executar o script no fluxo druglean.str , lembre-se de configurar a linguagem de script para Python se o fluxo foi criado em uma versão antiga da área de trabalho do IBM SPSS Modeler e sua linguagem de script for configurada como Legado).
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.

Tabela 1. DataModel métodos de objeto para acessar informações sobre campos ou colunas
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.

Tabela 2. Métodos de objeto de coluna para acessar informações sobre a coluna
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")