데이터 분석의 8할은 데이터를 원하는 대로 가공하는 과정이다.
앞서 이번 프로젝트의 데이터 획득까지의 과정을 살펴보았다. 다음 단계로, 이렇게 얻은 데이터를 분석 목적에 맞게 가공하는 과정이 필요하다. 애초에 데이터 수집을 목적에 맞춰서 내가 주도해서 한 것이라면 수집 시에 데이터를 잘 가공해 놓을 수 있겠지만 지금은 데이터를 주워와서 쓰는 과정이라, 내 입맛에 맞게 데이터가 만들어져 있지 않다. 데이터 사냥꾼들은 어설프게 비슷한 데이터라도 있으면 감사하게 가져와서 사용해야 할 따름이다.
앞에서 가져와서 그나마 csv형태로 가져온 데이터는 다음과 같이 생겼다.
보시다시피, 죄다 문자들이고, 그나마도 약간 깨져있다. (그렇다고 직접 손을 댈 생각이 없다는 건 전 글에서 이미 이야기했다.)
일단 영화 이름과 로봇 이름, 연도가 구분되어 있으니 연도별 로봇 수 및 영화 수를 세는 것은 할 수 있을 것이라고 생각했다. 하지만 그 이상 어떤 것을 할 수 있을까, 하고 생각하니 좀 심심해졌다.
하지만 이 데이터에 최소한의 가공을 해서 처음에 생각했던 로봇 별 분류를 위해서는,
1. 생김새 구분 - Image에 나와있는 링크를 다 긁어와서 로봇의 생김새를 통해 이미지 프로세싱을 한다.
2. 묘사 구분 - Contents 의 영화 및 간단한 로봇 설명을 가지고 구분을 한다.
인데 이 두 군데로 가면 데이터 가공량이 어마어마해질 뿐더러 내가 전문가도 아니다. (내가 텍스트 마이닝쪽으로 가지 않기 위해 얼마나 도망다녀서 지금까지 버텼는지는 알 사람들만 알 것이다.) 그래서 어쩌나 하고 고민을 하다가....
일단 다시 홈페이지를 살펴보았다.
도저히 저 그림들을 내가 잘 가공해서 구분하는 작업을 할 자신이 없었다. 물론 요즘 딥러닝이니 뭐니 좋은 라이브러리들도 많이 나와있고 해서 시도는 해 볼 수 있겠지만, 그러다 취미생활에서 주화입마가 올 것 같았다. 그래서 일단 울며 겨자먹기로 아주 기본적인 텍스트 마이닝 기법을 사용해 보는 것으로 가닥을 잡았다.
일단 데이터를 좀 더 다듬는다.
1. 데이터를 Excel로 확인한 김에 데이터가 잘못 끊겨져 있는 부분이 있어서 Excel의 data separation 기능을 사용해서, 길이, 혹은 문자 기준으로 한 열의 데이터도 두 개 이상의 열로 쪼갤 수 있다. (개인적으로 애용하는 기능이다.)
그 외에도 일부 간단히 다듬을 수 있는 것은 수동으로 다듬는다.
그리고 무엇을 만들지, 이를 위해 어떻게 데이터를 다듬을 지 계속 살펴본다.
이 과정에서는 데이터를 샘플링해서 eyeball-tracking하는 작업이 계속된다. 지난한 작업이라, 생업이 걸려있거나 정말로 흥미를 느끼지 않으면 정말 지루하고 피곤함만 몰려오고, 하다 때려치우게 된다.
데이터 분석 프로젝트의 시작에 재미와 흥미가 필요한 이유다. 어쨌든 데이터 분석의 8할은(일반적으로는 7할이라고 하지만 돌아보면-특히 시간 투입 면에서는- 보통 8할, 심하면 9할까지도 갔던 것 같다.) 데이터 정제 과정이니 말이다.
그리고 이렇게 만들어진 데이터를 가지고, 간단히 데이터를 코드로 돌리면서 살펴보는 작업을 진행한다.
기본 분석 환경은 다음과 같다.
* Microsoft Excel for Mac/ Numbers (for csv file)
* Jupyter 4.1 / Python 3.5.2
R이 훨씬 더 나에게는 편하긴 하고 원래의 목적인 Plotly 도 R package로도 잘 나와있기는 한데 굳이 Python을 쓴 이유는, 안 쓰면 까먹기도 하고 무엇보다 회사에서 점심시간에 짬짬이 한 프로젝트인데 최근 회사에서 Python으로 일을 하고 있었어서 작업환경 바꾸기 귀찮아서...
사실 쓸 줄만 알고 기능만 있으면 어떤 도구든 상관없지 않겠는가.
태초에 Plotly라는, 온라인으로 차트와 대시보드를 예쁘게 볼 수 있는 사이트가 있었다. 여기서 이제 Python, R, Javascript, Matlab 용 API까지 내놓았다. 앞에서도 말했다시피 사실 이것을 써보는 것도 하나의 목적이었으므로, 초보의 마음으로 매뉴얼을 따라가면서 설정을 하도록 하자.
기본적으로는 온라인 모드로, Plot.ly 계정과 연동해서 사용하는 형태지만, 오프라인 모드를 제공한다. 그래프만 따로 공유를 해야 한다거나, 한 곳에 Plotly로 만든 차트들을 모아놓고 보고 싶다거나, 유료 계정(!!!)을 사용한다거나 하면 온라인 모드도 좋겠지만, 무료 계정에서의 privacy limitation이 신경쓰인다거나, 네트워크 없는 데서 사용한다거나 하는 등등의 제약이 있으면 아직 딱히 기능제한이 보이지 않으므로 오프라인 모드를 사용하는 것도 나쁘지 않을 것으로 보인다.
또한 온/오프 모드 모두 기본적으로 Plotly 는 html 형태로 저장 가능한 동적 차트를 제공한다. 그래서 이를 Jupyter notebook으로 사용하다 보면 다른 html창이 열리는 것을 경험할 수도 있는데, 이를 위해 Jupyther notebook 모드도 제공하니 이 역시 참고하면 되겠다.
Plotly API 사이트에서는 자세한 매뉴얼과 다양한 예제를 제공하므로, 이에 대한 내용은 링크로 대신한다.
* 초기 설정/오프라인 모드/Jupyter notebook
그럼 이제 초기에 설정한, 연도별 로봇 등장 정도를 Plotly를 사용해서 살펴본다.
짧고 간단한 코드로 쉽게 살펴볼 수 있다. 그래프는 다음과 같다.
위와 같이 간단한 그래프로 나온다. 단위는 기본적으로 10년 주기다. 그림에서 알 수 있다 시피 마우스가 위치하는 연도의 상세한 숫자도 같이 살펴볼 수 있다.
전반적으로 증가 추세라는 것은 한 눈에 알 수 있다., 1940년 전후에는 세계대전이나 기타 요인이 있는 것도 고려해 볼 수 있다. 또한 2011-2020년은 아직 데이터가 2015년 초까지밖에 없는 관계로 일단 수치는 고려하지 않아도 될 것이다.
그런데 영화 산업은 지금까지 지속적으로 증가하고 있는데, 왜 2000년 이후의 로봇 빈도는 좀 더 적을까?
여러 가지 요인을 추정해 볼 수 있다. (여기부터는 개인적인 추정이다.)
1. 데이터가 부정확하다:그런데 영화 아카이브는 전보다 현재가 훨씬 수집 및 사용이 용이하므로 오히려 최근이 더 전보다 늘어났으면 모를까 이럴 가능성은 적어보인다.
2. SF 영화 숫자가 줄었다 : 이를 위해 잠시 IMDB를 살펴보았다.
오른쪽의 연도별 Sci-Fi 영화 숫자를 보면 알겠지만, 2000년 이후가 그 전보다 거의 2-3배 가량 차이가 나는 것을 알 수 있다. 그러므로 이런 가정도 맞지 않는다.
3. SF 저변의 확대: 다양한 SF가 소개되고, 다양한 형태의 가상 사회가 제시되면서 굳이 캐릭터를 가진 로봇이 등장하지 않더라도 슈퍼히어로물(마블, DC시리즈)이나 우주 소재 과학 영화([마션], [그래비티]), 혹은 심리 등의 소재를 사용한 영화([인셉션]) 등의 영화의 숫자도 늘어났다.
아마도 이런 이유에서가 아닐까, 추정해 본다.
간단한 시도만으로도, 새로운 라이브러리도 익혔고 적당히 재밌는 결론도 얻었다. 하지만 칼을 꺼냈으면 무라도 썰어야 하는데 (데이터 잡고 한참 클렌징 삽질을 해놓고) 도마만 두드린 것 같아 기분이 별로 시원하지 않았다. 그래서 이것저것 되는 대로 삽질 스킬이라도 쌓자고 시도들을 해보게 되었다.
(이에 대한 이야기는 3장에서...)