О книге «Элегантный SciPy»

Приятно, что в последнее время появляется много книг не просто о языке Python, но и о применении его в более узких областях. Меня в первую очередь интересуют инженерные расчеты, в которых практически стандартом являются библиотеки Numpy, SciPy и Matplotlib. На эту тему мне попадалось несколько книжек, но, к сожалению, все они страдают одной проблемой — после них нельзя сказать, что ты знаешь, например, Numpy.

Недавно я дочитал еще одну книгу сразу трех авторов: Хуана Нуньеса-Иглесиаса, Штефана ван дер Уолта и Харриет Дэшноу «Элегантный SciPy», которая посвящена научным расчетам на языке Python. К сожалению, и она страдает той же проблемой, что и другие известные мне книги, но хочется про нее все-таки рассказать.

Надо сразу сказать, что эта книга — не учебник по Python. Подразумевается, что сам язык вы знаете. Все примеры в книге рассчитаны на Python 3.6. Наверное, многие примеры могут работать и на более старых версиях языка, но это не гарантируется.

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

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

Так же и в этой книге. Несмотря на то, что авторы написали, например, краткое введение в обработку данных, связанных с генами, но для меня все равно термины «экспрессия гена», «прочтение», «уровни белка» и т.п. осталось загадкой. Чтобы вы поняли, что я имею в виду, приведу несколько предложений:

… Имеется четыре вида оснований, сокращенно A, C, G и T, составляющих алфавит, посредством которого сохраняется информация. Чтобы получить доступ к этой информации, ДНК транскрибируется в родственную молекулу, которая называется матричной рибонуклеиновой кислотой, или мРНК. Наконец, мРНК транслируется в белки, «рабочие лошадки» клетки. Участок ДНК, в котором закодирована информация, дающая белок (через мРНК), называется геном. Количество мРНК, получаемых из конкретного гена, называется экспрессией этого гена.

Самое обидное, что в главе про гены и хромосомы объясняются достаточно важные понятия библиотеки Numpy — массивы Numpy, векторизация и транслирование (так перевели слово broadcasting). К счастью, само описание этих понятий хоть и краткое, но в целом понятное, однако чтение примеров у меня происходило примерно так: вот здесь мы читаем данные из файла (как выглядят исходные данные? Что означают эти цифры?), вот мы как-то корректируем данные (я верю, что это делать надо, но не понимаю зачем и что это дает) и вот мы получили красивый график (я даже не понимаю, что он обозначает).

Была глава, которая мне близка по специальности, она была посвящена обработке данных с радиолокатора, который использует линейную частотную модуляцию сигнала. Для меня здесь примеры были более понятны, но не уверен, что они будут понятны тем, кто такие радары и сигналы не изучал в институте. Но в этой главе у меня большие претензии к переводчикам из-за неаккуратного использования терминов. Например, вместо слова «амплитуда» используется калька с английского «магнитуда», попадались такие фразы как «виды тока» (имелись в виду токи на разной частоте, через предложение об этом будет сказано) и «сила синусоиды» (амплитуда синусоиды). Все-таки книга рассчитана на инженеров и ученых, поэтому такой вольный подход к описанию терминов не уместен. Поэтому подозреваю, что если генетик прочитает главу про гены, он тоже найдет, к чему придраться.

Сама глава, в которой обрабатывают данные с радиолокатора, посвящена преобразованию Фурье. В этой главе описываются интересные вещи, но каким-то слишком упрощенным языком, который больше подходит для научно-популярных книг. Или, например, в одной из глав зачем-то начинают объяснять, что такое бит. Вроде книга по программированию, да еще и для инженеров с исследователями, неужели они могут этого не знать?

В книге есть интересные главы, посвященные обработке изображений, но, к сожалению, там многие примеры тоже сведены к магии, исходящей из библиотеки scikit-image. То есть называются алгоритмы, которые используются для сегментирования изображения и выделения на нем объектов, но не говорится, как эти алгоритмы работают, а просто используют библиотеку, где этот алгоритм реализован.

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

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

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

Еще в книге есть проблемы с исходниками, в которых все двойные кавычки заменены на «елочки», из-за чего три подряд двойные кавычки превратились в сочетание «»«. Но на понимание исходников это не влияет.

Что в итоге мы имеем? Идея книги интересная, но из-за слишком разрозненных тем и довольно поверхностных описаний библиотек книга по содержанию вышла так себе. Однако и из нее можно извлечь пользу. Как минимум вы из нее узнаете как пользоваться библиотеками Numpy, Scipy, Matplotlib, Pandas, Scikit-image, Scikit-learn, Toolz, NetworkX. К сожалению, книга не сделает вас экспертами по этим библиотекам. Также в книге содержится множество ссылок на научные исследования и на различные алгоритмы. Но все эти крупицы интересностей придется выделять из непонятных примеров. Тем не менее, во время чтения для себя я отметил немало интересных особенностей библиотеки Numpy и некоторых других библиотек, о чем будет полезно почитать в документации.

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

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 3, средняя оценка: 5,00)
Загрузка...

комментария 3

  1. Petjan:

    если для читателя выражение «экспрессия гена» является непонятным, и вместо быстрого гугления он решил остаться невеждой, то это проблемы читателя.

  2. Jenyay:

    Все-таки цель чтения этой книги у меня была другой — узнать библиотеки Python, а не биологию.

  3. Petjan:

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

Leave a comment

Subscribe without commenting