brunch

You can make anything
by writing

C.S.Lewis

by 욜수기 yollsugi Mar 28. 2018

4. 파이썬, 판다스의 시작

DS School 1~2주차: 코딩이 아닌 데이터 분석의 이해

파이썬을 본격적으로 배워본다는 사실은 가기 전부터 괜히 마음이 두근두근해지게 만들었다.

그것도 내가 이 곳 저 곳을 기웃거리다가 나의 목적과 부합한다고 느낀 곳에서 배울 생각을 하니, 더욱 열의로 가득찬 느낌이었다.

3월 한 달 동안 회당 4시간, 총 5회의 수업. 그 5번의 수업 동안 나는 최대한 많은 것을 배워가야겠다고 다짐했다.


3월2일 금요일:1회차. 생각했던 것과 달랐던 접근법


첫 수업은 항상 기대와 우려로 가득찬 법이다. 강의실에 들어섰을때, 딱 봐도 연령층, 직업군이 굉장히 다양해보이는 20여 명의 수강생이 모여 있었다. 첫 한시간동안은 아이스브레이킹 겸 서로 돌아가면서 소개하는 시간을 가졌다. 사람들 한 명 한 명과 얘기하니 약간 우려가 더 커지는 기분이었다. IT 기업에 이미 종사하시는 분들이 정말 많았고, 학부생 중에는 이공계 학부생에 괜히 기가 죽었다. 문과. 경영대. CPA 공부만 3년을 하다 온 나로서는 소개를 하는 내내 위축이 되기도 했지만, 한편으로는 그만큼 내가 가장 밑바닥에서부터 차근차근 쌓아올라가면 되겠구나 하는 생각이 들었다. 나는 첫 수업이라 해서 차근차근 파이썬에 대해서 배울 줄 알았다. 하지만 오산이었다. 정확히 말하면 좋은 오산이었다. 강사님은 데이터 분석의 세계에 대해서 더 깊고 명확한 이해를 하기를 원하시는 듯 하셨다. 첫 수업에는 파이썬을 아예 사용하지 않았다. 대신 데이터 분석이 어떤 매커니즘으로 돌아가는 것인지를 이해하는 시간을 가졌다. Kaggle이라는 사이트가 있다.


https://www.kaggle.com


코딩, 데이터분석 경연대회, 온라인 공모전 느낌의 사이트이다. 세계적으로 많은 아마추어, 프로 데이터 분석가들이 참가하여 파이썬이나 R 프로그램을 사용하여 데이터를 분석한다. 문제는 주로 기업들이나 기관들에서 내는게 일반적이다. 구글, 페이스북, 에어비앤비 등의 글로벌 기업들에서 문제를 많이 낸다고 들었다. 상금도 굉장히 크게 걸려있고 (첫번째로 리스트되어 있는 kaggle competition의 경우 구글에서 시행한 대회인데 자그마치 상금이 5만달러이다. 5천만원...흐이익) 창의적인 답안을 제출하거나 좋은 답안으로 선정되면 바로 채용 interview의 단계로 가는 경우도 종종 있다고 한다. 파이썬이 되었든, R이 되었든 잘만 이해해서 데이터분석 마인드를 잘 가진다음 파본다면 생각지 못한 좋은 기회가 찾아올 수도 있는 것이다. 


그 캐글에서 상금도 걸려있지 않고 기초적인 툴과 로직으로 충분히 할 수 있는 Titanic Competition에 참가하는 것이 첫번째 수업의 메인 실습 과제였다. 그것도 엑셀을 이용해서 분석을 하는 방식이었기에 파이썬을 아예 사용하지 않은 것이다. 최종적으로 csv 파일로 제출하면 되는 competition들이 대부분이라, 사실 빅데이터를 감당하지 못해서이지 '이론적으로는' 엑셀로도 모든 경진대회에 참여할 수 있긴 하다. (물론 컴퓨터와 엑셀이 감당하지 못할 것이다.) 오늘 참가한 대회는 타이타닉 사고의 승객 데이터를 다운받아 생존 여부와 승객정보 간의 상관관계를 분석하여 타이타닉과 전혀 상관없는 별개의 해상사고 데이터에서 최대한 높은 생존율을 도출해내는 것이었다. 엑셀에서 피벗테이블을 이용하여 어떤 특성을 가진 승객들이 생존율이 높게 나오는지를 분석하였다. 첫째로 "여자는 다 살고, 남자는 다 죽는다" 등의 가설을 세웠다. 그 후 피벗테이블로 분석을 하고 이를 별개의 데이터에 동일하게 적용하여 캐글사이트를 통해 점수를 확인하는 방식을 반복진행하였다. 이 과정에서 알게 되었다. 파이썬이나 R 등 프로그램 패키지를 잘 다루는 능력도 물론 중요하겠지만, 결국 가장 중요한 것은 문제에 직면했을 때, 그 문제의 핵심 상관관계를 꿰뚫어 볼 수 있는 능력, 그리고 주어진 데이터에서 보다 의미있는, 2차, 3차적인 데이터를 뽑아낼 수 있는 능력이 더 중요하다는 것을 말이다. 이걸 깨달으면서 스스로 쌓아올려가고 있던 이 분야의 진입장벽이 한결 낮아진 기분이었다. 연습을 통해 주어진 데이터를 더 잘 분석하고, 더 깊고 창의적으로 사고할 수 있는 연습을 해야겠다는 생각이 들었다.


