Инженерные и научные расчеты на базе языка программирования Python

Удобно организованный вычислительный процесс — один из важнейших этапов проведения прикладных исследований или выполнения инженерных расчетов. В свою очередь, он во многом определяется удобством используемой среды для выполнения вычислений. С развитием вычислительной техники и разработки новых программ, эта среда заметно эволюционировала. Помню, как в начале 2000-х годов, в научных институтах постепенно стали присматриваться к таким программным продуктам как SciLab и, потом, MatLab. В сравнении с трудозатратами, например, для написания программы осуществляющей интегрирование небольшой системы обыкновенных дифференциальных уравнений на языке программирования C, использование среды MatLab оказывалось на порядок более эффективным. Здесь уже не нужно было следить за выделением и освобождением памяти, работая с числовыми массивами, а возможность пошагового выполнения кода — оказало неоценимую помощь  в отладке вычислительных скриптов.  За удобство, однако, нужно было платить производительностью, но это вполне себя оправдывало, поскольку выйгрыш, если говорить о времени разработки и отладки программ, был весьма существенным.

Свободно распространяемые "аналоги" среды MatLab — SciLab, Octave, использовались более реже, чем сам MatLab прежде всего по причине меньшей их развитости; MatLab, обладая уже тогда значительным набором инструментариев для решения конкретных задач (так называемых Toolbox'ов) , удобством интроспекции кода, интерактивного редактирования графиков, удобной и полной документации представлял собой весьма привлекательную среду для выполнения научных расчетов. Вместе с тем, такое решение было весьма дорогим даже для организаций, и это стало первоначальным стимулом для поиска какой-либо замены MatLab. 

Предъявляемые требования к будущим претендентам на "универсальную" вычислительную среду были следующие:

  • отсутствие необходимости "вручную" выделять и освобождать память под переменные и\или массивы данных;
  • удобство работы с массивами данных;
  • читабельность и простота кода;
  • простота определения нужных типов данных;
  • независимость от установленной на компьютере ОС;

Язык программирования Python в этом отношении сразу попал в поле зрения — помимо всех перечисленных требований он был языком программирования общего назначения: использовался для разработки самостоятельных приложений, веб-решений, что, при необходимости, предполагало возможность сравнительно простой интеграции какой-либо вычислительной функциональности в такие проекты.

Если говорить о программном пакете для анализа данных, то лидером, безусловно, являлася (и, вероятно, является) статистическая среда R. Но ее синтаксис, наличие различных классов S3, S4... , вызвали какое-то негодование.  Все началось с простого: я попробовал получить справку по какой-то функции\команде (не помню), ввел в интерактивную строку ? somefunc (не помню что было вместо somefunc)  и получил, что такого объетка нет; в примере, однако, я обнаружил, что ? somefunc.someattr  обязательно должно приводить к результату, что и случилось. Таким образом, somefunc отсутствует, но somefunc.someattr существует?!  И даже если представить, что символ "точка" здесь ничем не отличается от буквы: нет, было решено, такой синтаксис мне совершенно не удобен! 

Синтаксис языка Python в сравнении с R был куда более привлекательным (читабельность обеспечивалась как необходимостью выделять блоки кода отступами, так и "неформальными" требованиями к написанию кода Pep8), но окончательное решение в пользу Python  было сделано ввиду его универсальности (востребованности для самостоятельных приложений и веб решений), наличия собственной концепции разработки кода (Zen of Python), наличия удобных пакетов для выполнения научных расчетов (SciPy, Pandas, Sklearn) и работы с массивами данных (NumPy); наличие дополительных средств визуализации данных (matplotlib), обработки изображений (scikit-image, PIL), а также наличие самого проекта Pydata.org, свидетельствовавшее об  успешности применения Python в задачах анализа данных, лишь убеждали в правильности выбора Python.

 

Установка и настройка вычислительной среды на базе языка программирования Python

Формирование вычислительной среды на базе Python, безусловно, невозможно без самого интерпретатора Python, который в настоящее время уже водит в ОС семейства Linux. Тем не менее его нетрудно установить, а если он установлен, обновить до последней версии.

Сейчас существуют 2 параллельно развивающиеся версии Python. Python 2.х и 3.х. Ветка 2.х представляет наследие прошлого, но поддерживается ввиду того, что все еще существует много полезных библиотек, которые еще не были портированы на Python 3.x.  Несмотря на определенные качественные различия в 2.x и 3.х, eсли рассматривать Python лишь как образующее вычислительной среды для статистического анализа,  следует предпочесть Python 3.x.  Основные библиотеки, используемые для статистического анализа (такие как Pandas, SciPy, NumPy, Scikit-Learn), уже портированы на Python 3.x. Более того, версии Python 2.x и 3.х кардинально не отличаются: в большинстве примеров эти отличия сводятся к тому, что в Python3.x "print" теперь является функцией (конечно, существуют еще кардинальные отличия, например, отсутствие в Python 3.x метода iteritems для словарей (dicts), что может привести к ошибкам при попытке запуска кода, разработанного для Python 2.x  в среде c Python 3.x). Существуют, однако, средства автоматического трансформирования (2to3) кода с Python 2.x в Python 3.x, легко преодолевающие подобные простые случаи.

Подробности по установке Python на различных операционных системах можно прочитать здесь. Если планируется работать на Windows, то установку интерпретатора Python и (пожалуй всех!) необходимых для статистического анализа пакетов удобней выполнить из дистрибутива  Anaconda. Данный дистрибутив содержит более 270 пакетов для решения всевозможных вычислительных задач.  Если используется Anaconda, то вероятно  все неоходимые для работы пакеты уже установлены. 

Вычислительная среда на базе Python

  1. NumPy — пакет для высокоскоростной работы с массивами данных. Списки в Python – вещь удобная, но работают они весьма медленно. Использование Numpy позволяет существенно увеличить скорость обработки массивов данных, избежать использования циклов: в терминах MatLab - использование Numpy позволяет организовать так называемые векторные вычисления над списками в Python (В MatLab использование "векторных вычислений" является одним из инструментов оптимизации кода по быстродействию) .
  2. SciPy — всевозможные функции для оптимизации, решения обыкновенных дифференциальных уравнений, обработки сигналов, интерполяции и др. Данный пакет составляет сердце вычислительной среды на Python, и хотя Python обладает достаточно большим количеством библиотек (так называемые пакеты, включенные в Python - battaries included), SciPy - scientific python - будет незаменимым средством для организации инженерных и научных вычислений.
  3. Pandas — удобное средство для первоначальной обработки данных, загрузки их в вычислительную среду, выбору значений по определенным критериям, работы с пропущенными данными. Pandas реализует класс DataFrame, аналог Data Frame из среды статистического анализа R.
  4. Matplotlib — пакет для визуализации результатов вычислений; позволяет производить гибкую настройку графиков, внедрять формульные надписи на графиках с использованием среды Latex (должен быть установлен Latex); подключать пользовательские шрифты и др.
  5. Scikit-learn — более узкопрофильный пакет: его назначение решение задач классификации и регрессии, которые, однако, являются самыми распространенными в прикладном анализе данных.
  6. Scikit-image — пакет для обработки изображений; может использоваться для распознавания объектов по их фотографиям, выполнения аффинных преобразований массивов данных, настройки таких преобразований и др.

Наличие данных пакетов формирует вычислительную среду, весьма удобную и эффективную  в использовании при выполнении инженерных расчетов; более того, базовый синтаксис функций matplotlib, используемых при построении графиков, во многом напоминает синтаксис таковых в среде MatLab, что делает процесс перехода со среды MatLab вполне безболезненным.

blog comments powered by Disqus