Skip to content

Latest commit

 

History

History
106 lines (65 loc) · 7.42 KB

File metadata and controls

106 lines (65 loc) · 7.42 KB

Python이란?

Python은 범용 프로그래밍 언어 중 하나입니다. Guido van Rossum에 의해 1990년에 발표되었습니다. 처음에는 ’모두를 위한 컴퓨터 프로그래밍‘을 표방하며 일종의 교육용 언어로 출발했지만, 대중적 인기를 얻으며 범용 프로그래밍 언어로 발달했습니다. 현재는 많은 소프트웨어 개발자들에게 사랑받는 언어 중 하나이고, 특히 데이터 분석/과학분야에서도 많이 활용되고 있습니다.

Python은 프로그래밍 초보자들이 접근하기 쉬운 몇 가지 특징을 가지고 있습니다:

  • 문법이 간결하여 읽기가 수월합니다.
  • 다른 전문 프로그래밍 언어들에 비해 복잡한 문법이 적습니다.
  • 인터프리터 언어로, 별도의 컴파일 과정을 거치지 않고 간편하게 실행할 수 있습니다.

데이터 분석에서 Python이 가지는 장점?

범용 프로그래밍 언어이기 때문에, R이나 MATLAB 등 데이터 분석에 적합한 소프트웨어와는 달리, 데이터 분석 이외의 분야에서도 널리 활용됩니다. 그리고 라이브러리가 매우 풍부합니다.

때문에 데이터 분석에서 가지는 장점으로는, 데이터 분석 과정 및 결과를 웹 애플리케이션으로 만들어 게시한다던지 하는, 데이터 분석 이외의 작업과 연계하기가 쉽습니다.

Literate Programming, Reproducible Research

사회과학 분석에서는 데이터를 엑셀로 가지고 있는 경우가 많지요. 엑셀이 참 다루기도 쉽고, 눈으로 데이터를 확인할 수 있기 때문에 더 직관적입니다.

하지만, 원천 데이터를 엑셀로 확정한 이후에는 어떨까요?

데이터가 확보되면 분석 작업에 들어갑니다. 엑셀이나 SPSS, 혹은 SAS 등으로 분석을 합니다. 분석을 하면서 분석 결과로 나오는 표나 그래프들이 생깁니다. 중간 결과물 파일이나 시트들도 엄청 많이 쌓이게 되죠. 그런데 이 결과물들이 어떤 분석을 거쳐서 나왔는지 헷깔리기 시작합니다. 분석은 탐색적으로 이루어지는 경우가 많기 때문에 분석에 분기가 생기기 시작합니다. 파일명이 복잡해집니다. 파일 이름이나 시트 이름으로만 중간 과정을 설명해야 합니다. SAS는 좀 낫겠지만, 다른 도구들의 경우에는 분석 오퍼레이션들이 클릭으로 이루어지기 때문에 분석 과정을 replay한다는 것이 불가능합니다.

그리고 분석을 마치면 문서를 작성합니다. 연구에 대해서 글을 쓰고, 결과를 설명하면서 분석 과정에서 나온 그래프를 하나씩 가져다가 삽입합니다. 혹여라도 결과가 신통치 않아서 분석을 다시 해야 한다면 난감해집니다. 중간 결과물 파일들도 다시 생성해야 할 뿐 아니라, 그래프나 표 등도 새로 가져다가 붙여야 합니다.

./assets/python-basic-day1-reproducible-research.png

다들 경험해보셨나요?

우선, 위의 상황에서는 분석이라는 ‘과정’에 대해 기술하지 않습니다. 과정은 사라지고 중간 결과물들만 남습니다. 과정은 기억 속에서 희미하게 남아있는데, 그것도 점점 복잡해지면 핸들링하기가 어려워집니다. 그리고 또한 위의 상황에서는 분석과 결과 문서가 분리되어 있습니다.

그렇다면, 과정을 기술한다면 어떨까요? 파이썬이나 R 등, 언어를 사용해서 분석 과정을 묘사할 수 있습니다. 엑셀은 언어가 아니죠. 엑셀 클릭에서는 의도가 드러나지 않습니다. R이나 파이썬을 “프로그래밍” 언어라고 인식하기 이전에, 분석 과정을 일련의 포멀한 형식 언어로 표현한다고 생각해봅시다. 그래서 분석 과정을 묘사할 뿐 아니라, 그 묘사된 분석 과정을 그대로 수행해서 결과물(표, 그래프 등)도 만들어주고, 최종 보고서와 결과물이 분리되지 않은 채 한 문서 안에서 관리될 수 있다면요?

아래는 무작위의 10개의 숫자를 생성하는 코드입니다.

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.Series(np.random.randint(1, 100, size=10))
df

그리고 선 그래프를 그립니다.

df.plot();

outputs/day1-example-plot.png

이렇듯 언어를 사용하여 분석의 과정을 기술할 뿐만 아니라 그것을 실행하고, 문서화와 합께 통합하는 것이 최근 많이 이야기되고 있는 ’reproducible research’, 즉 ’재현 가능한 연구‘의 핵심이라고 할 수 있습니다.

Python이나 R을 배우다 보면, 모든 것을 Python이나 R로 만들어보려는 욕심이 생기기도 합니다. 하지만 데이터를 모으고 정리하는 단계까지 파이썬이나 R로 하려는건 좀 무리일 수 있습니다. 그건 엑셀이 더 편합니다. 시각적으로 잘 인식되고, 직관적으로 변경이 가능합니다.

하지만 원천 데이터가 확정된 이후에는, 파이썬이나 R 등 언어를 사용해서 분석을 기술하는 연습을 하면 데이터 분석가로서 큰 자산이 될 것이라고 생각합니다.

문학적 프로그래밍이란?

컴퓨터 과학자인 Donald Knuth(도널드 크누쓰) 교수가 제안한 개념입니다. 컴퓨터 프로그램을 작성할 때, 프로그래밍 언어를 사용하여 코드를 작성하는데, 프로그래밍 언어만으로는 코드의 의도나 구조 등을 충분히 설명하기 어려운 경우가 많습니다.

문학적 프로그래밍이란, 프로그래밍 언어를 주석이나 해설과 함께 혼용하여 코드를 작성하고, 프로그램을 실행할 때는 주석이나 해설 부분을 제외한 코드만을 사용하고, 설명서 등을 제작할 때는 코드를 제외한 주석이나 해설 부분을 사용하여 문서를 생성하자는 개념입니다.

지금까지는 일반적으로는 잘 활용되지 않다가, 최근 재현 가능한 연구 가 주목받기 시작하면서, 문학적 프로그래밍의 개념을 활용하여 데이터 분석 코드를 작성하는 경우가 많아지고 있습니다.

재현 가능한 연구란?

논문이나 연구에서 수행한 분석 과정을 다른 연구자들도 그대로 재현할 수 있도록 하자는 운동입니다. 그러기 위해서는 데이터 뿐만 아니라 분석 과정도 개념적인 수준이 아니라 아주 구체적인 절차를 설명할 필요가 있고, 최근 머신러닝, 인공지능 등의 연구에서는 가벼운 웹 출판물의 경우 코드와 실행 결과를 문서 중간에 그대로 삽입하는 경우도 종종 볼 수 있습니다.