Меню

Каким может быть расписание вуза. Каким может быть расписание вуза Обозначение аудиторий в расписании

Toyota

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

или оформить заказ

Описание

Расписание позволяет автоматизировать работу служб по составлению расписания и решает следующие задачи:

  • Составление расписания, привязанного к производственному календарю с указанием праздничных и выходных дней;
  • Учет пожеланий преподавателей (таких как предпочитаемый корпус, дни недели, конкретные календарные дни) при составлении расписания;ё
  • Контроль коллизий в расписании при его составлении;
  • Учет времени работы конкретных аудиторий при составлении расписания;
  • Использование любого количества различных планов звонков в одном расписании, что значительно упрощает составление расписания для обучающихся разных форм обучения (очная/заочная/вечерняя) или для обучающихся в период сессии;
  • Разграничение прав на ввод расписания занятий: только владелец либо пользователь с полными правами может удалять или заменять занятие;
  • Отчетность, позволяющая получить расписания ВУЗа, курса, факультета, преподавателя, группы, дисциплины, и т.д.

В продукте представлена возможность вводить расписание для ДПО, а также использовать автоматическое составление расписания занятий (АСР), анализировать занятость аудиторного фонда в BI-системе QlikView, выдача расписания обучающихся/преподавателя на мобильные устройства, анализировать и получать изменения расписания группы/ преподавателя для оповещения обучающихся/преподавателя.

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

Результаты внедрения программы:

  • Возможность составления расписания на основе любых сочетаний плановых данных системы (нагрузка кафедры, нагрузка ППС, учебные планы), либо без них;
  • Готовые веб-сервисы для выдачи расписания;
  • Выполнение пожеланий преподавателя при выборе дня, времени и места работы;
  • Контроль занятий, проводимых в одной аудитории;
  • Контроль лекционных и семинарских занятий по дисциплинам, первых и последних занятий по дисциплине;
  • Контроль занятия в рамках одного потока;
  • Предотвращение наложения занятий в одно и то же время, у одного преподавателя;
  • Контроль окон между занятиями, у преподавателя или группы;
  • Учет времени перемещения обучающихся/преподавателя между корпусами;
  • Контроль наличия окон в расписании у преподавателя/группы;
  • Контроль максимального количества занятий в день у преподавателя/обучающегося;
  • Контроль времени работы аудитории/корпуса;
  • Выявление и анализ изменений, произошедших в расписании;
  • Анализ расписания и занятости аудиторного фонда в BI-системе QlikView;
  • Выдача на мобильные устройства расписания группы/преподавателя (бесплатное приложение «Расписание вузов» для iOS и Android);
  • Повышается доступность расписания для преподавателей/обучающихся за счет мобильных решений.

Функционал

Ввод занятий

  • Расписание привязывается к производственному календарю, в котором указываются выходные дни, праздничные и дни переноса праздников.
  • При вводе расписания есть возможность в качестве подспорья использовать нагрузку группы из учебных планов, из нагрузки кафедр, из нагрузки преподавателей или вводить расписание произвольное, не имея в базе контингента, учебные планы. Также можно импортировать нагрузку из Excel, чтобы использовать ее в качестве подспорья при вводе занятий.
  • Составление расписания как циклового (например, пн, вт, пт каждую неделю), так и фронтального (например, каждый понедельник в указанные даты).
  • Можно вводить занятия ДПО.
  • Бронирование аудиторий для проведения не учебных мероприятий.
  • Составление расписания производится циклами на семестр. При этом программа автоматически пытается разместить на допустимые дни (допустимые дни, это дни занятия, разрешенные по календарю и не приводящие к коллизиям с другими, уже введенными занятиями в расписании) семестра указанное количество часов, отведенных на данное занятие. От пользователя лишь требуется указать дату первого занятия. При изменении первого дня занятия, программа автоматически пере размещает часы по дням согласно календарю.
  • Информация о дисциплинах, преподавателях, контингенте обучающихся, количестве часов выбирается из посчитанной нагрузки кафедр.
  • Возможность использования четных/нечетных недель.
  • Возможность использования произвольного плана звонков для занятий заочников.
  • Возможность использования нескольких планов звонков в одном расписании.
  • Возможность создания нескольких расписаний (плановое, фактическое).
  • Разграничение прав на ввод расписания занятий: только владелец занятия может его изменить/удалить, кроме пользователей с полными правами на расписание. Предусмотрена возможность передачи прав владения занятием между операторами ввода расписания занятий.
  • Ввод пожеланий преподавателей: предпочитаемый корпус, дни недели, конкретные календарные дни, время работы в каждом из дней.
  • Для аудиторий можно настроить интервалы времени работы для каждого дня недели.

