Инструмент учета мнения и пожеланий жителей при оценке каждого из субиндексов. Приложение позволяет собирать мнения на тему различных инициатив, формировать серии опросов и проводить градацию ответов по шкале негативности-позитивности посредством применения машинного обучения. Также реализуется функция "единого окна" жалоб и предложений.
Средства разработки: Python, FastAPI, SQLite, scikit learn, Flutter.
Что нужно выполнить перед запуском кода
Для запуска сервера необходимо установить несколько внешних библиотек. Ниже приведены команды их установки посредством pip.
pip install uvicorn
pip install fastapi
pip install scikit-learn
pip install joblib
Как выполнять основные операции
Запуск сервера выполняется в командной строке из директории, где находится server.py. Требуется ввести команду:
uvicorn server:app
После этого на локальной машине будет запущен сервер, который реализует весь поддерживаемый функционал в рамках MVP.
По умолчанию сервер будет работать по следующему адресу(также адрес будет выведен в консоль при запуске) http://127.0.0.1:8000.
В базе данных по умолчанию в качестве тестового пользователя присутсвует аккаунт, логин к которому user, а пароль pass.
Протестировать минимальную работоспособность сервера можно следующим запросом: http://127.0.0.1:8000/login/?login=user&password=pass
Также аналогичная версия сервера работает на удаленном сервере в любое время http://194.58.122.45:6535/.
В server.py Вы можете найти более развернутые примеры запросов, основанных на тестовых данных из БД.
Как получать статистику с сервера
Интерфейс для работы со статистикой реализован в файле statistics/statistics.py.
Сборка мобильного приложения
Проект написан на Flutter. Используйте flutter build для сборки проекта.
Реализованы 2 подхода к сбору мнений:
- Активный пользователь отвечает на несколько коротких вопросов в неделю.
- Пользователь может отправить жалобу или выступить с инициативой через систему.
Каждый вопрос имеет собственный вес и в соответствии с ним влияет на соответствующий мнению по выбранному субиндексу показатель. Для анализа текстовых данных используется определение его тональности (эмоционального окраса) с помощью наивного байесовского классификатора. Значение показателя для одного субиндекса может быть вычислено по формулам:
Здесь:
- - множество вопросов;
- - множество жалоб;
- - множество вариантов ответов на вопрос ;
- - множество ответов на вопрос в свободной форме;
- - вес вопроса ;
- - положительность варианта (задается вручную);
- - доля выбравших вариант пользователей среди всех проголосовавших;
- - оценка тональности текста;
- - гиперпараметр алгоритма - предполагаемое влияние жалоб на показатель.
Основная решаемая задача в рамках хакатона - реализация серверной части с API, который может быть использован в любой системе как расширение функционала. Однако для демонстрации работы было разработано мобильное приложение.
Как сбор мнений улучшит индекс?
При анализе цифровизации городской среды важно учитывать не только бинарные и количественные показатели, но и удобство с точки зрения жителя. В версии списка показателей 2019-ого года почти 70% критериев могут быть как оценены по документам, так и опросом пользователей (таблица с классификацией показателей). Таким образом, введение дополнительных показателей непосредственно для мнений пользователей или модификация существующих может не только упростить процесс сбора данных, но и повысить качество оценки.
Почему статистика не будет субъективной?
Предлагаемая модель сбора статистических данных предусматривает формулировку не окрашенных эмоционально вопросов. В случае возникновения ошибок и непредвиденных ситуаций из-за человеческого фактора, таковые могут быть также автоматически определены. Тем не менее, сбор достаточного количества голосов, который возможен с описанной системой проведения опросов, снизит уровень субъективности информации.
Почему способ быстрее и проще текущих способов ручного сбора данных?
Для запуска системы достаточно единожды составить список вопросов по каждому субиндексу. Набор вопросов для каждого города идентичен, анализ данных производится автоматически.