Category: Data Science

25
Сен
2020

🎓 Как я перешел из математиков в аналитики данных

История Тима Хоппера – математика, который построил карьеру аналитика данных в сфере кибербезопасности.

Во вступительных публикациях серии мы писали о том, как можно изучить Data Science онлайн с нуля, а также о навыках, необходимых в профессии Data Scientist. В этом материале, подготовленном при поддержке Факультета Искусственного интеллекта онлайн-университета GeekBrains, мы перевели рассказ Тима Хоппера специалиста по анализу данных, разработчика программного обеспечения в области кибербезопасности и инженера машинного обучения. Тим изучал математику в колледже, а затем провел год в аспирантуре Университета Вирджинии. Сейчас он работает архитектором Data Science в DNT и ведет блог.

Перевод оригинального текста выполнен с сокращениями.

***

«Не было еще лучшего времени, чтобы стать математиком»

Во время моей учебы в колледже Business Week опубликовал статью, в которой говорилось: «не было еще лучшего времени, чтобы стать математиком». Тогда я видел огромное несоответствие между этим материалом и тем, чему меня учили на занятиях (а, значит, и теми, кого я считал математиками). Сталкиваясь с другими статьями, восхваляющими «век математиков», я все чаще задавался вопросом, знают ли их авторы, что на самом деле изучают студенты математических факультетов.

<a href="https://press.princeton.edu/sites/default/files/styles/hero_background/public/2019-09/SUB_Math_01_0.jpg?itok=dmWvu8Xm" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Небольшая предыстория обо мне

Пройденные мною в колледже курсы:

  • линейная алгебра;
  • дискретная математика;
  • дифференциальные уравнения (ОДУ и численные методы решения);
  • математическая статистика;
  • численные методы (линейное и квадратичное программирование);
  • общая алгебра;
  • теория чисел;
  • теория функций действительной переменной;
  • теория функций комплексной переменной;
  • общая топология.

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

Что такое Data Science?

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

Программирование и инжиниринг

Программирование является ключевым навыком в Data Science. Как утверждал Дрю Конвей, «специалисту по обработке данных необязательно иметь ученую степень в области информатики, но он должен уметь манипулировать текстовыми файлами в командной строке, понимать векторизованные операции и думать алгоритмически. Эти навыки сделают из вас эксперта в вопросах работы с данными». Многие из моих однокурсников, кратко ознакомившиеся с C++ и время от времени использующие Mathematica для решения дифференциальных уравнений, не знали ничего о работе с файлами из командной строки, не говоря уже о том, чтобы написать простой скрипт для sed (потоковый текстовый редакторприм. переводчика).

Работа в сфере Data Science требует даже большего, чем просто решать проблемы с использованием программного кода. Как писал Трей Коузи, многие должности требуют навыков разработки программного обеспечения и владения инструментами написания повторно используемого кода – систем контроля версий и методов тестирования программного обеспечения. Хотя я учился в колледже программированию, некоторые необходимые мне сейчас в работе навыки, долго оставались для меня неизвестными.

Прикладная статистика

Мое краткое знакомство с математической статистикой было полезным для освоения машинного обучения, но в моей математической подготовке отсутствовали курсы, связанные с постановкой статистического эксперимента. При этом многие команды Data Science занимаются причинно-следственным выводом, проектированием экспериментов и их анализом. Об этих необходимых для Data Scientist навыках на математическом факультете я ничего не узнал. Более того, до написания курсовой работы, я бы даже не смог дать определение машинному обучению, которое является краеугольным камнем науки о данных. Я бы сказал, что искусственный интеллект – это системы исполнения бизнес-правил на Lisp и Prolog.

Прикладная математика

Те, кто изучал статистику, знают, что существует пропасть между пониманием статистики в теории и способностью эффективно применять статистические методы к повседневным задачам. Это лишь один из аспектов более серьезной проблемы: математическое (в том числе статистическое) моделирование является чрезвычайно сложной задачей, но в большинстве математических программ отсутствуют инструкции по эффективному моделированию реальных проблем. До сих пор определение проблемы в математических терминах одна из самых трудных задач, с которыми я сталкиваюсь. Уверен, что я в этом не одинок. Хотя сейчас я знаком с широким спектром математических моделей, редко бывает ясно, какая именно модель должна применяться в той или иной ситуации.

Подозреваю, что многие люди, даже технические специалисты, не уверены в том, что академическая математика выходит за рамки студенческих вычислений. Математики в основном работают с абстрактными структурами, которые редко имеют какое-либо отношение к наборам данных. Джон Д. Кук сделал аналогичные наблюдения об ограничениях дисциплин чистой и прикладной математики, назвав себя «очень прикладным математиком». Под очень прикладной математикой он понимает «готовность к “грязной” работе, необходимой, чтобы увидеть, как математика используется на практике. Это касается не только самой математики, но и консалтинга, менеджмента, маркетинга и т. д.» Эти навыки явно отсутствуют в большинстве учебных программ, с которыми я знаком.

Математика → Data Science

Математическое образование оставило меня совершенно неподготовленным к карьере в области Data Science. Поэтому вы могли бы спросить, как я получил работу аналитиком данных. Могу назвать несколько причин.

<a href="https://digitalsocietyschool.org/wp/wp-content/uploads/2018/09/data_track_banner.png" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Первая причина

Академическое изучение математики обеспечивает большую часть теоретических основ Data Science. Математика лежит в основе изучения машинного обучения, статистики, оптимизации, структур данных, анализа алгоритмов, архитектуры компьютеров и других важных аспектов Data Science. Знание математики позволяет быстрее овладеть каждой из этих областей. Например, изучение метода главных компонент будет значительно проще для человека с опытом в линейной алгебре. На метауровне обучение математике заставляет студентов тщательно обдумывать и решать сложные задачи эти навыки ценны во многих областях, в том числе и Data Science.

Вторая причина

Я невольно прошел ряд курсов, которые впоследствии сыграли важную роль в моем инструментарии Data Science. Например, текущая работа в области байесовского вывода стала возможной благодаря знанию линейной алгебры, численных методов, стохастических процессов, теории меры и математической статистики.

Третья причина

Я получил степень бакалавра по информатике. Это обеспечило прочную основу, когда я решил серьезно заняться развитием навыков программирования в 2010 г. Хотя мое академическое знакомство с компьютерными науками не дало навыков инженера-программиста, я окончил колледж с четким пониманием основных структур данных, анализа алгоритмов, теории сложности и нескольких языков программирования.

Четвертая причина

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

Пятая причина

Ненасытный интерес к компьютерам и решению задач сыграл ключевую роль в моем карьерном успехе. Страстно желая освоить программирование, я изучил PHP и SQL еще в средней школе (кстати, чтобы сделать фан-сайт Толкиена). Получив небольшие домашние задания по решению дифференциальных уравнений в Mathematica, я купил и прочитал книгу по программированию в Mathematica. В колледже и аспирантуре я часто пытался (иногда это удавалось) писать программы для решения домашних заданий, которые, как ожидали профессора, должны были решаться вручную. Эта любознательность снова и снова доказывала свою ценность: мне приходилось осваивать новые навыки и решать технические проблемы всех видов. Я с удовольствием принимаюсь за решение новых задач как на работе, так и в свободное время, вот уже пятнадцать лет.

Шестая причина

Мне посчастливилось найти работодателей, которые терпеливо обучали меня и давали свободу учиться самостоятельно. За два с половиной года профессиональной карьеры я изучил много нового и не думаю, что в ближайшее время остановлюсь. Как сказал Мэт Келси: «всегда будь уверен, что ты не самый умный человек в этой комнате». Я очень благодарен трем местам работы, где был окружен умными людьми, которые передали мне многие знания, и руководителям, которые доверяли мне достаточно, чтобы позволять разбираться во всем самостоятельно.

И наконец

Благодаря четырем с половиной годам участия в сообществе Data Science в Twitter, у меня была возможность общаться с одними из самых ярких умов в сфере Data Science (большинство этих людей я никогда не встречал лично), и построить социальную сеть, которая помогла мне найти текущую работу. Однако я больше всего хочу подчеркнуть педагогическую ценность твиттера. Каждый день я узнаю о выпуске новых программных инструментов, новых постах в блогах и размышлениях моих героев Data Science. Твиттер помогает понять, какие посты стоят времени, и благодаря ему я знаю о Theano, Scalding и dplyr.

Заключение

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

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

***

Желающим освоить профессию аналитика данных мы рекомендуем курс Data Science Факультета Искусственного интеллекта. Программа включает основательную математическую подготовку: введение в математический анализ, теорию вероятностей и математическую статистику, линейную алгебру и алгоритмы анализа данных. А также программирование и навыки практической работы в команде. Кроме того, онлайн-университет GeekBrains позволяет не только получить студентам необходимые знания, но и устроиться на работу.

