12월29일에 시작해서 (파이썬 글 68) 하루 6시간이상씩 수많은 에러를 극복해가며, 그리고 카페에 글도 써가며 그리고 PyTorch, PySpark, Tensorflow 등 Big-Data에 강한 언어들도 같이 공부해가며 하루 하루 문제를 풀어 가다가 오늘 드디어 논문에 실제 사용될 데이터 중 가장 짧은 데이터를 이용해서 Python version으로 돌리는 중이다. 관건이 Bootstrap인데, 아래 progress_bar처럼 R로는 수시간이 걸리던 process가 1시간 이내에 해결될 것으로 기대된다.
1회당 5.87초가 소요되며 잘 돌아가고 있습니다.
R의 경우 1000번의 bootstrap 결과가 끝나서야 결과값을 한번에 list형식으로 보여주게 됨에 따라, bootstrap회수가 늘때마다 RAM이 누적적으로 증가하는 방식인데 반해, Python은 1회마다 그 결과값을 list에 담음으로써 RAM의 누적적 증가가 미미하다는 점이다. 이것이 가능한 이유는 Generator (생성자)라는 기능이 있어서 loop 이 한번 돌 때마다 그 결과값을 저장해 주기 때문이다. (매끼 세번을 먹는 경우와 한번에 세끼를 동시에 먹는 경우 복부팽만감, 위의 소화능력등이 차이가 나듯이...) .또한 설정을 하지도 않았는데도 자동으로 parallel 기능이 사용되어 효율적으로 CPU까지 관리를 한다. 대단하다.
여러분이 Python을 쓰는 이유가 여기에 있기 때문이다. 물론 여러분이 과도한 회수(가령 백만번 등)의 loop이 아닌 100회 내외 정도라면 코딩이 편리한 R등을 여전히 권한다.
현재 57%가 돌라가고 있는데도 초당 시간은 5.86으로 거의 변동이 없다. 문제는 이것보다 데이터 크기가 4배 이상이 되는 데이터를 상대로 한 bootstrap 인데 PySpark, PyTorch, Tensorflow 등 후보들로 대응할 준비가 되어 있다.
새로운 언어를 하나 더 능숙하게 되면 연구영역도 더 다양해지고, 공부할 자료도 더 많이 지지만 동시에 새로운 차료도 찾을 수 있다. 더우기 Machine Learning 등에도 도전할 생각이라면 Python과 인연을 두어야 한다.
나는 새로운 언어를 배운다는 것은 어려운 것이 아니라, 참을성이 없어서 힘든 것이다라고 생각한다. 마라톤을 완주하는 이유도 고통을 참으면서 아무나 경험할 수 없는 완주의 경지를 만끽할 수 있기 때문이듯, 새로운 언어의 습득도 이를 통해 새로운 세상이 보이기 때문이다. 여러분도 포기하지 말고 노력해주길 바란다... 현재 63% 통과중... Ipython의 progress_bar가 새삼 멋있다. 그리고 이제는 그간 코딩한다고 멀리했던 Netflix에서 미드도 한편 봐야겠다.