2017.04.10

"데이터 과학자의 마음을 잡기 위한" 파이썬과 R의 경쟁 분석

Peter Wayner | InfoWorld
상사의 상사가 서버실을 둘러보고 수 페타바이트에 이르는 데이터를 살펴본다. 결론은 하나다. 이 잡음 속에 분명 신호가 있다. 이 숫자로 이뤄진 세계에는 지적 생명체가 분명히 존재한다. 숫자로 채워지는 이 하드 디스크에서 수익을 창출할 전략이 분명히 있다.

이 작업이 자신에게 떨어져, 지금부터 거대한 디지털 잡동사니통을 뒤지고 뒤져 유용한 뭔가를 찾아 상사에게 보고해야 한다. 어떻게 할까? 개발자라면 선택지는 R과 파이썬(Python), 두 가지다.

데이터 크런칭을 위한 솔루션은 많고 이들은 비즈니스 인텔리전스나 데이터 시각화라는 그럴듯한 이름으로 포장된다. 어떤 솔루션이 원하는 기능을 한다면 해당 솔루션을 선택하면 된다. 그러나 솔루션이 해주지 않는, 다른 작업을 하려면 결국 코드를 직접 쓰는 수밖에 없다. 데이터가 깨끗하게 준비되어 있다면 포괄적인 서비스 툴을 사용하면 되지만, 이런 툴은 모든 부분이 완벽하지 않을 경우 문제를 일으키거나 삼킨 데이터를 제대로 소화하지 못하는 문제가 있다.

파이썬과 R의 차이는 대부분 사고방식 측면에 있다. 하나는 유닉스 스크립터들이 개발해 통계학자, 빅데이터 전문가와 소셜 과학자들 사이에서 자리잡은 포괄적인 서비스 언어다. 다른 하나는 통계학자, 빅데이터 전문가와 소셜 과학자들이 설계하고 만든 데이터 분석용 툴이다.

사용하는 계층은 거의 똑같지만 접근 방식은 전혀 다르다. 하나는 유용한 라이브러리가 많은 범용 툴이고 다른 하나는 빅데이터 분석 전용으로 만들어졌다. 무엇을 선택해야 할까? 이런 결정을 하기 위해 두 언어를 비교해 보자.

파이썬을 사용하면 전처리가 쉽다
데이터 분석의 50%는 분석에 앞서 데이터를 정리하는 일이라는 말이 있다. 심지어 그 비중이 99%라는 사람도 있다. 정확한 수치야 어떻든 필요할 때 임의적 작업을 수행할 수 있는 포괄적인 서비스 언어로 데이터를 정리하는 편이 더 좋다.

파이썬은 포괄적인 서비스 명령형 언어이므로 사용해본 적이 없는 개발자에게도 구조와 접근 방법은 친숙하게 느껴질 것이다. 손쉽게 새 함수와 새 계층을 추가해서 데이터를 분해하고 정리할 수 있다. 로컬 저장, 웹 서비스 접근 또는 컴퓨터 프로그램이 일상적으로 수행하는 기타 임의적 요소가 필요하다면 별 어려움 없이 해당 요소를 포함할 수 있다. 파이썬은 언어다.

R을 사용하면 어떤 것으로도 전처리할 수 있다
물론 파이썬을 사용하면 전처리(preprocessing)가 쉽지만 R도 데이터를 정리하기 위한 용도로 사용할 수 있다. 어느 언어라도 무방하다. 사실 많은 경우 데이터 순화 루틴과 분석 루틴을 혼합하는 것은 구조적으로 부적절하므로 분리하는 편이 나은데, 어차피 둘을 분리한다면 그냥 좋아하는 언어를 사용하지 않을 이유가 없다. 파이썬일 수도 있고 자바, C, 어셈블리 코드도 괜찮다. 데이터베이스 내에서 또는 다른 스토리지 계층 내에서 데이터를 전처리할 수도 있다. R은 가리지 않는다.