22
Сен
2020

Python vs. R: что выбрать для Data Science начинающему специалисту?

Python и R —два самых популярных языка для Data Science. Какой из них выбрать? Разбираемся в плюсах, минусах и инструментах обоих языков.
— Читать дальше «Python vs. R: что выбрать для Data Science начинающему специалисту?»

21
Сен
2020

🎱 NoСode Data Science: 8 платформ машинного обучения без программирования

Было бы здорово, если бы модель машинного обучения можно было просто перетащить иконкой в проект, drag-and-drop. Стоп… но ведь такое уже есть!

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

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

Как следствие, развитие получили средства ИИ, не требующие познаний в Data Science – NoCode-платформы. В таких системах ключевые этапы обработки данных визуализированы и «упакованы» во встраиваемые готовые решения. Никаких сложных математических моделей и многострочного кода.

За счет NoCode-платформ компании могут создавать и использовать собственные наборы данных, обучать и развертывать модели с минимальными познаниями в программировании или даже вовсе без них. Это отличный вариант и для продвинутых разработчиков – во всякой области есть своя специфика, а для изучения Data Science нужно немало времени. Например, мобильные разработчики могут использовать NoCode-системы, чтобы внедрить технологии машинного обучения в приложения. Понимая специфику использования программ на смартфонах, они лучше осознают, как построить обучение и использовать такие алгоритмы.

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

Материал подготовлен при поддержке онлайн-школы SkillFactory – экспертов по образованию в IT и Data Science.

1. Apple: Create ML

Одним из свежих коммерческих внедрений NoCode-идей стал инструмент CreateML, поставляемый в числе Developer Tools для среды разработки Xcode (начиная с 11-й версии). Есть набор предобученных шаблонизированных моделей, достаточно лишь выбрать тип модели и передать в требуемом формате данные для обучения и теста: таблицы, текст, изображения, звук или видео.

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

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

2. Google: AutoML

Cloud AutoML от Google умеет примерно то же самое, что CreateML от Apple, но все делает в облаке. Есть и аналогичное категориальное разделение: инструмент позволяет проводить классификацию изображений, обработку естественного языка, перевод текстов, обработку табличных данных, изображений и видео. Облачный AutoML устраняет не только необходимость знания алгоритмов машинного обучения, но и проблемы с хранением информации.

Обученные модели можно экспортировать в форматы .pb, TensorFlow Lite (.tflite), CoreML (то есть формат Apple) и др.

3. Сегментация изображений: MakeML

MakeML – NoCode-инструмент создания моделей детектирования и сегментации изображений, аннотации объектов, управления соответствующими наборами данных.

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

Кстати, если хочется изучить эти вопросы детальнее, то освоить соответствующие нейросетевые алгоритмы и создать собственный проект по компьютерному зрению, можно на 3-м и 4-м семестрах курса Data Science от SkillFactory. Там же присутствует и соответствующий кейс по распознаванию объектов на фотографиях с помощью алгоритмов глубокого обучения. Такую модель можно связать с сервером и обернуть в телеграм-бота.

4. Мобильные приложения: Fritz AI

Fritz AI – платформа машинного обучения, нацеленная на преодоление разрыва между разработчиками мобильных приложений и аналитиками данных. Разработчики iOS и Android смогут быстро обучить и развернуть модель или даже использовать уже обученный SDK с поддержкой анализа изображений.

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

5. Генерация контента: RunwayML

RunwayML – платформа машинного обучения для создателей контента. Есть интерфейс для быстрого обучения моделей: от генерации текста и изображений до захвата движения, обнаружения объектов и т. д. Имеются модели для переноса стиля и удаления фона.

Хотя за экспорт моделей из приложения взимается плата, обученную генеративно-состязательную нейросеть можно бесплатно использовать для синтеза новых изображений. Приложение доступно на macOS, Windows и в браузере (на стадии бета-тестирования).

6. Табличные данные: Obviously AI

Obviously AI используется для решения задач с пользовательскими данными в табличном-формате CSV. Загружаем набор данных и выбираем столбец переменной, для которой хотим сделать прогноз. Вводим на обычном, естественном языке вопрос – что мы хотим узнать, например, каким будет доход в следующем месяце или как изменится спрос на товар. Платформа самостоятельно выбирает подходящий алгоритм и обучает модель.

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

7. Предварительная обработка изображений: SuperAnnotate

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

Создание наборов данных для обнаружения объектов и сегментации изображений станет проще и быстрее. Особенно хорошо командой продумана работа с видеоданными.

8. Teachable Machine

Teachable Machine – еще одна NoCode-платформа машинного обучения от программистов Google. В отличие от AutoML – инструмента, заточенного под разработчиков – Teachable Machine легко обучить прямо в браузере. Сейчас можно тренировать модели распознавать изображения, звуки и позы.

Обучение проводится как на загружаемых файлах, так и с помощью веб-камеры. Teachable Machine использует библиотеку Tensorflow.js и гарантирует, что данные об обучении останутся на устройстве. Окончательную модель можно экспортировать в форматы Tensorflow.js или tflite и использовать на собственном веб-сайте или в приложении.

Заключение

Хотя универсального решения не существует, вы всегда можете выбрать платформу исходя из текущих потребностей и знаний в области. Конечно, в NoCode-платформах машинное обучение никуда не исчезает – просто спрятано под капотом. Чтобы построить более гибкую систему, необходимо познакомиться со спрятанными внутри таких платформ алгоритмами. Если некоторые знания о профессии у вас уже есть, достаточно их систематизировать. А если вы находитесь в самом начале пути, во всём разобраться помогут квалифицированные наставники с опытом в индустрии.

Наши коллеги из Skillfactory запускают курс, на котором учат профессии Data Scientist с нуля. В нем есть все необходимые уроки, кейсы и тренажеры. С первых недель обучения ментор помогает определить карьерные цели и не сойти с намеченного пути, а карьерный центр подскажет, как оформить резюме и попасть на собеседование.

Классный специалист по Data Science нужен вне зависимости от индустрии, а спрос на рынке труда, как мы заметили в начале статьи, значительно превышает предложение.

21
Сен
2020

🎱 Сможет ли программа заменить Data Scientist: платформы для машинного обучения без программирования

Было бы здорово, если бы модель машинного обучения можно было просто перетащить иконкой в проект, drag-and-drop. Стоп… но ведь такое уже есть! Рассказываем о восьми сервисах автоматизации задач Data Science.

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

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

Как следствие, развитие получили средства ИИ, не требующие познаний в Data Science – NoCode-платформы. В таких системах ключевые этапы обработки данных визуализированы и «упакованы» во встраиваемые готовые решения. Никаких сложных математических моделей и многострочного кода.

За счет NoCode-платформ компании могут создавать и использовать собственные наборы данных, обучать и развертывать модели с минимальными познаниями в программировании или даже вовсе без них. Это отличный вариант и для продвинутых разработчиков – во всякой области есть своя специфика, а для изучения Data Science нужно немало времени. Например, мобильные разработчики могут использовать NoCode-системы, чтобы внедрить технологии машинного обучения в приложения. Понимая специфику использования программ на смартфонах, они лучше осознают, как построить обучение и использовать такие алгоритмы.

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

Материал подготовлен при поддержке онлайн-школы SkillFactory – экспертов по образованию в IT и Data Science.

1. Apple: Create ML

Одним из свежих коммерческих внедрений NoCode-идей стал инструмент CreateML, поставляемый в числе Developer Tools для среды разработки Xcode (начиная с 11-й версии). Есть набор предобученных шаблонизированных моделей, достаточно лишь выбрать тип модели и передать в требуемом формате данные для обучения и теста: таблицы, текст, изображения, звук или видео.

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

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

2. Google: AutoML

Cloud AutoML от Google умеет примерно то же самое, что CreateML от Apple, но все делает в облаке. Есть и аналогичное категориальное разделение: инструмент позволяет проводить классификацию изображений, обработку естественного языка, перевод текстов, обработку табличных данных, изображений и видео. Облачный AutoML устраняет не только необходимость знания алгоритмов машинного обучения, но и проблемы с хранением информации.

Обученные модели можно экспортировать в форматы .pb, TensorFlow Lite (.tflite), CoreML (то есть формат Apple) и др.

3. Сегментация изображений: MakeML

MakeML – NoCode-инструмент создания моделей детектирования и сегментации изображений, аннотации объектов, управления соответствующими наборами данных.

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