3월9일 금요일: 2회차. 본격적인 파이썬.


2회차에 들어서서 비로소 파이썬을 다루기 시작하였다. 설레였다. 강사님은 흔히 시중에 나와있는 파이썬 책들의 경우, 1장부터 끝까지 순서대로 정독하기 위해 나온 것이 아니다라는 말씀을 해주셨다. 정말 기본적인 내용을 익힌 뒤, 그 다음부터는 스스로 실습을 해보면서 중간 중간에 모르는 기능을 하나씩 찾아보면서 공부를 해야하는데, 무작정 순서대로 따라하다보면 얼마 못가 지치기 때문에 대부분의 사람들이 코딩 공부를 처음 시작할 때 좌절하게 된다고 말씀해주셨다. 맞는 말씀이었다. 나도 CodeAcademy라는 좋은 웹사이트를 알게 되어 그를 통해 하나하나 따라해보며 파이썬의 기초를 공부하였지만, 그 외에 내가 사놓은 책으로는 어디서 어떻게 시작을 해야될지 가늠이 안가 시작을 못하고 있던 상태였기 때문이다. 강사님은 첫 한시간 동안 빠르게 파이썬의 기본 기능들을 가르쳐주셨다. 파이썬의 전반적인 인터페이스부터 시작해 연산, 문자열, 포메팅, 리스트, 제어문, 반복문, 함수까지 한시간만에 배웠다. 처음 파이썬을 접했다고 했을 때, 굉장히 빠른 속도로 배운 것이다. 

(첫 수업에 배우면서 파이썬의 기초 코딩에 대해서 정리한 파일을 첨부하였다. 나처럼 새롭게 파이썬을 접했던 사람들에게 큰 도움이 되길 바라며 자세히 주석을 달았다.)

배우는 과정에서 강사님에게 상당히 큰 만족을 느꼈던 또 다른 이유는, 진도 나가는 속도가 빠른 와중에도 이 기능의 목적은 무엇인지, 흔히 이 과정에서 코딩 실수를 하는 부분은 어떤 부분인지, 헷갈리지 않기 위해서는 어떤 디테일을 고려해야 하는지에 대해서 강조하시면서 가르쳐주셨다. 그 점이 첫 수업부터 파이썬에 대한 전반적인 이해를 해 나가는데에 큰 도움이 되었다.

몇가지 중요한 부분들을 정리하는 것이 필요할 듯 싶다.


파이썬의 중요한 철학 중 하나는 하나의 문제를 해결하는 데에 두가지 기능이 필요하지 않다는 것이다.

그래서 다른 컴퓨터 프로그래밍 언어들에 있는 기능인 스위치케이스라는 기능은 파이썬에 존재하지 않는다.

왜냐하면 파이썬에서는 그 기능이 'if else'로 가능하기 때문이다.

이 파이썬의 철학에 대해 언급하신 부분이 따옴표를 다는 부분에서 였다. 그러면서 던지신 질문,

그렇다면 왜 쌍따옴표와 홀따옴표를 구분 표시하는 것일까? 둘이 같은 기능인데도?


그 이유에 대해서 듣고 나니 생각보다 너무 간단한 이유였다. 문장안에 홀따옴표가 존재하는 경우가, 또는 쌍따옴표가 존재하는 경우가 있을 수 있기 때문에 그 둘은 모두 필요하다는 것이었다.


듣고 나면 당연히 그렇지! 하는 부분들이지만 그렇다고 간과할 수는 없는 내용들이었다. 어느 분야에서건 기초를 탄탄히 쌓아나갈 때, 나중에 응용을 하는 단계에서 훨씬 쉽게 힘을 발휘할 수 있다고 믿고 있다. 그렇기에 이런 내용 하나하나가 더욱이 필요하게 느껴졌다.


그리고 파이썬에 적히는 프로그래밍언어도 명백히 '언어'라는 것을 계속 강조하셨다. 컴퓨터 친화적인 언어가 있고, 인간 친화적인 언어가 있다. C++, JAVA 등이 컴퓨터 친화적인 언어이고 파이썬은 인간 친화적인 언어이다. 그렇기 때문에 상대적으로 C++과 JAVA가 배우기 어렵게 느껴지는 것이고, 파이썬은 소수의 예외사항을 제외하면 인간의 직관과 일치하기 때문에 난이도가 상대적으로 낮게 느껴지는 것이었다. 

하지만 '언어적 성격'이라 함은, 난이도를 판가름하고자 그 성격에 주목하는 것이 아니다. 중요한 것은 파이썬을 통해 써지는 프로그래밍 언어도 언어이기 때문에 언어를 다른 사람이 이해하기 쉽도록 명시적으로 짜는 소양이 필요하다는 것이다. 대부분의 파이썬 로직은 사람의 직관과 일치하고, 일부 예외사항도 보다 이해에 있어 편리함을 추구하기 위해 예외사항이 된 것이기 때문에, 다 결국 더 편리해지기 위한 이유가 있다고 접근하니 일부 예외사항도 수용가능하게 느껴졌다.


