4 февраля 2011 в 19:01

Python(x, y)

imagePython(x, y) — набор библиотек и программного обеспечения для численных расчетов, анализа и визуализации данных на основе Python. IDE представлены IDLE, Eclipse и Spyder, основой GUI избран Qt. Я расскажу вкратце о модулях, относящихся к самому Python, приведу несколько примеров их работы. Во время установки можно выбрать только то, что нужно, поэтому стоит разобраться что к этому нужному отнести. Кроме того, рассказ о модулях может пригодиться и сам по себе, поскольку их можно установить и по отдельности. Порядок следования модулей повторяет порядок оригинальной страницы и список чекбоксов установки.

Python — стандартные библиотеки, сейчас используется Python 2.6.5
Spyder (Scientific PYthon Development EnviRonment) — IDE для интерактивных вычислений и визуализации данных, документация
formlayout — создание форм диалогов/виджетов для редактирования каких-то вводимых параметров без написания GUI-кода. Например:

Copy Source | Copy HTML<br/>from formlayout import fedit<br/> <br/>datalist = [('Name', 'Paul'),<br/>            ('Age', 30),<br/>            ('Sex', [ 0, 'Male', 'Female']),<br/>            ('Size', 12.1),<br/>            ('Eyes', 'green'),<br/>            ('Married', True),<br/>            ]<br/> <br/>print "result:", fedit(datalist, title="Describe yourself",<br/>                       comment="This is just an <b>example</b>.") <br/>



И видим действие кода с fedit():
result: [u'Paul', 30, 'Male', 12.1, u'#008000', True]

PyQwt — привязка Python к библиотеке Qwt для построения двумерной графики на Qt, примеры
wxPython — альтернативная GUI библиотека. Хотя очевидно, что здесь всюду продвигается PyQt, она нужна для популярного набора программ ETS, а также отладчика winpdb
NumPy — популярный модуль для высокоэффективной работы с многомерными массивами (ядро модуля SciPy), краткое введение в NumPy
SciPy — содержит модули для математической оптимизации, интегрирования, специальных функций, обработки сигналов, обработки изображений, генетических алгоритмов, решения обыкновенных дифференциальных уравнений и многих других задач
numexpr — быстрое вычисление выражений для элементов массивов с помощью векторной виртуальной машины. Например:

Copy Source | Copy HTML<br/>>>> import numpy as np<br/>>>> import numexpr as ne<br/>>>> a = np.arange(10)<br/>>>> a<br/>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])<br/>>>> b = np.arange( 0, 20, 2)<br/>>>> b<br/>array([  0, 2, 4, 6, 8, 10, 12, 14, 16, 18])<br/>>>> c = ne.evaluate("2*a+3*b")<br/>>>> c<br/>array([  0, 8, 16, 24, 32, 40, 48, 56, 64, 72]) <br/>


guidata — автоматическое создание GUI для удобного ввода данных и их показа, простейший из примеров:

Copy Source | Copy HTML<br/>import guidata<br/>guidata.qapplication()<br/> <br/>import guidata.dataset.datatypes as dt<br/>import guidata.dataset.dataitems as di<br/> <br/>class Processing(dt.DataSet):<br/>    a = di.FloatItem("Parameter #1", default=2.3)<br/>    b = di.IntItem("Parameter #2", min= 0, max=10, default=5)<br/>    type = di.ChoiceItem("Processing algorithm",<br/>                         ("type 1", "type 2", "type 3"))<br/> <br/>param = Processing()<br/>param.edit() <br/>