Кстати, если хочется изучить эти вопросы детальнее, то освоить соответствующие нейросетевые алгоритмы и создать собственный проект по компьютерному зрению, можно на 3-м и 4-м семестрах курса Data Science от SkillFactory. Там же присутствует и соответствующий кейс по распознаванию объектов на фотографиях с помощью алгоритмов глубокого обучения. Такую модель можно связать с сервером и обернуть в телеграм-бота.

4. Мобильные приложения: Fritz AI

Fritz AI – платформа машинного обучения, нацеленная на преодоление разрыва между разработчиками мобильных приложений и аналитиками данных. Разработчики iOS и Android смогут быстро обучить и развернуть модель или даже использовать уже обученный SDK с поддержкой анализа изображений.

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

5. Генерация контента: RunwayML

RunwayML – платформа машинного обучения для создателей контента. Есть интерфейс для быстрого обучения моделей: от генерации текста и изображений до захвата движения, обнаружения объектов и т. д. Имеются модели для переноса стиля и удаления фона.

Хотя за экспорт моделей из приложения взимается плата, обученную генеративно-состязательную нейросеть можно бесплатно использовать для синтеза новых изображений. Приложение доступно на macOS, Windows и в браузере (на стадии бета-тестирования).

6. Табличные данные: Obviously AI

Obviously AI используется для решения задач с пользовательскими данными в табличном-формате CSV. Загружаем набор данных и выбираем столбец переменной, для которой хотим сделать прогноз. Вводим на обычном, естественном языке вопрос – что мы хотим узнать, например, каким будет доход в следующем месяце или как изменится спрос на товар. Платформа самостоятельно выбирает подходящий алгоритм и обучает модель.

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

7. Предварительная обработка изображений: SuperAnnotate

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

Создание наборов данных для обнаружения объектов и сегментации изображений станет проще и быстрее. Особенно хорошо командой продумана работа с видеоданными.

8. Teachable Machine

Teachable Machine – еще одна NoCode-платформа машинного обучения от программистов Google. В отличие от AutoML – инструмента, заточенного под разработчиков – Teachable Machine легко обучить прямо в браузере. Сейчас можно тренировать модели распознавать изображения, звуки и позы.

Обучение проводится как на загружаемых файлах, так и с помощью веб-камеры. Teachable Machine использует библиотеку Tensorflow.js и гарантирует, что данные об обучении останутся на устройстве. Окончательную модель можно экспортировать в форматы Tensorflow.js или tflite и использовать на собственном веб-сайте или в приложении.

Заключение

Хотя универсального решения не существует, вы всегда можете выбрать платформу исходя из текущих потребностей и знаний в области. Конечно, в NoCode-платформах машинное обучение никуда не исчезает – просто спрятано под капотом. Чтобы построить более гибкую систему, необходимо познакомиться со спрятанными внутри таких платформ алгоритмами. Если некоторые знания о профессии у вас уже есть, достаточно их систематизировать. А если вы находитесь в самом начале пути, во всём разобраться помогут квалифицированные наставники с опытом в индустрии.

Наши коллеги из Skillfactory запускают курс, на котором учат профессии Data Scientist с нуля. В нем есть все необходимые уроки, кейсы и тренажеры. С первых недель обучения ментор помогает определить карьерные цели и не сойти с намеченного пути, а карьерный центр подскажет, как оформить резюме и попасть на собеседование.

Классный специалист по Data Science нужен вне зависимости от индустрии, а спрос на рынке труда, как мы заметили в начале статьи, значительно превышает предложение.

17
Сен
2020

💠 Как выбрать видеокарту для нейронных сетей и глубокого обучения

Выбираем видеокарту под разные задачи машинного обучения и обходим «подводные камни». Узнаем, какие карты не стоит покупать, из чего составить кластер и что делать при скромном бюджете.

14
Сен
2020

💬 «Отличается умом и сообразительностью». Как правильно выбрать архитектуру чат-бота

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

Чат-боты сейчас на подъёме….

05
Сен
2020

Параллельная обработка видео с помощью OpenCV

Задача: взять видео, выполнить распознавание лица, записать видеофайл с рамкой вокруг лица обратно на диск. А чтобы сделать это быстрее, запустим процесс в нескольких потоках.

Установка необходимых библиотек

Для работы понадобится установить следующие пакеты:

OpenCV – cамая популярная библиотека компьютерного зрения – её мы будем использовать для
чтения и записи видеофайлов. Пример использования недавно публиковался в Библиотеке программиста. Чтобы установить OpenCV, используйте pip:

        pip3 install opencv-python
    

FFmpeg – кроссплатформенное ПО для записи, конвертации и стриминга аудио и видео. Мы будем использовать FFmpeg для объединения нескольких видеофайлов. Страница загрузки.

Импорт библиотек в Python

Давайте импортируем
необходимые библиотеки:

        import cv2 as cv
import time
import subprocess as sp
import multiprocessing as mp
from os import remove
from xailient import dnn
    

Подробная информация об
используемых библиотеках:

  • cv2: библиотека OpenCV, чтобы читать и писать видеофайлы;
  • time: получаем текущее время для расчета времени выполнения кода;
  • subprocess: запускаем новые процессы, подключаемся к их каналам input/output/error и забираем их коды возврата.
  • multiprocessing: распараллеливаем выполнение функции для нескольких входных значений и распределяем входные данные между процессами;
  • xailient: библиотека для распознавания лиц. Вы можете использовать для этой цели любую библиотеку, например face_recognition, но в нашем примере используется эта.

Конвейер обработки видео в одном процессе

