요즘은 굉장히 다양한 오픈소스 프로그램들이 있습니다. 


수치 분석에 주로 MATLAB 을 사용하곤 했지만 요즘은 MATLAB 을 꼭 써야 하는 것들이 아니라면 Python 을 주로 사용하고 있습니다.


회사에서는 차량용 MBD(Model Based Development) 개발을 위해 Simulink 환경에서 Stateflow 툴박스를 주로 활용하는데


모델링의 일부는 Stateflow API 를 사용하여 MATLAB 스크립트를 통해 자동으로 모델을 구성하는 작업을 하곤 합니다.


모델링 구성후에는 당연히 simulation 을 수행하고 simulation 을 마치면 Embedded Coder 를 사용하여 MATLAB 알고리즘/Simulink 모델에 대해 C 코드 생성후 타겟 보드에서 테스트를 진행 합니다.


위와 같은 작업들은 MATLAB/simulink 를 꼭 써야 하는 작업이므로 사용을 하지만, 제어기 로직 설계 하는 것 이외의 다른 분야들에서는 주로 Python 을 사용하고 있습니다.


Python과 같은 프로그램들은 오픈소스 프로그램이라 누구나 사용할 수 있으니 협업시에도 편한것 같네요.


Python 에서도 MATLAB 과 같이 예쁜 그래프들을 표현 할 수 있는데 matplotlib 모듈을 사용하시면 됩니다.


matplotlib 모듈의 홈페이지는 아래와 같습니다. 


https://matplotlib.org/gallery/index.html


위 주소에 들어가 보시면 다양한 그래프 예제들이 있습니다.


하니씩 실행해 보시는것도 재미 있을 겁니다. MATLAB 에 익숙하신 분들은 코드를 이해하는것도 조금더 편할 것 같네요.


matplotlib 는 Anaconda 를 설치하면 기본적으로 설치가 됩니다. 예전에 아래 포스팅에서는 각 모듈들을 하나하나 찾아가며 설치 했었는데


http://iamaman.tistory.com/377


그냥 간편하게 Anaconda 를 설치해서 사용하시는게 정신건강에 이롭더군요.


저도 그래프 하나 그려 봤는데~~ 다음과 같이 코딩을 하면 그래프를 쉽게 그릴수 있습니다.


MATLAB 에서 그래프 그리는것과 유사하죠~ savefig() 함수를 사용하면 아래와 같이 그림으로 저장도 할 수 있습니다. 

matplotlib 의 메뉴얼은 아래 주소에서 확인 할 수 있습니다. 


https://matplotlib.org/tutorials/index.html


오늘은 파이썬을 활용하여 각도를 clock 값으로 변환하는 예제에 대해 알아보려 합니다.

 

MATLAB Stateflow 에서 junction 을 연결 할 때 junction 의 연결 지점을 clock 값으로 설정 합니다.

 

이러한 경우 각도에 대한 clock 값을 알 필요가 있습니다.

 

아래는 각도를 clock 값으로 변환해 주는 코드입니다.

 

Anaconda 를 설치해서 사용 중이라 numpy 나 matplotlib 은 설치가 되어 있는 상태입니다.

 

import matplotlib.pyplot as plt

import numpy as np

 

def degreeToClock(degV):

    return str((-(degV / 360.0 * 12.0) + 3) % 12)

 

 

if __name__ == '__main__':

    x = np.linspace(-180, 180, 360)

    y = map(degreeToClock, x)

    line, = plt.plot(x, y, '--', linewidth=2)

      

    plt.grid(True)

    plt.xlabel('Degree')

    plt.ylabel('Clock')

    plt.title('Degree to Clock')

      

    plt.savefig('C:\Degree_to_Clock.png')

    plt.show()

 

다운로드 링크 : Gist


 

위 코드를 실행해 보면 -180~ 180 도 에 대해 아래 그래프와 같이 변환 됩니다.

 


