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

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


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

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

О проекте "Справочник по синтаксису SPSS"

Фильтрация наблюдений по дате

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


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

В начале этого выпуска вашему вниманию предлагается сообщение о новом проекте, который будет реализован совместно с приглашённым экспертом рассылки Кириллом Орловым (компания Ri-vita Consulting).

О проекте "Справочник по синтаксису SPSS"

Без сомнения, подписчики рассылки "Статистика в SPSS: за пределами кнопочного интерфейса" знают о широких возможностях программы SPSS в области программирования. Разбираемые нами примеры призваны продемонстрировать решение практических задач при помощи командного синтаксиса, реализация которых сложна, рутинна или вовсе невозможна через стандартные диалоговые окна. Не загадочная неприязнь к кнопочному интерфейсу заставляет нас обращаться к аскетической обстановке окна командного синтаксиса, а принципиальная возможность алгоритмизации полёта своей творческой мысли, сохранения и воспроизводства собственных действий, экономии времени и сил.

В дискуссионной переписке между нами относительно обучения программированию эксперт по SPSS Кирилл Орлов пишет (эти соображения и привели к идее представляемого сегодня вам проекта):

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

Примеры, разбираемые в "Статистика в SPSS: за пределами кнопочного интерфейса" нетривиальны. Они показывают, как решать встречающиеся на практике специфические задачи. Такой пример призван демонстрировать, скорее, творческую идею, а не технические правила употребления команд. Чтобы увидеть идею во всей её прелести (а значит - усвоить её), наблюдатель уже должен знать назначение и способы использования команд. Он должен, видя программный код, внутренне комментировать для себя: почему это написано так, а не иначе. Лишь такой процесс узнавания собственного знания сделает пользователя профессиональным, эффективным. Начинающий же пользователь должен держать в это время под рукой удобный справочник, описывающий все нюансы той или иной команды".

 

Итак, сложные примеры, плюс справочник по командам. Примеры есть. Где взять справочник? К SPSS, как известно, всегда прилагается справочник по командам - "Command Syntax Reference" (прежнее название - "Syntax Reference Guide") - документ в 2000 страниц, подробно описывающий все команды SPSS. Но этот чрезвычайно полезный документ не лишён недостатков:

Оглавление: идет по именам команд, а не по темам (выполняемым функциям). Это не даёт читателю внутренне классифицировать команды на однородные группы. Следовательно, мешает запомнить команды, могущие ему помочь в той или иной ситуации.

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

О многих важных для программиста тонкостях употребления команд умалчивается или сообщается вскользь, без необходимого акцентирования. Приводится недостаточно примеров.

Не говорится о существующих ошибках (багах) и о различиях версий SPSS в отношении той или иной команды или функции.

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

 

Между тем - как мы постарались показать выше - без подобного рода справочника программисту-пользователю SPSS не обойтись: нельзя обучиться программированию лишь на примерах; изучение правил употребления команд является самостоятельной задачей; да даже если и не изучать специально - все равно справочник нужно держать под рукой.

Было решено подготовить такой справочный материал, настольную книгу на русском языке, по командному синтаксису SPSS, где описание команд будет даваться не с позиции разработчика, а с позиции пользователя, однако не в ущерб полноте.

 

Что будет, и чего не будет в справочнике

Запланирован выпуск примерно 12 тематических глав. Они будут рассылаться по мере их готовности. Ниже приводятся названия некоторых из них:

Команды преобразования значений;

Преобразовательные выражения и функции;

Команды, управляющие преобразованиями;

Команды создания переменных

Команды переопределения переменных;

Макроязык

По ссылке http://analisi-dei-dati.narod.ru/APPLY_DICTIONARY.pdf мы советуем вам загрузить себе фрагмент будущего справочника, чтобы получить представление, о том, как он будет выглядеть. Файл содержит часть описания команды APPLY DICTIONARY. Формат файла: .pdf (Adobe Acrobat).