파이썬에는 수많은 라이브러리가 있다
파이썬은 인기가 높다. 일반적인 리포지토리의 통계 수치에서도 명확히 드러난다. 파이썬 패키지 인덱스(PyPi)의 패키지 수는 이 기사를 쓰는 현재 10만 2,199개이며, 이 기사를 읽을 때쯤이면 그 수는 더 늘어나 있을 것이 거의 확실하다.
이 숫자조차 빙산의 일각에 불과하다. 깃허브부터 소셜 과학 웹사이트까지, 코드는 도처에 있다. PyPi를 제외해도 좋은 파이썬 코드는 풍부하고 거의 모두가 오픈 소스이므로 받아서 사용하면 삶이 한결 더 수월해진다.

R에는 수많은 통계 분석용 라이브러리가 있다
R 역시 패키지가 있다. 종합 R 아카이브 네트워크(CRAN)의 패키지 수는 이 기사를 쓰는 현재 10만 33개이며 파이썬과 마찬가지로 계속 늘어나는 중이다. 이러한 모든 패키지의 목적은 하나, 데이터의 통계 분석이다.
예를 들어 파일 시스템 검사나 서버 유지보수를 위한 패키지가 아니다. 그런 작업은 R의 소관이 아니다. 제대로 작동하지 않는 경우도 가끔 있지만(모든 오픈소스 리포지토리의 공통점) 대부분의 코드는 통계학자들이 작성하고 검토한 코드다.

파이썬은 계속 발전 중
프랑스에서 "르위켄(le weekend)"이라고 말하면 잘 통한다. 살아있는 언어란 그런 것이다. 파이썬은 프랑스어와 마찬가지로 계속 발전하고 더 나아지는 중이다. 버전 2.3에서 3.0으로 건너뛰면서 예전 코드가 작동하지 않게 됐지만, 많은 파이썬 애호가들은 변화에 그 정도의 가치는 있다고 말한다. 비록 과거의 코드를 단절시킨다 해도 살아있는 코드는 계속 발전한다.
살아있는 언어는 곧 사람들이 사용하고 개선하고 싶어한다. 이는 더 많은 오픈 소스 코드와 더 많은 솔루션으로 연결된다. 페이스북의 정치적 밈(meme)이 우리가 민주주의를 위해 치러야 할 대가라면, 표준의 변경과 코드의 단절은 인기있고 발전하는, 살아있는 언어를 사용할 때 감수해야 할 비용이다.

R은 순수함을 유지한다
R이 변화하지 않다고 말하는 것은 불공정하다. 사실 R은 대규모 코드 베이스를 더 정화하기 위해 구문 유효 범위(lexical scoping)를 적용한 S의 변형이다. 그럼에도 많은 경우 R 인터프리터에서 S를 실행할 수 있다. 파이썬 프로그래머처럼 코드 베이스가 2.3이냐 3.0이냐를 항상 따져야 할 정도의 중대한 패러다임 변화는 없다.
시간이 지날수록 더 익숙해지고 문제 발생의 가능성은 더 줄어들 뿐이다. R 역시 살아있으므로 보장할 수는 없지만 변화의 보폭이 크거나 급진적이지는 않다.

파이썬은 다른 언어가 할 수 있는 작업을 다 한다
파이썬은 프로그래머가 원하는 모든 작업을 할 수 있도록 프로그래머가 설계한 범용 언어다. 이 말이 곧 튜링 완전(Turing-complete)과 같은 의미는 아니다. 게임 오브 라이프(Game of Life)는 튜링 완전하지만 이걸로 피보나치 수열을 계산하는 함수를 쓸 사람은 아마 없을 것이다. 어떤 작업을 수행해야 한다면 일반적으로 선택할 수 있는 옵션은 풍부하다.
그러나 파이썬은 그 작업을 쉽게 하도록 고안된 언어다. 파이썬은 다량의 코드로 채워진 실제 프로젝트를 위해 고안됐다. 프로젝트를 시작하는 시점, 소소한 세부 사항들을 정리하기 위한 코드 몇 줄을 써야 할 때는 그 유용성이 드러나지 않을 수 있다. 그러나 나중에 이 몇 줄이 몇 천 줄이 되고 전체 덩어리가 스파게티 코드가 되면 파이썬의 이러한 특성이 빛을 발한다. 파이썬은 규모가 큰 프로젝트에 적합하도록 만들어졌고 언젠가는 여러분에게도 파이썬의 기능이 필요할 날이 있을 것이다.