Контроль коллизий

  • Контроль коллизий в расписании производится в момент ввода занятий, конфликтующие занятия подсвечиваются.
  • Существует контроль следующих коллизий: выполнение пожеланий преподавателя, более одного занятия в одной аудитории в одно и то же время, более одного занятия у потока в одно и тоже время, более одного занятия у преподавателя в одно и тоже время, контроль «окон» преподавателя и группы, учет времени перемещения обучающихся/преподавателей между корпусами, контроль того, чтобы первое занятие было лекционным, а не семинарским по дисциплине, контроль того, чтобы последнее занятие по дисциплине не было лекцией, если дисциплине положены семинарские занятия, контроль времени работы аудитории/корпуса.
  • Возможность включения/отключения любого вида контроля коллизий.

Отчеты

  • В отчетах занятия выводятся в сетке выбранного плана звонков, но могут выводиться и занятия, не принадлежащие этой сетке, для формирования полного представления о расписании занятий ВУЗа.
  • Возможно получить расписания ВУЗа, курса, факультета, преподавателя, группы, дисциплины, и т.д.
  • В модуле представлен отчет, позволяющий получить сведения о загруженности аудиторного фонда: список свободных аудиторий за указанный период, список занятых аудиторий с указанием дней, пар занятий.
  • Отчеты для анализа изменений расписания группы/преподавателя, которые позволяет каждому пользователю получать изменения в расписании, чтобы потом об этом уведомить обучающихся/преподавателя, причем, изменения строятся относительно последнего использования данного отчета.

АВТОМАТИЧЕСКОЕ СОСТАВЛЕНИЕ РАСПИСАНИЯ (АСР)

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

Возможности:

  1. Построение не одного, а множества решений (вариантов размещения занятий в расписании) с возможностью выбора подходящего.
  2. Многократное использование АСР на одном и том же расписании.
  3. Редактирование расписания на любой стадии размещения занятий и повторное использование после вмешательства.
  4. Размещение как всех занятий, так и части (факультета, курса, дисциплины, группы).
  5. При размещении занятий проверяются ровно те же коллизии, что и при ручном размещении занятий.
  6. Открытый код и возможность доработки алгоритма АСР под Ваши потребности.
Название модуля Часы в подарок Цена, руб.

БИТ.ВУЗ.Расписание. Поставка на 1 рабочее место

50 000 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 1 рабочее место

5 000 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 5 рабочих мест

17 250 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 10 рабочих мест

33 000 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 20 рабочих мест

62 500 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 50 рабочих мест

150 000 руб.

БИТ.ВУЗ.Расписание. Клиентская лицензия на 100 рабочих мест

288 000 руб.

Пользуясь медленными и неудобными информационными ресурсами в сети можно проклинать их создателей и терять время, а можно написать паука, который соберёт и классифицирует информацию нужным образом. Уже обработанная информация будет доступна в любой плоскости и с таким откликом, который требуется. Эта статья об одном из таких опытов. С практическим примером разбора и улучшения расписания НГУ (Новосибирского государственного университета).

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

Идея заключалась в том, чтобы упростить доступ к расписанию. Оригинальное расписание, доступное на сайте НГУ, можно посмотреть . Для того, чтобы найти собственное расписание мне приходилось начинать свой путь с главной страницы сайта, переходить на “старый сайт”, затем “информационные системы”, далее “расписание занятий”, выбрать корпус, факультет, группу, итого - 6 кликов. Большая часть этих переходов казалась вполне осмысленной, кроме выбора корпуса: казалось бы, зачем выбирать корпус, если факультеты всё равно разные, да и общее их число не так велико, чтобы разбивать на две страницы (всего около 10)? Но ситуация становилась немного сложней, если нужно было найти расписание преподавателя или друга. Для преподавателя нужно было в худшем случае проверить оба корпуса, а для друга нужно было найти сначала его в списках групп, узнать номер группы, а потом уже всё остальное. Шаги вполне выполнимые, но не всегда захочется их совершать, а ведь ничего не мешает собрать эту информацию и сделать возможность осуществлять такие выборки просто набрав в строке имя человека, расписание которого требуется узнать - как в поисковых системах, к которым все уже привыкли.