apsw, aspell-python, assimulo, astropy, Atom, autopy, Babel, backports, basemap, Bazaar, bcolz, bigfloat, bioformats, biopython, bio_formats, bitarray, BLAZE, blender-mathutils, blist, blosc, bokeh, boost.python, bottleneck, bsdiff4, carray, cartopy, casuarius, cdecimal, cellcognition, cellprofiler, ceodbc, certifi, cffi, cgal-python, cgkit, Cheetah, cld, conda, Console, Coverage, curses, cvxopt, cx_freeze, cython, cytoolz, delny, dipy, docutils, dpmix, dynd, EcOS, enaml, epydoc, ETS, fastcluster, faulthandler, ffnet, fiona, fipy, fonttools, friture, gdal, gevent, gmpy, greenlet, guiqwt, h5py, holopy, htseq, ilastik, iminuit, imread, intbitset, iocbio, IPython, iris, javabridge, jcc, jinja2, jpype, jsonlib, kivy, kiwisolver, kwant, la, liblas, liblinear, libpython, libsbml, libsvm, libtfr, libxml-python, line_profiler, llist, llvmlite, llvmpy, lp_solve, lsqfit, lxml, mahotas, MAKO, marisa-trie, markupsafe, matplotlib, MDP, Mercurial, meshpy, milk, minepy, mlpy, mmlib, mmseg, mmtk, mod_wsgi, mpi4py, msgpack, mxbase, mysql-python, mysqlclient, natgrid, netcdf4, networkx, nibabel, nipy, nipype, nitime, nlopt, nltk, nmoldyn, Noise, nose, numba, Numeric, numexpr, numpy, numscons, ODE, openbabel, opencv, openexr, openglcontext, openimageio, ORANGE, oursql, pandas, patsy, pgmagick, pillow, pip, Planar, Polygon, polymode, psutil, psycopg, Pulp, py-fcm, py-postgresql, py2exe, pyalembic, pyamf, pyamg, pyaudio, pybluez, pybox2d, pycairo, pycares, pycifrw, pycluster, pycogent, pycosat, pycparser, pycuda, pycurl, pydbg, pydde, pyeda, pyephem, pyexiv2, pyfftw, pyfftw3, pyfits, pyfltk, pyfmi, pygame, pygit2, pyglet, pygments, pygraphviz, pygtk, pyhdf, pyhook, pyicu, pyisapie, pylibdeconv, pylibtiff, pylzma, pymatlab, pymc, pymca, pymedia, pymex, pyminuit, pymix, pymol, pymongo, pymssql, pymunk, pymutt, pymvpa, pynifti, pyodbc, pyopencl, pyopengl, pyparsing, pyproj, pyqt4, pyqwt, pyreadline, pyropes, pyrxp, pySerial, pysfml, pyshp, pyside, pysparse, pyspharm, pysqlite, pystemmer, pytables, python-cjson, python-dateutil, python-igraph, python-ldap, python-levenshtein, python-lz4, python-lzo, python-snappy, python-sundials, pythonmagick, pythonnet, pytst, pytz, pyusb-ftdi, pyviennacl, pyvisa, pyvrml97, pywavelets, pywcs, pywin32, pyxml, pyyaml, pyzmq, qimage2ndarray, quantlib, quickfix, qutip, rasterio, re2, Regex, reportlab, requests, rpy2, rtmidi-python, rtree, scientificpython, scikit-bio, scikit-image, scikit-learn, scikits.ann, scikits.audiolab, scikits.delaunay, scikits.hydroclimpy, scikits.odes, scikits.samplerate, scikits.scattpy, scikits.timeseries, scikits.umfpack, scikits.vectorplot, scipy, scipy-cluster, scipy-stack, scitools, scons, sendkeys, setuptools, sfepy, shapely, silvercity, simpleitk, simplejson, Six, slycot, smc.freeimage, sparsesvd, sphinx, Spyder, SQLAlchemy, statsmodels, steps, sympy, ta-lib, theano, thrift, tinyarray, Tornado, trfit, twainmodule, Twisted, ujson, umysql, veusz, videocapture, vigra, virtualenv, visionegg, vispy, visvis, vitables, vlfd, vpython, vtk, wxPython, yappi, YT, zodb3, zope.interface

