메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Python의 pandas를 사용하면 몇줄의 코드만으로 Data Analysis를 쉽고 강력하게 처리할 수 있다

한빛미디어

|

2016-07-25

|

by Matt Harrison

40,916

pandas 라이브러리는 정보 처리에 관한 세부기능과 matplotlib 그래픽 출력과 관련된 기능을 제공합니다.

 

저는 제 경력동안 python과 data science에 종사하는 수많은 개발자들을 가르쳤습니다. python 캠프에서 제가 본 바로는 python을 배우는 크게 3가지 그룹으로 나눌수 있습니다: 웹, 과학, 기능 동작

 

저는 수많은 python 개발자들(웹 개발자나 DevOps 관련 개발자)이 Numpy, Jupyter, pandas와 같은 수치 관련 python 스택을 사용하는 걸 어려워한다는 것을 봐왔습니다. 물론 제 편견이 들어있을 수 있겠지만, 이건 아마 특정 라이브러리를 설치하는데 전통적으로 내려오는 설치법이 있기 때문이 아닐까 싶습니다.(Anaconda나 관련 라이브러리는 이런 예에서 벗어났습니다만..) 아니면 아마도 이런 수치 관련 stack을 다루는 것이 웹사이트를 만드는 것보다는 학술적 지식을 요구해서가 아닐까 생각합니다. 이런 관점은 대부분의 "Data Scientist"과 관련한 일들이 석사나 박사 학위를 요구한 사실과 무관하지 않습니다. 이렇게 되면 "수학적 지식이 없으면 오지 마세요" 와 같은 분위기를 유발하게 됩니다. 저는 이런 케이스가 개발 툴과 관련되어 있지 않다고 생각하고, pandas 데이터 분석 라이브러리를 사용한 쉬운 예제를 제공하고자 합니다. 이런 개발 툴들은 데이터 분석이 필요하거나 데이터 검색을 위한 간단한 환경이 구축되어 있는 어떤 프로그래머에게 유용하고 쉽게 사용될 수 있습니다.

 

다른 사람들을 가르치는 경험은 저에게 어떤걸 알려줍니다. 코드를 읽는 것만으로는 충분하지 않습니다. 당신이 정말 뭔가를 배우기 원한다면 실제로 해봐야 합니다. 그래서 저는 pandas를 생산적으로 사용할 수 있는 세가지 쉬운 명령어들을 소개하고자 합니다. 단순히 읽지만 마시고, 한번 해보시기 바랍니다. 그러면 이 툴이 삶을 좀더 쉽게 만들 수 있다는 것을 아실 수 있을 겁니다.

 

나는 실천의 중요성에 대해 크게 감명받고 있다. 앎으로는 충분하지 않고 반드시 반영을 해야 한다. 의지를 갖는 것만으로 충분하지 않고 반드시 해봐야 한다.

- 레오나르도 다 빈치

 

이해에서 오는 매력

 

제 아이 중 한 명은 요즘 표현으로 말하자면 엄청난 강박관념을 가지고 있습니다. 그는 현재 매일 배우는 모든 것들에 대해 관심을 가지고 있습니다. 그는 모든 요소들, 숫자, 이름, 쓰임새에 대해서 알고 싶어합니다. 그는 도서관에서 그 요소에 대한 책을 빌려서 읽고, 또 읽을 것입니다. 아마 당신이 취할 수 있는 일반적인 행동은 아니겠지만, 그는 좀 특별해 보이지요.

 

요소들에 대한 관심 이전에, 그는 대통령의 소속 정당 기간에 대해서 관심을 가졌습니다.여기서도 우리는 똑같은 행동들을 볼 수 있습니다.

  • 과거와 현재의 리더에 대해서 소개한 책을 구한다.
  • 읽는다.
  • 또 읽는다.