Разбор списков

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

...

Для того, чтобы экспортировать такие данные, используется следующий код:

Public function exportGroup($groupFile, $groupName, $department, $course) { $grouplist=file_get_contents($groupFile); $dom2 = new domDocument; $dom2->loadXML($grouplist); $s2 = simplexml_import_dom($dom2); for ($k=0;$kstudent);$k++) { $attrs=$s2->student[$k]->attributes(); $student=new Student(); $student->name=$attrs["name"]; $student->group=$groupName; $student->department=$department; $student->course=$course; $student->save(); } }

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

Исправление до валидного

Само расписание занятий не доступно в xml, кроме того, html, сгенерированный системой расписаний НГУ, оказался невалидным, что поставило меня перед выбором: преобразовывать его к валидному или разбирать регулярными выражениями. Надо сказать, что как-то уж очень не хотелось прибегать к regexp-ам. Разглядывая html файлы я понял, что не так уж много нужно сделать, чтобы документы стали валидными, а именно, добавить один тег (отсутствовал) и указать кодировку. Получилось следующее:

$text=file_get_contents($url); $text = iconv ("CP1251" , "UTF-8" , $text); $doc = new DOMDocument(); $doc->loadHTML(str_replace("", " ", str_replace("", "", $text))); $s = simplexml_import_dom($doc);

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

Поиск

Таким образом у меня получились расписание групп и преподавателей, а также списки студентов.
Расписание в получившейся структуре относится к группе или преподавателю, но не к студенту. Для поиска по студентам, преподавателям, группам и факультетам требовался сложный запрос или несколько запросов к серверу базы данных. Составить такой запрос не проблема, но я опасался за скорость его выполнения. Было решено сделать отдельную таблицу для поиска “searchable”, которая бы содержала в одном столбце псевдонимы, по которым осуществляется поиск, а в другой - адрес документа. В первую очередь - для оптимизации времени доступа. Также это дало возможность обрабатывать запросы вроде “математик василий 1 курс”, но в то же время позволило иметь неконсистентные состояния базы данных, поскольку адрес документа (url) содержится в нескольких различных таблицах. Последнее никак не плюс, но плюсы в данном случае мне виделись гораздо более значительными, чем этот минус.

REST API

Для того чтобы у других не было потребности выполнять всю эту рутину заново я опубликовал открытое REST API, которое уже вроде бы используется в двух сторонних проектах. Запрос к API содержит строку поиска и тип запрашиваемого расписания: на день, на неделю и ближайшая пара. Ответ содержит расписание в формате JSON или возможные названия и адреса соответствующих расписаний, когда заданной строке соответствует несколько расписаний.

Расшифровка сокращений

После публикации довольно много людей говорили, что в расписании используются непонятные сокращения, которые сложно интерпретировать (например, «О.об.химии» это «Основы общей и неорганической химии», а «ТФКП» - «Теория функций комплексного переменного»). Путей решения этой проблемы я видел два: 1. Предоставить студентам возможность самим указывать полные названия и 2. Попытаться каким-то образом их расшифровать. Первый вариант выглядел простым и весёлым, но спорным, поскольку требовалось вводить систему модерации и возможность смотреть без расшифровки, поскольку я сам не мог определить, насколько верное название было предоставлено, а найти экспертов с каждого факультета практически значит попросить нескольких людей расшифровать эти сокращения. Я попытался изыскать возможность автоматической расшифровки, обнаружил списки кафедр и преподавателей с предметами. Списки эти оказались не полными, но, надо сказать, что и списки студентов абсолютной точностью не отличались. Ко всему, имена преподавателей в списке по кафедрам указаны с расшифровкой имени и отчества, а в расписании с инициалами, но это не такая большая проблема. Первая идея была в том, чтобы найти таких преподавателей, которые ведут только один предмет и по ним определить все названия (в НГУ большинство - совмещают преподавание с другой работой и таких, кто ведёт одну дисциплину немало), но этот метод неожиданно провалился и дал неправильные результаты. Возможно, дело в том, что преподаватели с одним предметом не часто входили в те кафедральные списки, которые мне удалось получить. Дальше я пробовал сравнивать по количеству совпадающих букв, но получились тоже довольно странные результаты. Наилучшим оказался метод, который устанавливает соответствие между сокращённым названием и полным только если у этого преподавателя это единственный предмет, начинающийся на эту букву. Таким образом удалось расшифровать большинство предметов.

