데이터 분석을위한 R vs Python [닫기]


60

약 1 년 동안 프로그래밍을 해왔으며 데이터 분석 및 기계 학습에 정말 관심이 있습니다. 온라인 과정에 참여하고 있으며 책을 몇 권 읽습니다.

내가하고있는 모든 것은 R 또는 Python을 사용하며 하나의 언어에 집중 해야하는지 아닌지에 대한 제안을 찾고 있습니다. 그들은 서로 보완합니까?

-학교에서 C #을 사용하지만 자체 학습을 통해 Python에 익숙하다고 언급해야합니다.


아마 흥미로운 링크가있을 것입니다 : coursera.org/course/compdata
Giorgio

답변:


39

나는 파이썬 (numpy와 scipy를 포함한 코스의 데이터 분석을 위해)과 R을 서로 옆에 사용합니다. 그러나 R을 독점적으로 사용하여 데이터 분석을 수행하고보다 일반적인 프로그래밍 작업 (예 : 컴퓨터 모델의 워크 플로 제어)을 위해 Python을 사용합니다.

기본 연산의 관점에서 배열과 정렬에 대한 연산은 R과 Python + numpy와 매우 유사합니다. R이 이점을 갖는 것은 매우 큰 통계 함수 라이브러리입니다. 또한 matplotlib는 ggplot2만큼 좋지는 않지만 matplotlib을 많이 사용하지 않았습니다. 또한, 나는 먼저 한 언어에 중점을 두어 그 특성에 능숙 해졌습니다. 소프트웨어 엔지니어링이 아니라 데이터 분석에 관심이있는 것 같습니다. 나는 R을 고르고 그것에 충실합니다. 즉, Python + numpy + scipy + scikit을 선택하는 것이 확실하고 훌륭한 선택이라고 생각합니다 .R이 조금 더 우수하다고 생각합니다.

또한 동료 및 해당 분야의 다른 사람들이 무엇을 사용하고 있는지 살펴 보겠습니다. 그들이 모두 파이썬을 사용한다면, 더 쉽게 배우고 코드를 교환하기 위해 그것을 고수하는 것이 합리적입니다.

면책 조항 : 나는 R을 많이 사용하므로 대답을 가능한 한 객관적으로 유지하려고 노력했지만 내 의견이 편향 될 수 있습니다. 또한 Python + numpy를 광범위하게 사용하지는 않았지만 모든 데이터 분석을 수행하는 동료를 알고 있습니다.

추신 :이 링크는 흥미로울 수 있습니다 : http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps : 또는 이 게시물의 인용문 :

모든 연구에 R과 Python을 사용하지만 (필요에 따라 Rcpp 또는 Cython 사용) 피할 수 있으면 C 또는 C ++로 작성하지 않는 것이 좋습니다. R은 놀라운 사용자 커뮤니티 덕분에 훌륭한 언어입니다. 그것은 통계 학자에 의해 만들어졌으며, 이는 데이터 분석이 언어의 핵심에 있음을 의미합니다. 나는 이것이 언어의 주요한 특징이라고 생각하고 곧 언어가 곧 대체되지 않을 큰 이유라고 생각합니다. 파이썬은 일반적으로 객체 지향과 함수형 프로그래밍의 조화를 고려할 때 전반적으로 더 나은 언어입니다. Scipy / Numpy, Pandas 및 statsmodel과 함께 강력한 조합을 제공합니다. 그러나 파이썬에는 여전히 심각한 통계 학자 / 수학자 커뮤니티가 부족합니다.


3
R이 Python보다 강력하다고 말하면 Python + numpy / blaze + scipy 또는 일반 Python을 의미합니까?
9000

5
파이썬 + numpy를 의미합니다. 그렇지 않으면 선택이 더 쉬울 것입니다. 기본 연산의 관점에서 배열 및 정렬 작업, R 및 Python + numpy는 매우 유사하다고 생각합니다. R이 이점을 갖는 것은 매우 큰 통계 함수 라이브러리입니다. 또한 matplotlib는 ggplot2만큼 좋지는 않지만 matplotlib을 많이 사용하지 않았습니다.
Paul Hiemstra

즉, Python + numpy + scipy + scikit을 선택하는 것이 확실하고 훌륭한 선택이라고 생각합니다 .R이 조금 더 우수하다고 생각합니다.
Paul Hiemstra