어느 날 제가 집에 왔을 때, 제 아이는 그가 성취한 성과에 대해서 매우 자랑스러워했습니다. 제 아들은 모든 대통령과 그가 속한 정당에 대해서 전부 확인을 했습니다. 그리고 결과에 대한 파이 차트를 조심스럽게 만들었지요. 그걸 저한테 보여줄 때, 그는 매우 밝아보였습니다.

 

Data science와 관련된 일(다른 사람을 가르칠 뿐만 아니라, 데이터를 크롤링하고, 정리하고, 예측모델을 생산하고, 시각화 하는 작업들)을 하면서 저는 제 아들에게서 정말 감명을 받았습니다. 아이 스스로(숙제가 아니었음에도) 대통령들이 속한 정당들에 대해서 멋진 시각화 결과물을 만들었습니다.(물론 많은 사람들이 파이 차트를 유효한 시각화 결과물이라고 생각하지는 않지만, 여기서는 무시하도록 하겠습니다.)

 

이런 경험은 아버지와 아들 사이에 얻을 수 있는 경험 중 주요한 기회라고 생각됩니다. 저는 제 아들이 한 일에 대해서 칭찬해주고, 그에게 컴퓨터를 사용해서 아들이 만들 파이 차트에 어떤 것들을 더 할 수 있는지를 보여줬습니다. 제 아이들은 제가 컴퓨터로 일한다는 사실을 알고 있었지만, 이런 기회는 제 아들에게 제가 어떤 일을 하고 있는지를 보여줄 수 있는 좋은 기회였습니다. 저는 제 아들에게 제 주위의 data scientist들이 사용하는 도구들을 보여줬습니다. 이름하여 pandas 라이브러리와 Jupyter입니다.

 

제가 제 아들과 함께한 프로젝트에 기반한 예제들은 매우 쉽게 이해할 수 있을 뿐만 아니라, 프로그래밍 경험이 있는 대부분의 사람들에게는 이 예제가 매우 직관적이라고 느낄 것입니다.

 

설치 : 가장 힘든 부분

 

설치는 pandas나 Jupyter를 사용하는데 있어서 명백하게 힘든 부분입니다. 만약 python too들을 쓰는데 익숙하시다면, 그렇게 어렵지 않습니다. 그 나머지 분들을 위해서 이 힘든 부분을 해줄 python meta-distribution이 있습니다. 그 중 하나가 Continumm Analytics에서 나온 Anaconda Python Distribution인데, 이건 무료이고, 아마 처음 시작하는데 있어서 가장 쉽게 접근할 수 있는 방법일 겁니다. (제가 강의를 진행할 때도 이 것을 사용합니다.)

 

Anaconda를 설치한 후에는 conda 라고 불리는 실행 파일을 가지고 있어야 합니다. (아마 windows 상에서는 command prompt에서 진행될 것입니다.) conda tool은 모든 플랫폼에서 돌아갑니다. pandas와 Jupyter를 설치하기 위해서 (몇 가지 라이브러리가 더 추가되어야 합니다.) 이렇게 치시기 바랍니다:

 

conda install pandas jupyter xlrd matplotlib

 

이 과정을 수행하는데 몇초정도 걸리겠지만, 이 과정을 통해서 환경에 필요한 모든 라이브러리들이 설치될 것입니다. 모든 것이 설치된 후에 아래 명령을 수행하시기 바랍니다:

 

jupyter-notebook

 

여기까지 오면 notebook이라는 것이 실행될 것입니다. 폴더가 정렬된 형태의 브라우저가 출력될 것입니다. 가장 힘든 부분을 통과하신 것을 축하드립니다.

 

notebook 만들기

 

Jupyter 웹페이지 상에서 오른쪽에 있는 New 버튼을 클릭해주시기 바랍니다. 메뉴가 아래로 정렬될텐데, 메뉴 중 python을 선택하시면 당신만의 notebook을 만들 수 있게 됩니다. notebook이란 python 코드와 Markdown 형식의 문장들로 구성된 집합체입니다. 시작하기 전에 주의해야 할 몇 가지가 있습니다.

 