요즘 파이썬을 주로 사용하면서 다양한 모듈들을 찾는 재미에 푹 빠졌는데요~

 

윈도우를 주로 사용하다 보니 pip 로 인스톨이 안되는 경우가 종종 있더군요.

 

이런 경우에는 버츄얼 박스에서 리눅스를 설치해서 사용해도 되긴 하는데~

 

찾아보니 아래 주소에 다양한 윈도우용 파이썬 모듈들이 있더군요.

 

http://www.lfd.uci.edu/~gohlke/pythonlibs/

 

위 주소에서 제공하는 모듈들은 다음과 같습니다.

 

pycosat, virtualenv, pip, setuptools, requests, libsvm, liblinear, cytoolz, dynd, gevent, bokeh, blaze, pygit2, numba, llvmlite, iris, pillow, mercurial, netcdf4, rpy2, biopython, reportlab, scipy, yt, nibabel, backports, pandas, ets, pyalembic, shapely, scikit-bio, pycairo, spyder, statsmodels, python-dateutil, pytz, sfepy, apsw, python-igraph, pyqwt, pylzma, openimageio, pymssql, pyvisa, sympy, lxml, lsqfit, thrift, pyicu, pyside, guiqwt, pyqt4, regex, gdal, cellcognition, vigra, h5py, pytables, pycurl, ipython, pygments, mahotas, pyspharm, imread, scons, kiwisolver, enaml, atom, faulthandler, conda, bigfloat, yappi, visvis, simplejson, line_profiler, rasterio, fiona, bioformats, javabridge, mysqlclient, numpy, pyzmq, pyfftw, minepy, mlpy, matplotlib, py2exe, veusz, greenlet, cython, sqlalchemy, bcolz, psutil, vlfd, pyparsing, pymc, pywin32, friture, pymol, orange, python-ldap, gmpy, pymca, blender-mathutils, jcc, scientificpython, opencv, kwant, pymunk, pulp, jpype, intbitset, astropy, qutip, networkx, twisted, pylibtiff, quickfix, six, nltk, tornado, numexpr, rtree, polygon, pythonnet, pycares, scikit-learn, psycopg, sphinx, vispy, scipy-stack, nose, libpython, pyxml, cvxopt, pycuda, basemap, qimage2ndarray, iminuit, pgmagick, milk, llvmpy, pymongo, nlopt, libsbml, pysqlite, pyfits, patsy, certifi, mxbase, python-lz4, blosc, meshpy, docutils, cffi, scikit-image, lp_solve, pyeda, pystemmer, pyopengl, pyrxp, pymvpa, cartopy, natgrid, python-levenshtein, ecos, msgpack, pyfmi, assimulo, nitime, mako, jinja2, pyephem, pyopencl, mod_wsgi, cx_freeze, pyviennacl, markupsafe, vitables, mpi4py, quantlib, pyaudio, steps, mmtk, pyminuit, smc.freeimage, vtk, pyhdf, pyyaml, pycifrw, pygame, videocapture, pythonmagick, pyvrml97, openglcontext, zope.interface, blist, aspell-python, ode, pycluster, cdecimal, noise, scikits.odes, scikits.umfpack, scikits.ann, scikits.vectorplot, curses, mysql-python, oursql, libtfr, htseq, marisa-trie, ffnet, polymode, slycot, ta-lib, pymutt, bsdiff4, pyfltk, pyisapie, pycparser, pybluez, openbabel, pysfml, pywavelets, pyserial, ujson, rtmidi-python, kivy, nipype, pydde, llist, pymix, dipy, bio_formats, bottleneck, fastcluster, la, cgkit, planar, ceodbc, scipy-cluster, pyhook, pyproj, sparsesvd, simpleitk, casuarius, coverage, twainmodule, python-snappy, theano, boost.python, bitarray, pyodbc, fonttools, pylibdeconv, fipy, tinyarray, pyshp, carray, pysparse, nipy, bazaar, pygraphviz, babel, pyamg, umysql, scikits.samplerate, scikits.scattpy, scikits.hydroclimpy, scikits.delaunay, autopy, libxml-python, pyusb-ftdi, mmlib, cellprofiler, pyreadline, py-fcm, liblas, vpython, scikits.audiolab, py-postgresql, pyamf, holopy, pyropes, epydoc, cheetah, pywcs, python-sundials, openexr, dpmix, cld, mdp, pycogent, jsonlib, silvercity, console, python-cjson, pytst, sendkeys, pydbg, pyglet, python-lzo, delny, pyexiv2, ilastik, scitools, trfit, re2, cgal-python, pymedia, pyfftw3, pymex, pymatlab, zodb3, pygtk, numeric, nmoldyn, iocbio, wxpython, pybox2d, mmseg, pynifti, scikits.timeseries, numscons, visionegg

다양한 Python package 들 중에 Pyzo 라는 것을 발견 했습니다. 아래 포스팅에서 소개했던 spyder 와 비스므리한 package 같더군요.



2013/11/13 - [유틸] - 과학 분석에 사용되는 Python IDE Spyder


 

아래 공식 홈페이지의 소개를 보니 data-centric 프로그래밍을 위한 툴을 만드는 게 목표라 하는데~ IEP 라는 IDE 가 같이 들어 있어서 사용하기 좋더군요.

 

http://www.pyzo.org/

 

Pyzo 에는 아래 소개와 같이 다양한 packages 들이 같이 들어 있습니다. Numpy, scipy, matplotlib 와 같은 익숙한 package들도 있었지만 pandas, sympy, nose 와 같이 생소하지만 알아보고 싶은 package 들도 있더군요.

 

http://www.pyzo.org/packages.html#packages

 

저는 아래 포스팅에서 소개한 바와 같이 Eclipse 환경에서 Pydev 를 사용해서 코딩하곤 했는데~ 별다른 불편함 없이 잘 쓰고 있었습니다.

 

http://iamaman.tistory.com/1442

 

그런데 위 에서 소개한 Eclipse 환경에서는 에디터 환경에서 코드의 일부만 실행시키고 싶다거나 할 때는 그리 좋지 않더군요. 혹시 eclipse 에서 pydev 를 사용할 때 코드의 일부를 실행하는 방법이 따로 있다면 소개 좀……

 

코드의 일부만 실행한다는 것은 아래 MATLAB Editor 의 셀 기능과 같이 코드를 분리해서 실행하고 싶다는 것입니다.


2011/02/23 - [programming language/MATLAB] - Matlab Script coding tips, cell mode


 

Python 과 같이 인터프리터가 있는 환경에서는 코드를 분리해서 실행시키고 하는 과정들이 좋을 때가 있더군요.

 

이러한 기능들은 디버그를 한다거나 할 때 매우 편리합니다.

 

첫 줄에 소개한 Pyzo는 아래 주소에서 다운로드 가능합니다.

 

http://www.pyzo.org/downloads.html

 

아래 그림과 같이 각자의 OS 버전에 맞는 Pyzo 버전을 다운로드 합니다. 저는 현재 windows 64 비트라 pyzo_distro-2014a.win64.zip (64 bit zip) 를 다운로드 받았습니다. 다운로드 받은 Zip 파일을 압축해제 하고 pyzo.exe 를 실행하면 됩니다.

 

 

실행하면 다음과 같은 IEP IDE 가 뜨게 됩니다.


 

위에서 에디터 부분을 보면 ##으로 시작하는 줄들이 있는데~ 이게 바로 MATLAB 에서도 소개했던 cell 단위 입니다. IEP 에서 이 셀 단위로 실행 할 수 있습니다.

 

아래 그림에서 각 단위 실행에 대해 단축키들이 있는데 Return 은 Enter 키를 의미 합니다.




MATLAB 과 같이 수치 분석등의 용도로 사용 할 수 있는 프로그램들로 아래 포스팅 들에서 Scilab, Freemat, Octave 등에 대해 설명 드려었는데요.

 

오늘은 python 을 사용하는 방법에 대해 설명 드리려 합니다.

 

python 은 요즘 굉장히 많은 분들이 사용하는 스크립트 언어인데요~

 

perl 과 마찬가지로 굉장히 다양한 기능들을 추가해서 사용할 수 있고 문법도 비교적 깔끔해서 좋아하는 것 같더군요.

 

 

Python을 MATLAB 과 비슷한 용도로 사용하기 위해서는 아래포스팅에서 밝힌 바와 같이 matplotlib, scipy, numpy 같은 모듈들을 다운로드 받아서 사용해야 하는데~ 이런 과정들도 귀찬더군요.

 

물론 요즘은 아래 포스팅에서 설명했던 pip 를 이용하긴 하지만~ 그래도 이것 저것 생각 안하고 한방에 깔고 싶을 때가 많습니다.

 

또 MATLAB 과 같이 command 창에서 한 줄 한 줄 실행하면서 그 결과를 확인하고 싶을 때 python IDLE 같은 경우에는 좀 불편하더군요. 이럴때 쓸수 있는 좀더 개선된 Python shell 로서 IPython 이 있습니다.

 

이렇게 Python, matplotlib, scipy, numpy, IPython 등도 한방에 깔고 편리하게 사용할 수 있는 툴로 Spyder 에 대해 소개하려 합니다.

 

우분투/민트 같은 리눅스에서는 다음과 같이 간단하게 설치 할 수 있습니다.

sudo apt-get install spyder

 

윈도우에서는 아래 주소의 spyder 홈페이지에 가 보시면~

https://code.google.com/p/spyderlib/

 

세 가지 정도의 방법이 있더군요.

Python(x,y), WinPython, Anaconda

 

세 가지 툴에 대해 아래 포스팅에서 비교가 돼 있던데~

http://sjbyrnes.com/?page_id=67

 

Python(x,y), WinPython 은 오픈 소스이고~ Python(x,y) 는 많이 알려지긴 했지만, 32 비트 버전만 있다는 군요. WinPython 은 32/64 비트가 다 있고 포터블의 형태로 사용할 수 가 있었습니다.

 

다음으로 Anaconda 는 특별히 빅 데이터 분석에 사용되는 수학/과학 분석을 위해서 Continuum Analytics Corp. 라는 회사에서 만들어진 거라는데~ free 버전과 상용 버전이 있지만 free 버전만 설치해도 spyder 는 사용 가능하다고 합니다.

 

Anaconda 를 설치하면 CMD 창에서 conda 라는 명령어로 Ipython 같은 모듈들을 업데이트 할 수 있더군요.

http://ipython.org/install.html

 

추가로 위 주소에서는 Ipython 전용 IDE 로 Enthought Canopy 에 대해 소개하더군요. Ipython만은 사용하실 분들은 사용해 보시는 것도 좋을 것 같네요.

https://www.enthought.com/products/epd/free/

 

저는 현재 윈도우 7, 64 비트고 개인적으로 설치형 보다는 portable 버전을 선호하는 편이라~ WinPython 으로 결정했습니다.

 

WinPython 의 홈페이지는 아래와 같고~

https://code.google.com/p/winpython/

 

아래 페이지에서 사용하고자 하는 버전을 다운로드 해서 설치하시면 됩니다. 제 경우 다운로드는 약간 느리네요.

https://code.google.com/p/winpython/downloads/list

 

저는 아래 그림과 같이 Python 2.7, 64 bits 버전을 다운로드 받았습니다.

 

설치는 다운로드 받은 exe 파일을 더블 클릭하면 되고, 압축 해제하려는 폴더만 설정해 주면 끝입니다.

 

압축 해제후에 폴더를 보시면~ 다음 목록과 같은 실행 파일들이 만들어 지고~

 

TortoiseHg, Qt Linguist, IPython Qt Console, IPython Notebook, WinPython Interpreter, WinPython Control Panel, WinPython Command Prompt, Spyder (light), Spyder, Qt Designer, Qt Demo, Qt Assistant

 

이 중에서 Spyder.exe 파일을 실행하면 Spyder 가 아래 그림과 같이 실행 됩니다.

 

Spyder (light).exe 에는 간단하게 Console 만 나오더군요.

 