@PaulHiemstra-당신은 당신의 의견에 당신의 답을 향상시킬 수있는 좋은 점을 제시합니다 – 질문이 다시 열리고 그 기회가 있다면.
psr

@psr 내 의견에서 편집 했으므로 질문을 편집하려는 경우 질문을 열 필요가 없습니다 (아마도 편집 할 수 있습니다 ...).
Paul Hiemstra

36

배경 : 저는 오스틴에있는 신생 기업의 데이터 과학자이며 대학원 (물리학) 출신입니다. 나는 데이터 분석을 위해 매일 파이썬을 사용하지만 R은 조금 사용합니다. 또한 C # /. NET 및 Java (매일 거의)를 사용하며 대학원에서 C ++을 많이 사용했습니다.

숫자 (R 이상)에 Python을 사용하는 주된 문제는 사용자 커뮤니티의 크기라고 생각합니다. 이 언어는 항상 사용되어 왔기 때문에 많은 사람들이 당신이하고 싶어하는 일을했습니다. 즉, 어려운 문제가 발생하면 패키지를 다운로드하여 작업 할 수 있습니다. R은 "그냥 작동합니다."데이터 세트를 제공하고 어떤 요약 통계가 유용한 지 알고 있습니다. 결과를 제공하고 원하는 플롯을 알고 있습니다. 당신이 만들고 싶은 모든 일반적인 음모, 심지어 위키피디아에서 찾아봐야 할 아주 난해한 음모가 있습니다. scipy / numpy / pandas / statsmodels / etc만큼 좋습니다. 파이썬 용이며 R 표준 라이브러리 수준이 아닙니다.

R에 비해 Python의 주요 장점은 C 계열의 실제 프로그래밍 언어라는 것입니다. 쉽게 확장되므로 샌드 박스에있는 모든 것을 프로덕션에 사용할 수 있습니다. 파이썬은 R과는 반대로 객체 지향이 구워졌습니다 .R과는 달리 일종의 사후 생각처럼 느껴집니다. 파이썬이 잘하는 다른 것들도 있습니다 : 스레딩과 병렬 프로세싱은 매우 쉽고, 그것이 R의 경우인지 확실하지 않습니다. 그리고 파이썬을 배우면 강력한 스크립팅 도구도 제공합니다. 파이썬을위한 정말 좋은 (무료) IDE가 있습니다. 당신이 기꺼이 지불 할 경우 훨씬 좋습니다 (100 달러 미만), 이것이 R의 경우인지 확실하지 않습니다-내가 아는 유일한 R IDE는 R Studio는 꽤 좋지만 PyDev + Eclipse만큼 좋지는 않습니다.

나는 이것을 약간의 키커로 추가 할 것입니다 : 당신이 아직 학교에 있기 때문에 직업에 대해 생각해야합니다. 숙련 된 R 개발자보다 숙련 된 Python 개발자에 대한 채용 공고가 더 많습니다. 오스틴에서는 장고 개발자들의 직업이 하늘에서 떨어지고 있습니다. R을 잘 알고 있다면 그 기술을 활용할 수있는 곳이 몇 군데 있지만 (예 : Revolution Analytics), 많은 상점에서 Python을 사용하는 것 같습니다. 데이터 분석 / 데이터 과학 분야에서도 더 많은 사람들이 Python을 사용하는 것으로 보입니다.

그리고 Java 만 아는 사람들과 함께 일할 수 있다고 과소 평가하지 마십시오. 그 사람들은 파이썬 코드를 아주 쉽게 읽을 수 있습니다. R에서 모든 작업을 수행하는 경우 반드시 그런 것은 아닙니다. (이것은 경험에서 비롯됩니다.)

마지막으로, 이것은 피상적으로 들릴지 모르지만, 파이썬 문서와 명명 규칙 (종교적으로 준수되는 것으로 밝혀 짐)은 공리주의 R 문서보다 훨씬 훌륭하다고 생각합니다. 이것은 논쟁의 여지가 있지만 확실하지만 파이썬의 강조점은 가독성입니다. 즉, 파이썬 함수에 대한 인수에는 읽을 수있는 이름이 있으며 이는 의미가 있습니다. R에서 인수 이름은 종종 잘립니다 .-- 파이썬에서는 그렇지 않습니다. 이것은 pedantic하게 들릴지 모르지만 인수 이름을 'x_label'(한 예)만으로 쉽게 지정할 수있을 때 'xlab'과 같은 것을 작성해야합니다. 새로운 모듈 / 패키지 API. R doc을 읽는 것은 Linux 매뉴얼 페이지를 읽는 것과 같습니다. 만약 그것이 여러분의 보트를 떠 다니면 더 많은 힘을 얻게됩니다.