По аудиториям

Кроме того, у меня очень чесались руки провести статистическое исследование загруженности аудиторий/преподавателей, и мне пришла идея, что можно выводить информацию из расписания на текущий момент: кто и в каких аудиториях сейчас находится, сколько человек, сколько студентов мужского пола, а сколько - женского. Последняя характеристика конечно же была придумана просто для того чтобы сделать проект более весёлым, можно было бы просто вывести все имена, но проблема была в том, что номера групп в расписании не всегда хорошо соответствовали номерам в списках студентов. Например, в расписании могли быть группы 123.1, 123.2, 123.3, а в списках только 123. Таким образом, можно приблизительно сказать сколько человек в каждой группе, но нельзя точно сказать кто именно в какой. Для определения пола я использовал имена студентов. Надо сказать, что определение было настолько точным, насколько я точно могу сам отличить мужское имя от женского, это оказалось не всегда возможно, но в большинстве случаев отлично работает. Исходя из этой информации была построена карта аудиторий, которая обновляется автоматически каждые 10 минут и отображает количество студентов, студенток, количество мест (максимальное число, встречающееся в расписании) и номера групп, которые в данный момент находятся в этой аудитории. Может быть очень полезно если вы ищете пустую аудиторию или потеряли какую-то вещь и хотели бы опросить всех, кто мог её видеть.
Из расписания были выбраны аудитории, разобраны постфиксы, обозначающие корпус, а дальше выведены на странице так, что получился список следующего вида:

для каждой аудитории/корпуса отображается график загруженности на любой введённый день


Это график для главного корпуса НГУ на пятницу; сервис позволяет смотреть такие для любой аудитории или корпуса на любой учебный день (на не учебные график пустой). Здесь по Y - количество человек, время - начало пар. Красный столбик - студентки, синий - студенты, серый - сумма. Бросается в глаза дробная шкала по Y, дело в том, что у меня не получилось настроить библиотеку рисования графиков для вывода только целых чисел, но мне кажется это не сильно принципиальным. Да, дробного количества людей не бывает, но столбики и не упираются в нецелые числа.

Перед тем как написать статью я решил посмотреть как же всё устроено в МГУ и нашёл расписание, даже карту пустых аудиторий, но оказалось, что для получения информации нужно запастись терпением; и дело даже не в количестве кликов, которых тоже предостаточно, а в очень медленном отклике. Из появляющихся периодически ошибок SQL можно сделать выводы об использовании СУБД, но, видимо как-то не слишком оптимально всё устроено.

Статистика

Имеющиеся данные позволили также получить некоторые более глобальные цифры.

Самые женские аудитории - 500, 431 и 608 - около 89% девушек

Самая мужская аудитория - 312, всего 10% девушек

Наиболее женское время - 14:15, 53% девушек

Наиболее мужское время - 19:20, 46.8% девушек

Наиболее женский день - вторник, 52.3% девушек

Наиболее мужской день - понедельник 49.2% девушек

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

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

Дирекция института

В первом столбце указывается название дисциплины, когда начинается и когда заканчивается дисциплина: например, л, пр. с 15.9 по 3.11 - это обозначает, что лекционные и практические занятия начинаются с 15 сентября и заканчиваются 3 ноября.

В столбце «день недели» указаны пары - 1, 2, 3, 4, 5, 6.