guiqwt — инструменты быстрого создания GUI, более объемная реализация идей предыдущего модуля, страница с примерами
Matplotlib — графическая 2D- и псевдо 3D-библиотека, имеющая во многих случаях синтаксис близкий к MATLAB, что позволяет опытным пользователям последнего быстро переучиваться; у Matplotlib имеется обширная галерея примеров получаемых изображений с сопутствующим кодом, что хорошо помогает войти в курс дела, также я писал о Matplotlib в 9 и 10 уроках курса на Викиверситете
gnuplot — еще один распространенный пакет для построения кривых и поверхностей
PIL (Python Imaging Library) — работа с растровой графикой различных форматов, чтение и запись, конвертирование, редактирование и так далее
IPython — замена стандартного Python shell, обладающая расширенными возможностями, об использовании IPython есть хороший рассказ на хабре
SetupTools — библиотека, позволяющая автоматически загружать, собирать, устанавливать и управлять пакетами языка Python, находящимися в репозитории модулей PyPI (Python Package Index) подобно пакетным менеджерам
ETS (Enthought Tool Suite) — большой самостоятельный пакет программ, в котором наиболее интересным, наверное, является средство 3D-визуализации Myavi
VTK — программное обеспечение для визуализации, 3D графики, объемной прорисовки и обработки изображений
ITK — программное обеспечение для обработки изображений из области медицины
mxeGenix.com mx Distribution, содержит модули для упрощения обработки данных различных типов: mxDateTime (преобразование и парсинг различных форматов дат и времени), mxTextTools (парсинг текста и поисковые алгоритмы), mxProxy, mxBeeBase (управление небольшими базы данных), mxURL, mxUID, mxStack, mxQueue и mxTools
pydicom — обработка медицинских изображений стандарта DICOM
PyOpenGL — работа с OpenGL, известного интерфейса для написания приложений, использующих двумерную и трёхмерную компьютерную графику
VPython — создание трехмерных интерактивных моделей физических систем
SymPy — математическая библиотека для символьных вычислений, о ней я когда-то сделал урок на Викиверситете
cvxport — библиотека выпуклой оптимизации
PyWavelets — модуль вейвлет-преобразований
scikits.timeseries — набор инструментов для анализа временных рядов
pyopencv — работа с библиотекой алгоритмов компьютерного зрения OpenCV
NetworkX — создание, манипуляция и исследования структур, динамики и функций сложных сетей, графов, например:

Copy Source | Copy HTML<br/>import networkx as nx<br/>import matplotlib.pyplot as plt<br/> <br/>G=nx.random_geometric_graph(200, 0.125)<br/>pos=G.pos # position is stored as member data for random_geometric_graph<br/> <br/># find node near center (0.5,0.5)<br/>dmin=1<br/>ncenter= 0<br/>for n in pos:<br/>    x,y=pos[n]<br/>    d=(x- 0.5)**2+(y- 0.5)**2<br/>    if d<dmin:<br/>        ncenter=n<br/>        dmin=d<br/> <br/># color by path length from node near center<br/>p=nx.single_source_shortest_path_length(G,ncenter)<br/> <br/>plt.figure(figsize=(8,8))<br/>nx.draw_networkx_edges(G,pos,nodelist=[ncenter],alpha= 0.4)<br/>nx.draw_networkx_nodes(G,pos,nodelist=p.keys(),<br/>                       node_size=80,<br/>                       node_color=p.values(),<br/>                       cmap=plt.cm.Blues)<br/> <br/>plt.xlim(- 0.05,1.05)<br/>plt.ylim(- 0.05,1.05)<br/>plt.axis('off')<br/>plt.show() <br/>



MDP — модульный набор инструментальных средств для обработки данных — набор управляемых и самообучающихся алгоритмов
PyTables — пакет основан на HDF5 библиотеке управления большими иерархическими структурами данных
vitables — графический инструмент для просмотра и редактирования файлов в HDF5 и PyTables форматах
h5py — интерфейс для HDF5 файлов (в отличие от PyTables, h5py обеспечивает прямой доступ к полной библиотеке HDF5 С)
pyhdf — интерфейс для файлов HDF4
netcdf4 — работа с netCDF4 (Network Common Data Form), набором библиотек программного обеспечения и машинно-независимого формата данных, которые поддерживают создание, доступ и обмен ориентированных на массивы научных данных
GDAL (Geospatial Data Abstraction Library) — работа с данными о геопространстве
PP (Parallel Python) — параллельное выполнение кода Python на системах с несколькими процессорами или ядрами, примеры
SendKeys — Python модуль для Windows, который может отправить одно или несколько нажатий клавиш или комбинации клавиш в активное окно. Можно даже забыть на время о таких целях и сделать шалость, например:

Copy Source | Copy HTML<br/>import SendKeys<br/>SendKeys.SendKeys("""<br/>    {LWIN}<br/>    {PAUSE .25}<br/>    {UP 3}<br/>    {ENTER}<br/>    {PAUSE 1}<br/>    notepad{ENTER}<br/>    {PAUSE 2}<br/>    Hello{SPACE}World!<br/>    {PAUSE 3}<br/>    %{F4}<br/>    {PAUSE 2}<br/>    {RIGHT}<br/>    {PAUSE 1}<br/>    {ENTER}<br/>    """) <br/>


Что здесь происходит? В точности то, что делал бы я в отсутствии мыши, для того, чтобы получить тот же результат, который получится. Я нажал бы левую клавишу windows {LWIN}, то есть зашел в меню «Пуск» своего Windows XP, потом три раза клавишу «вверх» {UP 3}, так я перешел к «Выполнить...», нажал бы клавишу {ENTER}, набрал notepad и запустил так блокнот, написал в нем типичное HelloWorld, закрыл с помощью alt-f4, что записывается как %{F4}, появился типичный диалог о сохранении данных «Да Нет Отмена», нажал клавишу {RIGHT}, чтобы выбрать «Нет» и {ENTER}. Паузы нужны, чтобы успели открыться необходимые программы и ввестись соответствующие символы.

Одновременно с исполнением этого кода не стоит стоять под деревом что-то делать, поскольку активное окно переключится и нарушится последовательность команд. Тогда, к слову, в моем примере может произойти {LWIN} {UP} {ENTER}{RIGHT} {ENTER} и компьютер выключится. Конечно, этот модуль можно использовать и более разумно, для того же упрощения обычной обработки событий.

pywinauto — набор модулей для автоматизации Microsoft Windows GUI (действия мыши и клавиатуры)
pyvisa — контроль всех видов измерительных устройств с помощью различных шин (GPIB, RS232, USB)
PyParallel — библиотека доступа к параллельному порту
PySerial — библиотека доступа к последовательному порту
Cythonязык, основанный на Python, позволяющий более плотно использовать скоростные возможности С
psyco — модуль, позволяющий повысить скорость выполнения кода на Python, причем во многих случаях достаточно лишь перед основным кодом добавить всего две строчки (или чуть больше, если обернуть их в try-except ImportError):

Copy Source | Copy HTML<br/>import psyco<br/>psyco.full() <br/>


py2exe — инструмент, который преобразует Python сценарии в автономные исполняемые файлы Windows, о нем немного написано на хабре
Sphinx — инструмент для генерации документации, использующий в качестве языка разметки reStructuredText; с помощью Sphinx оформлена и документация самого Python, и самого Sphinx, и многих других библиотек, входящих в Python(x, y)
docutils — текстовый процессор перевода документации из простого текста в полезные форматы, такие как HTML, XML или LaTeX (включая reStructuredText)
pygments — подсветка исходного кода, понимает большинство используемых языков, умеет выдавать на выходе html, картинки, LaTeX и так далее
ReportLab — создание pdf-документов
rst2pdf — инструмент для преобразования reStructuredText в PDF с использованием ReportLab
simplejson — простой, быстрый JSON (JavaScript Object Notation) кодер / декодер
xlrd — извлечение данных из файлов Microsoft Excel, статья на хабре
xlwt — создание файлов электронных таблиц, совместимых с Microsoft Excel, OpenOffice.org Calc и Gnumeric
pylint — анализ кода на поиск ошибок и плохих мест, достаточно запустить из командной строки pylint example.py и pylint выведет большую сводку того, что думает о вашем коде, пример
winpdb — интерактивный отладчик программ
Матюшкин Лёва @LeoMat
карма
93,2
рейтинг 0,0
Самое читаемое Разработка

