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

Вот вы какую больше коробку передач любите, механическую или автомат? Как подсказывает практика, большинство предпочитает автомат. Остальные, так же как и я, склоняются к механике. И это не без причины.

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

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

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

Что касается модели прогнозирования футбольных результатов, то она строится на тех принципах машинного обучения, о которых я рассказывал в статье Футбольно-аналитическая программа plus3s: прогнозирование результата футбольного матча и просто игра и статье Как определить причины достижений и неудач футбольного клуба с помощью цифр. Однако данной программы, о которой шла речь, уже не существует, так как ее автор, то есть я, осознал, что будущее подобных разработок за "вэбом". Это в первую очередь удобней для пользователей, а во-вторую банально защищает код.

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

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

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

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

Например, мы дали программе данные о пяти-шести и так далее сезонах чемпионата, и программа стала неплохо в них ориентироваться. Однако текущий сезон, за которым мы наблюдаем (вроде сезона 2016, когда чемпионом Англии стал Лестер), демонстрирует ну вот совершенно не те цифры, на которых обучалась программа. Логично, что и ориентироваться в них она будет хуже. Более того, она, программа, о происходящем даже не будет догадываться! Откуда ей знать, что в таком-то году всем будет заправлять какой-то выскочка. Хотя, с другой стороны, возможно, что этот выскочка просто повторяет чей-то путь, и тогда вопрос только в количестве данных, полученных программой.

И это в таком труднопрогнозируемом деле, как футбол!.. Да, куда проще предсказать тип растения по характеристикам лепестка!

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

Кстати, в качестве хостинга мною практически в рандомном порядке был выбран reg.ru, и, в принципе, нашим взаимодействием я доволен.

По ходу работы вам придется решать возникающие проблемы, но поверьте, что все они преодолимые. Уж какой только код я не заставлял работать на сервере! Иногда решение удавалось найти только спустя несколько дней, но удавалось. Например, сайт, кроме всего прочего, использует библиотеку парсинга bs4. Изначально возможность применения этой библиотеки ограничивалась лишь одним условием ее установки. И все работало, но только до определенного дня, когда произошла поломка. Всеми возможными способами я пытался понять в чем же проблема, пока не выяснил, что по какой-то причине, в главном коде просто надо... импортировать bs4 раньше, чем сам Flask. Но почему?! Ведь раньше все было хорошо и без такой последовательности импорта!.. Нужно ли говорить, что в подобных случаях служба поддержки, при всем к ней уважении, вряд ли вам что-то подскажет, и проблему придется решать самому. И таких моментов при "утяжелении" проекта меньше не становится. Вот вам и механическая коробка передач!

В общем трудности обязательно будут, но, как я уже и сказал, все они решаемые.

Напоследок отмечу относительную непопулярность Flask в сравнении, например, с Django. Предположу, что связано это с тем, что все-таки большинство вэб-проектов прекрасно "едут" и на автоматической коробке передач. В случае же, если вам необходимо создать что-то "потяжелее", а также вы любите все контролировать собственноручно, то для разработки вам может потребоваться именно Flask.

Кстати, если что - обращайтесь! Чем смогу - помогу.

P.S.

Видеоуроки по Flask можно посмотреть на ютубе здесь.

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

Комментарии (4)


  1. temadiary
    26.07.2024 15:28

    Фласк это прекрасно, как и фастапи и боттл. А что стоит перед фласком в деплое? Какой wsgi? Спасибо


    1. razoryoutub
      26.07.2024 15:28
      +1

      Я не автор, но поделюсь - мы обычно используем gunicorn и nginx с reverse proxy на unix сокет


    1. Plus3s Автор
      26.07.2024 15:28

      Да, что касается wsgi, то gunicorn. А в целом, так как этот проект мой индивидуальный и осуществляется только на энтузиазме в свободное время, то я максимально упрощаю себе работу в том, что не связано с целью. Ни о каком контроле версий, например, речи не идёт. Наверное это не хорошо, но мне не мешает.


  1. Dair_Targ
    26.07.2024 15:28

    Поработав несколько лет с flask и tornado выбираю теперь только django (+drf) именно для веба. Для микросервисов - grpc. А, и машины с АКПП предпочту;)