Для практических занятий на пересечении номера пары и названия дисциплины указывается номер группы , а сверху подписан номер аудитории .

Например, (смотри образец расписания выше) математика для 1-ой группы проходит 1 -ой парой в аудитории Н-301 .

Для лекционных занятий на пересечении названия дисциплины и номера пары ставится буквы Л , а сверху подписывается номер аудитории. На лекционных занятиях обучаются по потокам - 1 поток - группы 1, 2, 5, 6, 7, 9, 10; 2 поток - группы 11, 14.

Например, математика - лекция будет 2-ой парой в аудитории Н-231 для всех групп обозначенных вверху расписания.

Обратите внимание, что расписание может не совпадать по нечетной и четной неделям. Нечетная неделя - верхняя подстрока в строке дисциплины, четная - нижняя. С 02.09.13 г. начинается нечетная неделя, с 09.09.13 г. - четная.

Занятия по некоторым дисциплинам могут проходить 1 раз в две недели, только по четным или нечетным неделям. Например, как в образце, занятия по физике у 2-ой группы проходят в понедельник 1-ой парой в аудитории Д-324 только по нечетной неделе , по четной занятий нет.

Внимание! Возможны изменения и корректировка расписания (в т.ч. в файлах), поэтому сверка со стенным расписанием обязательна.

Обозначение аудиторий в расписании

Занятия у студентов Инженерного института могут проходить и в других корпусах университета, поэтому внимательно смотрите букву перед номером аудитории в расписании.

Д - обозначает корпус на ул. Добролюбова - это главный корпус.

Н - корпус на ул. Никитина - это корпус Инженерного института.

Нк - «новый корпус», находится находится напротив остановки «Сад мичуринцев», за спортивным корпусом, в этом корпусе находится Экономический, Ветеринарный, Юридический факультеты, Институт заочного образования.

А1 , А2 , А3 и А4 - номера аудиторий нового лекционного корпуса, пристроенного к «новому корпусу» со стороны ул. Добролюбова.

З - корпус биолого-технологического института (зоофак).

Зр - корпус «защиты растений» (рядом со строящимся 16-этажном домом).

Поэтому, если в расписании обозначена аудитория Д-324, то занятия будут проходить в главном корпусе на 3 этаже в аудитории №324. Первая цифра в номере аудитории обозначает этаж.

Расписание звонков

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

1 пара 9.00 - 10.30
2 пара 10.40 - 12.10
Перерыв 40 минут
3 пара 12.50 - 14.20
4 пара 14.30 - 16.00
5 пара 16.10 - 17.40
6 пара 17.45 - 19.15
7 пара 19.20 - 20.50

Обратите внимание, что перерыв между парами (с первой по пятую) - 10 минут, а большой перерыв с 12.10 до 12.50.

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

Правила внутреннего распорядка студентов НГАУ

В помещениях учебного заведения воспрещается:

Хождение в верхней одежде, ношение головного убора;

Громкие разговоры, шум, хождение по коридорам во время занятий;

Пользование мобильными телефонами во время учебных занятий;

Курение в университете;

Распитие спиртных напитков, в т.ч. пива, употребление наркотиков;

Появление в состоянии алкогольного, наркотического или токсического опьянения.

!!! Дирекция Инженерного института предупреждает, что за нарушение правил внутреннего распорядка студент может быть отчислен из института.

!!! Если вы видите студентов, поведение которых не соответствует этим правилам, не спешите копировать их, возможно, они уже бывшие студенты.

Вся необходимая и новая информация находится на доске объявлений в холле первого этажа и возле деканатов.

Желаем удачи!!!

Пользуясь медленными и неудобными информационными ресурсами в сети можно проклинать их создателей и терять время, а можно написать паука, который соберёт и классифицирует информацию нужным образом. Уже обработанная информация будет доступна в любой плоскости и с таким откликом, который требуется. Эта статья об одном из таких опытов. С практическим примером разбора и улучшения расписания НГУ (Новосибирского государственного университета).

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

