Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Статистика в SPSS: за пределами кнопочного интерфейса. Выпуск 56


В рассылке используются материалы веб-сайта www.spsstools.ru

02.08.2007

Содержание выпуска

О множественных наборах данных в SPSS

Новое на сайте www.spsstools.ru

 

Здравствуйте, уважаемые подписчики!

 

О множественных наборах данных в SPSS

Раздел "Новое на сайте..." данного выпуска рассылки представляет вашему вниманию серию решений по одновременной работе с несколькими файлами данных (слияние и разделение файлов, объединение агрегированной информации из разных файлов и т.д.) Все они, хотя и работоспособны в современных версиях SPSS, были созданы на более ранних версиях и не используют возможности позднейших релизов пакета по работе одновременно с несколькими наборами данных.

Пользователи же 14-й и 15-й версий пакета, без сомнения, знают о возможности открыть одновременно несколько файлов данных в одной и той же копии приложения SPSS. Даже при поверхностных знаниях пакета это позволяет пользователю быстрее ориентироваться в источниках данных, а, кроме того, очевидны преимущества, связанные с тем, что "кнопочный" интерфейс программы теперь позволяет расположить в соседних окнах исходные данные и агрегированную информацию по этим данным даже без создания в явном виде копии агрегированного файла на диске.

При всех своих положительных моментах, однако, множественные окна являются потенциальным источником проблем. При наличии нескольких открытых окон данных, SPSS в каждый момент работает с данными лишь из одного ("активного") окна. Ясно, что при автоматизации анализа с помощью синтаксиса, множественными окнами надо эффективно управлять и как-то гарантировать, что отправляемые процессору SPSS команды будут применяться к нужному массиву данных. Кроме того, поскольку понятие "окно" относится к графическому интерфейсу SPSS, управление окнами через синтаксис (т.е. через командный процессор пакета) само по себе есть потенциальный источник проблем (подобных рассогласованности, которая присуща, скажем, параллельному соисполнению синтаксиса и скриптов в SPSS). Выходящие патчи устраняют выявленные проблемы, однако некоторые "странности" остаются.

