과학 응용

../_images/33925223870_97e44f5629_k_d.jpg

배경

파이썬은 고성능 과학 응용에 자주 사용됩니다. 작성하기 쉽고 성능도 좋아서 학계와 과학 프로젝트에서 널리 사용됩니다.

고성능을 추구하는 특성상, 파이썬에서의 과학 계산은 보통 더 빠른 언어(예: C, 행렬 연산에는 Fortran)로 작성된 외부 라이브러리를 활용하는 경우가 많습니다. 주로 사용되는 라이브러리는 NumPy, SciPy, Matplotlib 입니다. 이 라이브러리들을 자세히 다루는 것은 파이썬 안내서의 범위를 벗어납니다. 그러나 과학용 파이썬 생태계에 대한 포괄적인 소개는 Python Scientific Lecture Notes 에서 찾을 수 있습니다.

도구

IPython

IPython 은 파이썬 인터프리터의 향상된 버전으로, 과학자에게 큰 관심을 끄는 기능을 제공합니다. 인라인 모드(inline mode) 는 (Qt 기반 버전에서) 그래픽과 플롯을 터미널에 표시할 수 있게 해줍니다. 또한 노트북(notebook) 모드는 웹 기반의 파이썬 노트북을 생성하여 문서 중심 프로그래밍과 재현 가능한 과학을 지원합니다. 이 노트북에는 파이썬 코드 조각을 결과 및 추가 설명(HTML, LaTeX, Markdown)과 함께 저장할 수 있습니다. 그런 다음 노트북을 공유하고 다양한 파일 형식으로 내보낼 수 있습니다.

라이브러리

NumPy

NumPy 는 고수준의 수학 함수를 제공하기 위해 C(와 Fortran)로 작성된 저수준 라이브러리입니다. NumPy는 다차원 배열과 배열에서 동작하는 함수를 사용해, 파이썬에서 알고리즘이 더 느리게 실행되는 문제를 영리하게 극복합니다. 그러면 어떤 알고리즘이든 배열에 대한 함수로 표현할 수 있어, 알고리즘을 빠르게 실행할 수 있습니다.

NumPy는 SciPy 프로젝트의 일부이며, 기본적인 요구만 필요한 사람이 SciPy의 나머지를 설치하지 않고도 사용할 수 있도록 별도의 라이브러리로 배포됩니다.

NumPy는 파이썬 2.4부터 2.7.2까지, 그리고 3.1 이상과 호환됩니다.

Numba

Numba 는 NumPy를 인식하는 파이썬 컴파일러(즉시(JIT) 특화 컴파일러)로, 특수한 데코레이터를 통해 주석이 달린 파이썬(및 NumPy) 코드를 LLVM(Low Level Virtual Machine)으로 컴파일합니다. 간단히 말해, Numba는 파이썬 코드를 LLVM으로 컴파일하여 런타임에 네이티브로 실행할 수 있는 코드로 만드는 시스템을 사용합니다.

SciPy

SciPy 는 더 많은 수학 함수를 위해 NumPy를 사용하는 라이브러리입니다. SciPy는 NumPy 배열을 기본 데이터 구조로 사용하며, 선형 대수, 적분(미적분), 상미분방정식 풀이, 신호 처리 등 과학 프로그래밍에서 흔히 사용되는 다양한 작업을 위한 모듈과 함께 제공됩니다.

Matplotlib

Matplotlib 은 인터랙티브한 2D 및 3D 플롯을 생성할 수 있는 유연한 플로팅 라이브러리이며, 출판물 수준의 그림으로 저장할 수도 있습니다. API는 여러 면에서 MATLAB 을 반영하고 있어, MATLAB 사용자가 파이썬으로 옮겨오기 쉽게 해줍니다. matplotlib 갤러리 에서 많은 예시와 그것을 재현할 수 있는 소스 코드를 함께 볼 수 있습니다.

Pandas

Pandas 는 NumPy를 기반으로 한 데이터 조작 라이브러리로, 데이터 접근, 인덱싱, 병합, 그룹화 등을 쉽게 할 수 있는 유용한 함수를 많이 제공합니다. 주요 데이터 구조인 DataFrame은 R 통계 패키지에서 찾을 수 있는 것과 가깝습니다. 즉, 이름 인덱싱, 시계열 연산, 데이터 자동 정렬 등을 지원하는 이종 데이터 테이블입니다.

xarray

xarray 는 Pandas와 비슷하지만, 다차원 과학 데이터를 감싸기 위한 목적의 라이브러리입니다. 데이터에 차원, 좌표, 어트리뷰트로 라벨을 붙여, 복잡한 다차원 연산을 더 명확하고 직관적으로 만들어줍니다. 또한 빠른 플로팅을 위해 matplotlib을 래핑하며, dask 를 사용하여 대부분의 연산을 병렬로 처리할 수 있습니다.

Rpy2

Rpy2 는 R 통계 패키지를 위한 파이썬 바인딩으로, 파이썬에서 R 함수를 실행하고 두 환경 사이에 데이터를 주고받을 수 있게 해줍니다. Rpy2는 Rpy 바인딩의 객체지향 구현입니다.

PsychoPy

PsychoPy 는 인지 과학자를 위한 라이브러리로, 인지 심리학과 신경과학 실험을 만들 수 있게 해줍니다. 이 라이브러리는 자극 제시, 실험 설계 스크립팅, 데이터 수집을 다룹니다.

리소스

과학용 파이썬 패키지의 설치는 번거로울 수 있습니다. 많은 패키지가 컴파일이 필요한 파이썬 C 확장으로 구현되어 있기 때문입니다. 이 섹션에서는 미리 컴파일되고 쉽게 설치할 수 있는 과학용 파이썬 패키지 모음을 제공하는 이른바 과학용 파이썬 배포판들을 나열합니다.

파이썬 확장 패키지를 위한 비공식 Windows 바이너리

과학 계산을 하는 사람 중 많은 수가 Windows를 사용하지만, 많은 과학 계산 패키지가 이 플랫폼에서 빌드하고 설치하기로 악명이 높습니다. 그러나 Christoph Gohlke 가 많은 유용한 파이썬 패키지의 Windows 바이너리 목록을 정리해두었습니다. 이 패키지 목록은 주로 과학용 파이썬 리소스에서 시작해 더 일반적인 목록으로 성장했습니다. Windows를 사용한다면 한 번 확인해 보세요.

Anaconda

Anaconda Python Distribution 은 일반적인 과학용 파이썬 패키지를 모두 포함하고 있을 뿐 아니라, 데이터 분석과 빅데이터 관련 패키지도 많이 포함합니다. Anaconda 자체는 무료이며, 다수의 상용 애드온이 유료로 제공됩니다. 학계와 연구자에게는 애드온에 대한 무료 라이선스가 제공됩니다.

Canopy

Canopy 는 또 다른 과학용 파이썬 배포판으로, Enthought 가 만들었습니다. 제한된 ‘Canopy Express’ 버전은 무료로 제공되지만, Enthought는 전체 배포판에 대해 비용을 부과합니다. 학계에는 무료 라이선스가 제공됩니다.