В пособии будут рассматриваться только команды управления данными. Именно их программист действительно должен знать (или стремиться знать) на память. Вообще говоря, это практически все команды SPSS, кроме команд статистического анализа и графиков. Мы не планируем рассматривать статистику по двум очевидным причинам: (1) это значило бы готовить фактически справочник по статистическим методам, чего мы не собираемся делать; (2) команды статанализа/графиков нет нужды осваивать на память вообще: источник экономии времени при анализе данных - не ускорение вызова статистических процедур, а легкость и оперативность разного рода превращений, преобразований, подготовки данных к вызову статистической процедуры. Следовательно, владеть требуется как раз командами управления данными. Тем не менее, справочник расскажет о матричном языке SPSS, с помощью которого пользователи смогут создавать свои статистические алгоритмы, не реализованные в текущих версиях программы.

В материалах будет обсуждаться "синтаксис" - внутренний командный язык SPSS. Не будет обсуждаться работа со скриптами, так как последние не относятся к внутреннему языку SPSS. Скрипты пишутся на Visual Basic и играют в пакете вспомогательную (хотя и полезную) роль. Не будет затронут пока и язык Python - новинка в версии SPSS 14.

Считаем важным особо подчеркнуть, что проект "Справочник по синтаксису SPSS"...

...не является переводом официального руководства "Command Syntax Reference";

...а является альтернативой ему, в части команд по управлению данными;

...не является ни переводом, ни аналогом известной книги Raynald Levesque SPSS Programming and Data Management или какой-либо другой книги;

...а является результатом длительного и целенаправленного изучения возможностей синтаксиса SPSS по работе с данными, сплавом теории и десятилетнего личного опыта ежедневного программирования в SPSS;

является, по нашим сведениям, первым документом на русском языке (а может и не только на русском), где указанные выше сведения систематизированы и изложены с полнотой, способной удовлетворить продвинутого пользователя командного языка SPSS или оказать помощь в углубленном освоении программы.

 

Об авторе материала

Кирилл Орлов - профессиональный пользователь SPSS с 1995 года, признанный эксперт по SPSS, член SPSS Customer Advisory Board и испытатель новых версий SPSS.

 

Условия

Проект стартует, если мы сочтем, что выразивших желание получить справочник по командам - достаточное количество.

Рассылка материалов будет платной. Стоимость: 3000 руб. за весь справочник. Оплатить надо будет однократно, всю сумму вперед. Вы можете перевести деньги удобным вам способом на счёт (его реквизиты будут предоставлены по запросу). А если находитесь в Москве, возможно, предпочтёте передать их лично.

Справочник будет доступен только подписчикам "Статистика в SPSS: за пределами кнопочного интерфейса", оформившим и оплатившим дополнительную подписку. Подготовка справочника является самостоятельным проектом и не отразится на периодичности или условиях выхода подписки "Статистика в SPSS: за пределами кнопочного интерфейса".

Справочник будет поступать вам по электронной почте вложением - раз в месяц одна или несколько глав. Формат файлов: Adobe Acrobat (.pdf). Все материалы сполна мы планируем выслать до конца 2006 года.

Если по какой-то причине проект (подготовка глав) прервется до его окончания (надеемся, этого не случится), пропорциональная часть денег будет возвращена подписчикам.

В течение месяца после получения очередной порции материалов вы можете получить консультацию автора по теме последнего выпуска. Это - наша техническая поддержка.

Внимание. Материалы - не для какого-либо распространения или публикации. Если где-нибудь в интернете они появятся полностью или частично, мы прервем проект; пропорциональная часть денег при этом будет возвращена. По окончании проекта запрет на распространение материалов остается в силе. Со своей стороны мы можем обещать, что подготовленные материалы будут переданы лишь тем, кто оформил подписку.

 

Заявки

Желающим оформить подписку на "Справочник по синтаксису SPSS" необходимо отправить заявку автору материалов (Кирилл Орлов, kior@comtv.ru) или ведущему рассылки (Антон Балабанов, a-balabanov@yandex.ru). Хотя оформить подписку можно будет в любое время в течение года, большая просьба - по возможности скорее принять решение. Для пользы проекта нам требуется уже в апреле знать начальное количество участников, тогда с мая 2006 года вы сможете получать материалы.

 