R은 통계를 잘 한다
R은 통계 분석을 위해 만들어진 언어다. 지금 해야 할 일이 무엇인가? 통계 분석이라면 다른 건 볼 필요도 없다. 그 작업에 딱 맞는 툴을 선택하라. 렌치도 망치 대용으로 쓸 수는 있지만 망치가 필요한 일에는 망치를 쓰는 게 좋다.

파이썬에는 명령줄이 있다
마우스로 가리키고 클릭하면서 자란 아이들은 보통 처음에는 명령줄에 적응을 잘 못하지만 결국 좋은 키보드와 조화를 이룬 명령줄의 힘과 표현력을 깨닫게 된다. 명령줄이라는 언어의 조합은 정말 놀랍다. 십여 개의 메뉴 페이지를 거치며 마우스로 클릭해서 할 일을 명령줄에서는 효과적인 문자열 하나로 할 수 있다.
파이썬은 이 세계에 속한다. 파이썬은 명령줄을 위해 태어났고 명령줄에서 힘을 발휘한다. 모양새는 터무니없이 뒤쳐져 보일 수 있지만 효율적이고 강력하다.

그건 R도 하고, R스튜디오도 있다
명령줄 안에서 이것저것 많이 쌓아 올리긴 했어도 R 역시 일종의 명령줄을 중심으로 만들어진 언어다. 그러나 많은 사람들은 모든 요소를 집어넣어 잘 포장한 두 가지 환경, R스튜디오(RStudio) 또는 R 커맨더(R commander) 내에서 작업한다. 명령줄도 있지만 데이터 편집기, 디버깅 지원, 그래픽을 위한 창도 있다. 파이썬 세계도 최근 이클립스, 비주얼 스튜디오 등의 기존 IDE를 통해 R의 이런 부분을 따라잡으려 노력하는 중이다.

파이썬에는 웹이 있다
유닉스 웹 서버와 함께 진화한 스크립팅 언어, 파이썬 개발을 위한 웹사이트가 등장한다는 것은 어찌 보면 자연스러운 현상이다. 우선 로데오(Rodeo)와 주피터(Jupyter)가 있고, 앞으로 더 생길 것이다.
인터프리터로 포트 80을 링크하기는 쉬우므로 파이썬은 웹에서 아주 잘 작동한다. 물론 스칼라, 줄리아, 꼭 원한다면 R과 같은 다른 언어에서도 주피터를 사용할 수 있지만 어느 언어가 가장 유리한 지는 Jupyter라는 철자만 봐도 알 수 있다.

R은 라텍스와 잘 통한다
R을 사용해 데이터를 분석하는 사람들은 많은 경우 라텍스(LaTex)를 사용해 그 데이터에서 발견한 신호를 보고하기 위한 문건을 작성한다. 데이터 분석과 문서 레이아웃을 결합하는 아주 효과적인 시스템, 스위브(Sweave)가 나온 것도 어찌 보면 자연스러운 일이다.
데이터를 분석하고 그래프를 만들기 위한 R 명령이 결과를 보고하는 텍스트와 혼합된다. 모두 한 곳에 있으므로 손상이나 캐시 문제 발생 위험이 최소화된다. 버튼 하나만 누르면 소프트웨어가 데이터를 다시 분석하고 결과를 최종 문서에 넣어준다.

둘 다 사용한다면 어떨까
두 가지의 장점을 모두 사용하면 되지 않겠는가? 실제로 많은 데이터 과학자들이 그렇게 하고 있다. 데이터 집계의 첫 단계는 파이썬으로 실행 가능하다. 그 다음 R에 내장된, 충분한 테스트와 최적화를 거친 통계 분석 루틴을 이 데이터에 적용한다.
R을 일종의 파이썬 라이브러리로 사용하거나, 파이썬을 R을 위한 전처리 라이브러리로 사용하는 개념이다. 특정 계층에 가장 잘 맞는 언어를 선택해서 케이크처럼 쌓아 올리면 된다. R이 케이크이고 파이썬이 그 위에 올리는 설탕 가루인가? 아니면 그 반대인가? 그건 각자가 선택하면 된다. editor@itworld.co.kr  

