spss.Dataset Python
spss.Dataset(name,hidden,cvtDates). Fornece a capacidade de criar novos conjuntos de dados, ler a partir de conjuntos de dados existentes e modificar conjuntos de dados existentes. Um objeto Dataset fornece acesso aos dados do caso e às informações de variável contidas em um conjunto de dados e permite ler a partir do conjunto de dados, incluir novos casos, modificar casos existentes, incluir novas variáveis e modificar propriedades de variáveis existentes.
Uma instância da classe Dataset pode ser criada apenas dentro de uma etapa de dados ou de um bloco StartProcedure-EndProcedure e não pode ser usada fora da etapa de dados ou do bloco de procedimento no qual ela foi criada As etapas de dados são iniciadas com a função spss.StartDataStep . Também é possível usar a classe spss.DataStep para iniciar e terminar implicitamente uma etapa de dados sem a necessidade de verificar transformações pendentes. Consulte o tópico spss.DataStep Class (Python) para obter mais informações..
- O argumento name é opcional e especifica o nome de um conjunto de dados aberto para o qual um objeto
Datasetserá criado.. Observe que esse é o nome designado pelo IBM® SPSS® Statistics ou conforme especificado comDATASET NAMEEspecificarname="*"ou omitir o argumento criará um objetoDatasetpara o conjunto de dados ativo.. Se o conjunto de dados ativo não for nomeado, então um nome será gerado automaticamente para ele no caso de o objetoDatasetser criado para o conjunto de dados ativo - Se o tipo de dados Python Nenhum ou a sequência vazia
''for especificada para name, um novo conjunto de dados vazio será criado. O nome do conjunto de dados é gerado automaticamente e pode ser recuperado da propriedadenamedo objetoDatasetresultante. O nome não pode ser alterado de dentro da etapa de dados. Para alterar o nome, use o comandoDATASET NAMEa seguirspss.EndDataStepUm novo conjunto de dados criado com a classe
Datasetnão está configurado para ser o conjunto de dados ativo Para tornar o conjunto de dados ativo, use a funçãospss.SetActive. - O argumento opcional hidden especifica se a janela do Editor de dados associada ao conjunto de dados está oculta -- por padrão, ela é exibida Use
hidden=Truepara ocultar a janela do Editor de dados associada - O argumento opcional cvtDates especifica se as variáveis IBM SPSS Statistics com formatos de data ou de data e hora são convertidas em objetos Python
datetime.datetimeao ler dados de IBM SPSS Statistics O argumento é um booleano --True para converter todas as variáveis com formatos de data ou de data / hora, caso contrário, False Se cvtDates for omitido, nenhuma conversão será executada.Nota: os valores de variáveis com formatos de data ou data / hora que não são convertidos com cvtDates são retornados como números inteiros que representam o número de segundos de 14 de outubro de 1582.
- As instâncias da classe
Datasetcriadas dentro de blocosStartProcedure-EndProcedurenão podem ser configuradas como o conjunto de dados ativo - A classe
Datasetnão honra os filtros de caso especificados com os comandosFILTERouUSESe você precisar que os filtros de caso sejam honrados, considere usar a classeCursor. - Para a liberação 22 Fix Pack 1 e superior, a classe
Datasetsuporta armazenamento em cache. O armazenamento em cache geralmente melhora o desempenho quando os casos são modificados aleatoriamente e é especificado com a propriedadecachede um objetoDataset.
O número de variáveis no conjunto de dados associado a uma instância do Dataset está disponível usando a função len , como em:
len(datasetObj)
Nota: os conjuntos de dados que não são necessários fora da etapa de dados ou procedimento no qual eles foram acessados ou criados devem ser fechados antes de terminar a etapa de dados ou procedimento para liberar os recursos alocados para o conjunto de dados. Isso é feito chamando o método close do objeto Dataset ..
Exemplo: Criando um Novo Conjunto de Dados
BEGIN PROGRAM.
import spss
spss.StartDataStep()
datasetObj = spss.Dataset(name=None)
datasetObj.varlist.append('numvar',0)
datasetObj.varlist.append('strvar',1)
datasetObj.varlist['numvar'].label = 'Sample numeric variable'
datasetObj.varlist['strvar'].label = 'Sample string variable'
datasetObj.cases.append([1,'a'])
datasetObj.cases.append([2,'b'])
spss.EndDataStep()
END PROGRAM.
- Você inclui variáveis em um conjunto de dados usando o método
append(ouinsert) do objetoVariableListassociado ao conjunto de dados. O objetoVariableListé acessado da propriedadevarlistdo objetoDataset, como emdatasetObj.varlist. Consulte o tópico ClasseVariableList (Python) para obter informações adicionais. - As propriedades de variáveis, como o rótulo de variáveis e o nível de medida, são configuradas por meio de propriedades do objeto
Variableassociado, acessíveis a partir do objetoVariableListPor exemplo,datasetObj.varlist['numvar']acessa o objetoVariableassociado à variável numvar. Consulte o tópico Classe de variável (Python) para obter mais informações. - Você inclui casos em um conjunto de dados usando o método
append(ouinsert) do objetoCaseListassociado ao conjunto de dados. O objetoCaseListé acessado da propriedadecasesdo objetoDataset, como emdatasetObj.cases. Consulte o tópico CaseList Class (Python) para obter mais informações..
Exemplo: Salvando Novos Conjuntos de Dados
Ao criar novos conjuntos de dados que você pretende salvar, você desejará manter o controle dos nomes do conjunto de dados, pois a operação de salvamento é feita fora da etapa de dados associada.
DATA LIST FREE /dept (F2) empid (F4) salary (F6).
BEGIN DATA
7 57 57000
5 23 40200
3 62 21450
3 18 21900
5 21 45000
5 29 32100
7 38 36000
3 42 21900
7 11 27900
END DATA.
DATASET NAME saldata.
SORT CASES BY dept.
BEGIN PROGRAM.
import spss
with spss.DataStep():
ds = spss.Dataset()
# Create a new dataset for each value of the variable 'dept'
newds = spss.Dataset(name=None)
newds.varlist.append('dept')
newds.varlist.append('empid')
newds.varlist.append('salary')
dept = ds.cases[0,0][0]
dsNames = {newds.name:dept}
for row in ds.cases:
if (row[0] != dept):
newds = spss.Dataset(name=None)
newds.varlist.append('dept')
newds.varlist.append('empid')
newds.varlist.append('salary')
dept = row[0]
dsNames[newds.name] = dept
newds.cases.append(row)
# Save the new datasets
for name,dept in dsNames.iteritems():
strdept = str(dept)
spss.Submit(r"""
DATASET ACTIVATE %(name)s.
SAVE OUTFILE='/mydata/saldata_%(strdept)s.sav'.
""" %locals())
spss.Submit(r"""
DATASET ACTIVATE saldata.
DATASET CLOSE ALL.
""" %locals())
END PROGRAM.
- O código
newdsObj = spss.Dataset(name=None)cria um novo conjunto de dados O nome do conjunto de dados está disponível na propriedade name , como emnewdsObj.name. Neste exemplo, os nomes dos novos conjuntos de dados são armazenados para o dicionário Python dsNames - Para salvar novos conjuntos de dados criados com a classe
Dataset, use o comandoSAVEdepois de chamarspss.EndDataStepNeste exemplo,DATASET ACTIVATEé usado para ativar cada novo conjunto de dados, usando os nomes de conjuntos de dados armazenados em dsNames
Exemplo: modificando valores de caso
DATA LIST FREE /cust (F2) amt (F5).
BEGIN DATA
210 4500
242 6900
370 32500
END DATA.
BEGIN PROGRAM.
import spss
spss.StartDataStep()
datasetObj = spss.Dataset()
for i in range(len(datasetObj.cases)):
# Multiply the value of amt by 1.05 for each case
datasetObj.cases[i,1] = 1.05*datasetObj.cases[i,1][0]
spss.EndDataStep()
END PROGRAM.
- O objeto
CaseList, acessado a partir da propriedadecasesde um objetoDataset, permite ler ou modificar dados do caso. Para acessar o valor para uma determinada variável dentro de um caso específico, você especifica o número do caso e o índice da variável (os valores do índice representam a posição no conjunto de dados ativo, começando com 0 para a primeira variável na ordem do arquivo e os números do caso começam com 0). Por exemplo,datasetObj.cases[i,1]especifica o valor da variável com índice1para número do casoi. - Ao ler valores de caso, os resultados são retornados como lista. No presente exemplo, estamos acessando um valor único dentro de cada caso para que a lista tenha um elemento.
Consulte o tópico CaseList Class (Python) para obter mais informações..
Exemplo: Comparando Conjuntos de Dados
Os objetos Dataset permitem que você trabalhe simultaneamente com os dados do caso de vários conjuntos de dados. Como exemplo simples, vamos comparar os casos em dois conjuntos de dados e indicar casos idênticos com uma nova variável incluída em um dos conjuntos de dados.
DATA LIST FREE /id (F2) salary (DOLLAR8) jobcat (F1).
BEGIN DATA
1 57000 3
3 40200 1
2 21450 1
END DATA.
SORT CASES BY id.
DATASET NAME empdata1.
DATA LIST FREE /id (F2) salary (DOLLAR8) jobcat (F1).
BEGIN DATA
3 41000 1
1 59280 3
2 21450 1
END DATA.
SORT CASES BY id.
DATASET NAME empdata2.
BEGIN PROGRAM.
import spss
spss.StartDataStep()
datasetObj1 = spss.Dataset(name="empdata1")
datasetObj2 = spss.Dataset(name="empdata2")
nvars = len(datasetObj1)
datasetObj2.varlist.append('match')
for i in range(len(datasetObj1.cases)):
if datasetObj1.cases[i] == datasetObj2.cases[i,0:nvars]:
datasetObj2.cases[i,nvars] = 1
else:
datasetObj2.cases[i,nvars] = 0
spss.EndDataStep()
END PROGRAM.
- Os dois conjuntos de dados são classificados primeiro pela variável id que é comum a ambos os conjuntos de dados.
- Como
DATA LISTcria conjuntos de dados não nomeados (o mesmo é verdadeiro paraGET), os conjuntos de dados são nomeados usandoDATASET NAMEpara que você possa se referir a eles ao chamarspss.Dataset.. datasetObj1edatasetObj2sãoDatasetobjetos associados aos dois conjuntos de dados empdata1 e empdata2 a serem comparados.- O código
datasetObj1.cases[i]retorna o número do casoide empdata1. O códigodatasetObj2.cases[i,0:nvars]retorna a fatia do número do casoide empdata2 que inclui as variáveis com índices 0,1, ...,nvars-1. - A nova variável match, incluída em empdata2, é configurada como 1 para casos idênticos e 0, caso contrário.