컴퓨터/자질구레 팁

유용한 파이썬 라이브러리

adnoctum 2010. 12. 21. 19:45


   파이썬 라이브러리 중 유명한 대표적 라이브러리를 들면 numpy matplotlib 가 있다. numpy 는 수치계산에 관련된 것을 편리하게 하도록 지원해 주는 것이고 matplotlib 는 matlab 의 plot 과 그 이외의 여러 plotting 함수들을 파이썬에서 흉내낸 것이다.

   이 글은 informal 하게 작성해 보자. 왜냐 하면, ㅋ, 이 내용은 지극히 개인적인 얘기일 수 있으니까.

   파이썬은 그 자체로도 배우기 쉽고 써먹기 좋은 언어이며, 바로 그렇기 때문에 사용자층이 두텁고, 그것이 곧 많은 라이브러리의 탄생을 불러 일으킬 수 있었기 때문에 좋은 라이브러리가 많고, 또 설계 및 성능도 꽤나 괜찮다. 논문들에서도 numpy 같은 것을 써서 작업했다고 말할 수 있을 정도이니까. numpy 는 힘든 연산은 내부적으로 C로 구현되어 있다고 하며, 굳이 boost 의 python 관련 라이브러리가 아니더라도 C에서 numpy 의 루틴들을 부를 수 있는 API 를 제공해 주고 있다. numpy 에는 array type 이 정의되어 있고, indexing 을 matlab 처럼 편리하게 할 수 있도록 지원해 준다. list <-> array 의 변환 등이 매우 편리하게 되어 있고, scipy 를 이용하면 많은 통계관련 작업, 최적화 작업 등을 편리하게 할 수 있다. 물론 이 두 라이브러리에서 제공해 주는 것들을 C나 C++ 역시 찾을 수 있겠지만, 그것을 '이용'하는 점에 있어서 파이썬의 편리함을 따라갈 수 없음은 두말 할 나위가 없다.

   matplotlib 는, 우선 갤러리의 그림들을 보자. 저 많은 그림들 중 자신이 만들고자 하는 그림과 비슷한 것을 찾아서 클릭을 하면 그 코드가 나와 있다. 그것을 적당히 변경해서 자신의 데이터를 비슷한 모습으로 그릴 수 있게 된다. 아..., matlab 이 편하기는 한데 툭하면 메모리 부족하다고 투정을 부려대쌓기 때문에 짜증이 나는데, 거의 비슷한 interface 를 갖고 파이썬 그 자체의 편리함으로 무장된 matplotlib 는 matlab으로 plotting 하는 것에 대한 거의 완벽한 대안이 될 수 있다. 나는 예전에는 주로 C++ 로 직접 그려 논문에 넣었었는데 요즘에는 논문에 넣을 그림도 거의 전부 matplotlib 으로 그리고 있다. 데이터가 얼마가 되든 일단 파이썬으로 처리할 수 있기만 하면 matplotlib 로 던질 수 있기 때문에 matlab 에서 만나던 메모리 부족 문제는 넘어 간다. 게다가, C++ 로 할 때의 그 수많은 계산들, 가령 최대/최소 계산하고 글자가 몇 pixel 인지 계산해서 어느 좌표에 찍어야 (TextOut) 가운데 정렬로 찍히는지 등등을 하지 않아도 되기 때문에 참말로 편하다.

   파이썬은 정말로 '편리'한 언어! 오늘 파이썬으로 데이터 만들면서 또 느꼈다는.

   하지만 역시 나에겐 속도가 문제가 되곤 하지. 나랑 비슷하게 데이터를 처리한 논문[각주:1]이 얼마 전에 발표 되었는데, ㅋㅋ, 거기서는 계산상의 문제 때문에 4,000 개만 처리했다고 했는데, 나는 15,000 개가 넘는 것을 전부 다 했지. 근데 그 계산이 O(N2) 이기 때문에 단순히 4배가 아니라 16배. 코드 레벨에서 최적화 하고 포인터로 떡칠을 해서 C++로 코딩하니 그래도 참아줄만한 시간에 계산이 끝났었다. 그래서 나는 많은 일들에 있어서 실제 데이터는 C++ 로 처리하고, 그 결과를 그림으로 그릴 때 위처럼 파이썬을 사용하곤 한다.



  1. Coexpression Network Analysis Identifies Transcriptional Modules Related to Proastrocytic Differentiation and Sprouty Signaling in Glioma, Cancer Res 2010 70; 10060 [본문으로]