Начнем с метода
обработки видео в одном процессе. Именно так мы обычно читаем
видеофайл, обрабатываем каждый кадр и записываем выходные кадры обратно на
диск.

        def process_video():
    # Читаем файл с видео
    cap = cv.VideoCapture(file_name)

    # Получаем высоту, ширину и количество кадров в видео
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    fps = int(cap.get(cv.CAP_PROP_FPS))

    # Определяем кодек и создаем объект VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_single.mp4"
    out.open(output_file_name, fourcc, fps, (width, height), True)

    try:
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
            
            im = frame
            # Выполняем распознавание лиц в кадре
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Цикл по списку (если он пуст, то это пропускаем) и наложение зеленых полей            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # Рисуем рамку
            out.write(im)
    except:
        # Высвобождаем ресурсы
        cap.release()
        out.release()
        

    # Высвобождаем ресурсы
    cap.release()
    out.release()
    

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

        def single_process():
    print("Обработка видео с использованием одного процесса...")
    start_time = time.time()
    process_video()
    end_time = time.time()
    total_processing_time = end_time - start_time
    print("Время: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))
    
file_name = "input_video.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("Количество кадров = {}".format(frame_count))
print("Ширина = {}, Длина = {}".format(width, height))
single_process()
    

Обработка видео с
использованием нескольких процессов

Теперь определим другую
функцию, использующую многопроцессорную обработку:

        def process_video_multiprocessing(group_number):
    # Читаем файл с видео
    cap = cv.VideoCapture(file_name)

    cap.set(cv.CAP_PROP_POS_FRAMES, frame_jump_unit * group_number)

    # Получаем высоту, ширину и количество кадров в видео
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    no_of_frames = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
    fps = int(cap.get(cv.CAP_PROP_FPS))
    proc_frames = 0

    # Определяем кодек и создаем объект VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_multi.mp4"
    out.open("output_{}.mp4".format(group_number), fourcc, fps, (width, height), True)
    try:
        while proc_frames < frame_jump_unit:
            ret, frame = cap.read()
            if not ret:
                break

            im = frame
            # Выполняем распознавание лиц в каждом кадре
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Цикл по списку (если он пуст, то это пропускаем) и наложение зеленых полей 
            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # Рисуем рамку
            out.write(im)

            proc_frames += 1
    except:
        # Высвобождаем ресурсы
        cap.release()
        out.release()

    # Высвобождаем ресурсы
    cap.release()
    out.release()
    

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

Если существует 4
процесса, а общее количество кадров в обрабатываемом видео равно 1000, то
каждый процесс получает 250 кадров для обработки, которые выполняются параллельно.
В итоге каждый процесс создаст отдельный выходной файл с видео. Чтобы
объединить эти файлики мы будем использовать ffmpeg.

        def combine_output_files(num_processes):
    # Создаем список выходных файлов и складываем имена файлов в текстовый файл
    list_of_output_files = ["output_{}.mp4".format(i) for i in range(num_processes)]
    with open("list_of_output_files.txt", "w") as f:
        for t in list_of_output_files:
            f.write("file {} \n".format(t))

    # Используем ffmpeg для объединения выходных видеофайлов
    ffmpeg_cmd = "ffmpeg -y -loglevel error -f concat -safe 0 -i list_of_output_files.txt -vcodec copy " + output_file_name
    sp.Popen(ffmpeg_cmd, shell=True).wait()

    # Удаляем временные файлы
    for f in list_of_output_files:
        remove(f)
    remove("list_of_output_files.txt")
    

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

        def multi_process():
    print("Обработка видео с использованием {} процессов...".format(num_processes))
    start_time = time.time()

    # Параллельное выполнение функции с несколькими входными значениями
    p = mp.Pool(num_processes)
    p.map(process_video_multiprocessing, range(num_processes))

    combine_output_files(num_processes)

    end_time = time.time()

    total_processing_time = end_time - start_time
    print("Время: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))

file_name = "input.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("Количество кадров = {}".format(frame_count))
print("Ширина= {}, Высота = {}".format(width, height))
num_processes = mp.cpu_count()
print("Количество процессоров: " + str(num_processes))
frame_jump_unit =  frame_count// num_processes
multi_process()
    

Результаты

Эксперимент проводился
на Lenovo Yoga 920 с Ubuntu18.04. Количество доступных на устройстве логических процессоров – 8шт.

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

05
Сен
2020

🎞️ Параллельная обработка видео с помощью OpenCV

Задача: взять видео, выполнить распознавание лица, записать видеофайл с рамкой вокруг лица обратно на диск. А чтобы сделать это быстрее, запустим процесс в нескольких потоках.

Установка необходимых библиотек

Для работы понадобится установить следующие пакеты:

OpenCV – cамая популярная библиотека компьютерного зрения – её мы будем использовать для
чтения и записи видеофайлов. Пример использования недавно публиковался в Библиотеке программиста. Чтобы установить OpenCV, используйте pip:

        pip3 install opencv-python
    

FFmpeg – кроссплатформенное ПО для записи, конвертации и стриминга аудио и видео. Мы будем использовать FFmpeg для объединения нескольких видеофайлов. Страница загрузки.

Импорт библиотек в Python

Давайте импортируем
необходимые библиотеки:

        import cv2 as cv
import time
import subprocess as sp
import multiprocessing as mp
from os import remove
from xailient import dnn
    

Подробная информация об
используемых библиотеках:

  • cv2: библиотека OpenCV, чтобы читать и писать видеофайлы;
  • time: получаем текущее время для расчета времени выполнения кода;
  • subprocess: запускаем новые процессы, подключаемся к их каналам input/output/error и забираем их коды возврата.
  • multiprocessing: распараллеливаем выполнение функции для нескольких входных значений и распределяем входные данные между процессами;
  • xailient: библиотека для распознавания лиц. Вы можете использовать для этой цели любую библиотеку, например face_recognition, но в нашем примере используется эта.

Конвейер обработки видео в одном процессе

Начнем с метода
обработки видео в одном процессе. Именно так мы обычно читаем
видеофайл, обрабатываем каждый кадр и записываем выходные кадры обратно на
диск.

        def process_video():
    # Читаем файл с видео
    cap = cv.VideoCapture(file_name)

    # Получаем высоту, ширину и количество кадров в видео
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    fps = int(cap.get(cv.CAP_PROP_FPS))

    # Определяем кодек и создаем объект VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_single.mp4"
    out.open(output_file_name, fourcc, fps, (width, height), True)

    try:
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
            
            im = frame
            # Выполняем распознавание лиц в кадре
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Цикл по списку (если он пуст, то это пропускаем) и наложение зеленых полей            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # Рисуем рамку
            out.write(im)
    except:
        # Высвобождаем ресурсы
        cap.release()
        out.release()
        

    # Высвобождаем ресурсы
    cap.release()
    out.release()
    

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

        def single_process():
    print("Обработка видео с использованием одного процесса...")
    start_time = time.time()
    process_video()
    end_time = time.time()
    total_processing_time = end_time - start_time
    print("Время: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))
    
file_name = "input_video.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("Количество кадров = {}".format(frame_count))
print("Ширина = {}, Длина = {}".format(width, height))
single_process()
    

Обработка видео с
использованием нескольких процессов

Теперь определим другую
функцию, использующую многопроцессорную обработку:

        def process_video_multiprocessing(group_number):
    # Читаем файл с видео
    cap = cv.VideoCapture(file_name)

    cap.set(cv.CAP_PROP_POS_FRAMES, frame_jump_unit * group_number)

    # Получаем высоту, ширину и количество кадров в видео
    width, height = (
            int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
            int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
        )
    no_of_frames = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
    fps = int(cap.get(cv.CAP_PROP_FPS))
    proc_frames = 0

    # Определяем кодек и создаем объект VideoWriter
    fourcc = cv.VideoWriter_fourcc('m', 'p', '4', 'v')
    out = cv.VideoWriter()
    output_file_name = "output_multi.mp4"
    out.open("output_{}.mp4".format(group_number), fourcc, fps, (width, height), True)
    try:
        while proc_frames < frame_jump_unit:
            ret, frame = cap.read()
            if not ret:
                break

            im = frame
            # Выполняем распознавание лиц в каждом кадре
            _, bboxes = detectum.process_frame(im, THRESHOLD)

            # Цикл по списку (если он пуст, то это пропускаем) и наложение зеленых полей 
            for i in bboxes:
                cv.rectangle(im, (i[0], i[1]), (i[2], i[3]), (0, 255, 0), 3)
            
            # Рисуем рамку
            out.write(im)

            proc_frames += 1
    except:
        # Высвобождаем ресурсы
        cap.release()
        out.release()

    # Высвобождаем ресурсы
    cap.release()
    out.release()
    

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

Если существует 4
процесса, а общее количество кадров в обрабатываемом видео равно 1000, то
каждый процесс получает 250 кадров для обработки, которые выполняются параллельно.
В итоге каждый процесс создаст отдельный выходной файл с видео. Чтобы
объединить эти файлики мы будем использовать ffmpeg.

        def combine_output_files(num_processes):
    # Создаем список выходных файлов и складываем имена файлов в текстовый файл
    list_of_output_files = ["output_{}.mp4".format(i) for i in range(num_processes)]
    with open("list_of_output_files.txt", "w") as f:
        for t in list_of_output_files:
            f.write("file {} \n".format(t))

    # Используем ffmpeg для объединения выходных видеофайлов
    ffmpeg_cmd = "ffmpeg -y -loglevel error -f concat -safe 0 -i list_of_output_files.txt -vcodec copy " + output_file_name
    sp.Popen(ffmpeg_cmd, shell=True).wait()

    # Удаляем временные файлы
    for f in list_of_output_files:
        remove(f)
    remove("list_of_output_files.txt")
    

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

        def multi_process():
    print("Обработка видео с использованием {} процессов...".format(num_processes))
    start_time = time.time()

    # Параллельное выполнение функции с несколькими входными значениями
    p = mp.Pool(num_processes)
    p.map(process_video_multiprocessing, range(num_processes))

    combine_output_files(num_processes)

    end_time = time.time()

    total_processing_time = end_time - start_time
    print("Время: {}".format(total_processing_time))
    print("FPS : {}".format(frame_count/total_processing_time))

file_name = "input.mp4"
output_file_name = "output.mp4"
width, height, frame_count = get_video_frame_details(file_name)
print("Количество кадров = {}".format(frame_count))
print("Ширина= {}, Высота = {}".format(width, height))
num_processes = mp.cpu_count()
print("Количество процессоров: " + str(num_processes))
frame_jump_unit =  frame_count// num_processes
multi_process()
    

Результаты

Эксперимент проводился
на Lenovo Yoga 920 с Ubuntu18.04. Количество доступных на устройстве логических процессоров – 8шт.

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

01
Сен
2020

Онлайн: курс «Профессия Data Scientist»

За полтора года на практических задачах получите две топовых специализации и сможете пойти работать Junior Data Scientist.
— Читать дальше «Курс «Профессия Data Scientist» с трудоустройством»

29
Авг
2020

📊 Интерактивный биннинг в Jupyter: подбираем оптимальную ширину полос гистограммы

О том, как быстро найти оптимальную ширину полос гистограммы (бинов) с помощью интерактивной гистограммы в Jupyter Notebook или JupyterLab, позволяющей изменять ширину бинов на лету.

28
Авг
2020

👨‍🔬️ 10 навыков, необходимых в профессии Data Scientist

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

В статье «Научиться Data Science онлайн» мы рассказали, как овладеть профессией с нуля (был и отдельный материал об анализе больших данных). В этой статье, подготовленной при поддержке Факультета Искусственного интеллекта онлайн-университета GeekBrains, мы сосредоточимся на ключевых навыках, необходимых тем, кто хочет стать Data Scientist.

<a href="https://www.edureka.co/blog/how-to-become-a-data-scientist/" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник
Data Scientist как единороги. Это профессионалы с таким разнообразным набором навыков, который обычно не встречается у одного человека.

Hard Skills

1. Математическая база

Знание методов машинного обучения неотъемлемая часть работы Data Scientist. Для работы с алгоритмами машинного обучения необходимо понимание основ математического анализа (например, уравнений в частных производных), линейной алгебры, статистики (включая байесовскую теорию) и теории вероятностей. Знания статистики помогают Data Scientist критически оценить значимость данных. Математическая база также важна в разработке новых решений, оптимизации и корректировке методов существующих аналитических моделей.

Бесплатные онлайн-курсы по перечисленным областям математики с высокими оценками слушателей:

2. Программирование

Важными навыками Data Scientist также являются сбор, очистка, обработка и систематизация данных. Для этих задач и реализации самих моделей машинного обучения используются языки программирования Python и R. Какой язык выбрать для работы, мы обсуждали в статье «От “R против Python” к “R и Python”».

Курсы Python:

Курсы R:

3. Работа с базами данных

Для выполнения большинства задач, стоящих перед Data Scientist, необходим навык программирования с использованием языка запросов SQL. Несмотря на то что NoSQL и Hadoop также являются важной частью Data Science, SQL-базы по-прежнему остается основным способом хранения данных. Data Scientist должен уметь производить сложные запросы в SQL.

Назовите меня сумасшедшим, но я хочу научить SQL каждого профессионала, работающего с данными в любом качестве. Я говорю о людях из отделов кадров, информационных технологий, продаж, маркетинга, финансов, поставщиков товаров и так далее. Если ваша цель состоит в том, чтобы добиться большего эффекта в своей работе с использованием данных, объединение Excel + SQL позволяет вам делать потрясающие вещи. Если ваша цель состоит в том, чтобы перейти в аналитику (например, в роли бизнес-аналитика), вам определенно нужны навыки SQL […] Почему бы не начать изучать SQL в эти выходные?

Соответствующие курсы:

4. Предобработка данных

Data Scientist также занимаются подготовкой данных к анализу. Часто данные в бизнес-проектах не структурированы (видео, изображения, твиты) и не готовы для анализа. Крайне важно понимать и знать, как подготовить базу данных для получения желаемых результатов без потери информации. На этапе разведочного анализа данных (EDA) становится ясным, какие проблемы с данными необходимо решить и как нужно преобразовать базу данных для построения аналитических моделей.

<a href="https://blog.udacity.com/2014/11/data-science-job-skills.html" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

5. Алгоритмы

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

6. Навыки, специфичные для выбранной области анализа

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

Но есть и другие области, где возможно применение как нейросетевого подхода, так и собственных решений:

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

Soft skills

7. Умение донести свою идею

<a href="https://www.haselt.com/blog/the-ted-software-engineers-recommend-their-favorite-ted-talks" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Data Scientist должен уметь донести идею широкой аудитории. Это особенно важно в бизнес-сфере, где заказчики проекта могут не владеть техническими навыками и терминологией. Для презентации результатов потребуются навыки подачи информации, умение донести идею простым языком. Участвуйте в Data Science конференциях и онлайн-митапах. Это возможность не только прокачать навыки коммуникации и small-talk с коллегами, но и получить фидбэк.

Курсы о принципах успешной презентации:

8. Командная работа

Профессия Data Scientist подразумевает коллективную работу над проектами. Для этого необходимы навыки коммуникации и четкое видение собственной роли в команде. Успешный итог коллективного проекта напрямую зависит от эффективного взаимодействия участников. Умение услышать другое мнение и принять совместное решение важно также для командного участия в Data Science соревнованиях Kaggle.

Data Science – это командный вид спорта, а те, кто говорит: «нападающие – самые лучшие!», наверняка столкнутся с бунтом остальной команды. Каждый член команды ценен! Если каждый играет свою роль хорошо, то бизнес будет продолжать извлекать ценность из данных.
<a href="https://www.stack.com/a/grid-crossfit" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Навык успешной командной работы приходит с опытом, а для освоения тонкостей обратите внимание на следующие ресурсы:

9. Умение видеть коммерческую сторону вопроса

Ключевой навык Data Scientist для работы в бизнес-среде умение находить экономически эффективные решения с минимальными затратами ресурсов. Компании, которые используют Data Science для получения прибыли, нуждаются в специалистах, понимающих, как реализовать бизнес-идеи с помощью данных.

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

Про особенности Data Science для бизнеса:

10. Критическое мышление

Навык критического мышления помогает находить подходы и пути решения проблем, которые не видят остальные. Критическое мышление Data Scientist – это видение всех сторон проблемы, рассмотрение источников данных и проявление любопытства.

Data Scientist должен понимать бизнес-проблему, уметь моделировать и фокусироваться на том, что имеет значение для ее решения, а не то, что является посторонним и может быть проигнорировано. Этот навык больше, чем что-либо другое, определяет успех Data Scientist.
Ананд Рao, руководитель отдела глобального искусственного интеллекта и инноваций в области данных и аналитики PwC

Итог

Если вы хотите построить карьеру Data Scientist, начните прямо сейчас. Эта область постоянно расширяется и нуждается в новых специалистах. Для освоения необходимых навыков Data Scientist с нуля запишитесь на курс Data Science Факультета Искусственного интеллекта.

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

21
Авг
2020

📈 Стать аналитиком Big Data: пошаговое руководство

Рассказываем, какие знания, онлайн-курсы, подкасты и книги помогут начать карьеру в сфере Big Data без специального образования.

Что такое Big Data

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

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

О том, чем занимаются специалисты по анализу больших данных, мы писали в статье Big Data: размер имеет значение. В этом материале, подготовленном при поддержке Факультета Аналитики Big Data онлайн-университета GeekBrains, мы сосредоточимся на навыках, необходимых для овладения профессией.

Необходимые знания

Английский язык

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

Soft skills

Работа в проектах над большими данными обычно разделяется между специалистами из разных сфер. Поэтому немаловажным является умение работать в команде. Развить свои soft skills помогут следующие курсы и книги:

Математика

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

На русском:

На английском:

Программирование

Далее нужно изучить SQL – язык создания, модификации и управления базами данных.

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

На русском:

На английском:

Теория

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

На русском:

На английском:

В дополнение:

Литература по Big Data

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

Подкасты

Подкасты и Youtube-каналы – одни из лучших способов быть в курсе последних новостей Big Data. Относительно YouTube обязательно изучите нашу подборку из 30 YouTube-каналов и плейлистов о Data Science. А ниже мы собрали подборку подкастов.

На русском:

На английском:

  • Data Skeptic эксперты о статистике, машинном обучении, ИИ и Big Data;
  • Code Newbie об успешных программистах и людях, сумевших стать профессионалами с нуля;
  • Learn to Code with Me – для новичков об основах программирования;
  • Coding Blocks – о лучших практиках программирования, алгоритмах и ООП;
  • Programming Throwdown – для разработчиков о работе на разных языках программирования;
  • Arrested DevOps – новое о практиках разработки;
  • Software Engineering Daily – о работе программного обеспечения.

Практика

После знакомства с теорией и основами программирования закрепите полученные знания на практике. Начните анализировать реальные данные. В этом вам помогут онлайн-курсы и популярные ресурсы:

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

Погружение в сферу

LinkedIn

В первую очередь подпишитесь на сообщество Big Data and Analytics на LinkedIn. Там собраны не только курсы и офферы для аналитиков, но и вся актуальная информация от ведущих экспертов области. А также советуем следить за публикациями Ronald van Loon, Jules Polonetsky, DJ Patil и Bernard Marr. Они активно рассказывают о своем карьерном пути и делятся новостями из мира Data Science.

Сообщество

  • Stack Overflow Big Data – огромный ресурс с вопросами и ответами о проблемах, связанных с кодом;
  • Хабрахабр Big Data – статьи по анализу данных и машинному обучению;
  • Women in Big Data – форум для женщин в сфере больших данных;
  • Open Data Science – русскоязычное сообщество для специалистов из разных областей науки о данных;
  • MachineLearning.ru – вики-страница, посвященная машинному обучению на русском;
  • Cross Validated – вопросы и ответы по статистике и выбору лучших моделей;
  • R-bloggers – все, что вы хотели знать о R.

Направления в карьере

Мое видение – это мир, наполненный грамотными профессионалами в сфере данных. Профессионалы, которые могут использовать данные для разработки идей и принятия решений, основанных на данных
Дэвид Лангер (Вице-президент отдела Аналитики в Schedulicity)

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

Средняя зарплата специалиста в области Data Science находится в диапазоне от $89 тыс. до $242 тыс. в США, а Европейская комиссия в своем отчете за 2019 г. объявила, что к 2020 г. в Европе будет создано 100 000 новых рабочих мест, связанных с данными.

Если вы только начинаете свой путь в Data Science, хотите получить диплом и помощь в трудоустройстве, мы рекомендуем записаться на курс Факультета Аналитики Big Data онлайн-университета GeekBrainsy. Программа курса даст основательную математическую и базу, основы языка Python и навыки работы с базами данных, а также научит работе с Hadoop и Apache Spark – востребованными инструментами работы с большими данными. Обучение на курсах ориентировано на применение навыков машинного обучения в бизнесе и построено по принципам практической работы над проектами с ведущими специалистами сферы и личным помощником-куратором.

21
Авг
2020

12–13 сентября, онлайн: хакатон PhotoHack Mobile

Участникам предстоит создать мобильное приложение на базе API Photo Lab, решающее нишевую определённую задачу на выбор.
— Читать дальше «Хакатон PhotoHack Mobile»

11
Авг
2020

Программирование на Python с нуля: дорожная карта разработчика

Как научиться программировать на Python с нуля? Мы составили дорожную карту для быстрого, эффективного и структурированного изучения Python.
— Читать дальше «Программирование на Python с нуля: дорожная карта разработчика»

05
Авг
2020

Создайте и разверните своё первое веб-приложение для машинного обучения

Создаём с помощью PyCaret приложение для прогнозирования затрат на госпитализацию пациентов на основе разных показателей.
— Читать дальше «Создайте и разверните своё первое веб-приложение для машинного обучения»

30
Июл
2020

🚀 Будущее Data Science: что ждет отрасль в ближайшие пять лет

Будущее Data Science связано с прогрессом алгоритмов машинного обучения и технологий для работы с большими объемами данных. В этой статье обсуждаем прогнозы того, что ждет дата сайентистов в следующие пять лет.

Будущее Data Science: что ждет отрасль в ближайшие пять лет

Специалисты Data Science собирают и исследуют информацию с помощью различных инструментов анализа, превращая разрозненные массивы данных в сжатые представления практически важных знаний. Стать хорошим специалистом непросто: необходимо обладать глубокими знаниями алгоритмов машинного обучения и других методов работы с данными, знать язык программирования (обычно Python или R), владеть ETL-навыками.

На развитие рынка данных оказывает влияние стремительный рост их объема, постепенное осознание организациями важности Data Science, спрос на анализ Big Data, потребность бизнеса в интерпретируемых аналитических методах. По данным International Data Corporation, к 2022 году мировая выручка от продажи решений для обработки больших объемов данных и бизнес-аналитики достигнет 260 млрд долларов, а среднегодовые темпы роста составят 11.9%. К 2025 году большинство операций, которые сейчас выполняются в Data Science вручную, станут автоматизированными. К 2030 году Data Science уже не будет заниматься поиском и очисткой данных. Эту задачу возьмут на себя программные роботы.

Активнее всего Data Science развивается в Северной Америке и Азиатско-Тихоокеанском регионе. Государственным регулирующим органам приходится реагировать на развитие технологий. Всё сложнее найти баланс между национальными интересами государств, экономическим прогрессом и правом людей на частную жизнь. Однако, как замечает ведущий специалист компании Dun & Bradstreet Антони Скриффиньяно, машинное обучение не имеет географических границ: то, что может быть неприемлемо в одной точке мира, может нормально восприниматься в другой. Модели и наборы данных, разработанные и собранные в регионах с меньшим вниманием к конфиденциальности и этике данных, могут использоваться аналитиками данных в государствах с другими культурными правилами. Наука о данных ещё не раз столкнется с различными этическими вопросами анализа персональной информации.

Применение Data Science в бизнесе

Бизнес может использовать Data Science различными способами. Например, компания по продаже недвижимости из английского Дарема анализирует более 700 личных факторов: демографические данные, изменения доходов, покупательское поведение и история каждого продавца. Эти данные сопоставляются со средними показателями по стране. Так агент узнаёт, когда стоит связаться с продавцом, чтобы иметь лучший шанс на заключение сделки. Системы с похожей функциональностью используют и американские компании, занимающиеся недвижимостью.

Примечание
О различных вариантах применения Data Science в российском бизнесе читайте в нашей статье «Как компании превращают данные в деньги: обзор российских практик Data Science».

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

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

Востребованность профессионалов в области Data Science

Спрос на специалистов по Data Science в ближайшие пять лет будет только расти. Сайт Glassdoor четвёртый год подряд называет специалиста по Data Science «работой №1 в США». Бюро трудовой статистики США сообщает, что к 2026 году ожидается рост занятости в этой сфере на 27.9%. Согласно отчёту MHR Analytics, 80% британских компаний планируют нанять в этом году специалиста по работе с данными или обратиться за консультацией по Data Science. Однако есть не только огромный спрос, но и заметная нехватка квалифицированных аналитиков данных.

Data Science: всё больше применений

Data Science распространяется далеко за пределы розничных продаж, страхования и финтеха. Мы каждый день используем применения Data Science, когда социальная сеть, музыкальный стриминговый сервис или YouTube рекомендуют нам контент.

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


Кроме того, обработка медицинских данных поможет предотвращать эпидемии. Во время вспышки эпидемии Эбола в 2014 г. в Африке учёные смогли проследить за распространением заболевания и выявить наиболее уязвимые районы. Для этого использовались данные, полученные от оператора мобильной связи Сенегала. Благодаря этим данным стало известно, где и с кем находились заболевшие люди во время инкубационного периода вируса, когда болезнь ещё не проявляет симптомов. Можно надеяться, что прошедшие в этом году многочисленные хакатоны по теме COVID-19, также помогут в предотвращении стремительного распространения других вирусов.

Фермеры используют Data Science для повышения эффективности выращивания и доставки овощей, производители продуктов питания – для сокращения количества отходов. Организации волонтёров и активистов применяют Data Science для прогнозирования финансовых поступлений и поисков путей их увеличения.

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

Что ждёт специалистов Data Science

Большое развитие получат системы, позволяющие поставить на поток рутинные операции и ускорить разработку. Автоматизация таких задач, как выбор и оценка алгоритмов, может до 10 раз сократить время, необходимое для работы с данными. Улучшение качества алгоритмов и упрощение программных инструментов снизит порог входа в профессию. Такие простые алгоритмы машинного обучения, деревья решений, теперь развернуть проще простого. А для понимания таких фреймворков, как PyTorch и TensorFlow и вовсе не требуется докторская степень по математике.

IDC прогнозирует, что к 2025 году почти 30% мировых данных будет поступать в режиме реального времени. Предварительно обученные модели искусственного интеллекта будут использоваться всё более широко, а повсеместная практика их применения позволит сократить время и усилия, необходимые для обучения.


Возникнут API, позволяющие встраивать в уже существующие приложения технологии работы с большими объемами данных. Благодаря Data Science более дружественными для пользователя станут VR (Виртуальная реальность) и AR (Дополненная реальность). Сбор и обработка данных будут актуальны и для тех, кто занимается блокчейн-технологиями. Чем важнее данные, тем важнее и их защита. Поэтому вырастет спрос на классных специалистов по защите информации. Уже появилось такое направление IT, как безопасность Data Science.

Зарплаты специалистов начинаются от $100 000 в год для разработчика архитектуры, и приложений, от $70 000 в год для статистика и от $62 000 в год для аналитика данных. Профессионала в области Data Science будут рады видеть в своих рядах Google, Amazon, Apple, Microsoft, Facebook или Яндекс. Молодая компания или стартап предложат специалисту по Data Science разнообразные возможности проявить свои таланты, а вместе с тем стать одним из важных участников проекта. Огромный потенциал ожидает проекты на стыке Data Science и квантовых вычислений.

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

***

Если вы опытный разработчик программного обеспечения или же только начинаете свой путь в IT, вам стоит обратить внимание на учебный курс по Data Science от GeekBrains. Вы увидите, что программа по высшей математике может быть захватывающей даже для тех, кто скучал на математике в институте или школе. А технологии машинного обучения и нейронные сети перестанут быть далекими абстракциями и превратятся в набор удобных инструментов для задач бизнеса. Участие в факультативах познакомит с наставниками, готовыми стать вашими работодателями на старте карьеры.

01
Июл
2020

Онлайн: факультет Data Engineering

Получите современную профессию и год опыта, а ещё добавьте несколько проектов в резюме. Для обучения достаточно школьных знаний.
— Читать дальше «Факультет Data Engineering»

21
Май
2020

Онлайн: хакатон Speaker Identification by Deep Learning

Конкурс по разработке модели глубокого обучения на Python для распознавания отдельных голосов в датасетах большого размера.
— Читать дальше «Хакатон Speaker Identification by Deep Learning»

05
Май
2020

Старт 21 мая, онлайн: курс «Машинное обучение»

Получите прикладной опыт разработки ML-проектов: от сбора и простого анализа данных до построения масштабных моделей и их оптимизации.
— Читать дальше «Курс «Машинное обучение»»

24
Апр
2020

Как пандемия влияет на финансовые рынки: анализ данных

Какое влияние оказывает COVID-19 на финансовые рынки: анализируем текущую ситуацию и сравниваем с тем, как реагировал глобальный рынок на минувшие пандемии.

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

Влияние на финансовые
рынки

Начнём с оценки
текущего влияния распространения коронавируса на финансовые рынки. Для создания диаграмм использовался Python (код целиком доступен в репозитории на GitHub). Например, для построения ежедневного процентного изменения для S&P500 использовался следующий скрипт:

            # Читаем данные
import pandas_datareader as pdr

# Для построения графиков
import matplotlib.pyplot as plt
plt.style.use('seaborn-darkgrid')

# Для операций над данными
import pandas as pd
import numpy as np

# get_data_yahoo(inst_ticker, start_date, end_date)
data_sp = pdr.get_data_yahoo('^GSPC', '17-Nov-19')

# Рассчитываем процентное изменение
data_pc = data_sp.Close.pct_change()

# Строим
data_pc.plot(figsize=(10, 7), grid=True)
plt.axvline('30-Jan-20')
plt.show()
        
 Ежедневного процентное изменение для индекса S&amp;P500
Ежедневного процентное изменение для индекса S&P500

Для получения индекса S&P500 использовал
метод pandas_datareaders
get_data_yahoo
. Он принимает два аргумента: первый – тикер “^GPSC" для S&P500 в Yahoo Finance, а второй – дата, начиная с которой мы хотим получить данные. При запуске мы получаем набор данных с шестью столбцами. Ежедневное
процентное изменение рассчитывается с помощью метода pct_change().

Ежедневное процентное
изменение

Помимо S&P500,
построим графики для остальных индексов.

            # Читаем таймлайны из файла CSV
timelines = pd.read_csv('pandemics_timelines.csv').dropna()
for col in timelines.columns[1:]:
    timelines[col] = pd.to_datetime(timelines[col])
    
# Читаем данные из yahoo fianance
def get_data(tl):    
    inst_list = ['^GSPC', 'CL=F','GC=F', 'TLT']
    data = pd.DataFrame()
    for inst in inst_list:
        try:
            data[inst] = pdr.get_data_yahoo(inst, tl.first_case.iloc[0]-timedelta(days=30), 
                                        tl.last_date.iloc[0]+timedelta(days=365))['Adj Close']    
        except Exception as e:
            print('No data available for ',inst, e)

    return data
    
# Получаем данные во время covid19
covid_timelines = timelines.loc[timelines.pandemic_name=='covid19']
data= get_data(covid_timelines)

# Строим график ежедневного процентного изменения
def plot_daily_pc(data, tl):
    data_pc = data.pct_change().dropna()
    fig = plt.figure(figsize=(12, 8))
    i = 0
    for col in data_pc.columns:
        # Добавляем доп.график
        sub = fig.add_subplot(2, 2, i+1)
        i = i+1
        # Заголовок
        sub.set_title(col, fontsize=20)
        # График
        r = random.random()
        b = random.random()
        g = random.random()
        data_pc[col].plot(color=(r, g, b))
        sub.set_ylabel('Returns')
        sub.grid(which="major", color='k', linestyle='-.', linewidth=0.2)
        sub.axvline(x=tl.first_case.iloc[0], color='RoyalBlue',
                    linestyle='dashdot', linewidth=3)
        sub.axvline(x=tl.who_emergency.iloc[0], color='Red',
                    linestyle='dashdot', linewidth=3)

    plt.tight_layout()
    plt.show()
    
plot_daily_pc(data, covid_timelines)
        
Процентное изменения четырёх рассматриваемых показателей с ноября 2019 г. по апрель 2020 г.
Процентное изменения четырёх рассматриваемых показателей с ноября 2019 г. по апрель 2020 г.

Синяя штрихпунктирная вертикаль – дата, когда был выявлен первый случай заболевания. Колебания индексов были незначительны до тех пор, пока Всемирная организация здравоохранения (ВОЗ) не объявила чрезвычайное положение, приведшее к резкой потере стабильности – вспышка COVID-19 оказала сильное влияние на финансовые рынки.

Совокупная доходность

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

            def plot_cumulative_returns(data,tl):
    data_cum_ret = (data.pct_change()+1).cumprod()
    data_cum_ret.plot(figsize=(10,7),grid=True)
    plt.legend(loc='best')
    plt.ylabel('Cumulative Returns')
    plt.axvline(x=tl.first_case.iloc[0],color='RoyalBlue',linestyle='dashdot',linewidth=3)
    plt.axvline(x=tl.who_emergency.iloc[0],color='Red',linestyle='dashdot',linewidth=3)
    plt.axvline(x=tl.pandemic_declaration.iloc[0],color='LightSeaGreen',linestyle='dashdot',linewidth=3)
    plt.axvspan(tl.last_date.iloc[0], tl.last_date.iloc[0]+timedelta(days=365),color='dodgerblue', alpha=0.2)
    plt.show()
    
plot_cumulative_returns(data, covid_timelines)
        
Кривые совокупной доходности с ноября 2019 г. по конец марта 2020 г.
Кривые совокупной доходности с ноября 2019 г. по конец марта 2020 г.

Доходность от нефти после объявления упала сильнее всего – в течение указанного периода почти
на 60%. Резкое снижение показала и рентабельность индекса S&P500.

Секторальные показатели

До сих
пор мы говорили о S&P500 в целом, но что происходит с секторами экономики, входящими в
индекс? Построим график, который учитывает основные секторы рынка.

            def plot_sector(tl):
    sector_list = ['IHE', 'IYW', 'IYF', 'IYK', 'IYZ','ITM', 'IYE']

    columns = ['Pharma', 'Technology', 'Financials', 'Consumer Goods',
               'Telecom', 'Basic Materials', 'Energy']

    sector_data = pd.DataFrame()
    for inst in sector_list:
        try:
            sector_data[inst] = pdr.get_data_yahoo(inst, tl.first_case.iloc[0]-timedelta(days=30), 
                                        tl.last_date.iloc[0]+timedelta(days=365))['Adj Close']    
        except:
            pass

    sector_data.columns = columns
    plot_cumulative_returns(sector_data, tl)
plot_sector(covid_timelines)
        
Кривые совокупной доходности для отдельных секторов глобальной экономики
Кривые совокупной доходности для отдельных секторов глобальной экономики

Два сектора, которые
оказались наименее подвержены влиянию – это фармацевтика и технологии. Однако в целом, все секторы находятся в «одной
поре», пусть относительная величина и отличается. Наибольшие трудности испытывает энергетический сектор – это логично, учитывая, как пострадал показатель Crude Oil.

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

Сценарий применения строгих
мер

Атипичная пневмония

В 2002 г. вспышка
пандемии захватила юг Китая, были инфицированы 8500 человек. Распространение болезни взяли под контроль теми же способами, что сегодня: изоляцией, карантином и отслеживанием контактов. Социальное дистанцирование позволило сдержать распространение, однако идентифицировать пневмонию было намного проще,
чем COVID-19.

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

Временные зависимости распространения атипичной пневмонии (SARS) в 2003 г.
Временные зависимости распространения атипичной пневмонии (SARS) в 2003 г.

Взглянем, что происходило с финансовыми рынками во время вспышки атипичной пневмонии.

Ежедневное процентное изменение четырёх индексов в случае вспышки атипичной пневмонии 2002-2003 г.
Ежедневное процентное изменение четырёх индексов в случае вспышки атипичной пневмонии 2002-2003 г.

Поскольку эпидемия преимущественно проходила в Китае, мы видим меньшее влияние на финансовые рынки. Можно наблюдать некоторые резкие движения в обоих направлениях, указывающие на увеличение волатильности. Наиболее резкое снижение совокупной доходности также наблюдалось для индекса Crude oil, остальные индексы оказались менее подвержены влиянию.

Кривые совокупной доходности с ноября 2002 г. по июль 2003 г. во время распространения SARS
Кривые совокупной доходности с ноября 2002 г. по июль 2003 г. во время распространения SARS

Посмотрим,
как пошли дела после того, как кризис закончился. Голубая область соответствует времени, когда ВОЗ объявила, что кризис болезни преодолён.

Кривые совокупной доходности с ноября 2002 г. по июль 2004 г. (более широкий интервал)
Кривые совокупной доходности с ноября 2002 г. по июль 2004 г. (более широкий интервал)

После объявления ВОЗ наблюдалось быстрое восстановление показателей.

Сценарий широкого распространения заражения

В случае второго сценария речь пойдёт об Испанском гриппе («испанке»),
который во время Первой мировой войны затронул почти 30% населения
планеты, а также о так называемых Азиатском (H2N2) и Гонконгском (H3N2) гриппах, от которых пострадало
около полумиллиона человек.

«Испанка»

Испанский грипп развивался тремя волнами: июнь-июль 1918 года, октябрь-декабрь 1918 года, январь-март 1919 года. На нижеприведённом графике использовался индекс
Доу-Джонса
(индекс S&P500 был предложен лишь в 1927 году):

Изменение индекса Доу-Джонса в 1918-1919 г. (<a href="https://www.macrotrends.net/1319/dow-jones-100-year-historical-chart" target="_blank" rel="noopener noreferrer nofollow">источник данных</a>)
Изменение индекса Доу-Джонса в 1918-1919 г. (источник данных)

С удивлением можно обнаружить, что рынок во время распространения «испанки» шёл вверх. Причина заключается в крупном предшествовавшем событии – Первой мировой войне. На рынке наблюдался восходящий тренд, связанный с восстановлением после войны.

Штаммы гриппа H2N2 и H3N2

Ниже приведены
показатели совокупной доходности для S&P500 во время распространения соответственно Азиатского гриппа (1957-1959 гг.) и Гонконгского гриппа (1968-1971 гг.).

Совокупная доходность для S&amp;P500 во время распространения азиатского гриппа (H2N2)
Совокупная доходность для S&P500 во время распространения азиатского гриппа (H2N2)
Совокупная доходность для S&amp;P500 во время распространения гонконгского гриппа (H3N2)
Совокупная доходность для S&P500 во время распространения гонконгского гриппа (H3N2)

Красная вертикаль указывает
на период, когда ВОЗ объявила чрезвычайную ситуацию. Голубая область соответствует периоду завершения
пандемии. Можно видеть, что показатели в обоих случаях начали расти ещё до объявления о преодолении пандемии.

Заключение

Рынок не любит неопределённости. Когда объявляется чрезвычайное положение, он резко падает. Но как только предпринимаются необходимые шаги для сдерживания ситуации и ВОЗ объявляет её безопасной, рынок реагирует подъёмом на докризисный уровень, а в некоторых случаях даже превосходит его.

Расскажите в нашем обсуждении, как на работу вашей компании и лично на вас повлияло распространение коронавируса.

23
Апр
2020

Tesseract.js: извлекаем текст из картинок с помощью JavaScript

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

Вы пропустили лекцию и попросили тетрадку у однокурсника, чтобы наверстать материал. Но переписывать длинный конспект нет ни времени, ни желания – что же делать?

Понадобится приложение, распознающее текст в нетекстовых документах. К счастью, такая технология существует и называется OCR (Optical Character Recognition). Более того, она доступна даже на JavaScript!

Извлечение текста из изображения с помощью библиотеки Tesseract.js
Извлечение текста из изображения с помощью библиотеки Tesseract.js

Встречайте Tesseract.js – мощную библиотеку, умеющую распознавать символы на любом изображении. Сегодня мы разберёмся, как с ней работать.

1. Подключаем Tesseract.js

Tesseract.js – это обычная JavaScript-библиотека. Чтобы использовать её возможности в проекте, необходимо подключить нужный файл. Сделать это можно любым удобным способом, например, используя CDN (https://unpkg.com/tesseract.js@v2.0.0-alpha.13/dist/tesseract.min.js) или в виде npm-пакета:

            // через npm
npm install tesseract.js
// через yarn
yarn add tesseract.js
        

2. Готовим разметку

Согласно официальному сайту Tesseract.js поддерживает более 100 языков, в том числе и русский – для демонстрации возможностей добавим в приложение выбор языка. Ещё нам потребуется input для загрузки самого изображения и поле для вывода результатов обработки.

Простейшая разметка выглядит так:

3. Запускаем Tesseract

3.1. Воркер

Всю работу выполняет воркер TesseractWorker, поэтому импортируем из пакета tesseract.js функцию createWorker. При создании воркеру можно передать функцию логирования, вызываемую при переходе между этапами обработки.

            import { createWorker } from 'tesseract.js';

const worker = createWorker({
  logger: (data) => console.log(data)
});
        

Приходящий в логгер объект данных содержит два поля: status и progress – их можно использовать для отображения прогресса обработки.

Логирование процесса обработки изображения
Логирование процесса обработки изображения

Инициализируем воркер с нужными настройками языка и запускаем процесс распознавания:

            async function recognize() {
  const file = document.getElementById('file').files[0];
  const lang = document.getElementById('langs').value;
  await worker.load();
  await worker.loadLanguage(lang);
  await worker.initialize(lang);
  const { data: { text } } = await worker.recognize(file);
  console.log(text);
  await worker.terminate();
  return text;
}
        

3.2. Метод recognize

То же самое можно сделать более декларативно – с помощью метода recognize объекта Tesseract:

            import Tesseract from 'tesseract.js';

function recognize() {
  const file = document.getElementById('file').files[0];
  const lang = document.getElementById('langs').value;

  return Tesseract.recognize(file, lang, {
      logger: data => console.log(data),
    })
   .then(({ data: {text }}) => {
     console.log(text);
     return text;
   })
}
        

Этот метод принимает файл, язык и объект настроек с логгером. Метод работает асинхронно и возвращает обычный Promise.

4. Отображение прогресса и результата

В результате выполнения метода recognize мы получаем много полезных данных:

Результат работы метода recognize
Результат работы метода recognize

Тут не только извлечённый текст, но и уровень уверенности (confidence), и даже расположение на изображении символов, слов, абзацев.

Осталось продемонстрировать полученные результаты пользователю.

            const log = document.getElementById('log');

// Отслеживание прогресса обработки
function updateProgress(status, progressValue) {
  log.innerHTML = '';
  const statusText = document.createTextNode(status);
  const progress = document.createElement('progress');
  progress.max = 1;
  progress.value = progressValue;
  log.appendChild(statusText);
  log.appendChild(progress);
}

// Вывод результата
function setResult(text) {
  log.innerHTML = '';
  text = text.replace(/\n\s*\n/g, '\n');
  const pre = document.createElement('pre');
  pre.innerHTML = text;
  log.appendChild(pre);
}
        

Наконец, добавим обработчик кликов на кнопку Начать обработку и соберём всё вместе:

            import Tesseract from 'tesseract.js';

// Распознавание изображения
function recognize(file, lang, logger) {
  return Tesseract.recognize(file, lang, {logger})
   .then(({ data: {text }}) => {
     return text;
   })
}

const log = document.getElementById('log');

// Отслеживание прогресса обработки
function updateProgress(data) {
  log.innerHTML = '';
  const statusText = document.createTextNode(data.status);
  const progress = document.createElement('progress');
  progress.max = 1;
  progress.value = data.progress;
  log.appendChild(statusText);
  log.appendChild(progress);
}

// Вывод результата
function setResult(text) {
  log.innerHTML = '';
  text = text.replace(/\n\s*\n/g, '\n');
  const pre = document.createElement('pre');
  pre.innerHTML = text;
  log.appendChild(pre);
}

document.getElementById('start').addEventListener('click', () => {
  const file = document.getElementById('file').files[0];
  if (!file) return;

  const lang = document.getElementById('langs').value;

  recognize(file, lang, updateProgress)
    .then(setResult);
});
        

Вот и вся программа! Поэкспериментируйте с разными изображениями и языками.

Наша демка сейчас обладает самым минимальным функционалом. Её можно существенно улучшить:

  • Оформить элементы с помощью CSS.
  • Добавить предпросмотр загруженного изображения.
  • Установить изображение по умолчанию.
  • Разрешить drag-n-drop-перетаскивание файлов.

Работающий демо-проект (с улучшениями) + его github-репозиторий.

***

Tesseract.js – отличная JS-библиотека для распознавания текста с изображений. Конечно, её возможности сильно ограничены. Зашумлённый фон и нестандартные шрифты существенно снижают точность обработки. Однако для множества проектов она может стать замечательным решением. В комментариях вы можете поделиться примерами того, как библиотека распознала (или не распознала) какой-либо текст – вместе мы сможем лучше понять ограничения библиотеки.

14
Апр
2020

Когда антивирус бессилен: распознавание вредоносных программ методами компьютерного зрения

Небольшая заметка про отображение бинарных файлов в виде картинок и применение средств computer vision для обнаружения троянов и вирусов.

Любой софт,
предназначенный специально д…

13
Апр
2020

Нейросети в помощь геймдев-художнику: машинное обучение для создания игрового пиксель-арта

О том, как генеративно-состязательные нейросети с Pix2Pix-архитектурой помогают художникам ускорить создание игрового дизайна.

Приведённые на заголовочной картинке спрайты взяты …