Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Data Science — это совокупность понятий и методов, позволяющих придать смысл и понятный вид огромным объемам данных. Каждая из глав этой книги посвящена одному из самых интересных аспектов анализа и обработки данных. Вы начнете с теоретических основ, затем перейдете к алгоритмам машинного обучения, работе с огромными массивами данных, NoSQL, потоковым данным, глубокому анализу текстов и визуализации информации. В многочисленных практических примерах использованы сценарии Python. Обработка и анализ данных — одна из самых горячих областей IT, где постоянно требуются разработчики, которым по плечу проекты любого уровня, от социальных сетей до обучаемых систем. Надеемся, книга станет отправной точкой для вашего путешествия в увлекательный мир Data Science.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 329
Veröffentlichungsjahr: 2022
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Художник С. Заматевская
Д. Силен, А. Мейсман, М. Али
Основы Data Science и Big Data. Python и наука о данных. — СПб.: Питер, 2021.
ISBN 978-5-4461-0944-9
© ООО Издательство "Питер", 2021
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Анализировать данные умеют все люди. Способность нашего мозга видеть взаимосвязи, приходить к выводам на основании фактов и учиться на опыте — вот что делает человека человеком. Выживание человека в большей степени, чем любого другого биологического вида на планете, зависит от мозга; человечество сделало максимальную ставку на эту особенность, чтобы занять свое место в природе. Пока эта стратегия работает, и вряд ли мы захотим ее поменять в ближайшем будущем.
Однако в том, что касается тривиальной обработки чисел, возможности нашего мозга ограниченны. Он не справляется с объемом данных, который мы в состоянии воспринять за один раз, и с нашей любознательностью. По этой причине мы доверяем машинам часть своей работы: выявление закономерностей, формирование связей и получение ответов на многочисленные вопросы.
Стремление к знаниям заложено в наших генах. Применение компьютеров для выполнения части работы в наши гены не заложено, но без них не обойтись.
Огромное спасибо всем сотрудникам издательства Manning, которые участвовали в работе над книгой, за помощь и поддержку.
Мы благодарны Равишанкару Раджагопалану (Ravishankar Rajagopalan) за полное научное рецензирование рукописи, а также Джонатану Томсу (Jonathan Thoms) и Майклу Робертсу (Michael Roberts) за профессиональные замечания. Также в процессе рецензирования участвовали многие другие специалисты, высказавшие свое бесценное мнение: Элвин Радж (Alvin Raj), Артур Зубарев (Arthur Zubarev), Билл Марченко (Bill Martschenko), Крейг Смит (Craig Smith), Филип Правика (Filip Pravica), Хамиде Ирадж (Hamideh Iraj), Хизер Кэмпбелл (Heather Campbell), Гектор Куэста (Hector Cuesta), Иэн Стирк (Ian Stirk), Джефф Смит (Jeff Smith), Джоэл Котарски (Joel Kotarski), Джонатан Шарли (Jonathan Sharley), Джорн Динкла (Jorn Dinkla), Мариус Бутук (Marius Butuc), Мэтт Р. Коул (Matt R. Cole), Мэтью Хек (Matthew Heck), Мередит Годар (Meredith Godar), Роб Эгл (Rob Agle), Скотт Чосси (Scott Chaussee) и Стив Роджерс (Steve Rogers).
Прежде всего я хочу поблагодарить свою жену Филипу, которая вдохнула в меня решимость и помогла справиться со всеми трудностями, а также постоянно была рядом со мной на протяжении всей моей карьеры и во время работы над книгой. Она предоставила мне время, необходимое для реализации моих целей и амбиций, и взяла на себя все заботы по уходу за нашей маленькой дочерью. Я посвящаю ей эту книгу и в полной мере понимаю, на какие жертвы ей приходится идти для создания и поддержания нашей маленькой семьи.
Также хочу поблагодарить свою дочь Еву и моего еще не родившегося сына за чувство огромного счастья и мои улыбки. Это лучшие подарки, которые я мог получить от жизни, и лучшие из всех детей: веселые, любящие и дарящие радость.
Я особенно благодарен родителям, помогавшим мне все эти годы. Без их бесконечной любви и поддержки я не смог бы дописать эту книгу и продолжить свой жизненный путь.
Спасибо всем коллегам из моей компании, особенно Мо и Арно, за все наши совместные приключения. Мо и Арно очень помогали мне и давали полезные советы. Благодарю их за все время и усилия, потраченные ими на завершение книги. Это замечательные люди, и без них я вряд ли справился бы с книгой.
Наконец, я искренне благодарен всем друзьями, которые поддерживали меня и понимали, что у меня не хватает времени на них. Надеюсь, они по-прежнему будут любить меня и поддерживать, как это было на протяжении всей моей карьеры и во время написания книги.
Дэви Силен
Спасибо моей семье и друзьям, поддерживавшим меня во время написания книги. Мне не всегда легко было сидеть и работать, когда можно было выйти из дома и узнать что-то новое. Я особенно благодарен моим родителям, моему брату Яго и подруге Дельфине за то, что они всегда были рядом, какие бы безумные планы ни приходили мне в голову.
Спасибо моей крестной и моему крестному — его борьба с раком заставила меня вспомнить об истинных жизненных ценностях.
Спасибо друзьям, поившим меня пивом, чтобы немного отвлечь меня от работы, и родителям Дельфины, ее брату Карелу и его будущей жене Тэсс за их гостеприимство (и превосходные блюда, которыми меня угощали). Все они сделали мою жизнь намного лучше.
Наконец, я хочу поблагодарить моих соавторов Мо и Дэви за творческий вклад в книгу. Я разделяю с ними все повседневные успехи и неудачи как их коллега-предприниматель и специалист data science. Наша совместная работа была просто замечательной. Надеюсь, впереди у нас еще немало таких же дней.
Арно Д.Б. Мейсман
В первую очередь я благодарю свою невесту Мухубу за ее любовь, понимание, заботу и терпение. Также я многим обязан Дэви и Арно: во-первых, с ними было интересно, а во-вторых, они помогли мне осуществить мою предпринимательскую мечту. Их неизменная преданность делу стала жизненно важным фактором для создания книги.
Мохамед Али
Но я могу лишь указать дверь. Пройти через нее должен ты сам.
Морфеус, «Матрица»
Добро пожаловать! Вероятно, при просмотре оглавления вы заметили, насколько разнообразные темы будут рассматриваться в книге. Мы постараемся дать немного информации обо всем сразу — достаточно, чтобы вы смогли действовать самостоятельно. Data science — чрезвычайно обширная область; настолько обширная, что изложить ее полностью не удалось бы даже в книге вдесятеро большего объема. Для каждой главы был выбран некоторый аспект, кажущийся нам интересным. Нам пришлось принять несколько трудных решений, чтобы ваша книжная полка не обрушилась под тяжестью этой книги!
Надеемся, книга станет отправной точкой для вашего путешествия — вашей дверью в увлекательный мир data science.
В главах 1 и 2 приводятся общие теоретические основы, необходимые для понимания других глав книги:
• Глава 1 знакомит читателя с data science и большими данными. Она завершается практическим примером Hadoop.
• Глава 2 посвящена процессу data science. В ней описаны шаги, присутствующие почти в каждом проекте data science.
В главах 3–5 описано применение принципов машинного обучения к наборам данных постепенно увеличивающихся размеров:
• В главе 3 рассматриваются относительно небольшие данные, легко помещающиеся в памяти среднего компьютера.
• В главе 4 задача усложняется: в ней рассматриваются «большие данные», которые могут храниться на вашем компьютере, но не помещаются в памяти, вследствие чего обработка таких данных без вычислительного кластера создает проблемы.
• В главе 5 мы наконец-то добираемся до настоящих больших данных, с которыми невозможно работать без многих компьютеров.
В главах 6–9 рассматриваются некоторые интересные вопросы data science, более или менее независимые друг от друга:
• В главе 6 рассматривается архитектура NoSQL и ее отличие от реляционных баз данных.
• В главе 7 data science применяется к потоковым данным. Здесь основная проблема связана не с размером, а со скоростью генерирования данных и потерей актуальности старых данных.
• Глава 8 посвящена глубокому анализу текста. Не все данные существуют в числовой форме. Глубокий анализ и аналитика текста начинают играть важную роль в текстовых форматах: электронной почте, блогах, контенте веб-сайтов и т.д.
• В главе 9 основное внимание уделяется последней части процесса data science (визуализации данных и построению прототипа приложения), для чего мы рассмотрим ряд полезных инструментов HTML5.
В приложениях А–Г рассматриваются процедуры установки и настройки систем Elasticsearch, Neo4j и MySQL, упоминаемых в главах книги, а также Anaconda — программного пакета Python, чрезвычайно полезного в data science.
Эта книга знакомит читателя с областью data science. Опытные специалисты data science поймут, что по некоторым темам материал изложен в лучшем случае поверхностно. Другим читателям сообщим, что для извлечения максимальной пользы из книги потребуются некоторые предварительные условия: чтобы браться за практические примеры, желательно обладать хотя бы минимальными познаниями в SQL, Python, HTML5 и статистике или машинном обучении.
В практических примерах мы решили использовать сценарии Python. За прошедшее десятилетие язык Python стал авторитетным и популярным языком в области data science.
Для обозначения кода используется моноширинныйшрифт, многие листинги снабжены комментариями.
Материал книги поясняется многочисленными примерами. Многие из этих примеров включены в кодовую базу, которую можно загрузить на сайте книги: https://www.manning.com/books/introducing-data-science.
Дэви Силен — опытный предприниматель, автор книг и профессор. Вместе с Арно и Мо он является совладельцем Optimately и Maiton — двух компаний data science, базирующихся в Бельгии и Великобритании соответственно, а также одним из совладельцев еще одной компании data science в Сомалиленде. Все эти компании специализируются на стратегической обработке «больших данных»; многие крупные компании время от времени обращаются к ним за консультациями. Дэви является внештатным преподавателем школы менеджмента IESEG в Лилле (Франция), где он преподает и участвует в исследованиях в области теории «больших данных».
Арно Мейсман — целеустремленный предприниматель и специалист data science. Вместе с Дэви и Мо он является совладельцем Optimately и Maiton — двух компаний data science, базирующихся в Бельгии и Великобритании соответственно, а также одним из совладельцев еще одной компании data science в Сомалиленде. Все эти компании специализируются на стратегической обработке «больших данных»; многие крупные компании время от времени обращаются к ним за консультациями. Арно — специалист data science с широким кругом интересов, от розничной торговли до игровой аналитики. Он полагает, что информация, полученная в результате обработки данных, в сочетании с некоторым воображением, поможет нам улучшить этот мир.
Мохамед Али — предприниматель и консультант в области data science. Вместе с Арно и Мо он является совладельцем Optimately и Maiton — двух компаний data science, базирующихся в Бельгии и Великобритании соответственно. Его увлечения лежат в двух областях: data science и экологически рациональные проекты. Последнее направление воплотилось в создании третьей компании, базирующейся в Сомалиленде.
Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
В этой главе:
• Определение data science и больших данных.
• Разные типы данных.
• Глубокий анализ процесса data science.
• Введение в область data science и больших данных.
• Работа с примерами использования Hadoop.
Под обобщающим термином «большие данные» принято понимать любые наборы данных, достаточно большие и сложные для того, чтобы их можно было обработать традиционными средствами работы с данными (например, РСУБД — реляционными системами управления базами данных). Широко распространенные РСУБД давно считаются универсальным инструментом, но спрос на обработку больших данных показывает иное. В концепцию data science входит использование методов анализа огромных объемов данных и извлечения содержащейся в них информации. Связь между большими данными и data science такая же, как между сырой нефтью и нефтеперерабатывающим заводом. Data science и большие данные развивались на базе статистики и традиционного управления данными, но сейчас считаются разными дисциплинами.
Характеристики больших данных часто называются «тремя V»:
• Объем (Volume) — сколько данных содержит набор?
• Разнообразие (Variety) — насколько отличаются друг от друга разные типы данных?
• Скорость (Velocity) — с какой скоростью генерируются новые данные?
Часто эти характеристики дополняются «четвертым V» — достоверностью (Veracity): насколько точны данные? Эти четыре свойства отличают большие данные от данных, встречающихся в традиционных средствах управления данными. Соответственно, привносимые ими изменения проявляются почти во всех аспектах: сборе данных, хранении и обслуживании данных, поиске, обмене, передаче и визуализации. Кроме того, большие данные требуют применения специализированных средств извлечения информации.
Data science — это расширение статистики, способное справляться с огромными объемами данных, производимыми в наши дни. Data science добавляет методы из computer science в репертуар статистики. В аналитической заметке Лейни и Карта «Emerging Role of the Data Scientist and the Art of Data Science» были проработаны сотни описаний рабочих обязанностей специалистов data science, статистиков и аналитиков бизнес-данных, чтобы выявить различия между этими должностями. Главное, что отличает специалиста data science от статистика, — это умение работать с большими данными и подготовка в области машинного обучения, организации вычислений и построения алгоритмов. Их инструментарии обычно тоже различаются; в описаниях работы специалистов data science чаще упоминается умение использовать Hadoop, Pig, Spark, R, Python и Java (среди прочего). Не огорчайтесь, если вас устрашило это перечисление; многие пункты будут постепенно раскрыты в этой книге, хотя основное внимание будет уделено Python. Python — замечательный язык для data science, потому что для него написано много библиотек data science и он широко поддерживается специализированными программами. Например, почти в каждой популярной базе данных NoSL существует программный интерфейс (API) для Python. Из-за этих особенностей, а также из-за возможности быстро строить прототипы на языке Python с сохранением приемлемой производительности его популярность в мире data science быстро растет.
По мере роста объема данных и потребностей в их использовании каждый специалист data science будет сталкиваться с проектами из области больших данных на протяжении своей карьеры.
Data science и большие данные сейчас встречаются почти повсеместно как в коммерческих, так и в некоммерческих средах. Количество потенциальных применений огромно, и примеры, приведенные в книге, едва ли дают даже поверхностное представление об их возможностях.
Коммерческие компании почти во всех промышленных областях используют data science и большие данные для получения информации о клиентах, процессах, персонале, конкурентах и товарах. Многие компании применяют data science, чтобы произвести хорошее впечатление на пользователя, для организации перекрестных и дополнительных продаж, а также для персонализации предложений. Хорошим примером служит сервис Google AdSense, собирающий информацию об интернет-пользователях для показа контекстной рекламы. MaxPoint (http://maxpoint.com/us) — другой пример персонализированной рекламы в реальном времени. Профессионалы в области подбора кадров используют личностную аналитику (people analytics) и глубокий анализ текста для отбора кандидатов, отслеживания настроения работников и изучения неформальных связей среди коллег. People analytics является центральной темой книги «Moneyball: The Art of Winning an Unfair Game». В книге (и фильме1) показано, что традиционный процесс отбора спортсменов в бейсболе был случайным, и его замена коррелированными признаками изменила всё. Применение статистики позволило нанимать правильных игроков и выставлять их против тех соперников, над которыми возможно наибольшее преимущество. Финансовые учреждения используют data science для прогнозирования рынка ценных бумаг, вычисления риска предоставления ссуд и привлечения новых клиентов. На момент написания книги по меньшей мере 50% торговых сделок по всему миру выполнялось автоматически на основании алгоритмов, разработанных специалистами data science, с использованием больших данных и методов data science.
Правительственные организации также хорошо осведомлены о ценности данных. Многие правительственные организации не только используют собственных аналитиков для поиска ценной информации, но и выкладывают свои результаты в открытый доступ. Данные могут использоваться для глубокого анализа или построения приложений, управляемых данными. Data.gov, «дом» открытых данных правительства США, — всего лишь один пример. Специалисты data science в правительственных организациях работают над самыми разнообразными проектами, от выявления случаев мошенничества и других видов преступной деятельности до оптимизации финансирования проектов. Хорошо известный пример такого рода был предоставлен Эдвардом Сноуденом, опубликовавшим внутренние документы Агентства национальной безопасности США и Британского центра правительственной связи, из которых явно следует, что data science и большие данные применялись для слежения за миллионами граждан. Эти организации собрали 5 миллиардов записей данных из таких распространенных приложений и сервисов, как Google Maps, Angry Birds, электронная почта и текстовые сообщения (среди прочего). Затем методы data science были применены для фильтрации информации.
Неправительственные организации (НПО) тоже имеют опыт использования данных. Они используют эти методы для привлечения средств и отстаивания своих целей. Например, Международный фонд защиты природы пользуется услугами специалистов data science для повышения эффективности своих проектов по привлечению средств. Многие специалисты data science выделяют часть своего времени на помощь НПО, потому что у НПО часто не хватает ресурсов для того, чтобы собрать данные и нанять специалистов data science. DataKind — одна из таких групп, тратящих свое время на благо человечества.
Университеты используют data science в своих исследованиях и для повышения качества учебного процесса. Бурное развитие массовых открытых дистанционных курсов (MOOC, Massive Open Online Course) породило большой объем данных, на основании которых университеты могут изучать, как этот тип обучения дополняет традиционные программы. MOOC — бесценный ресурс для людей, стремящихся стать профессионалами в области data science и больших данных, поэтому вам определенно стоит познакомиться с некоторыми из наиболее известных предложений: Coursera, Udacity и edX. Ситуация с большими данными и data science быстро меняется, и MOOCs позволяют следить за событиями и участвовать в учебных курсах ведущих университетов. Если вы еще не знакомы с курсами MOOC, не жалейте времени; они понравятся вам так же, как понравились нам.
В data science и области больших данных встречается много разных типов данных, для каждого из которых требуются свои инструменты и методы. Основные категории данных перечислены ниже.
• Структурированные.
• Неструктурированные.
• На естественном языке.
• Машинные.
• Графовые.
• Аудио, видео и графика.
• Потоковые.
Все эти типы данных представляют интерес, и их стоит рассмотреть подробнее.
Структурированные данные зависят от модели данных и хранятся в фиксированном поле внутри записи. Соответственно, структурированные данные часто бывает удобно хранить в таблицах, в базах данных или файлах Excel (рис. 1.1). SQL (Structured Query Language, язык структурированных запросов) является основным средством управления и обращения с запросами к данным, хранящимся в базах данных. Также иногда встречаются структурированные данные, которые достаточно трудно сохранить в традиционной реляционной базе данных (один из примеров — иерархические данные, например генеалогическое дерево).
Впрочем, мир не состоит из структурированных данных; просто это представление удобно для человека и машин. Чаще реальные данные хранятся в неструктурированном виде.
Рис. 1.1. Таблица Excel как пример структурированных данных
Неструктурированные данные трудно подогнать под конкретную модель данных, потому что их содержимое зависит от контекста или имеет переменный характер. Один из примеров неструктурированных данных — обычные сообщения электронной почты (рис. 1.2). Хотя сообщение содержит структурированные элементы (отправитель, заголовок, тело), одни и те же задачи могут решаться множеством разных способов, например, существует бесчисленное количество вариантов упоминания конкретного человека в сообщениях. Проблема дополнительно усложняется существованием тысяч языков и диалектов.
Сообщение электронной почты, написанное человеком (наподобие показанного на рис. 1.2), также является идеальным примером данных на естественном языке.
Данные на естественном языке составляют особую разновидность неструктурированных данных; обработка таких данных достаточно сложна, потому что она требует знания как лингвистики, так и специальных методов data science.
Сообщество обработки данных на естественном языке добилось успеха в области распознавания сущностей, распознавания тематических областей, обобщения, завершения текста и анализа эмоциональной окраски, но модели, адаптированные для одной предметной области, плохо обобщаются для других областей. Даже самые современные методы не смогут расшифровать смысл произвольного фрагмента текста. И этот факт вряд ли кого-то удивит: у людей также возникают проблемы с восприятием естественного языка. Он неоднозначен по своей природе. Сама концепция смысла выглядит спорно. Два человека слушают один разговор; вынесут
Рис. 1.2. Сообщение электронной почты одновременно является примером неструктурированных данных и данных на естественном языке
ли они одинаковый смысл из него? Даже смысл отдельных слов может изменяться в зависимости от настроения говорящего.
К машинным данным относится информация, автоматически генерируемая компьютером, процессом, приложением или устройством без вмешательства человека. Машинные данные становятся одним из основных источников информации, и ситуация вряд ли изменится. Wikibon предсказывает, что рыночная стоимость промышленного Интернета (термин, предложенный компанией Frost&Sullivan для обозначения совокупности сложного физического оборудования с сетевыми датчиками и программным обеспечением) к 2020 году составит приблизительно 540 миллиардов долларов. По оценкам IDC (International Data Corporation), количество узлов сети к 2020 году в 26 раз превысит численность населения. Эта сеть часто называется Интернетом вещей.
Анализ машинных данных из-за их громадных объемов и скоростей сильно зависит от инструментов с высокой масштабируемостью. К примерам машинных данных относятся журналы веб-серверов, записи детализации звонков, журналы сетевых событий и телеметрии (рис. 1.3.)
Рис. 1.3. Пример машинных данных
Машинные данные на рис. 1.3 хорошо укладываются в структуру классической базы данных. Это не лучший формат для данных с высокой степенью связности или «сетевых» данных, в которых достаточно значимую роль играют отношения между сущностями.
Термин «графовые данные» может сбить с толку, потому что любые данные могут быть представлены в виде графа. Под «графом» в данном случае имеется в виду понятие графа из математической теории графов — математическая структура для моделирования попарных отношений между объектами. Вкратце, в графовых, или сетевых, данных особое внимание уделяется связям или смежности объектов. Графовые структуры данных используют узлы, ребра и свойства для представления и хранения графических данных. Графовые данные естественным образом подходят для представления социальных сетей, а их структура позволяет вычислять такие специфические метрики, как влияние участников и кратчайший путь между двумя людьми.
Примеры графовых данных встречаются на многих веб-сайтах социальных сетей (рис. 1.4). Например, в LinkedIn можно увидеть, кого вы знаете в той или иной компании. Ваш список читателей в Твиттере также является примером графовых данных. Сила и мощь связанных данных проявляется при анализе нескольких перекрывающихся графов, построенных на одних и тех же узлах. Например, представьте, что ребра обозначают «друзей» на Facebook. А теперь возьмем другой граф с теми же людьми, но связывающий коллег по бизнесу через LinkedIn, и третий граф, основанный на интересе к фильмам на Netflix. Наложение этих трех графов позволит получить ответы на многие интересные вопросы.
Рис. 1.4. Дружеские отношения в социальных сетях — пример графовых данных
Для хранения графовых данных используются графовые базы данных, а для построения запросов к ним — такие специализированные языки запросов, как SPARQL.
Работа с графовыми данными создает специфические проблемы, причем для компьютера эта задача становится еще сложнее.
Аудио, видео и графика — типы данных, ставящие непростые задачи перед специалистом data science. Задачи, тривиальные с точки зрения человека (например, распознавание объекта на картинке), оказываются сложными для компьютера. В 2014 году компания MLBAM (Major League Baseball Advanced Media) объявила, что объем записываемых видеоматериалов для одного бейсбольного матча будет увеличен приблизительно до 7 Тбайт с целью проведения оперативного анализа. Высокоскоростные камеры на стадионах записывают движения мяча и спортсменов для того, например, чтобы вычислять в реальном времени траекторию движения защитника.
Недавно компании DeepMind удалось создать алгоритм, который способен обучаться играть в видеоигры. Алгоритм получает на входе содержимое экрана и учится интерпретировать эти данные в сложном процессе глубокого обучения. Это замечательное достижение, и компания Google приобрела DeepMind для разработки искусственного интеллекта. Алгоритм обучения получает данные, генерируемые компьютерной игрой, т.е. потоковые данные.
Потоковые данные могут принимать почти любую из перечисленных форм, однако у них имеется одно дополнительное свойство. Данные поступают в систему при возникновении некоторых событий, а не загружаются в хранилище данных большими массивами. И хотя формально они не являются отдельной разновидностью данных, мы выделяем их в особую категорию, потому что вам придется приспособить свой рабочий процесс для работы с потоковой информацией.
Примерами потоковых данных могут служить раздел «Что происходит?» в Твиттере, прямые трансляции спортивных и музыкальных мероприятий и данные биржевых котировок.
Процесс data science обычно состоит из шести шагов, как видно из схемы на рис. 1.5. Сейчас мы кратко рассмотрим основные пункты, а более подробное описание будет приведено в главе 2.
Рис. 1.5. Процесс data science
Дисциплина data science применяется в основном в контексте организаций. Когда бизнес предлагает вам взяться за проект data science, вы сначала готовите проектное задание. В проектном задании описано, что вы собираетесь исследовать, какую пользу это принесет компании, какие данные и ресурсы вам потребуются, представлен календарный план работ и описание выходных результатов.
В этой книге процесс data science будет применяться к примерам разного масштаба, и вы получите представление о возможных целях исследований.
На втором этапе процесса происходит сбор данных. В проектном задании указано, какие данные вам потребуются и где их можно найти. На этом этапе вы принимаете меры к тому, чтобы данные могли использоваться в вашей программе, что означает проверку существования, качества и доступности данных. Данные также могут поставляться третьими сторонами и существовать в разных формах, от таблиц Excel до разного рода баз данных.
Процесс сбора данных подвержен ошибкам; в этой фазе исследователь повышает качество данных и готовит их к последующему использованию. Эта фаза состоит из трех подфаз: очистка данных удаляет некорректные значения из источника данных и устраняет расхождения между источниками, интеграция данных расширяет информацию посредством объединения информации из нескольких источников, а преобразование данных гарантирует, что данные находятся в подходящем формате для использования в ваших моделях.
Исследование данных направлено на достижение более глубокого понимания данных. Вы пытаетесь понять, как переменные взаимодействуют друг с другом, оценить распределение данных и определить наличие выбросов. Для этого в основном используются описательные статистики, визуальные методы и простое моделирование. Этот шаг часто обозначается сокращением EDA от «Exploratory Data Analysis» («исследовательский анализ данных»).
В этой фазе моделирования знания предметной области и информация о данных, полученная на предыдущих этапах, используются для получения ответа на вопрос исследования. В ходе моделирования используются методы из области статистики, машинного обучения, исследования операций и т.д. Построение модели является итеративным процессом, в ходе которого исследователь выбирает переменные для модели, применяет модель и проводит диагностику модели.
Наконец, результаты исследования должны быть представлены бизнес-стороне. Такие результаты могут существовать в разных формах, от презентаций до отчетов о научно-исследовательской работе. Иногда выполнение процесса приходится автоматизировать, потому что бизнес-сторона хочет использовать информацию, полученную в другом проекте, или задействовать рабочий процесс, использующий результаты вашей модели.
Приведенное описание процесса data science может создать впечатление, что процесс имеет линейный характер, но в действительности вам придется часто возвращаться назад и что-то переделывать. Например, в фазе исследования данных могут обнаружиться выбросы, указывающие на ошибки импортирования данных. В ходе процесса data science вы получаете новую информацию, которая может породить новые вопросы. Чтобы вам не пришлось переделывать уже выполненную работу, проследите за тем, чтобы вопросы со стороны бизнеса с самого начала были определены достаточно ясно и подробно.
Итак, теперь суть процесса немного прояснилась и мы можем заняться рассмотрением методов.
В настоящее время существует много разных инструментариев и инфраструктур для больших данных. В них легко запутаться, потому что новые технологии появляются очень быстро. Ситуация сильно упростится, если вы поймете, что экосистема больших данных может быть разбита на группы по технологиям с похожими целями и функциональностью; мы рассмотрим их в этом разделе. Специалисты data science применяют много разных технологий, но не все; важнейшим классам технологий data science в книге посвящена отдельная глава. На рис. 1.6 видны компоненты экосистемы больших данных и место разных технологий в этой структуре.
Рассмотрим разные группы инструментов на схеме и выясним, что делает каждая из них. Начнем с распределенных файловых систем.
Рис. 1.6. Технологии больших данных можно разбить на несколько основных категорий
Распределенная файловая система похожа на обычную файловую систему, но, в отличие от последней, она работает на нескольких серверах сразу. В ней можно делать почти все, что делается в обычных файловых системах. В основе любой файловой системы лежат такие действия, как хранение, чтение и удаление данных, а также реализация средств безопасности файлов; распределенные файловые системы не являются исключением. Распределенные файловые системы обладают рядом важных преимуществ:
• Они способны хранить файлы, размер которых превышает размер диска отдельного компьютера.
• Файлы автоматически реплицируются на нескольких серверах для создания избыточности или выполнения параллельных операций, при этом все сложности технической реализации скрываются от пользователя.
• Система легко масштабируется: пользователь не ограничивается объемом памяти или дискового пространства одного сервера.
Раньше масштабирование осуществлялось переводом всех систем на сервер с большим объемом памяти и дискового пространства и более быстрым процессором (вертикальное масштабирование). В наше время в систему можно добавить еще один малый сервер (горизонтальное масштабирование). Благодаря этому принципу потенциал масштабирования становится практически безграничным.
В настоящее время самой популярной распределенной файловой системой является Hadoop File System (HDFS). Она представляет собой реализацию Google File System с открытым кодом. В книге основное внимание будет уделено именно Hadoop File System, так как эта система чаще всего применяется на практике. Впрочем, существует много других распределенных файловых систем: Red Hat Cluster File System, Ceph File System, Tachyon File System и т.д.
После того как данные будут сохранены в распределенной файловой системе, их нужно использовать. Один из важных аспектов работы с распределенным жестким диском заключается в том, что вы не перемещаете данные к программе, а скорее перемещаете программу к данным. Если вы начинаете «с нуля», имея только опыт работы на нормальном языке общего назначения (таком, как C, Python или Java), вам придется иметь дело со всеми сложностями, присущими распределенному программированию, например: перезапуском сбойных заданий, отслеживанием результатов из других субпроцессов и т.д. К счастью, в сообществе разработки открытого ПО было создано много инфраструктур, которые выполняют всю «черную работу» за вас. Эти инфраструктуры заметно упрощают работу с распределенными данными и решают многие из присущих ей проблем.
После создания распределенной файловой системы необходимо добавить данные. Вы должны переместить данные из одного источника в другой; именно здесь в полной мере проявляются достоинства таких инфраструктур интеграции данных, как Apache Sqoop и Apache Flume. Процесс похож на процесс извлечения, преобразования и загрузки в традиционных складах данных.
Когда данные оказываются на своем месте, наступает время извлечения вожделенной скрытой информации. На этой стадии вам приходится использовать методы из области машинного обучения, статистики и прикладной математики. До Второй мировой войны все вычисления приходилось выполнять вручную, что существенно ограничивало возможности анализа данных. После Второй мировой войны появились компьютеры и технологии научных вычислений. Один компьютер мог выполнять огромные объемы вычислений, и перед исследователями открылся новый мир. Со времен этой научной революции человеку достаточно построить математические формулы, записать их в алгоритм и загрузить данные. При огромных объемах современных данных один компьютер уже не справляется с нагрузкой. Более того, некоторые алгоритмы, разработанные в предыдущем веке, никогда не завершатся до момента гибели Вселенной, даже если бы в вашем распоряжении оказались вычислительные ресурсы всех существующих компьютеров земли. Этот факт связан с их временной сложностью (https://en.wikipedia.org/wiki/Time_complexity). Пример такого алгоритма — попытка взлома пароля с проверкой всех возможных комбинаций (см. http://stackoverflow.com/questions/7055652/real-world-example-of-exponential-time-complexity). Один из самых серьезных недостатков старых алгоритмов заключался в том, что они плохо масштабировались. При тех объемах данных, которые приходится анализировать сегодня, это создает проблемы, и для работы с такими объемами данных требуются специализированные библиотеки и инфраструктуры. Самая популярная библиотека машинного обучения для Python называется Scikit-learn. Это отличный инструмент машинного обучения, и мы будем использовать ее в этой книге. Конечно, существуют и другие библиотеки для Python:
• PyBrain для нейронных сетей — термином «нейронные сети» обозначаются алгоритмы обучения, моделирующие человеческий мозг в отношении механики обучения и сложности. Нейронные сети принято считать областью сложной и недоступной для непосвященных.
• NLTK (Natural Language Toolkit) — как подсказывает название, библиотека предназначена для работы с данными на естественном языке. К этой обширной библиотеке прилагается ряд текстовых корпусов , упрощающих моделирование ваших данных.
• Pylearn2 — другой инструментарий машинного обучения, немного уступающий Scikit-learn.
• TensorFlow — библиотека Python для глубокого обучения, предоставленная компанией Google.
Конечно, варианты не ограничиваются библиотеками Python. Spark — новое ядро машинного обучения с лицензией Apache, специализирующееся на машинном обучении в реальном времени. Проект заслуживает внимания; дополнительную информацию можно найти по адресу http://spark.apache.org/.
Для хранения огромных объемов данных требуется программное обеспечение, специализирующееся на управлении этими данными и формировании запросов к ним. Традиционно в этой области правили бал реляционные базы данных — такие, как Oracle SQL, MySQL, Sybase IQ и др. И хотя во многих ситуациях они все еще считаются предпочтительным решением, появились новые типы баз данных, объединенные в категорию баз данных NoSQL.
Название категории обманчиво, потому что «No» в этом контексте означает «не только». Нехватка функциональности в SQL не является основной причиной сдвига парадигмы, и многие базы данных NoSQL реализовали собственную версию SQL. Однако у традиционных баз данных существуют свои недостатки, которые усложняют их масштабирование. Решая некоторые проблемы традиционных баз данных, базы данных NoSQL обеспечивают возможность почти неограниченного роста данных. Эти недостатки проявляются во всем, что относится к большим данным: их память и вычислительный ресурс не масштабируются за пределы одного узла и в традиционных базах данных отсутствуют средства обработки потоковых, графовых и неструктурированных форм данных.
Существует много разновидностей баз данных, но их можно разделить на следующие типы:
• Столбцовые базы данных — данные организуются в столбцы, что позволяет алгоритмам существенно повышать скорость обработки запросов. В более современных технологиях используется принцип хранения по ячейкам. Табличные структуры продолжают играть важную роль в обработке данных.
• Хранилища документов — хранилища документов не используют таблицы, но хранят полную информацию о документе. Их отличительной особенностью является чрезвычайно гибкая схема данных.
• Потоковые данные — сбор, преобразование и агрегирование данных осуществляются не по пакетному принципу, а в реальном времени. Хотя мы выделили потоковые данные в категорию баз данных, чтобы упростить выбор инструмента, скорее они образуют особую разновидность задач, породившую такие технологии, как Storm.
• Хранилища «ключ—значение» — данные не хранятся в таблицах; с каждым значением связывается ключ: например, org.marketing.sales.2015: 20000. Такое решение хорошо масштабируется, но реализация почти полностью возлагается на разработчика.
• SQL в Hadoop — пакетные запросы в Hadoop пишутся на SQL-подобном языке, во внутренней реализации которого используется инфраструктура отображения-свертки (map-reduce).
• Обновленный SQL — этот тип сочетает масштабируемость баз данных NoSQL с преимуществами реляционных баз данных. Все эти базы данных используют интерфейс SQL и реляционную модель данных.
• Графовые базы данных — не для всех задач табличный формат является оптимальным. Некоторые задачи более естественно подходят для представления в виде графа и хранения в графовых базах данных. Классический пример такого рода — социальная сеть.
Инструменты планирования упрощают автоматизацию повторяющихся операций и запуск заданий по событиям (например, при появлении нового файла в папке). Они похожи на такие традиционные программы, как CRON в Linux, но разработаны специально для больших данных. Например, такие инструменты могут запускать задачу MapReduce при появлении нового набора данных в каталоге.
Этот класс инструментов был разработан для оптимизации установки больших данных за счет предоставления стандартизированных профилей. Профили строятся на основании представительного множества операций с большими данными. Задачи сравнительного анализа и оптимизации инфраструктуры больших данных и настройки конфигурации часто относятся к компетенции не специалистов data science, а профессионалов, специализирующихся на организации IT-инфраструктуры; по этой причине они не рассматриваются в этой книге. Использование оптимизированной инфраструктуры приводит к существенной экономии. Например, экономия 10% в кластере из 100 серверов равна стоимости 10 серверов.
Подготовка инфраструктуры больших данных — непростая задача. Инструменты развертывания системы проявляют себя при развертывании новых приложений в кластерах больших данных. Они в значительной степени автоматизируют установку и настройку компонентов больших данных. К числу основных задач специалиста data science эта область не относится.
Предположим, вы создали приложение для прогнозирования результатов футбольных матчей и теперь хотите предоставить всем желающим доступ к прогнозам вашего приложения. Однако вы понятия не имеете, какие архитектуры или технологии будут использоваться в их системах. Инструменты программирования служб обеспечивают доступ к приложениям больших данных как к сервису. Специалистам data science иногда приходится открывать доступ к своим моделям через службы. Самым известным примером такого рода являются REST-службы; сокращение REST обозначает «Representational State Transfer», т.е. «передача состояния представления». Эти службы часто используются для передачи данных веб-сайтам.
Вы хотите, чтобы все желающие могли получить доступ к вашим данным? Вероятно, при этом нужно организовать механизм точного управления доступом к данным, но делать это на уровне каждого отдельного приложения не хочется. Средства безопасности больших данных позволяют создать централизованную и высокоточную систему управления доступом к данным. Безопасность больших данных превратилась в самостоятельную область исследований, и специалисты data science обычно сталкиваются с ней в роли потребителей данных, редко когда им приходится реализовывать средства безопасности самостоятельно. В этой книге тема безопасности больших данных не рассматривается, это работа для экспертов в области безопасности.
В завершение этой главы мы рассмотрим небольшое приложение в контексте больших данных. Для этого будет использоваться образ Hortonworks Sandbox — виртуальной машины, созданной Hortonworks для тестирования приложений больших данных на локальной машине. Далее в книге будет показано, как Juju упрощает установку Hadoop на нескольких машинах.
Для запуска первого примера будет использован небольшой набор данных, но запрос к большому набору с миллиардами записей выполняется так же просто. На первый взгляд язык запросов кажется похожим на SQL, но при этом незаметно для пользователя запускается задание MapReduce. Оно строит обычную таблицу результатов, которые затем можно представить на столбцовой диаграмме. В результате мы получим диаграмму наподобие изображенной на рис. 1.7.
Чтобы как можно быстрее и проще запустить приложение, мы воспользуемся средой Hortonworks Sandbox в VirtualBox. VirtualBox — инструмент виртуализации, позволяющий запустить другую операционную систему в вашей операционной системе. В данном случае он поможет вам запустить CentOS с существующей установкой Hadoop в вашей установленной операционной системе.
Рис. 1.7. Результат: зависимость среднего оклада от должности
Для запуска Sandbox в Virtualbox необходимо выполнить несколько простых шагов. Будьте внимательны: следующее описание актуально на момент написания этой главы (февраль 2015 года):
1. Загрузите виртуальный образ по адресу http://hortonworks.com/products/hortonworks-sandbox/#install.
2. Запустите управляющую виртуальную машину. VirtualBox можно загрузить по адресу https://www.virtualbox.org/wiki/Downloads.
3. Нажмите Ctrl+I и выберите виртуальный образ Hortonworks.
4. Щелкните на кнопке Next.
5. Щелкните на кнопке Import; через непродолжительное время ваш образ будет успешно импортирован.
6. Выберите свою виртуальную машину и щелкните на кнопке Run.
7. Немного подождите запуска CentOS с установкой Hadoop (рис. 1.8). Обратите внимание: на иллюстрации используется Sandbox версии 2.1. В других версиях возможны небольшие изменения.
На запущенную машину можно войти напрямую или воспользоваться SSH. Мы воспользуемся веб-интерфейсом. Введите в браузере адрес http://127.0.0.1:8000; на экране должна появиться заставка, показанная на рис. 1.9.
В поставку Hortonworks также включены два учебных набора данных, находящиеся на уровне HCatalog. Щелкните на кнопке HCat, чтобы просмотреть список доступных таблиц (рис. 1.10).
Рис. 1.8. Hortonworks Sandbox с VirtualBox
Рис. 1.9. Заставка Hortonworks Sandbox по адресу http://127.0.0.1:8000
Рис. 1.10. Список доступных таблиц HCatalog
Чтобы просмотреть данные, щелкните на кнопке BrowseData рядом с пунктом sample_07 для перехода к следующему экрану (рис. 1.11).
Рис. 1.11. Содержимое таблицы
На первый взгляд таблица кажется совершенно обычной. Hive — инструмент, позволяющий работать с этими данными как с обычной базой данных на языке SQL. Да, все верно: в Hive для получения результатов используется HiveQL — диалект традиционного языка SQL. Чтобы открыть редактор Beeswax HiveQL, щелкните на кнопке Beeswax в меню (рис. 1.12).
Рис. 1.12. Команды HiveQL выполняются в редакторе Beeswax HiveQL. Во внутренней реализации эти команды преобразуются в задания MapReduce
Для получения результатов выполните следующий запрос:
Select description, avg(salary) as average_salary from sample_07 group by
description order by average_salary desc.
Щелкните на кнопке Execute. Hive преобразует запрос HiveQL в задание MapReduce и выполняет его в среде Hadoop, как показано на рис. 1.13.
Впрочем, пока лучше не читать окно журнала; на этой стадии оно выглядит невразумительно. Если это ваш первый запрос, выполнение может занять до 30 секунд — Hadoop известен своей долгой инициализацией. Впрочем, мы еще вернемся к этой теме.
Через некоторое время на экране появляется результат. Отличная работа! Из полученной сводки (рис. 1.14) следует, что среди самых высокооплачиваемых профессий немало врачей. Кого-нибудь это удивляет?
Эта таблица завершает краткое введение в Hadoop.
Рис. 1.13. Из журнала видно, что запрос HiveQL был преобразован в задание MapReduce. Примечание: этот журнал был сгенерирован в версии HDP за февраль 2015 года, в текущей версии он может выглядеть немного иначе
Рис. 1.14. Конечный результат: сводка средних окладов по профессиям
И хотя эта глава была всего лишь началом, возможно, порой что-то казалось непонятным. В таком случае оставьте все как есть и вернитесь после того, как все концепции будут подробно объяснены. Data science — обширная область, в которой существует обширная система понятий. Надеемся, мы сможем дать достаточно подробное представление об этой области за то время, которое проведем вместе с вами. В будущем вы сами выберете и отточите свои навыки в том направлении, которое интересует вас больше всего. Собственно, для этого и была написана книга; надеемся, что вы не пожалеете о потраченном времени.
Основные положения этой главы:
• Большие данные — обобщающий термин для любых наборов данных, достаточно больших и сложных, чтобы их можно было обработать традиционными средствами работы с данными. Большие данные характеризуются «четырьмя V»: объемом, разнообразием, скоростью и достоверностью.
• Основным содержанием data science являются методы анализа наборов данных, от совсем небольших до гигантских.
• Процесс data science сам по себе нелинеен, но его можно разделить на несколько шагов:
1. Назначение цели исследования.
2. Сбор данных.
3. Подготовка данных.
4. Исследование данных.
5. Моделирование.
6. Отображение и автоматизация.
• Набор технологий больших данных вовсе не сводится к Hadoop. Он состоит из множества разных технологий, которые можно разбить на следующие категории:
• Файловая система.
• Инфраструктуры распределенного программирования.
• Интеграция данных.
• Базы данных.
• Машинное обучение.
• Безопасность.
• Планирование.
• Сравнительный анализ.
• Развертывание.
• Программирование служб.
• Не все категории больших данных интенсивно используются специалистами data science. В основном они занимаются файловыми системами, инфраструктурами распределенного программирования, базами данных и машинным обучением. Конечно, им приходится иметь дело с другими компонентами, и все же эти предметные области относятся к сфере деятельности других профессий.
• Данные могут существовать во многих формах. Основные формы:
• Структурированные данные.
• Неструктурированные данные.
• Данные на естественном языке.
• Машинные данные.
• Графовые данные.
• Потоковые данные.
1 В российском прокате фильм шел под названием «Человек, который изменил всё». — Примеч. пер.