그 모든 것을 말하면서, 나는 다음을 제안 할 것입니다 (나의 전형적인 워크 플로우이기도합니다). 파이썬을 알고 있기 때문에 첫 번째 도구로 사용하십시오. 파이썬이 부족한 것을 발견하면 원하는 것을 할 수있는 충분한 R을 배우고 다음 중 하나를 수행하십시오.

  1. 하위 프로세스 모듈을 사용하여 R에서 스크립트를 작성하고 Python에서 실행하거나
  2. RPy 모듈을 설치하십시오.

파이썬이 잘하는 것에 파이썬을 사용하고 위의 것 중 하나로 빈틈을 메우십시오. 이것은 나의 일반적인 워크 플로입니다 .-- 물론 플로팅에는 R을, 무거운 리프팅에는 Python을 사용합니다.

요약하자면, 파이썬의 가독성 ( "Pythonic"에 대한 검색 구글), 좋은 무료 IDE의 이용 가능성, C 언어 군에 속한다는 사실, 더 큰 자본을 활용할 수있는 가능성 때문에 스킬 셋과 언어의 문서화 스타일이 더 뛰어 나기 때문에 필자는 파이썬을 선택하고 필요할 때만 R을 사용하는 것이 좋습니다.


좋아, 이것은 스택 사이트에서 가장 인기있는 대답이며, 심지어 # 1조차도 아닙니다. :) 이것이 경로를 따라 소수의 사람들에게 도움이 되었기를 바랍니다.

여하튼, 나는 몇 년간 현장에서 다음과 같은 결론에 도달했습니다.

이것은 아마도 잘못된 질문입니다.

"이 특정 기술을 배워야합니까?"라는 질문은 나쁜 질문입니다. 왜?

  1. 기술 변화. 항상 다른 기술을 배워야합니다. 트위터에서 일하면 스칼라를 운영합니다. 일부 장소는 Python 상점입니다. 신경 쓰지 않는 곳도 있습니다. 특정 기술을 알고 있거나 모르기 때문에 고용되지 않을 것입니다. 새로운 기술을 배울 수 없다면 해고 될 수 있습니다. 마치 새 파이프 렌치가 나오고 배관공이고 새 파이프 렌치가 어떻게 작동하는지 알 수 없다면 아마도 꽤 배관공 일 것입니다.
  2. "이 기술을 배우십시오"또는 "실제 문제를 해결하는 데 더 많은 시간을 소비합니까"를 선택하면 예외없이 항상 후자를 선택해야합니다.

데이터 과학자로서 당신의 임무는 문제를 해결하는 것 입니다. 내가 본 모든 "빅 데이터"대화는 문제 해결이 아니라 기술에 중점을 두었습니다. 실제 문제 해결은 일반적으로 마지막에 몇 개의 슬라이드로 넘어갑니다.

[토크 제목 = "Cool New Startup에서 딥 러닝"] ... [45 분 동안 다이어그램과 테크노 바벨을 사용하여 전화기를 체크 아웃하고 확인]] ... 그리고 Hadoop 클러스터를 구현 한 후 [Ben zones out 다시] 우리는 딥 러닝 루틴을 실행시킬 수 있습니다. 질문이 있으십니까?

이것은 해당 분야가 기술에 관한 것이라는 나쁜 인상을 주지만 사실이 아닙니다. Scala, Python 또는 R에 능숙하지만 문제 해결에 실제로 나쁘다면 데이터 과학자가 될 것 입니다.

Paco Nathan은 몇 개월 전에 하루 동안 "빅 데이터"회의에서 오스틴에 있었고 "화학은 테스트 튜브에 관한 것이 아닙니다"라고 말했습니다. 데이터 과학은 스칼라, 하둡 또는 스파크에 관한 것이 아니며 다른 기술이 필요합니다. 하루가 끝나면 툴킷을 배우기 위해 Stack Overflow를 사용하는 데 능숙하지 않은 생각하는 사람들을 고용하고 싶습니다.

