Science

연구자를 위한 프로그래밍 툴(2): 파이썬

장종엽엔에스 2015. 2. 10. 08:53

KISTI 미리안 글로벌동향브리핑 2015-02-10
안디나 하우는 지난달 아이오와 주립대학교에서 일자리를 얻었다. 그녀의 공식 직함은 농업 및 바이오시스템 엔지니어링 담당 조교수다. 그러나 그녀의 근무처는 온실이 아니라 키보드 앞이다. 그녀는 프로그래머로서, 핵심 직무는 데이터 교육이기 때문이다. 그녀는 차세대 대학원생들에게 과학적 프로그래밍의 메커니즘과 중요성을 가르치기 위한 커리큘럼을 개발하게 된다.

그녀는 컴퓨터과학 분야의 학위도 없고 공식적인 교육을 받은 적도 없다. 그녀는 환경공학 박사로, 미시건 주립대학교 티터스 브라운 교수의 연구실에서 효소검사(enzyme assays) 전문가로 일했었다. 브라운 교수는 생물정보학 전공자로, 컴퓨터를 이용하여 유전체 데이터베이스로부터 의미있는 결과를 추출하는 것이 주요 업무였다. 그래서 하우는 본의 아니게 컴퓨터 쪽의 지식을 습득하게 되었다. 브라운 교수는 그녀에게 파이썬을 배우라고 권했다.

파이썬이라는 이름은 영국의 영향력 있는 희극 그룹인 몬티 파이튼(Monty Python)에서 유래한다. 1991년 네덜란드의 프로그래머인 귀도 반 로섬이 최초로 개발한 파이썬은 과학자들이 선택할 수 있는 컴퓨터 프로그래밍언어 중에서 인기가 점점 더 높아져 가고 있다. 그것은 무료인 데다, 간단한 구문, 풍부한 온라인 자원, 과학적 툴킷이 풍부한 생태계를을 자랑하며 커뮤니티를 중시하는 것이 특징이다.

1. Hello, world!

생물정보학, 신경과학, 천문학 등의 분야에서 빅테이터가 폭발적으로 성장하면서, 프로그래밍 노하우는 과거 어느 때보다 더 중요해져 가고 있는 추세다. 파이썬 코드를 작성할 수 있는 연구자들은 자신의 데이터를 능숙하게 관리함으로써, 연구와 관련된 다양한 과제들(데이터 고속처리, 정리, 분석, 시각화 등)을 효과적으로 수행할 수 있다. 매트랩(MATLAB)이나 R과 같은 프로그래밍 언어가 수학적·통계적 작업에 초점을 맞추는 데 반해, 파이썬은 C나 C++와 함께 범용언어 계열에 속한다. 그래서 파이썬은 좀 복잡할 수 있지만 능력은 더욱 뛰어나, 소규모 작업을 자동화하거나 웹사이트를 구축하는 것은 물론 완벽한 어플리케이션을 만들 수도 있다. UC 버클리의 심리학 박사과정에 재학 중인 제시카 햄릭은 2008년부터 파이썬으로 프로그래밍을 해 왔는데, 모든 연구 단계에서 파이썬을 활용한다고 한다. 예컨대 `사람들이 마음 속에서 기하학적 대상을 어떻게 조작하는지`를 연구하기 위해, 그녀는 자바스크립트와 파이썬을 이용하여 다양한 도형을 만든 다음, 그것을 참가자들에게 제시하여 참가자들의 선택을 기록하고 데이터를 분석한다.

파이썬은 뛰어난 범용성에도 불구하고 다른 프로그래밍 언어에 비해 초보자들이 배우기에 그다지 힘들지 않은 것으로 간주된다. 파이썬의 접근성이 이렇게 높은 이유는, 언어 자체는 물론이고 그것을 둘러싼 자원들의 접근성이 우수하기 때문이다. 예컨대 파이썬은 소프트웨어의 실행이 대화형(interactive)이어서 명령어를 입력하면 바로 반응을 얻을 수 있다. 이에 반해, C의 경우 코드를 실행파일로 번역해야 하므로, 컴파일 과정이 필요하여 초보자들이 다루기에는 복잡하다. 파이썬은 다루기도 쉬운 편이어서, 예컨대 사용자들은 변수가 숫자인지 텍스트인지도 미리 선언할 필요가 없다. 고전적 프로그래밍 연습문제인 `Hello, world!`를 화면에 나타내려면, 사용자는 프롬프트에서 다음과 같이 입력한 다음 엔터를 치기만 하면 된다: print(“Hello, world!”) 그러다 보니 거의 모든 프래그래밍 입문 과정에서는 프로그래밍 언어로 파이썬을 선호하고 있는 실정이다. "파이썬은 C++나 C보다 초보자에게 가르치기가 쉽다"고 (지금은 UC 데이비스로 자리를 옮긴) 브라운 교수는 말했다.

한편 파이썬이 점점 더 많이 채택되고 있는 데는 커뮤니티의 측면도 크게 작용한 것으로 보인다. "프로그래밍 언어가 인기를 끌려면 새로운 사용자들이 해당 언어를 배워 새로운 분야에 적용하고, 그럼으로써 더 많은 사용자들을 끌어들이는 선순환 구조가 확립되어야 한다"고 드롭박스(파일 스토리지 서비스 업체)의 소프트웨어공학 매니저로서 파이썬 소프트웨어 재단의 이사장인 제시카 맥켈러는 말했다. 파이썬 커뮤니티는 특히 여성들의 사용을 독려하는 데 힘쓰고 있는데, 그중에서 유명한 것은 샌프란시스코 소재 핵브라이트 아카데미, 캐나다 토론토 소재 비영리조직인 레이디즈러닝코드, 글로벌 멘토십 그룹인 파이레이디즈가 주관하는 워크숍이다. 캐나다 맥길 대학교의 석사과정에 재학중인 에밀리 어바인은 파이썬을 이용하여 신경전기생리학 데이터를 처리하고 있다. 그녀가 파이선에 끌린 이유는 구문이 간단하고 온라인 지원이 엄청나기 때문이지만, 파이썬 커뮤니티가 방대하다는 것도 중요한 이유였다고 한다. 그녀는 이번 가을 다트머스 대학교의 신경과학 박사과정에 입학할 예정이다.