우선 두 가지 모드가 있습니다 :

  • 명령어 모드 : cell을 만들거나 이동시키고, 실행하거나 형식을 바꿀 때(예를 들어 code에서 markdown으로 바꾸는 경우) 사용합니다.
  • 편집 모드 : 일반적인 문서 편집기와 같이 cell 안의 text를 바꾸거나 실행시킬 때 사용합니다.

반드시 알아야 할 주요 명령어들은 다음과 같습니다:

  •  b : 아래에 cell을 생성합니다.
  •  dd : 현재 cell을 삭제합니다. (d가 두번 들어간 겁니다.)
  •  up/down 화살표 : 다른 cell로 이동할 수 있습니다.
  •  Enter : cell 상에서 편집모드로 진입합니다.

반드시 알아야 할 주요 편집 명령들은 다음과 같습니다:

  • Ctrl + Enter : 해당 cell을 실행합니다.
  • Esc : 명령어 모드로 진입합니다.

이게 정말 답니다. 이밖에 더 많은 명령어(명령어 모드에서 h를 치시면 명령어에 대한 리스트가 나옵니다)들이 있지만, 위의 명령어들이 제가 전체 작업 중 90%동안 사용하는 것들입니다.

이게 쉽지 않으신가요?

 

pandas 사용하기

 

cell로 들어가서 다음을 쳐보시기 바랍니다.(우선 b를 눌러 cell을 생성한 후, Enter를 눌러 편집 모드로 들어가시기 바랍니다.):

 

import pandas as pd

 

Ctrl + Enter를 통해 해당 cell을 실행시켜보세요. 만약 pandas가 설치되어 있다면, 지금 수행한 명령어는 단순히 라이브러리를 불러오는 것입니다. 그런 다음 명령어 모드로 다시 돌아갑니다. 뭔가 흥미있는 것을 하기 위해서, 우리는 몇가지 데이터가 필요합니다. 조금 찾아보니, 제 아들과 저는 웹상에서 대통령에 대한 정보가 담긴 엑셀 파일을 찾을 수 있었습니다. 우리에게 익숙한 csv 파일은 아니지만, 나쁠 것도 없지요. pandas가 엑셀 파일을 읽을 수 있다는게 다행입니다.

 

 새 cell을 생성하고 아래와 같이 친 후 실행하시기 바랍니다:

 

df = pd.read_excel('http://qrc.depaul.edu/Excel_Files/Presidents.xls')

 

아마 몇 초쯤 걸리고, 이 작업은 url로부터 엑셀 파일을 호출해 처리할 것입니다. 이 결과는 df(DataFrame의 약자) 라는 변수에 저장될 것이고, 여기엔 엑셀 파일내의 표 정보가 담길 것입니다.

 

 새로운 Cell을 생성하고 그 안에 정보를 넣음으로써 우리는 data를 처리하는데 있어서 Jupyter의 REPL (Jupyter는 정말로 멋진 Python용 REPL (Read Eval Print Loop) 도구입니다.) 이점을 가져올 수 있습니다. 단지 그 변수의 이름을 치면 Jupyter는 그 변수가 가진 값을 함축적으로 표현하게 됩니다.

 

DataFrame형의 변수가 가진 내용을 확인하기 위해서 다음을 치고 실행해보시기 바랍니다:

 

df

 

내용에 대한 멋진 HTML 표가 보여질 것입니다. 아마 기본적으로는 해당 데이터가 보여주기에 너무 많다고 여길 경우 pandas에서는 몇 개의 데이터를 숨길 것입니다.

 

데이터분석과 시각화를 위한 기능들

 

DataFrame은 우리가 확인할 수 있는 다양한 열을 가지고 있습니다. 제 아들은 특히 "Political Party"라는 열에 대해서 관심을 가졌습니다. 다음 명령어를 실행하면 뭔가가 출력될 것입니다:

 

 

df['Political Party']

 