Цель проекта - способствовать становлению относительно небольшой группы высокопрофессиональных пользователей SPSS, отвечая на интерес к серьёзному изучению программы предоставлением высококачественных обучающих и справочных материалов, разработанных на основе практического опыта и консультаций с экспертами.

 

С уважением,

Антон Балабанов, Кирилл Орлов

Фильтрация наблюдений по дате

А теперь - к теме выпуска. Мы разберём сегодня синтаксис Отобрать наблюдения, попадающие во временной интервал.SPS. Авторы: Jim Marks и Raynald Levesque. Пример очень несложный; те же действия вполне могут быть выполнены через оконный интерфейс. Важно то, что он демонстрирует принципы работы с датами в тех случаях, когда нужно отобрать наблюдения, содержащие в переменной даты значения из определённого временного интервала.

Так, например, на практике может потребоваться отобрать результаты экспериментов, которые относятся к прошлому году (то есть, попадают в интервал с 01.01.2005 по 31.12.2005), сопоставить динамику биржевых курсов с января по март текущего года с данными за тот же период в прошлом и позапрошлом годах, отобрать индивидов, чей возраст не превосходит 60 лет (предполагается, что мы знаем текущую дату, а дата рождения индивидов содержится в одной из переменных) и так далее.

Для начала, создадим пример данных. Пусть в нём будут какие-то наблюдения (переменная id содержит номер наблюдения), причём каждое наблюдение будет содержать значение переменной date1, которая будет показывать дату данного наблюдения. Данные примера вводим в синтаксисе посредством команды DATA LIST, используя ключевое слово FREE, что позволяет нам записывать значения не в столбцы, а одно значение за другим, разделяя их пробелами. Номера наблюдений читаются в числовую переменную шириной 8 символов без знаков после запятой (F8.0), а переменная date1 имеет американский формат даты (мм/дд/гггг), шириной 10 символов. Сами данные помещаем между командами BEGIN DATA - END DATA:

 

DATA LIST FREE /id (F8.0) date1 (ADATE10).

BEGIN DATA
1 01/01/2001 2 03/15/2000 3 12/21/1999
4 11/11/2004 5 06/05/2002 6 07/15/2003 7 03/30/2006 8 01/04/2006

END DATA.

 

Пример 1. Допустим, нам требуется отобрать те наблюдения, которые были сделаны не ранее 2001 года. Технически это делается в 2 шага. На первом шаге мы вычисляем фильтрующую переменную. Она должна иметь значение 0, если наблюдение отфильтровывается и любое другое значение (обычно: 1), если наблюдение остаётся в анализе. На втором этапе мы применяем фильтр, указывая только что созданную переменную в качестве фильтрующей.

Итак, первый этап:

 

COMPUTE filt = XDATE.YEAR(date1) >= 2001.

EXECUTE.

 

Переменная filt принимает результат логического выражения XDATE.YEAR(date1) >= 2001. Этот результат может быть либо истиной, либо ложью, причём ложь интерпретируется как 0, а истина - как единица. Функция извлечения частей даты из переменной даты (XDATE) и её "подфункция" YEAR "вытаскивают" из даты для каждого наблюдения год (как число), что позволяет нам сопоставить его с годом 2001. В случае, если наблюдение содержит дату, более раннюю, чем 1 января 2001 года, переменная filt будет содержать 0.

На втором этапе мы просто применяем фильтр:

 

FILTER BY filt.

 

Проверить результат можно, заглянув в редактор данных (номера неотобранных наблюдений там будут зачёркнуты), либо вывести перечень значений переменной date1 с помощью команды SUMMARIZE:

 

SUMMARIZE
/TABLES=date1
/FORMAT=VALIDLIST NOCASENUM TOTAL
/TITLE='Год >= 2001'
/MISSING=VARIABLE
/CELLS=NONE.

 

