Home
Задание предполагает разработку двух НЕЗАВИСИМЫХ модулей.
Первый модуль должен реализовывать функцию чтения и разбора представленного файла, соответстующего структуре файла, предоставленной заказчиком. На входе данный модуль должен получать следующие сведения: тип файла(файл с общими вопросами или файл с вопросами по преподавателям, обязательный параметр), адрес файла (обязательный параметр) и символ-делиметер (необязательный параметр). Если делиметер не указан, то в качестве делиметера используется ';'.
file = record *(crlf crlf record)[*crlf]
record = "Семестр" delim "Направление" crlf semestre delim specialization crlf question delim teacher_name delim course crlf answers
answers = (variant *(delim variant) crlf count *(delim count)) / (comment *(crlf comment))
file = record *(crlf crlf record)[*crlf]
record = question crlf answers
answers = comment *(crlf comment)
- crlf - символ новой строки (перевода каретки).
- В круглых скобках указываются связанные в один блок элементы.
- В квадратных скобках - необязательные элементы.
- Звездочка (*) перед элементом очзначает, что элемент может повторяться 0 и более раз.
Примеры файлов в root папке проекта: results.csv и common-results.csv.
Эти файлы имеют расширение csv, но не соответствуют спецификации csv файлов!
В результате работы модуль должен возвращать двумерный массив, содержащий данные из файла в соответствии со структурой csv файла (см. документацию), или значение false, если файл не соответствует требуемой струтуре.
Предлагается использовать следующую структуру для двумерного массива, созданного по файлу с результатами ответов по преподавателям:
Первый элемент списка - заголовки столбцов (семестр, направление, преподаватель, предмет, вопрос(тип вопроса), ответы).
Все последующие элементы списка - значения из записей файла.
Поле "ответы" предлагается формировать следующим образом: последовательно указываются значения ответов. Если это ответы-счетчики - то сначала указывается количество ответов для варианта 1, потом 2 и так далее.
В случае, если файл содержит в себе общие вопросы - то из предложенной стркутуры нужно просто убрать ненужные столбцы.
Второй модуль - функцию создания и сохранения инфографики. При этом модуль должен предоставлять возможность пользователю выбрать, какой тип графиков он хочет получить(круговая диаграмма или гистограмма), стиль их оформления(используемые цвета/цветовые схемы), формат сохранения файлов (адрес, расширение и пр.). Для некоторых вопросов невозможно будет построить графики (произвольные комментарии) - для таких вопрос необходимо будет просто вывести ответы.
На входе данный модуль должен принимать массив значений для построения графика (обязательный параметр) и набор "инструкций"(тип графиков, стиль оформления, адрес сохранения и пр.) (необязательный параметр, если не заданы - создается график (тип и стиль оформления заданные по умолчанию) и сохраняется в pdf-файл со сгенерировнным именем).
После того, как будут разработаны данные модули, необходимо будет разработать скрипт для визуализации результатов опросов.
Срок выполнения задания - 4 ноября 2016 г.
UPD(16.12.2016): Добавление модуля для построение графиков, динамики преподователей по годам. Появилась возможность, строить графики динамики преподователя по годам. Добавились следующие аргументы для этого (можно использовать либо только старые аргументы - для работы с CSV файлами, либо толко новые для построение графиков динамики преподователей из монго):-it {m,c} - выбор между построениеми графиков из монго (m), и парсом CSV (c)
-bd - название импортируемой базы данных
-col - название коллекции
-sur - имя преподователя
-sub - наименование предмета
-spe - названия специальности
-pt - путь к файлу с результатом (результат - сгенерированный .pdf файл с графиком динамики).