Идея заключалась в том, чтобы упростить доступ к расписанию. Оригинальное расписание, доступное на сайте НГУ, можно посмотреть . Для того, чтобы найти собственное расписание мне приходилось начинать свой путь с главной страницы сайта, переходить на “старый сайт”, затем “информационные системы”, далее “расписание занятий”, выбрать корпус, факультет, группу, итого - 6 кликов. Большая часть этих переходов казалась вполне осмысленной, кроме выбора корпуса: казалось бы, зачем выбирать корпус, если факультеты всё равно разные, да и общее их число не так велико, чтобы разбивать на две страницы (всего около 10)? Но ситуация становилась немного сложней, если нужно было найти расписание преподавателя или друга. Для преподавателя нужно было в худшем случае проверить оба корпуса, а для друга нужно было найти сначала его в списках групп, узнать номер группы, а потом уже всё остальное. Шаги вполне выполнимые, но не всегда захочется их совершать, а ведь ничего не мешает собрать эту информацию и сделать возможность осуществлять такие выборки просто набрав в строке имя человека, расписание которого требуется узнать - как в поисковых системах, к которым все уже привыкли.

Разбор списков

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

...

Для того, чтобы экспортировать такие данные, используется следующий код:

Public function exportGroup($groupFile, $groupName, $department, $course) { $grouplist=file_get_contents($groupFile); $dom2 = new domDocument; $dom2->loadXML($grouplist); $s2 = simplexml_import_dom($dom2); for ($k=0;$kstudent);$k++) { $attrs=$s2->student[$k]->attributes(); $student=new Student(); $student->name=$attrs["name"]; $student->group=$groupName; $student->department=$department; $student->course=$course; $student->save(); } }

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

Исправление до валидного

Само расписание занятий не доступно в xml, кроме того, html, сгенерированный системой расписаний НГУ, оказался невалидным, что поставило меня перед выбором: преобразовывать его к валидному или разбирать регулярными выражениями. Надо сказать, что как-то уж очень не хотелось прибегать к regexp-ам. Разглядывая html файлы я понял, что не так уж много нужно сделать, чтобы документы стали валидными, а именно, добавить один тег (отсутствовал) и указать кодировку. Получилось следующее:

$text=file_get_contents($url); $text = iconv ("CP1251" , "UTF-8" , $text); $doc = new DOMDocument(); $doc->loadHTML(str_replace("", " ", str_replace("", "", $text))); $s = simplexml_import_dom($doc);

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

Поиск

Таким образом у меня получились расписание групп и преподавателей, а также списки студентов.
Расписание в получившейся структуре относится к группе или преподавателю, но не к студенту. Для поиска по студентам, преподавателям, группам и факультетам требовался сложный запрос или несколько запросов к серверу базы данных. Составить такой запрос не проблема, но я опасался за скорость его выполнения. Было решено сделать отдельную таблицу для поиска “searchable”, которая бы содержала в одном столбце псевдонимы, по которым осуществляется поиск, а в другой - адрес документа. В первую очередь - для оптимизации времени доступа. Также это дало возможность обрабатывать запросы вроде “математик василий 1 курс”, но в то же время позволило иметь неконсистентные состояния базы данных, поскольку адрес документа (url) содержится в нескольких различных таблицах. Последнее никак не плюс, но плюсы в данном случае мне виделись гораздо более значительными, чем этот минус.

REST API

Для того чтобы у других не было потребности выполнять всю эту рутину заново я опубликовал открытое REST API, которое уже вроде бы используется в двух сторонних проектах. Запрос к API содержит строку поиска и тип запрашиваемого расписания: на день, на неделю и ближайшая пара. Ответ содержит расписание в формате JSON или возможные названия и адреса соответствующих расписаний, когда заданной строке соответствует несколько расписаний.

Расшифровка сокращений