파이썬은 교육자원도 풍부하다. 소프트웨어 카핀트리 재단(the Software Carpentry Foundation)은 이틀짜리 워크숍을 계속 운영하여 과학 프로그래밍을 교육하고 있는데, 그중 상당수는 온라인으로도 제공되고 있다. 그밖에 코세라(Coursera)와 Edx도 온라인 교육을 실시하며, 코데카데미(Codecademy)는 DIY 자습서를 온라인으로 제공한다. 어바인은 온라인 강좌를 이용하여 코드를 독학했으며, stackoverflow.com에서 제공하는 Q&A를 이용하여 실력을 연마했다. 이제 그녀의 프로그래밍 실력은 초급과 중급 사이에 있는데, 파이썬 사용자들은 이 수준을 파이써니스타(pythonista)라고 부른다고 한다.

2. 방대한 패키지와 라이브러리

아무리 사용자친화성이 높은 프로그래밍 언어라고 하더라도 연구자들이 해당 소프트웨어를 일상적으로 사용할 수 없다면, 사용자친화성이란 아무런 의미가 없게 된다. 여기서 등장하는 것이 파이썬 패키지인데, 파이썬 패키지는 새로운 기능성을 추가함으로써 파이썬의 능력을 확장시켜 준다. "파이썬은 `배터리를 내장한다`는 정신으로 개발된 언어다. 그것은 아무리 초보자라도 박스를 열자마자 곧바로 사용할 수 있는 내장기능을 보유하고 있다. 그러나 그것뿐만이 아니다. 파이썬의 패키지 생태계는 매우 성숙하므로, 방대한 라이브러리를 이용하여 당신이 원하는 코드를 무엇이든 손쉽게 작성할 수 있다"고 맥켈러는 말했다.

과학 프로그래머들은 분야와 무관하게 몇 가지 핵심 패키지를 일상적으로 사용할 수 있다: NumPy(행렬), SciPy(선형대수, 미분방정식, 신호처리 등), SymPy(기호수학), matplotlib(그래프 그리기), Pandas(데이터 분석). 또 하나의 인기 있는 툴인 싸이썬(Cython)은 파이썬의 느린 실행속도를 해결했는데, 그 방법은 특정 파이썬 코드(예: 느리기로 악명 높은 for 루프)를 C로 전환시킨 것이라고 한다. "싸이썬은 표준 파이썬보다 최대 1,000배는 빠르다"고 대한민국 고려대학교의 폴 네이션 교수(이론물리학)는 말했다.

아이파이썬 노트북(IPython Notebook)도 인기있는 패키지 중 하나인데, 하우는 이것을 코드작성자의 실험노트(coder`s lab notebook)라고 부른다. 아이파이썬 노트북은 사용자들로 하여금 데이터, 코드, 설명을 - 여러 개의 파일로 분리하지 않고 - 하나의 브라우저기반 페이지에서 참조할 수 있게 해 준다(http://www.nature.com/news/interactive-notebooks-sharing-the-code-1.16261).

이상과 같은 핵심 패키지 말고도, 모든 과학분야별로 알맞은 소프트웨어 패키지들이 존재한다: scikit-Learn(기계학습), Biopython(생물정보학), PsychoPy(심리학과 신경과학), Astropy(천문학). 또 하나의 파이썬 패키지인 QuTip은 양자역학 연구자들로 하여금 계(system)를 정의하고 그 거동을 시뮬레이션하게 해 준다. 2010년 일본 리켄 산하 학제간 이론과학연구 그룹의 네이션 요한슨 & 로버트 요한슨 콤비는 네이션이 사용하는 매트랩 패키지를 파이썬으로 전환시키는 프로젝트를 시작했다.

이상과 같은 패키지들이 맥켈러가 말하는 선순환의 핵심요소인 것은 분명하다. 그러나 처음 프로그램을 배우는 데 있어서 가장 중요한 것은 든든한 지원군을 확보하는 것이다. "사실 어느 프로그램 언어를 사용하든 기본 원리는 비슷하며, 하나의 언어를 배우고 나면 다른 언어를 배우기도 쉽다. 게다가 많은 언어들은 다른 언어로 작성된 코드를 변환시켜 주는 알고리즘을 보유하고 있다. 그러나 기왕이면 주변의 사람들이 많이 사용하는 프로그램을 선택하는 것이, 필요할 때 도움을 쉽게 받을 수 있어 프로그램을 배우는데 유리하다. 이러한 점에서 나는 파이썬을 권한다. 왜냐하면 파이썬을 사용하는 사람들이 점점 더 늘어나고 있기 때문"이라고 브라운은 말했다.

※ 참고 1: 파이썬의 모든 것 http://www.nature.com/news/programming-pick-up-python-1.16833#toolkit
※ 참고 2: 프로그래밍 툴: R과 함께 떠나는 모험 http://mirian.kisti.re.kr/futuremonitor/view.jsp?cont_cd=GT&record_no=254182