Не так давно я рассказывал о том, как случайно познакомился с понятием Data Science, благодаря курсам от Cognitive Class. Кратко резюмируя ту статью скажу, что по результатам курса я толком ничему не научился, но мне стало любопытно, поэтому спустя какое-то время я побежал в магазин и купил книгу, которой и посвящён данный материал.
Не знаю на сколько уместно на Хабре описывать возможность обучения по печатному самоучителю, но в конце концов этот хаб же про учебный процесс в IT и поэтому если вам интересно, чему может научить эта книга полного новичка в области Data Science и стоит ли тратить на этот этап время и деньги, то милости прошу под кат.
Часть 1. «Я — это раз» — немного о навыках
Надо сказать, что до прочтения данной книги, мое представление о пользе Data Science не далеко ушло от заглавной картинки, позаимствованной из любимого мультфильма.
Для того, чтобы заглянувший сюда читатель мог спроецировать мой опыт на себя, придется мне немного поведать о своих стартовых навыках. Итак, как и в прошлый раз, досье осталось практически без изменений:
- В связах с мат. анализом и статистикой замечен не был;
- Навыками программирования на Python не владеет;
- Владеет знанием о существовании Data Science, практических навыков не имеет.
- Характер стойкий нордический, не женат.
Собственно, почему я решил изучить эту книгу, и поделится впечатлениями о ней?
Просто после курсов Cognitive Class, я решил заглянуть на Kaggle и понял, что даже в туториале по решению задачи про Титаник, я сути почти всех приемов и определений не понимаю.
Данная книга не требовала никаких стартовых навыков и обещала приятное погружение в мир науки о данных. Есть ли у меня теперь уверенность, что после прочтения книги я смогу решить эту задачу с Титаником? Ответ в конце статьи.
Часть 2. «Два — это Телёнок» — общие сведения о книге
Книга «Data Science. Наука о данных с нуля» — на отечественном рынке похоже появилась совсем недавно, о чем как минимум свидетельствует, то что её электронную версию мне не удалось ни скачать, ни купить. Сам же оригинал был выпущен в 2015 г. Само собой за 2 года в мире IT много чего меняется, например, выходят новые версии библиотек для анализа данных в Python. И тут надо отдать должное автору (Джоэл Грас) и локализатору книги. Изначально, книга писалась с расчетом на Python 2, но автор не оставил свое детище и адаптировал исходные тексты программ, для Python 3 (и кстати выложил это на GitHub), ну а переводчик слава богу разместил в книге уже адаптированные тексты программ (похоже, что с небольшими корректировками).
Также спасибо переводчикам, за краткую инструкцию по установке Anaconda и/или настройки среды для случая если вы не хотите ставить Анаконду.
И так начнём повествование о книге. На обороте обложки размещена цитата, действительно четко описывающая размещенный в ней материал: «Джоэл проведет для вас экскурсию по науке о данных. В результате вы перейдете от простого любопытства к глубокому пониманию насущных алгоритмов, которые должен знать любой аналитик данных.» — Роит Шивапрасад. Ну по крайней мере первая часть этой цитаты на 100% верна, книга действительно напоминает экскурсию, когда вам надо за 2 часа осмотреть Эрмитаж и все, что вы успеваете это бежать за экскурсоводом, ловя краткую справку о каждом шедевре. Как ни странно, не могу сказать, что это плохо, по крайней мере книгу успеваешь прочесть раньше, чем она надоест.
Надо отметить, что кого-то, как и меня может ввести в заблуждение название книги.
Важно отметить, что в данном случае «с нуля» подразумевает не с нуля знаний до какого-то практического уровня, а то, что все примеры функций для анализа и визуализации будут написаны в процессе изложения материала. Это напоминает аналогию с книгой «Linux from scratch», которая направлена не на то, чтобы вы прям вот сразу начали пользоваться каким-нибудь дистрибутивом Linux «с интересными обоями», а планомерно, собрали, свою систему с нуля (даже если вы ей потом не будете пользоваться).
У такого подхода есть свои плюсы и есть свои минусы. С одной стороны вы вряд ли в дальнейшем будете пользоваться теми функциями, которые позаимствуете из книги, с другой стороны, возможно к вам придет понимание общих принципов (ко мне с первого раза много где не пришло)
Итак, как пишут в рапортах представители силовых структур: «по существу вопроса, докладываю следующее:»
Часть 3. «Три — это Python» — содержание и общий подход.
Надо сказать, что с форматом «экскурсии» книга действительно справляется. В ней кратко изложены, наверное, почти все базовые концепции, которые можно встретить в иных курсах по Data Science (например, на той же Coursera). У краткости есть достоинства и недостатки, с одной стороны прочитать книгу при желании можно за 2-3 дня и она не успевает надоесть, с другой стороны материала реально мало и читая «по диагонали» можно, что-то пропустить, в таком случае чтобы что-то понять придется возвращаться и перечитывать главу еще раз.
Автор проявил фантазию и привязал изучаемый материал, к вашей работе в условной соцсети для ученых по данным — “DataSciencester”. Надо сказать, что это приятный подход, задачи выглядят из далека похожими на житейские. И сложность решаемых вами «рабочих» задач постепенно возрастает от главы к главе.
В первой главе обучение стартует с места в карьер, автор покажет, вам как с помощью Питона решить несколько условных задач, на малом объеме данных, например, построить граф отражающей количество друзей в нашей «условной» соцсети или выявить и графически отобразить связь между стажем работы и уровнем зарплаты, для ученого по данным.
Дальше будет изложен интенсив по Python, избыточным его точно не назовешь, но надо отдать автору должное, за рамки того, что дано в главе 2, он далее по тексту сильно не выходит, поэтому если вникнуть один раз в базовые типы данных и другие понятия, то по идее представленный в книге код проблем вызывать не должен (хотя у меня вызывал).
После вводной части и азов Python, остальные направления книги можно поделить на 3 части:
- Очень краткие основы мат. анализа и статистики;
- Сбор, обработка, хранение данных;
- Машинное обучение (математические модели и алгоритмы для обработки данных и предсказания);
Фрагмент книги и оглавление можно посмотреть на Ozon (не реклама), там как раз содержание и первая глава.
От текстовой части перейдем к практической, выше по тексту была ссылка на страничку автора на GitHub, где размещен код представленный в книге и необходимые данные.
В локализованной версии книги есть ссылка на архив с адаптированной (русифицированной) версией кода, чтобы не нарушать ни чьи права, воздержусь от ее размещения.
Весь код представлен в виде исходников на Python 2 и 3, а также в виде блокнотов для Jupyter notebook. Надо сказать, большое спасибо этой книге, потому что благодаря ей я открыл для себя Anaconda (удобная вещь). На мой взгляд удобней всего экспериментировать с кодом, представленным в книге именно в версии блокнотов Jupyter (который по умолчанию установлен в Анакодне). Хотя с другой стороны по сути в записной книжке весь код вбит в одну ячейку без разбивки и без отдельных текстовых вставок, так что это скорее вопрос вкуса, чем явного преимущества. Кстати если вдруг вас не устроит корневая директорию откуда Jupyter «видит» файлы, то вот действительно рабочий совет (есть варианты и для Windows и для Linux)
Надо отметить, что блокноты идут с заранее подготовленными результатами, чтобы вы могли посмотреть их без запуска кода, а вот после перезапуска расчётов в некоторых местах могут потребоваться маленькие «пляски с бубном» в виде установки библиотек или еще каких-то мелочей (например, подключение к API сервисов).
Не хочу быть голословным поэтому надеюсь автор не обидится если я продемонстрирую кусочек кода из его книги.
Вот, например, фрагмент кода посвященный линейной алгебре (чтобы не нарушать права переводчика возьмем оригинал с GitHub). В книге данный код перемешан с изложением материала, в блокноте и исходниках идет в сплошном виде.
# -*- coding: utf-8 -*-
# linear_algebra.py
import re, math, random # regexes, math functions, random numbers
import matplotlib.pyplot as plt # pyplot
from collections import defaultdict, Counter
from functools import partial, reduce
#
# functions for working with vectors
#
def vector_add(v, w):
"""adds two vectors componentwise"""
return [v_i + w_i for v_i, w_i in zip(v,w)]
def vector_subtract(v, w):
"""subtracts two vectors componentwise"""
return [v_i - w_i for v_i, w_i in zip(v,w)]
def vector_sum(vectors):
return reduce(vector_add, vectors)
def scalar_multiply(c, v):
return [c * v_i for v_i in v]
def vector_mean(vectors):
"""compute the vector whose i-th element is the mean of the
i-th elements of the input vectors"""
n = len(vectors)
return scalar_multiply(1/n, vector_sum(vectors))
def dot(v, w):
"""v_1 * w_1 + ... + v_n * w_n"""
return sum(v_i * w_i for v_i, w_i in zip(v, w))
def sum_of_squares(v):
"""v_1 * v_1 + ... + v_n * v_n"""
return dot(v, v)
def magnitude(v):
return math.sqrt(sum_of_squares(v))
def squared_distance(v, w):
return sum_of_squares(vector_subtract(v, w))
def distance(v, w):
return math.sqrt(squared_distance(v, w))
#
# functions for working with matrices
#
def shape(A):
num_rows = len(A)
num_cols = len(A[0]) if A else 0
return num_rows, num_cols
def get_row(A, i):
return A[i]
def get_column(A, j):
return [A_i[j] for A_i in A]
def make_matrix(num_rows, num_cols, entry_fn):
"""returns a num_rows x num_cols matrix
whose (i,j)-th entry is entry_fn(i, j)"""
return [[entry_fn(i, j) for j in range(num_cols)]
for i in range(num_rows)]
def is_diagonal(i, j):
"""1's on the 'diagonal', 0's everywhere else"""
return 1 if i == j else 0
identity_matrix = make_matrix(5, 5, is_diagonal)
# user 0 1 2 3 4 5 6 7 8 9
#
friendships = [[0, 1, 1, 0, 0, 0, 0, 0, 0, 0], # user 0
[1, 0, 1, 1, 0, 0, 0, 0, 0, 0], # user 1
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0], # user 2
[0, 1, 1, 0, 1, 0, 0, 0, 0, 0], # user 3
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0], # user 4
[0, 0, 0, 0, 1, 0, 1, 1, 0, 0], # user 5
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 6
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 7
[0, 0, 0, 0, 0, 0, 1, 1, 0, 1], # user 8
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]] # user 9
Автор, как и обещал пишет все функции с нуля и старается объяснить их работу, после чего в конце каждой главы честно информирует вас о том, что существуют те или иные библиотеки, где это реализовано лучше.
Объяснение процесса разработки функций ближе к концу неподготовленному читателю (например, мне) кажутся зубодробительными и где-то после середины книги уже понимается, не вся логика работы кода (думаю придется однажды перечитывать), но зато таким путем вы вместе с автором посмотрите, как сделать своими руками очередные гребаные велосипеды, полезные базовые решения в куче областей например, свой примитивный аналог СУДБ, все базовые функции и модели анализа, нейронные сети, деревья принятия решений, генераторы текста, распознаватели «капчи». Даже просто беглое знакомство со всем этим набором вполне может развить у вас интерес к предмету.
Часть 4. «Ура козлёнку!» — Заключение.
Итак, что у нас в сухом остатке?
Поскольку на текущий момент все мои знания о Data Science ограничиваются этой книгой и курсами от Cognitive class (СС), то для начала с ними и сравню.
Не знаю может фактор родного языка, может, то, что в отличие от курсов СС автор хотя бы нормально оси на графиках подписал в примерах, но в плане общего представления книга дала намного больше, при тех же затратах времени (и там и там 2 чистых дня), не смотря на отсутствие видео, лабораторных, экзаменов и так далее. И даже отсутствие «сертификатов» и «бейджиков» ничуть не дает плюсов CC (ибо грош им цена).
Сможет ли полный новичок, что-то понять об основных подходах в области науки о данных? Скорее да, чем нет. Сможет ли он по окончанию книги сразу сделать что-то путное, скорее нет, чем да. Все же, наверное, будет плохой практикой применять для постоянной работы те примеры, что указаны в книге, а значит необходимо выучить основные библиотеки для анализа данных (сам автор тоже об этом говорит по ходу изложения материала). Причем могу предположить, что будет полезно однажды вернуться к примерам «с нуля», когда уже набьется рука на готовых библиотеках.
Полезна ли книга новичку? Я думаю, что да. Наверное, если представить, что ваш
Поэтому в качестве экскурсии в мир Data Science книга вполне подойдет, по крайней мере, в процессе прочтения интерес к вопросу только возрастает и думаю, что при прохождении более основательных учебных курсов будет намного проще более детально рассмотреть ранее изученные с помощью данной книги концепции.
Стоит ли в итоге 550 рублей книга из 300 с небольшим страниц, напечатанных на газетной бумаге, решать вам. Могу сказать одно, данная книга вселила в меня уверенность, что теперь я смогу худо-бедно решить задачку про Титаник на kaggle, думаю как раз об этом и будет следующий мой материал.
Автор: BosonBeard