После публикации довольно много людей говорили, что в расписании используются непонятные сокращения, которые сложно интерпретировать (например, «О.об.химии» это «Основы общей и неорганической химии», а «ТФКП» - «Теория функций комплексного переменного»). Путей решения этой проблемы я видел два: 1. Предоставить студентам возможность самим указывать полные названия и 2. Попытаться каким-то образом их расшифровать. Первый вариант выглядел простым и весёлым, но спорным, поскольку требовалось вводить систему модерации и возможность смотреть без расшифровки, поскольку я сам не мог определить, насколько верное название было предоставлено, а найти экспертов с каждого факультета практически значит попросить нескольких людей расшифровать эти сокращения. Я попытался изыскать возможность автоматической расшифровки, обнаружил списки кафедр и преподавателей с предметами. Списки эти оказались не полными, но, надо сказать, что и списки студентов абсолютной точностью не отличались. Ко всему, имена преподавателей в списке по кафедрам указаны с расшифровкой имени и отчества, а в расписании с инициалами, но это не такая большая проблема. Первая идея была в том, чтобы найти таких преподавателей, которые ведут только один предмет и по ним определить все названия (в НГУ большинство - совмещают преподавание с другой работой и таких, кто ведёт одну дисциплину немало), но этот метод неожиданно провалился и дал неправильные результаты. Возможно, дело в том, что преподаватели с одним предметом не часто входили в те кафедральные списки, которые мне удалось получить. Дальше я пробовал сравнивать по количеству совпадающих букв, но получились тоже довольно странные результаты. Наилучшим оказался метод, который устанавливает соответствие между сокращённым названием и полным только если у этого преподавателя это единственный предмет, начинающийся на эту букву. Таким образом удалось расшифровать большинство предметов.

По аудиториям

Кроме того, у меня очень чесались руки провести статистическое исследование загруженности аудиторий/преподавателей, и мне пришла идея, что можно выводить информацию из расписания на текущий момент: кто и в каких аудиториях сейчас находится, сколько человек, сколько студентов мужского пола, а сколько - женского. Последняя характеристика конечно же была придумана просто для того чтобы сделать проект более весёлым, можно было бы просто вывести все имена, но проблема была в том, что номера групп в расписании не всегда хорошо соответствовали номерам в списках студентов. Например, в расписании могли быть группы 123.1, 123.2, 123.3, а в списках только 123. Таким образом, можно приблизительно сказать сколько человек в каждой группе, но нельзя точно сказать кто именно в какой. Для определения пола я использовал имена студентов. Надо сказать, что определение было настолько точным, насколько я точно могу сам отличить мужское имя от женского, это оказалось не всегда возможно, но в большинстве случаев отлично работает. Исходя из этой информации была построена карта аудиторий, которая обновляется автоматически каждые 10 минут и отображает количество студентов, студенток, количество мест (максимальное число, встречающееся в расписании) и номера групп, которые в данный момент находятся в этой аудитории. Может быть очень полезно если вы ищете пустую аудиторию или потеряли какую-то вещь и хотели бы опросить всех, кто мог её видеть.
Из расписания были выбраны аудитории, разобраны постфиксы, обозначающие корпус, а дальше выведены на странице так, что получился список следующего вида:

Для каждой аудитории/корпуса отображается график загруженности на любой введённый день

Это график для главного корпуса НГУ на пятницу; сервис позволяет смотреть такие для любой аудитории или корпуса на любой учебный день (на не учебные график пустой). Здесь по Y - количество человек, время - начало пар. Красный столбик - студентки, синий - студенты, серый - сумма. Бросается в глаза дробная шкала по Y, дело в том, что у меня не получилось настроить библиотеку рисования графиков для вывода только целых чисел, но мне кажется это не сильно принципиальным. Да, дробного количества людей не бывает, но столбики и не упираются в нецелые числа.

Перед тем как написать статью я решил посмотреть как же всё устроено в МГУ и нашёл расписание, даже карту пустых аудиторий, но оказалось, что для получения информации нужно запастись терпением; и дело даже не в количестве кликов, которых тоже предостаточно, а в очень медленном отклике. Из появляющихся периодически ошибок SQL можно сделать выводы об использовании СУБД, но, видимо как-то не слишком оптимально всё устроено.

Статистика

Имеющиеся данные позволили также получить некоторые более глобальные цифры.

Самые женские аудитории - 500, 431 и 608 - около 89% девушек

Самая мужская аудитория - 312, всего 10% девушек

Наиболее женское время - 14:15, 53% девушек

Наиболее мужское время - 19:20, 46.8% девушек

Наиболее женский день - вторник, 52.3% девушек

Наиболее мужской день - понедельник 49.2% девушек

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

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