pandas가 멋진 점은 우리가 데이터로 처리할 수 있는 몇 가지 기본적인 동작에 대한 기능을 제공한다는 점입니다. 만약 모든 정당의 수에 대해서 알고 싶으면, 간단하게 해당 명령어를 수행함으로써 열들의 값들을 계산할 수 있습니다.

 

df['Political Party'].value_counts()

 

매우 멋지기도 하지만 그보다도 훨씬 좋은 부분이 있다면, pandas에서는 Matplotlib 그래프 출력 라이브러리와 결합되어 있다는 점입니다. 이를 통해 작지만 매우 멋진 파이 차트를 만들 수 있습니다. 여기에 그 명령어가 있습니다.

 

%matplotlib inline

df['Political Party'].value_counts().plot(kind="pie")

 

fig1.jpg

 

 

 

만약 python에만 익숙하고 Jupyter에 익숙하지 않다면 첫번째 줄이 뭔지 잘 모르실 겁니다. 이 줄은 python으로 작성된게 아니기 때문에 괜찮습니다. 이것은 "cell magic" 이라는 것으로 jupyter에게 웹페이지 상에 해당 그래프가 삽입될 수 있도록 직접 말하는 형태입니다.

 

저는 이걸 바 차트로 조금 더 잘게 쪼개보겠습니다. 그래야 여러분들이 수치들간의 차이를 쉽게 아실 수 있을 겁니다. 파이 차트에서는 공화당출신 대통령이 많은지 민주당 출신이 많은지를 구별해내기가 힘듭니다. 이 코드 한 줄이면 문제가 되지 않습니다.

 

df['Political Party'].value_counts().plot(kind="bar")

 

fig2.jpg

 

 

세 줄로 표현되는 코드 = pandas + 엑셀 스프레드시트 + 그래프

 

말그대로입니다. 세 줄의 코드만 있다면(만약 jupyter를 포함시킨다면 네 줄이겠습니다) 여러분들은 pandas 라이브러리를 부를 수 있고, 엑셀 스프레드시트를 읽을 수 있으며, 그래프를 그릴 수 있습니다.:

 

import pandas as pd

df = pd.read_excel('http://qrc.depaul.edu/Excel_Files/Presidents.xls')

%matplotlib inline

df['Political Party'].value_counts().plot(kind="pie")

 

이 코드는 통계학자나 박사학위자만 쓸 수 있는 것이 아닙니다. Jupyter와 pandas는 초등학생들도 이해할 수 있는 도구입니다. 만약 당신이 개발자라면, 스스로 이 도구에 대해서 확인해보기 위해 잠깐 동안을 투자할 수 있을 겁니다. 재미로 한번 대학과 직장 열에 대한 몇 가지 그래프를 만들어보시기 바랍니다. 아마 여러분들은 제 아들이 대통령이 되기 위해서 어떤 미래 계획을 잡아야 할지에 대한 흥미로운 방법에 대해서 알게 될 것입니다. 한번 해보세요. 단 두 줄밖에 되지 않습니다:

 

df['College'].value_counts().plot(kind="bar")

 

df['Occupation'].value_counts().plot(kind="bar")

 

***

원문 : Python’s pandas make data analysis easy and powerful with a few lines of code

 

Matt Harrison

Matt Harrison은 2000년부터 python을 써왔습니다. 그는 MetaSnake라고 하는 python과 data science를 효율적으로 사용하는 방법을 가르쳐주고 컨설팅해주는 회사를 운영하고 있습니다. 그는 hairysun.com이라는 블로그를 운영하고 있으며, @__mharrison__ 트위터 계정을 통해 python과 관련한 유용한 정보를 공유하고 있습니다

 

번역 : 강찬석

한 전자회사에서 시스템 소프트웨어 엔지니어로 있으면서 통신 관련 소프트웨어를 개발중입니다. 컴퓨터에 관해서 다양하고 광범위한 주제에 관심을 가지고 있으며, 배운 지식을 블로그(http://talkingaboutme.tistory.com)를 통해 공유하는 것을 더 좋아하는 사람입니다.

댓글 입력
자료실