마찬가지로, 면접에 가는데 프로그래밍 언어를 모르기 때문에 직원을 고용하지 않으면 그 회사는 짜증을 냅니다. 그들은 "데이터 과학자"가 무엇을 의미하는지 이해하지 못하며, 제대로 작동하지 않으면 아마도 더 낫습니다.

마지막으로, 문제 해결 능력이 한계가 있거나 (자신에게 정직해야 함) 실제로 기술 측면을 즐기거나 기술을 배우는 것이 실제로 사랑하는 (정직하게) 많은 기술을 배우는 경우. 기술 세트에 맞는 "데이터 엔지니어"유형 역할을 항상 찾을 수 있습니다. 이것은 나쁜 일이 아닙니다. 데이터 엔지니어는 휠에 그리스를 바르고 데이터 과학자로서의 업무를 수행 할 수있게합니다. (차이는 소프트웨어 아키텍트와 개발 팀과 유사합니다.)


3
하지만 거래소에서 일하고 있고 헤드 트레이더가 옵션 가격의 CSV로 내게 와서 로그 선형 분포에 맞추고 평균 및 표준 편차를 철회하기를 원한다면, 나는 심지어 파이썬을 고려하지 않을 것입니다. 저는 R에서 이것을하기위한 코드가 3 줄이라고 생각합니다.
BenDundee

12

따라서 Matlab에서 데이터 분석을 주로 수행했지만 Python (일반적으로 파이썬을 더 많이 사용)에서 일부를 수행했으며 R을 약간 시작했습니다. 여기에 곡물에 대해 언급하고 사용을 제안합니다 파이썬. 그 이유는 통계 (R이 지배적 임) 나 디지털 신호 처리 (매트랩이 지배적 임)가 아닌 머신 러닝 관점에서 데이터 분석을 수행하기 때문입니다.

머신 러닝과 통계 사이에는 분명히 겹치는 부분이 있습니다. 그러나 중복은 정체성이 아닙니다. 기계 학습은 CS의 아이디어를 사용하여 R에서 구현하고 싶지 않습니다. 물론 R에서 최소 스패닝 트리를 계산할 수 있습니다.하지만 추악한 혼란처럼 보일 수 있습니다. 머신 러닝 담당자는 해시 테이블, 이진 검색 트리 등에 쉽게 액세스 할 수 있다고 가정합니다. 기본적으로 도메인 특정 언어를 일반 프로그래밍 언어로 바꾸는 것보다 필요한 경우 통계 알고리즘을 새로 구현하는 것이 더 쉽습니다.

데이터 분석을위한 Python의 부수적 인 이점도 훨씬 높습니다. 스크립팅을 처리하고 더 큰 응용 프로그램을 만들 수있는 실제 프로그래밍 언어를 동시에 배울 수 있습니다. R은 통계 커뮤니티의 틈새 언어이며 Matlab도 훨씬 더 널리 사용됩니다.

필자는 논문을 먼저보고 어떤 언어로 코드를 게시하는지 알 것입니다. R이 아닌 경우 사용하지 마십시오.


1
대단히 감사합니다. ML의 측면에 더 관심이 있습니다.
The_Cthulhu_Kid

1
사소한 추가 사항 : R 도이 방법 으로이 작업을 수행 할 수 있다고 확신하지만 Python은 최소한의 오버 헤드로 Cython을 사용하여 C를 호출하거나 C로 함수를 컴파일하는 기능으로 유명합니다. 따라서 일반적으로 실제 데이터를 볼 때 고려해야 할 주요 사항 인 적은 노력으로 더 빠르게 얻을 수 있습니다. 또 다른 (최종의) 이국적인 참고 사항 : Java에는 WEKA와 같은 정말 좋은 기계 학습 라이브러리가 있습니다. 그러나 멋진 점은 자이 썬 (Jython)을 사용하여 파이썬에서도 호출 할 수 있다는 것입니다 :-)
Nir Friedman

7

이 도구를 여러 개 가지고 있고 계속 사용하는 구식 (50 세 이상) 과학자로서 저는 2 센트를 더할 것입니다. 나는 사소한 일회성 데이터 분석 작업에서 일부 세계 슈퍼 컴퓨터를 지배하는 코드에 이르기까지 Fortran에서 여전히 모든 코드를 작성하는 동료들과 협력했습니다. 최근 포트란 방언 (F90, F95, F2003, F2008)은 IMHO로, 현재 최고의 디자인 언어 중 일부입니다. 고성능 컴퓨팅에 대한 수십 년의 경험으로 인해 상당히 인상적인 언어 개발이 이루어졌습니다.