2017.04.10

"데이터 과학자의 마음을 잡기 위한" 파이썬과 R의 경쟁 분석

Peter Wayner | InfoWorld
상사의 상사가 서버실을 둘러보고 수 페타바이트에 이르는 데이터를 살펴본다. 결론은 하나다. 이 잡음 속에 분명 신호가 있다. 이 숫자로 이뤄진 세계에는 지적 생명체가 분명히 존재한다. 숫자로 채워지는 이 하드 디스크에서 수익을 창출할 전략이 분명히 있다.

이 작업이 자신에게 떨어져, 지금부터 거대한 디지털 잡동사니통을 뒤지고 뒤져 유용한 뭔가를 찾아 상사에게 보고해야 한다. 어떻게 할까? 개발자라면 선택지는 R과 파이썬(Python), 두 가지다.

데이터 크런칭을 위한 솔루션은 많고 이들은 비즈니스 인텔리전스나 데이터 시각화라는 그럴듯한 이름으로 포장된다. 어떤 솔루션이 원하는 기능을 한다면 해당 솔루션을 선택하면 된다. 그러나 솔루션이 해주지 않는, 다른 작업을 하려면 결국 코드를 직접 쓰는 수밖에 없다. 데이터가 깨끗하게 준비되어 있다면 포괄적인 서비스 툴을 사용하면 되지만, 이런 툴은 모든 부분이 완벽하지 않을 경우 문제를 일으키거나 삼킨 데이터를 제대로 소화하지 못하는 문제가 있다.

파이썬과 R의 차이는 대부분 사고방식 측면에 있다. 하나는 유닉스 스크립터들이 개발해 통계학자, 빅데이터 전문가와 소셜 과학자들 사이에서 자리잡은 포괄적인 서비스 언어다. 다른 하나는 통계학자, 빅데이터 전문가와 소셜 과학자들이 설계하고 만든 데이터 분석용 툴이다.

사용하는 계층은 거의 똑같지만 접근 방식은 전혀 다르다. 하나는 유용한 라이브러리가 많은 범용 툴이고 다른 하나는 빅데이터 분석 전용으로 만들어졌다. 무엇을 선택해야 할까? 이런 결정을 하기 위해 두 언어를 비교해 보자.

파이썬을 사용하면 전처리가 쉽다
데이터 분석의 50%는 분석에 앞서 데이터를 정리하는 일이라는 말이 있다. 심지어 그 비중이 99%라는 사람도 있다. 정확한 수치야 어떻든 필요할 때 임의적 작업을 수행할 수 있는 포괄적인 서비스 언어로 데이터를 정리하는 편이 더 좋다.

파이썬은 포괄적인 서비스 명령형 언어이므로 사용해본 적이 없는 개발자에게도 구조와 접근 방법은 친숙하게 느껴질 것이다. 손쉽게 새 함수와 새 계층을 추가해서 데이터를 분해하고 정리할 수 있다. 로컬 저장, 웹 서비스 접근 또는 컴퓨터 프로그램이 일상적으로 수행하는 기타 임의적 요소가 필요하다면 별 어려움 없이 해당 요소를 포함할 수 있다. 파이썬은 언어다.

R을 사용하면 어떤 것으로도 전처리할 수 있다
물론 파이썬을 사용하면 전처리(preprocessing)가 쉽지만 R도 데이터를 정리하기 위한 용도로 사용할 수 있다. 어느 언어라도 무방하다. 사실 많은 경우 데이터 순화 루틴과 분석 루틴을 혼합하는 것은 구조적으로 부적절하므로 분리하는 편이 나은데, 어차피 둘을 분리한다면 그냥 좋아하는 언어를 사용하지 않을 이유가 없다. 파이썬일 수도 있고 자바, C, 어셈블리 코드도 괜찮다. 데이터베이스 내에서 또는 다른 스토리지 계층 내에서 데이터를 전처리할 수도 있다. R은 가리지 않는다.