Задача сегодняшнего выпуска рассылки - пояснить в общих чертах логику управления множественными окнами данных в последних версиях SPSS и указать на некоторые возникающие сложности. В следующем выпуске запланирована публикация материала, подготовленного Кириллом Орловым (http://www.ri-vita.ru/consulting/stats/) по командам DATASET (будет дан более глубокий и систематизированный экскурс в вопрос управления наборами данных) и OUTPUT (управление окнами вывода результатов, чего в этом выпуске мы не касаемся).

Я допускаю, что следующий набор тезисов может быть дополнен и исправлен в зависимости от версии SPSS, проинсталлированного патча и опыта работы с множественными наборами данных, но основные мои наблюдения к настоящему моменту таковы:

1. Основным понятием, которым мы будем оперировать, является "набор данных" (dataset) - массив, данных, созданный заново, экспортированный, либо открытый на основе файла данных SPSS, либо выделенный из другого массива данных и находящийся в отдельном окне.

2. В одном сеансе работы с SPSS таких наборов данных может быть открыто несколько, в разных окнах, причём некоторые окна могут быть при необходимости объявлены скрытыми (невидимыми).

3. Набор данных может быть именованным или безымянным. Имя набора данных - категория, отличная и независимая от имени файла данных, либо дескриптора файла (FILE HANDLE).

4. Имя набора данных даётся пустому набору данных SPSS при запуске пакета (DataSet0), либо задаётся инструкцией DATASET NAME, либо наследуется от инструкции DATASET DECLARE. Имя набора отображается в заголовке соответствующего окна редактора данных в квадратных скобках. При отсутствии имени скобки остаются пустыми.

5. Имя набора может быть использовано вместо пути к файлу данных практически во всех командах, где предусмотрено указание пути к файлу данных. При этом набор с таким именем должен быть уже открыт к моменту выполнения такой команды, либо быть продекларированным инструкцией DATASET DECLARE, если в этот набор предполагается направить выдачу какой-либо статистической процедуры.

6. Выполняемые процессором SPSS команды применяются к одному из открытых наборов данных - к активному набору.

7. Смена активного набора происходит по инструкции DATASET ACTIVATE, либо при открытии нового набора данных инструкциями GET и ей подобными.

8. При смене активного набора данных открытыми, но неактивными, могут остаться лишь именованные наборы данных. Безымянные закрываются при выполнении инструкции DATASET ACTIVATE, либо, если пользователь переключился через графический интерфейс (мышкой сменил окно), при выполнении дальнейших действий в пакете.

9. Таким образом, безымянный набор данных может быть открытым и пригодным к использованию лишь в том случае, если он является активным.

Это лишь самые общие принципы управления множественными наборами данных, качество и способ реализации которых, к сожалению, зависит от версии пакета и варианта её обновления (патча). Так, например, простейший синтаксис, приведённый в примере ниже, будучи исполненным на версии SPSS 15.0.1.1, даст разные результаты в зависимости от того, будет ли он исполнен "разом", либо по раздельности, команда за командой. Это связано со склонностью данного обновления программы закрывать активный, но безымянный набор данных при раздельном выполнении команд, которую, видимо, следует признать программной ошибкой. Я беседовал по этому вопросу с Кириллом Орловым, который только что закончил тестирование 16-й бета-версии пакета. Он выразил мысль, что корректное описание управления множественными наборами потребовало бы отдельных, иногда противоречащих друг другу редакций в зависимости от версий SPSS, начиная от 14-й и заканчивая текущим состоянием 16-й версии. По его мнению, часть проблем со множественными наборами возникает из желания разработчиков развести понятия активного набора данных (набора, которым управляет синтаксис) и designated-набора данных (набора, который является текущим в графическом интерфейсе). Таким образом, становится ясно, что вопрос, затронутый нами сегодня, включает большой пласт исследовательской работы, неприподъёмный в рамках рассылки. Попробуем ограничиться одним примером и некоторыми рекомендациями к нему, которые будут справедливы для версий 14 и 15 SPSS.

По моим наблюдениям, основные недоразумения в управлении несколькими окнами начинаются при комбинировании управления синтаксисом и "кнопочным" меню - графическим интерфейсом программы. Рассмотрим один из таких примеров - ситуацию, когда нужный файл оказывается недоступным для записи оттого, что на его основе создан открытый набор данных.

Имеется синтаксис обработки. Кроме прочего, там имеется команда открытия файла данных (в этом примере - файла Employee data.sav) и команда REGRESSION, которая производит оценку параметров некоторого уравнения по содержимому активного окна данных, и записывает результат (коэффициенты) в другой файл (в этом примере - coeff.sav).

GET FILE='C:\Program Files\SPSS\Employee data.sav'.

REGRESSION /DEPENDENT salary /METHOD=ENTER salbegin prevexp jobtime /OUTFILE=COVB('C:\temp\coeff.sav').

После выполнения этого блока команд любопытный пользователь хочет посмотреть на содержимое результирующего файла (coeff.sav). Совершенно естественно, если файл он откроет не через синтаксис (GET FILE ...), а через графический интерфейс (меню File - Open - Data...). В результате SPSS выполнит не только команду GET, но и команду DATASET NAME, то есть автоматически даст имя вновь открытому набору данных. В журнал запишется примерно следующее:

GET FILE='C:\temp\coeff.sav'.

DATASET NAME DataSet1 WINDOW=FRONT.

Отметим, что исходный файл данных Employee data.sav при этом будет закрыт, поскольку при использовании GET, как и других команд загрузки данных, после открытия свежего набора данных "безымянные" наборы данных закрываются.

Посмотрев на содержимое coeff.sav пользователь решает видоизменить модель, добавив туда ещё одну независимую переменную, и запускает синтаксис обработки заново:

GET FILE='C:\Program Files\SPSS\Employee data.sav'.

REGRESSION /DEPENDENT salary /METHOD=ENTER salbegin prevexp jobtime minority /OUTFILE=COVB('C:\temp\coeff.sav').

В результате команда REGRESSION сообщит что-то вроде: "The file is already in use. This command not executed". О причине ошибки несложно догадаться. При повторном открытии файла Employee data.sav набор данных DataSet1 (основанный на файле coeff.sav) остался открытым, т.к. он уже не был безымянным. Поэтому запись в соответствующий файл пока невозможна.

Пример прост, а решение проблемы в данном случае очевидно - следует закрыть набор DataSet1 перед попыткой записи в файл coeff.sav. Но что, если имеется большой синтаксис обработки данных, в котором ситуация, подобная этой, может возникать неоднократно? Какие варианты управления множественными окнами позволят избежать такой ошибки и подобных ей?

1. Пожалуй, наиболее радикальный вариант - вовсе не использовать множественные окна, если основная обработка производится через файлы синтаксиса. В самом деле, возможность переключения между окнами и создание временных наборов данных без явной записи их в файлы - возможности, скорее, помогающие при активной работе через графическую оболочку. Преимущество же обращаться к наборам данных по их коротким именам вместо полных путей к файлам, на мой взгляд, компенсируется необходимостью постоянно управлять множественными наборами посредством дополнительных инструкций синтаксиса. Если вы принимаете такую традиционную стратегию "одного окна" (скажем, при подготовке синтаксиса рутинной обработки регулярно обновляющегося массива она вполне приемлема), важно просто не забывать "вычищать" синтаксис от инструкций вроде DATASET NAME при вставке синтаксиса кнопкой "Paste", если вы ей пользуетесь. В таком случае все открываемые наборы данных у вас будут "безымянными", а значит, вы в каждый момент времени будете иметь открытым лишь один, активный, набор данных, сколько бы раз вы ни обращались к разным файлам. Файлы синтаксиса из старых версий SPSS сами по себе не должны приводить к созданию множественных окон, так как в них отсутствуют команды именования наборов.

2. Если вы готовитесь запустить синтаксис, не использующий множественные наборы данных, но на момент его запуска у вас могут быть открытыми один или несколько именованных наборов (как в рассмотренном выше примере), то хорошим вариантом закрыть всё лишнее будет исполнение пары команд в самом начале:

NEW FILE.

DATASET CLOSE ALL.

Первая команда создаёт новый пустой и безымянный набор данных и делает его активным. Вторая - закрывает все наборы данных, кроме активного. После этого вы смело можете начать обработку открытием или созданием нового файла данных, который заменит пустой активный набор данных.

3. Все остальные варианты, включающие использование множественных наборов в большей или меньшей степени, обяжут вас следить за раздачей имён наборам данных, своевременной сменой активного набора, закрытием лишних наборов. Синтаксис SPSS предлагает для этого исчерпывающий арсенал команд семейства DATASET: DATASET NAME, DATASET ACTIVATE, DATASET COPY, DATASET CLOSE, DATASET DECLARE и справочную команду DATASET DISPLAY. В этом случае полезно изучить синтаксис данных команд более глубоко, равно как и специфику их выполнения в вашей версии SPSS.

 

Всего доброго!

Ведущий рассылки,

Антон Балабанов

 

Новое на сайте www.spsstools.ru

На странице "Синтаксис" переведён раздел "Работа с несколькими файлами данных": http://www.spsstools.ru/SampleSyntax.htm#WorkingWithManyFiles (добавлено 24 файла).

 

© См. www.spsstools.ru, 2005-2007


В избранное