나는 때때로 파이썬 만 사용했으며 (주로 Sage로 인해) 그것을 다시 방문 할 것이지만 나에게 잘 작동하는 시간 테스트 된 언어 제품군을 사용합니다. Fortran, C, Perl, R 및 Scheme (VMD 스크립팅을위한 tcl 포함). R과 Fortran 및 C의 조합이 매우 편안하다는 것을 알았습니다. R의 객체 모델에 대한 다른 의견과 달리, 이는 일반 함수 및 메소드 디스패치의 CLOS 개념을 기반으로하는 대화식 작업에 적합한 객체 모델입니다. 새로운 패키지로 대화식으로 작업 할 때 종종“인쇄”및“플롯”과 같은 일반적인 기능을 사용하여 생산적인 작업을 수행 할 수 있습니다.

Fortran 및 C에 대한 API는 사용하기 매우 쉽습니다. 모델링 및 데이터 분석을 위해 Fortran 및 C에서 근무한 경험이 있다면 이는 큰 장점입니다. Lisp 및 C의 매크로 시스템만큼 깨끗하지는 않지만 R 코드를 동적으로 생성하고 평가하는 기능은 동적 데이터 세트를 처리 할 때 매우 유용합니다.

실제 데이터에 대한 R의 일부 제한 사항에는 값별 호출 방법이 포함됩니다. 가치 기준 호출에 대한 CS 이유가 있지만, 큰 숫자 데이터를 사용한 실제 프로그래밍에는 참조 기준 호출 형식이 필요합니다 (이전 코드에서는 포트란 공통 블록 또는 최신 코드에서는 모듈 데이터의 중요성에 유의하십시오). PDL (Perl Data Language)에서 채택한 접근 방식은 특히 우아합니다. (복사본을 요청하지 않으면 Pdl은 기본적으로 참조로 호출됩니다. Sub-pdl은 Fortran 또는 C가 제공하는 것보다 훨씬 명확한 구문으로 상위 pdl의 하위 섹션을 참조합니다).

많은 언어를 배우는 것이 좋습니다. 파이썬은 의심 할 여지없이 중요한 언어이지만 R도 그 영역에 속합니다. 그러나 고무가 과학의 길을 실제로 충족시켜야 할 때 Fortran과 C (및 일부 C ++)는 대체하기가 어려울 것입니다.


1

R의 주요 특징은 프로그래밍 언어만큼 패키지 라이브러리라는 것입니다. 모든 패키지 작성자는 원칙적으로 다른 모든 패키지의 내용에 액세스 할 수 있습니다. 이는 재발 명, 재 문서화, 재 학습의 필요성을 크게 줄입니다. 이것은 패키지 작성자와 사용자 모두에게 적용됩니다. 물론이 인프라는 비용이 많이 듭니다. 패키지 작성자는 시간이 지남에 따라 점점 까다로워지는 표준을 수용해야합니다. 이 중 일부는 사용자가 겪는 문제로 넘칠 수 있습니다.

파이썬은 패키지 관리 시스템을 가지고 있지 않습니다. R의 포괄적 인 R 아카이브 네트워크 ( http://cran.r-project.org )에 해당하는 것은 없으며 R 작업보기 ( http://cran.csiro.au/web/views/ )에 해당하는 것도 없습니다 . 따라서 R의 경우가 아니라면 이미 사용 가능한 것을 기반으로하는 공산주의자 노력의 일환이 아닌 자체적으로 작업하는 프로그래머를위한 도구 인 R의 경우가 아닙니다.

데이터 분석 및 머신 러닝을 위해서는 이미 존재하는 능력을 기반으로 구축하고 활용해야합니다. 보다 일반적인 프로그래밍 작업의 경우 Python에 이점이있을 수 있습니다. 파이썬 학습과 관련된 노력을 정당화 할 수있을만큼 이러한 유형의 작업을 하시겠습니까?


3
파이썬에는 pip라는 패키지 관리 시스템이 있습니다. 표준 라이브러리의 일부는 아니지만 다음 달에 출시 될 Python 3.4로 시작하는 표준 Python과 함께 제공됩니다 (2014 년 3 월).
코디 피어스

2
포괄적 R 아카이브 네트워크에 해당하는 Python은 PyPI입니다. pypi.python.org/pypi
Wilfred Hughes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.