파이썬에는 수많은 라이브러리가 있다
파이썬은 인기가 높다. 일반적인 리포지토리의 통계 수치에서도 명확히 드러난다. 파이썬 패키지 인덱스(PyPi)의 패키지 수는 이 기사를 쓰는 현재 10만 2,199개이며, 이 기사를 읽을 때쯤이면 그 수는 더 늘어나 있을 것이 거의 확실하다.
이 숫자조차 빙산의 일각에 불과하다. 깃허브부터 소셜 과학 웹사이트까지, 코드는 도처에 있다. PyPi를 제외해도 좋은 파이썬 코드는 풍부하고 거의 모두가 오픈 소스이므로 받아서 사용하면 삶이 한결 더 수월해진다.

R에는 수많은 통계 분석용 라이브러리가 있다
R 역시 패키지가 있다. 종합 R 아카이브 네트워크(CRAN)의 패키지 수는 이 기사를 쓰는 현재 10만 33개이며 파이썬과 마찬가지로 계속 늘어나는 중이다. 이러한 모든 패키지의 목적은 하나, 데이터의 통계 분석이다.
예를 들어 파일 시스템 검사나 서버 유지보수를 위한 패키지가 아니다. 그런 작업은 R의 소관이 아니다. 제대로 작동하지 않는 경우도 가끔 있지만(모든 오픈소스 리포지토리의 공통점) 대부분의 코드는 통계학자들이 작성하고 검토한 코드다.

파이썬은 계속 발전 중
프랑스에서 "르위켄(le weekend)"이라고 말하면 잘 통한다. 살아있는 언어란 그런 것이다. 파이썬은 프랑스어와 마찬가지로 계속 발전하고 더 나아지는 중이다. 버전 2.3에서 3.0으로 건너뛰면서 예전 코드가 작동하지 않게 됐지만, 많은 파이썬 애호가들은 변화에 그 정도의 가치는 있다고 말한다. 비록 과거의 코드를 단절시킨다 해도 살아있는 코드는 계속 발전한다.
살아있는 언어는 곧 사람들이 사용하고 개선하고 싶어한다. 이는 더 많은 오픈 소스 코드와 더 많은 솔루션으로 연결된다. 페이스북의 정치적 밈(meme)이 우리가 민주주의를 위해 치러야 할 대가라면, 표준의 변경과 코드의 단절은 인기있고 발전하는, 살아있는 언어를 사용할 때 감수해야 할 비용이다.

R은 순수함을 유지한다
R이 변화하지 않다고 말하는 것은 불공정하다. 사실 R은 대규모 코드 베이스를 더 정화하기 위해 구문 유효 범위(lexical scoping)를 적용한 S의 변형이다. 그럼에도 많은 경우 R 인터프리터에서 S를 실행할 수 있다. 파이썬 프로그래머처럼 코드 베이스가 2.3이냐 3.0이냐를 항상 따져야 할 정도의 중대한 패러다임 변화는 없다.
시간이 지날수록 더 익숙해지고 문제 발생의 가능성은 더 줄어들 뿐이다. R 역시 살아있으므로 보장할 수는 없지만 변화의 보폭이 크거나 급진적이지는 않다.

파이썬은 다른 언어가 할 수 있는 작업을 다 한다
파이썬은 프로그래머가 원하는 모든 작업을 할 수 있도록 프로그래머가 설계한 범용 언어다. 이 말이 곧 튜링 완전(Turing-complete)과 같은 의미는 아니다. 게임 오브 라이프(Game of Life)는 튜링 완전하지만 이걸로 피보나치 수열을 계산하는 함수를 쓸 사람은 아마 없을 것이다. 어떤 작업을 수행해야 한다면 일반적으로 선택할 수 있는 옵션은 풍부하다.
그러나 파이썬은 그 작업을 쉽게 하도록 고안된 언어다. 파이썬은 다량의 코드로 채워진 실제 프로젝트를 위해 고안됐다. 프로젝트를 시작하는 시점, 소소한 세부 사항들을 정리하기 위한 코드 몇 줄을 써야 할 때는 그 유용성이 드러나지 않을 수 있다. 그러나 나중에 이 몇 줄이 몇 천 줄이 되고 전체 덩어리가 스파게티 코드가 되면 파이썬의 이러한 특성이 빛을 발한다. 파이썬은 규모가 큰 프로젝트에 적합하도록 만들어졌고 언젠가는 여러분에게도 파이썬의 기능이 필요할 날이 있을 것이다.