Комментарии (18)

  • +8
    Вот это здорово!
    Спасибо за материал. Чую, это повод для меня, чтобы серьёзно Питоном заняться на ниве научной деятельности
    • +2
      Когда-то я предложил в своей научной лаборатории таким же студентам, как и я, попробовать в качестве языка Python. Для того, чтобы было проще разбираться, я решил писать курс. А дальше уже поехало.

      Недавно на институтской конференции удалось увлечь некоторых профессоров, что очень порадовало, потому что, конечно, в российском научном сообществе о Python мало кто слышал, все больше мыслят фортраном, паскалем, иногда си. И это при том, что скорость в написании тех же научных статей является ключевым фактором.
      • 0
        У нас de facto стандарт это Java, такие вещи как Weka, и много наработанных библиотек. Но иногда хочется чуть более высокого уровня абстракции
        • +1
          Groovy, JPython — будут совместимы с наработками и высокий уровень абстракции
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          А вы чем занимаетесь?
          • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          А у нас на кафедре «вычислительной математики и комп. наук» после того как я заделался там писать курсовик на питоне — смотрят как на ненормального! Там никто никогда не видел питон, а большинство даже не слышали! Они заставляют писать меня о преимуществах питона перед ПАСКАЛЕМ! Просто мрак.
          • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Мне кажется это задача интересная и можно воспринять это как хорошую возможность показать и свои аналитические способности и эрудицию с лучшей стороны, и представить сам язык. Ведь тот же Pascal кого-то уже какой десяток лет кормит хлебом, за то он его и уважает.

            На кафедре микроэлектроники все гораздо проще, потому что основным является добиться цели, смоделировать что-то, автоматизировать, поэтому и важны сами результаты, новые, свежие. Надеюсь, и на вашей кафедре можно еще кого-то разбудить, например, предложенным рассказом-сравнением.
  • 0
    Хы, про дистрибутив знал, а вот про кучу полезных библиотек нет. Здорово.
  • +1
    Отлично! Буду писать на этом лабы по сенсорным системам.
  • 0
    такое бы раздолье да для руби…
    • –1
      Научным сотрудникам со всего мира гораздо проще освоить простейший синтаксис Python, нежели темную и светлую магию Руби
  • +2
    Так для всяких научных расчётов есть же Sage — www.sagemath.org/
    Тот-же питон с поддержкой кучи других модулей (в т.ч и внешних программ — maxima, gnuplot, ...) для всякой научной деятельности. Правда, без ориентирования на GUI — никакого PyQt/wxPython он с собой не таскает (а может это и плюс? ;)
    • 0
      Да, есть Sage, я и не отрицаю, и есть о нем отличные скринкасты. И сам Sage представляет себя как мощную альтернативу Enthought's EPD и Python(x,y) и идея с работой через браузер с помощью notebook() отличная. Но, может быть, мне все это вместе в таком количестве не нужно? И мне необходимо для конкретной области написать программу, для которой будет достаточно питона-пары модулей-самого кода. Собственно, в этой статьи я и показывал какие модули имеются в этой сборке. А это, на мой взгляд, именно сборка, из которой можно выбирать что хочешь простым образом. Sage это уже большой математический пакет программ.
  • +1
    Прямо матлаб на питоне (в перспективе). Здорово
  • 0
    Спасибо большое!
    Пост сподвиг по работе заморочить и погрузиться. До этого с питоном поверхностно был знаком.
    Сейчас по работе появилась необходимость обрабатывать большое количество данных, уже думал VBA осваивать :)

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

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