Spyder의 화면은 보시는 바와 같이 Console, Editor, Object inspector 등으로 구성되어 있고~ 메뉴들로 구성되어 있습니다.

 

저는 일단 Editor 에서 바로 실행할 수 있다는 점과 생소한 언어를 배울 때 가장 유용한 도구인 Help 가 그냥 타이핑과 함께 나온다는게 가장 좋더군요.

 

아래 그림과 같이 Console에 fft( 까지만 타이핑해도~ Object inspector에 아래 그림과 같이 자동으로 매뉴얼이 짜잔~~ 하고 뜨더군요.

 

뭐 소개만 하고 그냥 가면 좀 거시기 하니깐 간단하게 그래프 하나 그려볼까요~

 

에디터에 다음과 같이 코딩하고~ 저장한 후에 F5 를 눌러서 실행 했습니다.

 

A=rand(10,1);

B=fft(A);

plot(abs(B))

 

 

 

결과로 이런 그래프가 나오더군요.

 

신기한 건 위 코드에서 numpy 등을 import 를 안 했는데도 Spyder 환경 내에서는 자동으로 import 가 되는 것 같더군요.

 

좀 더 볼 주소들


http://quant-econ.net/


http://sjbyrnes.com/?page_id=67




 

스크립트 언어에 관심을 가지면서 자연스럽게Python 에 대해서도 조금씩 관심을 가지고 이용을 해 보고 있습니다.

 

Python은 다양한 장점이 있는 언어이지만 수치 분석을 하는 저로서는 Python 에서 복소수 타입이 기본으로 제공이 된다는 측면이 굉장한 장점으로 보였습니다.

 

MATLAB 과 같은 수치 분석에 특화된 소프트웨어를 제외 하면 복소수를 기본 타입으로 제공해 주는 언어는 드물었는데, python 은 다르더군요.

 

그래서 찾아보니 Python 에서 수치분석을 할 때 이용할 수 있는 모듈들로 numpy, scipy 와 같은 모듈과

 

그래프를 그리는데 이용되는 matplotlib 같은 모듈 등이 있길래 ~~

 

오늘은 이 모듈의 설치 방법에 대해 간단하게 알아보겠습니다.

 



일단 Python 을 설치부터 해야 겠죠.

 

Python 은 현재 3.2.2 버전까지 나와있는데, matplotlib 모듈이 현재 python 2.7 버전까지만 지원해서 python 은 2.7 버전을 선택했습니다.

 

윈도우 운영체제에서 binary release 를 제공해 주는 파이썬 2.7 대 버전은 2.7.2 버전이 있더군요.

 

아래 링크에서 다운로드 가능 합니다.

 

http://www.python.org/download/

 

각자 자신의 운영체제에 맞는 format 을 다운로드 받아서 설치 하시면 됩니다.

 

현재 설명 드리는 시점에서 제 운영체제는 Window 7, 32 비트 입니다.

 

설치야 뭐 그냥 다음 >> 다음 누르시면 되니깐 굳이 설명 드릴 필요가 없을 것 같네요.

 



Numpy , scipy 의 공식 홈페이지는 아래와 같습니다.

 

http://numpy.scipy.org/

 

numpy 는 아래 링크에서 다운로드 가능 합니다.

 

http://sourceforge.net/projects/numpy/files/

 

현재 numpy - 1.6.1 버전이 최신 버전이며, python 2.7.2을 설치 했으므로 그에 맞게

 

아래 그림처럼 선택해서 설치 했습니다.

 

 



Scipy 는 아래 링크에서 다운로드 합니다.

 

http://sourceforge.net/projects/scipy/files/scipy/0.10.1/

 

현재 scipy-0.10.1 이 최신 버전이군요.

 

아래 그림 처럼 선택해서 다운로드 받습니다.

 

 



matplotlib 은 아래 링크에서 다운로드 가능합니다.

 

http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.0/

 

 

이제 설치는 다 했습니다.

 

천천히 시간 날 때마다 공부 할 일만 남았군요.

 

물론 이게 더 큰일이지만~~ 굉장히 재미있을 것 같습니다.


+ Recent posts