R은 통계를 잘 한다
R은 통계 분석을 위해 만들어진 언어다. 지금 해야 할 일이 무엇인가? 통계 분석이라면 다른 건 볼 필요도 없다. 그 작업에 딱 맞는 툴을 선택하라. 렌치도 망치 대용으로 쓸 수는 있지만 망치가 필요한 일에는 망치를 쓰는 게 좋다.

파이썬에는 명령줄이 있다
마우스로 가리키고 클릭하면서 자란 아이들은 보통 처음에는 명령줄에 적응을 잘 못하지만 결국 좋은 키보드와 조화를 이룬 명령줄의 힘과 표현력을 깨닫게 된다. 명령줄이라는 언어의 조합은 정말 놀랍다. 십여 개의 메뉴 페이지를 거치며 마우스로 클릭해서 할 일을 명령줄에서는 효과적인 문자열 하나로 할 수 있다.
파이썬은 이 세계에 속한다. 파이썬은 명령줄을 위해 태어났고 명령줄에서 힘을 발휘한다. 모양새는 터무니없이 뒤쳐져 보일 수 있지만 효율적이고 강력하다.

그건 R도 하고, R스튜디오도 있다
명령줄 안에서 이것저것 많이 쌓아 올리긴 했어도 R 역시 일종의 명령줄을 중심으로 만들어진 언어다. 그러나 많은 사람들은 모든 요소를 집어넣어 잘 포장한 두 가지 환경, R스튜디오(RStudio) 또는 R 커맨더(R commander) 내에서 작업한다. 명령줄도 있지만 데이터 편집기, 디버깅 지원, 그래픽을 위한 창도 있다. 파이썬 세계도 최근 이클립스, 비주얼 스튜디오 등의 기존 IDE를 통해 R의 이런 부분을 따라잡으려 노력하는 중이다.

파이썬에는 웹이 있다
유닉스 웹 서버와 함께 진화한 스크립팅 언어, 파이썬 개발을 위한 웹사이트가 등장한다는 것은 어찌 보면 자연스러운 현상이다. 우선 로데오(Rodeo)와 주피터(Jupyter)가 있고, 앞으로 더 생길 것이다.
인터프리터로 포트 80을 링크하기는 쉬우므로 파이썬은 웹에서 아주 잘 작동한다. 물론 스칼라, 줄리아, 꼭 원한다면 R과 같은 다른 언어에서도 주피터를 사용할 수 있지만 어느 언어가 가장 유리한 지는 Jupyter라는 철자만 봐도 알 수 있다.

R은 라텍스와 잘 통한다
R을 사용해 데이터를 분석하는 사람들은 많은 경우 라텍스(LaTex)를 사용해 그 데이터에서 발견한 신호를 보고하기 위한 문건을 작성한다. 데이터 분석과 문서 레이아웃을 결합하는 아주 효과적인 시스템, 스위브(Sweave)가 나온 것도 어찌 보면 자연스러운 일이다.
데이터를 분석하고 그래프를 만들기 위한 R 명령이 결과를 보고하는 텍스트와 혼합된다. 모두 한 곳에 있으므로 손상이나 캐시 문제 발생 위험이 최소화된다. 버튼 하나만 누르면 소프트웨어가 데이터를 다시 분석하고 결과를 최종 문서에 넣어준다.

둘 다 사용한다면 어떨까
두 가지의 장점을 모두 사용하면 되지 않겠는가? 실제로 많은 데이터 과학자들이 그렇게 하고 있다. 데이터 집계의 첫 단계는 파이썬으로 실행 가능하다. 그 다음 R에 내장된, 충분한 테스트와 최적화를 거친 통계 분석 루틴을 이 데이터에 적용한다.
R을 일종의 파이썬 라이브러리로 사용하거나, 파이썬을 R을 위한 전처리 라이브러리로 사용하는 개념이다. 특정 계층에 가장 잘 맞는 언어를 선택해서 케이크처럼 쌓아 올리면 된다. R이 케이크이고 파이썬이 그 위에 올리는 설탕 가루인가? 아니면 그 반대인가? 그건 각자가 선택하면 된다. editor@itworld.co.kr  

X