코딩을 하다보면 에러가 참 많이 난다. 처음에만 해도 마치 프로그램 전체를 날려먹을 것만 같아 에러 메시지 하나에도 벌벌 떨었는데, 어느덧 한달째 된 나만 해도 이제는 에러가 나오면 "히히히 뭐가 틀렸나 이번에는" 하면서 에러 메시지를 확인하게 된다. 로직을 잘못 써서 나는 경우도 있고, 누군가에게 다르게 해석될 여지가 있어서 버블이 나는 경우도 있다. 파이썬 자체에서 "애매모호한데?" 싶은 것들은 실행을 시키지 않고 강제로 꺼버리는 것이다. 그러고는 "이 부분이 애매하니, 너가 이 애매모호한 부분을 명확하게 고쳐줬으면 좋겠어!" 하고 에러 메시지를 던진다. 즉 에러메시지는 우리에게 주는 힌트, 헬프 메시지로 봐도 무방한 것이다. 


강사님께서는 검색을 생활화하라고 말씀하셨다. 꿀팁이라면 꿀팁인데, 모든 것은 구글링에서 해결이 된다. (요즘 세상에 구글링으로 안되는게 어딧겠냐만은..) 에러를 쉽게 처리하는 방법은 에러메시지의 마지막 줄을 그대로 copy&paste해서 구글링을 하면 된다. 참고로 stackoverflow라는 페이지가 유명하다고 들었다. 보통 구글링을 하면 한 페이지 이내로 해결이 되는데, 좋은 프레임워크를 구하는 방법은 사람들이 많이 쓰는 걸 쓰면 된다는 것이 정설이다. 너무 마이너한 프레임워크로 가지만 않으면 된다는 말이다.


첫 한시간의 파이썬 강의 뒤에는 파이썬의 중요한 기능이자 패키지인 판다스에 대해서 배웠다. 데이터 분석에 특화되어 있는 파이썬 패키지라고 생각하면 될 것 같다. 강사님은 확실히 수업능력이 좋다는 생각이 들었다. 판다스에 대해서 배우기 전에 저번 시간에 엑셀을 통해서 분석한 타이타닉 모델을 판다스로 짧게 보여준 뒤, 같은 과정을 실습으로 해본다고 하였는데, 상당히 효과적인 학습 방법이겠다라는 생각이 바로 들었다. 판다스로 데이터파일을 불러와 분석하고, seaborn 기능을 이용해 데이터 시각화하는 과정까지 보니, 더 배운다면 나도 저렇게 분석을 해 볼 수 있겠구나 하는 생각에 기대가 많이 되었다. 엑셀은 100메가가 넘으면 쓰기가 어렵다고 한다. 감당할 수 있는 데이터 용량의 범위를 초과한 것이기 때문이다. 그래서 실제로 현업에서도 pandas가 가장 실용적으로 쓰이는 패키지라고 한다. 

앞서 컴퓨터 언어 중에 인간친화적인 것이 있고, 컴퓨터 친화적인 것이 있다고 말했는데, 판다스는 인간친화적인 툴은 아니다. 인간의 기본적인 직관과 상식으로 돌아간다고 보기는 어렵기 때문에, 체감 난이도가 더 어렵게 느껴지는 것이라고 하였다. 오히려 수학자들의 직관과 상식으로 돌아간다고 보는게 맞을 것이다. 하지만 워낙 강력한 패키지이기 때문에 판다스의 문법을 배워 이해한다면, 이를 이용해 어마어마한 응용이 가능하다고 한다. 실제로 2회차에서 배운 것은 사용하는 패키지만 엑셀에서 파이썬 판다스로 바뀐 것일 뿐, 실습 때 타이타닉 데이터를 사용하여 행과 열 항목들을 각각 분석하고, 의미있는 항목으로 수치화시켜서 결과를 도출해내는 내용 자체에는 아무 차이가 없었다. 대신 훨씬 간단하게, 훨씬 빠르게, 많은 양을 커버함으로써 파이썬의 강력함을 미약하게나마 경험해볼 수 있었다. 


그리고 향후에 배우게 될 머신러닝이라는 것에 대한 심리적인 진입장벽도 조금 낮아졌다. 가설을 세워서 검증해보고 결과를 도출해내는 과정을 디씨젼 트리라는 로직(?), 툴(?)을 사용하여 자동으로 맡겨버리는 것이 머신러닝이기 때문에, 정말 편리한 기능일 뿐, 차근차근 배워나가면 되겠다라고 생각했다.


판다스의 정리 파일 또한 공유하려 한다. 공유는 늘 아름다운 것이니깐

하루빨리 내가 원하는 데이터를 분석해서 내가 알아보고 싶은 결과물들을 도출해보고 싶다.

과한 욕심이 아니겠지..?

매거진의 이전글 3. 데이터 세계에 진입해보기 (2)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari