Анализ названий работ с конференции, проводимых Студенческим научным обществом
Когда я создавал систему отчетности для СНО ещё на этапе гугл форм в далеком 2016 году, я заранее знал, что будет накапливаться большой массив инфомации. Первый вопрос был таким: «Как собрать данную информацию?». Больше двух месяцев меня не отпускает второй вопрос: «Что можно сделать с собранной информацией за последние два года?». Конечно анализировать и отслеживать тенденцию развития исследований студентов в тематическом разрезе!
Что это?
В информационных письмах конференций сказано, что в докладах могут быть представлены результаты исследований теоретического и экспериментального характера по истории, географии, праву, филологии, экономике, медицине, психологии, педагогике, химии, физике, математике, энергетике, электро-технике, радиотехнике, информатике, теории управления, дизайну, компьютерным технологиям, вычислительной технике, машиностроению и строительству, инфокоммуникационным технологиям и системам связи, электронике и наноэлектронике и др.
Мне захотелось отследить, на какие именно виды исследований был сделан упор в разных конференциях. К примеру, когда на географию посвящали свои исследования больше, чем на историю. Какие тенденции были в этом году, и главное, что ожидать в следующих конференциях.
Сбор начальных данных
Чтобы никто не подумал, что, я, как разработчик сайта, пользуюсь привилегиями, данные можно скачать с сайта ais.snochuvsu.ru/program , используя JavaScript-функцию, которая «рисует» все на странице. Если вам лень, все ссылки на обработанные файлы доступны в конце статьи.
Немного статистики: примерно 16752 названий студенческих проектов в секционных заседаниях.
Перевод
В мировом сообществе различные сервисы развиваются куда быстрее, чем в рунете. Соотвественно, я вышел в гугл с запросом «classification topics on sentence api» и получил большое количество очень полезной информации.
Конкретно, я понял, что обрабатывать русский текст — экономически не выгодно. Переводить вручную 16к предложений — можно умереть.
Кстати, интересный факт насчёт перевода подсказал мне знакомый из солнечного Сан-Франциско, который занимается ветрогенераторами. Когда ему нужно перевести статьи, он сначала нанимает людей, которые переводят с русского на английский и делают это замечательно, а позже, он нанимает людей, которые не знают славянских языков, для того, чтобы ему сделали рерайт текста на чистый английский язык. Он отмечает, что форма мышления отличается у данных людей.
Жалко, что он не дал мне переводчика. Поэтому я открыл Google Переводчик использующий машинное обучение для перевода и перевел там.
Классификация названий
Очень сильно помогла разработка ребят, под названием Topic-tagging. Как написано на их сайте, с помощью этого инструмента новостные каналы могут легко классифицировать свое содержание, а рекламодатели могут также размещать рекламу в Интернете более соответствующим образом, сопоставляя содержание веб-страниц с отраслью рекламодателя. Основываясь на понимании контекста языка, данный инструмент может генерировать темы, подобные человеческим, даже без присутствия этого конкретного слова в контексте. Удобно и классно, не так ли? Думаю, тут не обошлось без машинного обучения. Казалось бы причем тут…
Логично, что воспользоваться данным сервисом можно не бесплатно. Однако, используя сервис rapidapi.com, можно зарегистрироваться, оформив бесплатную подписку в 0$ за месяц. Да, нужно ввести данные карточки (не МИР), но платить 1 рубль или доллар для подтверждения не нужно. За эти действия можно получить в бесплатное пользование 10 000 запросов в API. Казалось бы, очень много, но мне нужно было в два раза больше запросов. Решил проблему простым способом, зарегистрировав ещё 1 аккаунт. Звонили из Пентагона, сказали что вы приняты на работу по взлому.
Благо, что у RapidApi есть визуальный конструктор запросов с возможностью протестировать на сайте и получить нужный код практически на любом языке программирования. По сути, ЯП не так важен, ибо повышения производительности смысла нет добиваться, поэтому я выбрал PHP.
Обработка данных
После предыдущей работы, у меня есть 4 рабочих JSON файла с темами 4-ех последних конференций, проводимых Студенческим научным обществом.
API выдает в качестве нужных мне параметров массив под названием «Topic», в котором в процентном соотношении расписываются все названия тем, которые подходят к анализируемому тексту. Можно было бы собирать самое максимальное значение, но больше информации — больше данных.
После того, как написал небольшой скрипт, который суммирует числовые массива Topic в один большой массив, я запустил на сервере. Мне было лень как-то распараллеливать запросы и что-то оптимизировать, когда можно просто запустить и через 3-4 часа получить готовые JSON-файлы с обработанными данными.
Визуализация
Данные мне показались очень хорошими, но из-за большого количества наглядно их смотреть, скажем так, практически неудобно. Поэтому, принял решение визуализировать эти данные в виде интерактивных графиков. Поначалу я хотел использовать программные библиотеки D3.js или Highcharts, для построения графиков, написанные на чистом JavaScript. Но, учитывая мой опыт предыдущих исследований и разработок (к примеру, статистика публичных чатов первокурсников ЧувГУ 2019 года на 1.5 миллиона сообщений), я знаю, что рендерить достаточно большие данные простыми способами — неправильно.
Конечно, я бы мог использовать модуль boost.js от Highcharts. Highcharts обычно отображает свои графики в виде SVG. Насколько я понимаю, модуль boost.js заключается в том, что он вызывает отображение некоторых частей графика при помощи Canvas. Canvas HTML5 намного быстрее, чем SVG для большого количества данных. Возможно, в будущем или позже, я буду использовать указанную выше методику, но в этом случае я попробовал CanvasJS, который не такой новороченный, как Highcharts, но не нагружает браузер и устройство в том числе.
Итоги
В конце концов, я реализовал страницу на собственном сайте, которая доступна по адресу daniilak.ru/chuvsu. Страница спокойно загружается через телефон и/или компьютер. Мышкой или нажатием двумя пальцами можно приблизить график. Справа сверху при масштабировании появляются две кнопки: одна необходима для того, чтобы перемещаться влево-вправо, другая — для возврата масштабирования в первоначальное положение.
Планируется, объединить такое количество тематик в более общие, а именно по разделам наук, для того, чтобы анализировать статистику на общем уровне.
Файлы и ресурсы:
Что такое id_event? Это номер конференции в базе данных. Расшифровка:
1 — 52-ая научная конференция. Весна 2018 года.
2 — Человек Гражданин Ученый — 2018. Осень 2018 года.
3 — 53-ая научная конференция. Весна 2019 года.
4 — Человек Гражданин Ученый — 2019. Осень 2019 года. (Данные неполные в связи с тем, что конференция только начинается.
- Ссылка на TXT-файл с переводом на англ. названий 1-ой конференции
- Ссылка на TXT-файл с переводом на англ. названий 2-ой конференции
- Ссылка на TXT-файл с переводом на англ. названий 3-ой конференции
- Ссылка на файл в JSON-формате тематик 1-ой конференции
- Ссылка на файл в JSON-формате тематик 2-ой конференции
- Ссылка на файл в JSON-формате тематик 3-ой конференции
Данная статья является интеллектуальной собственностью автора. Результаты, файлы, текст статьи и другие данные разрешается использовать в некоммерческих целях с указанием источника на данную статью по ссылке: vk.com/@daniilakk-raspredelenie-tem-konferencii
Кстати, редактор статей ВКонтакте для меня лично гораздо удобнее, чем Word.