Подкоманда /TABLES в синтаксисе выше указывает, значения какой переменной следует вывести в таблицу, аргументы подкоманды /FORMAT указывают на необходимость вывода только действительных значений (не выводить, пропущенные значения переменной date1, VALIDLIST), хотя в нашем случае эта подкоманда была излишней, не выводить номер наблюдения в отдельной графе (NOCASENUM, при этом номер строки в таблице всё равно будет выведен), вывод итоговой статистики по подгруппе значений с меткой Total (подкоманда TOTAL - в данном случае бессмысленна, поскольку итоговой статистики не запрашивалось). Подкоманда /MISSING=VARIABLE - ещё одна установка по умолчанию, имеющая смысл лишь при подразделении переменные на зависимые и группирующие. /CELLS=NONE запрещает вывод какой-либо статистики по переменной.

 

Пример 2. Выберем наблюдения с датами в интервале с 1 января 2000 по 30 июня 2003 года. Последовательность действий та же. В авторском синтаксисе в начале добавлена команда USE ALL, призванная отменить действие фильтров, включённых ранее. Но в данном случае её можно было бы опустить, равно как и повторное применение фильтра (FILTER BY). При действующем фильтре достаточно изменить фильтрующую переменную (последовательность команд COMPUTE filt=... и EXECUTE) и наблюдения были бы отфильтрованы заново в соответствии с новыми требованиями.

В данном случае при вычислении фильтра мы использовали функцию RANGE, которая возвращает значение истина, если переменная, указанная в качестве первого аргумента (date1) попадает в интервал числовых значений, задаваемых двумя следующими аргументами. Эти границы интервалов мы задали с помощью преобразования в значение даты чисел дня, месяца и года. Результат функции DATE.MDY(1,1,2000), например, будет показывать число секунд, прошедшее с 14 октября 1582 года по 1 января 2000 года.

После фильтрации по новой переменной мы вновь выводим оставшиеся в анализе наблюдения с помощью команды SUMMARIZE, указывая в подкоманде TITLE желаемый заголовок таблицы.

 

USE ALL.

COMPUTE filt = RANGE(date1,DATE.MDY(1,1,2000),DATE.MDY(6,30,2003)).

FILTER BY filt.

EXECUTE.

SUMMARIZE
/TABLES=date1
/FORMAT=VALIDLIST NOCASENUM TOTAL
/TITLE='Даты между 1 января 2000 и 30 июня 2003'
/MISSING=VARIABLE
/CELLS=NONE.

 

Пример 3. Отберём наблюдения, которые были сделаны не ранее, чем за 10 дней до текущей даты. Тут нам поможет системная переменная $DATE11, возвращающая текущую дату в виде текстовой строки. Просто изменим переменную filt:

 

COMPUTE filt = DATEDIFF(NUMBER($DATE11,DATE11),date1,"days")<=10.

EXECUTE.

 

Тут мы преобразовали строковое значение текущей даты $DATE11 к числу (помните, количество секунд...) и использовали специальную функцию, вычисляющую разницу между двумя датами в установленных единицах ("days" - дни, в нашем случае). Если эта разница не превосходит 10, мы включаем наблюдение в анализ.

 

Всего доброго! Ждём заявок на участие в новом проекте!

 

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

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

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

Переведены и добавлены примеры синтаксиса:

Сохранить время при записи данных в текстовый файл.SPS

Записать текущую дату в переменную.SPS

Сосчитать последовательные 30-минутные интервалы когда наблюдалась гипоксия.SPS

Вывести текущую дату в заголовок графика.SPS

Поместить дату и время перед результатами статанализа.SPS

Вывести день недели вместе с датой.SPS

Считать время из текстовой строки, содержащей дату и время.SPS

Сохранить файл с текущей датой в имени файла.SPS

Отобрать наблюдения, попадающие во временной интервал.SPS

Работа с системной переменной SPSS $Time.SPS

 

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


В избранное