Matlab과 Python 중에서 통계 분석에 적합한 언어는 무엇입니까?


17

Matlab과 Python 중에서 일반적인 통계 데이터 분석에 적합한 언어는 무엇입니까? 접근성 이외의 장단점은 무엇입니까?


2
커뮤니티 위키, IMO 여야합니다.
Shane

왜 R도 볼 수 없었는지 설명하고 싶습니까?
Dirk Eddelbuettel

@ DirK : R에 대해 거의 들어 보지 못했습니다. 또한 Python과 같은 프로그래밍 언어를 배우고 싶었지만 R이 파이썬, IMO와 가까운 곳은 아니라고 생각합니다. 귀하의 질문에 대한 답변이 되었기를 바랍니다.

2
통계 분석 및 프로그래밍 에 대해 사람들이 권장하는 관점에서 여기 및 StackOverflow를 조금 살펴보십시오 . 우리 중 많은 사람들이 R에 대한 실질적인 대안이 없다고 생각합니다. 그러나 아름다움과 마찬가지로, 이것은 보는 사람의 눈에 있으므로 행운을 빕니다.
Dirk Eddelbuettel

지질 통계학 (내 박사 학위를받은)에서 R은 매우 잘 갖추어져 있다고 생각합니다 (gstat, geoR 등 참조). 적어도 나는 파이썬에서 지구 통계 기술의 완전한 적용 범위를 모른다. 왜 R은 "파이썬에 가까운 곳에 있지 않습니까?" 나는 두 가지를 모두 사용했으며 지리 통계에 R이 상당히 우수하다고 생각합니다.
Paul Hiemstra

답변:


29

지난 10 년 이상 동안 열심히 공부 한 Matlab 사용자는 Python을 배우는 것이 좋습니다. 언어에 대해 충분히 숙련 된 후에는 배우는 언어로 작업 할 때 충분히 생산적이지 않은 것처럼 보이며 기본 최고 언어를 사용하게됩니다. 최소한, 나는 당신이 여러 언어에서 동등하게 능숙 해 지도록 제안 할 것입니다 (R도 제안 할 것입니다).

내가 Matlab에 대해 좋아하는 것 :

  • 나는 그것에 능숙하다.
  • 수치 분석가들 사이 에서 링구아 프랑카 입니다.
  • 프로파일 링 도구는 매우 좋습니다. 이것이 옥타브 대신 Matlab을 사용하는 유일한 이유입니다.
  • 프리웨어 복제 본인 옥타브가 있으며 이는 참조 구현을 잘 준수합니다.

내가 Matlab에 대해 싫어하는 것 :

  • 타사 (무료 또는 기타) 패키지 및 스크립트를 관리하기에 적합한 시스템은 없습니다. Mathworks는 '중앙 파일 교환'을 제어하며, 애드온 패키지 설치는 R이 가지고있는 우수한 시스템과는 달리 매우 복잡해 보입니다. 또한 Mathworks는 프리웨어 패키지와 경쟁하는 도구 상자 판매로 돈을 벌기 때문에 이러한 상황을 개선 할 동기가 없습니다.
  • Matlab의 병렬 계산 라이센스는 엄청나게 비쌉니다.
  • 많은 도구 상자 기능과 일부 내장 기능을 포함한 많은 m 코드는 효율성 및 / 또는 유용성을 희생하면서 분명히 정확하도록 설계되었습니다. 가장 눈에 띄는 예 는 일종의 데이터median수행 한 다음 중간 값을 취하는 Matlab의 기능 입니다. 이것은 70 년대 이후 잘못된 알고리즘이었습니다.
  • Matlab에서는 그래프를 파일로 저장하는 것이 최선입니다.
  • Mathworks가 계속 종과 휘파람을 추가하더라도 지난 5 년 동안 (옥타브 대신 Matlab을 사용하기 시작했을 때) 사용자 환경이 개선되지는 않았습니다. 이것은 내가 그들의 대상 고객이 아니라 파워 유저를 위해 상황을 악화시켜 시장 점유율을 확대하려고한다는 것을 나타냅니다.
  • Matlab에서 객체 지향 프로그래밍을 수행하는 두 가지 방법이 있습니다. 이전 스타일을 사용하는 레거시 코드는 얼마 동안 지속됩니다.
  • Matlab UI는 Java로 작성되었으며 메모리 관리에 대한 불쾌한 아이디어가 있습니다.

+1, 좋은 포인트. 이것에 대해 : "메모리 관리에 대한 불쾌한 아이디어".. 흥미로운, 당신은 정교한 수 있습니까?
ars

1
나의 기억은 어딘가에 가고 있다 ; Matlab 사용 이외의 Java에 대한 나의 경험은 그것이 아마도 범인 일 가능성이 높다는 것을 나타내고 있으며, 실행하는 -nojvm것이 도움 이되는 것으로 보인다 .
shabbychef

MATLAB의 이상한 내장 코드 중 제가 가장 좋아하는 예는 셔플 (shuffle)로, 새로 생성 된 임의 벡터를 정렬하여 반환 된 순서로 데이터를 재정렬합니다.

1
@mbq : shuffle도구 상자에있을 수 있으며, MATLAB이 아닙니다. randperm랜덤 벡터의 정렬 인덱스를 반환하는 내장보다 나쁘지 않습니다 . 다시 말하지만, 이것은 아마도 잘못된 알고리즘 일 것입니다. (방금 Knuth-Fisher-Yates에 대한 통계는 여기에 나와 있습니다.)
shabbychef

1
@mbq : 다른 좋은 randperm점은 시드의 영향을받는 randn반면 Knuth-Fisher-Yates의 멕시 드 버전은 아마 내부 씨앗에 액세스 할 수 없으며 순수한 .m 버전의 셔플은 아마도 너무 느려
shabbychef

11

프로그래밍이 통계를 만나는 3 가지 영역 (내 머리 꼭대기)으로 나눠 보자 : 데이터 크 런칭, 수치 루틴 (최적화 등) 및 통계 라이브러리 (모델링 등).

첫째, 가장 큰 차이점은 파이썬이 범용 프로그래밍 언어라는 것입니다. Matlab은 여러분의 세계가 포트란 숫자 형 배열에 대략 동형 인 한 훌륭합니다. 데이터 뭉개 기 및 관련 문제를 다루기 시작하면 Python이 Matlab보다 뛰어납니다. 예를 들어 Greg Wilson의 저서 : 데이터 크 런칭 : Java, Python 등을 사용하여 일상적인 문제 해결을 참조하십시오 .

두 번째로 Matlab은 실제로 수치 작업으로 빛납니다. 많은 연구 커뮤니티가 그것을 사용하고 압축 센싱에서 종이와 관련된 일부 알고리즘을 찾고 있다면 Matlab에서 구현을 찾을 가능성 이 훨씬 큽니다. 반면 Matlab은 일종의 과학 컴퓨팅 PHP입니다. 태양 아래서 모든 기능을 수행하기 위해 노력하고 있습니다. 프로그래밍 언어 전문가라면 미학과 건축학의 결과물이 열광하지만 실용적 측면에서 작업이 완료됩니다. Numpy / Scipy의 등장으로이 중 많은 부분이 관련성이 떨어졌습니다. Python에서 사용할 수있는 최적화 및 머신 러닝 라이브러리를 찾을 수있을 것입니다. C와의 인터페이스는 어느 언어에서나 쉽습니다.

모델링을위한 통계 라이브러리의 가용성과 관련하여 R과 비교할 때 둘 다 다소 부족합니다 (물론 통계 작업을하는 사람들의 80 %가 필요하다고 생각합니다). 파이썬 측면 에서이 질문을 참조하십시오 : 통계 워크 벤치로서의 파이썬 . Matlab 측의 경우 통계 도구 상자가 있다는 것을 알고 있지만 다른 사람이 지식을 더 많이 채울 수있게합니다 (Matlab에 대한 나의 경험은 통계와 관련이없는 수치 작업으로 제한됩니다).


Matlab의 통계 도구 상자는 매우 재미 있습니다. R과 비슷한 것이 있습니까? 예를 들어 다양한 함수 맞춤 (회귀)을 신속하게 시도 할 수 있습니까?
Alex R.

6

또한 10 년 이상 열성적인 Matlab 사용자였습니다. 그 몇 년 동안 나는 내가 일을 위해 만든 도구 상자를 넘어서 일할 이유가 없었습니다. 툴박스를 위해 많은 기능이 만들어졌지만, 빠른 턴어라운드 분석을위한 알고리즘을 만들어야했습니다. 이 알고리즘은 종종 행렬 수학을 사용하기 때문에 Matlab은 제 직업에 이상적인 후보였습니다. Matlab 툴박스 코드 외에도 언어 간의 상호 운용성이 있었기 때문에 우리 그룹의 다른 사람들도 Java에서 광범위하게 작업했습니다. 몇 년 동안 나는 Matlab에 완전히 만족했지만 약 3 년 전에 Matlab에서 느린 전환을 시작하기로 결정했고 지금은 약 1 년 안에 열지 않았다고 생각했습니다. 나의 이사 이유는 다음과 같습니다.

  • 나는 온라인 및 오프라인 컴퓨팅 시스템과 협력하고 라이센스 시스템은 항상 골치 거리였다. Matlab이 가장 필요할 때 라이센스가 만료되거나 갑자기 문제가 발생하는 것처럼 보였습니다. 이것은 항상 두통이었습니다. 또한 코드를 공유해야하는데 상대방에게 동일한 도구 상자에 대한 라이센스가 없으면 문제가 발생했습니다. 무료가 아닙니다
  • 프레젠테이션을 만들어야하는 경우가 종종 있습니다. 매트랩 알고리즘 설계를위한 매우 강력하게하는 수치를 생성하지만,이 프리젠 테이션에 삽입 할 수 있도록 그림 저장하기위한 다양한 도구를 제공합니다에도 불구 하고 보기 좋은를 간단한 일이 아니다. 가비지를 모두 제거하고 글꼴을 수정하고 줄을 정리하기 위해 종종 EPS 파일을 Adobe Illustrator에 삽입해야했습니다. 파일 교환에 도움이되는 몇 가지 도구가 있습니다 (export_fig.m).
  • 나는 종종 다른 사람들로부터 Matlab 코드를 얻습니다. 이런 일이 발생하면 API가 내 데이터와 호환되지 않고 코드가 이해되지 않고 느리며 필요한 것을 출력하지 않습니다. Matlab에서 개발하는 사람들은 기본적으로 소프트웨어 엔지니어가 아니며 Matlab은 어떠한 유형의 설계 원칙도 권장하지 않습니다.
  • 저는 파워 유저입니다. 나는 터미널을 좋아한다. 나는 GUI가 싫어. 그리고 그들이 "창"스타일 리본을 추가했을 때 나는 그것을 더 싫어했습니다. 기본적으로 GUI에 대한 조정과 끔찍한 메모리 관리는 마지막 버튼을 밀고 나가기로 결정했습니다. -nodesktop옵션을 사용하는 것이 대부분은 좋지만 문제가 있습니다.
  • 기능 설계 (OO를 사용하거나 기능 설계)에 대한 많은 가능성이 있지만 옳다고 느끼는 사람 거의 없습니다 . Matlab에서 좋은 기능을 디자인함으로써 만족을 얻지 못합니다
  • 커뮤니티는 크지 만 공유하고 좋은 코드를 찾기가 쉽지 않습니다. 파일 교환은 그리 좋지 않습니다.

이것은 Matlab에 대한 나의 많은 그립 중 일부에 지나지 않습니다. 그것은 하나의 빛나는 속성입니다 : 쉽고, 코드를 작성하는 것은 쉽고, 추악하지 않습니다. 나는 그것을 떠났고, 나의 탐구는 Clojure-> JavaScript-> Python <-> Julia; 그래, 난 여기 저기 왔어

  • Clojure : 아름다운 기능적 언어. Clojure를 사용하는 이유는 Java를 스크립팅하는 능력이었습니다. 우리의 "큰"코드베이스는 Java로되어 있기 때문에이 점이 의미가 있습니다. 당시에는 많은 과학적 처리가 가능하지 않았으며 시각화도 많지 않았습니다. 그러나 나는 이것이 바뀌고 있다고 생각합니다.
  • 자바 스크립트 : http://julialang.org/ 에서 벤치 마크를 본 후 D3 의 시각화 기능에 확실히 관심이 있으므로 JavaScript를 사용하기로 결정했습니다. JavaScript는 놀랍게도 매우 빠릅니다. 그러나 정말로 자신을 미워하고 싶다면 JavaScript를 배우십시오.
  • 파이썬 : 파이썬에는 놀라운 커뮤니티가 있으며 많은 훌륭한 프로젝트가 진행되고 있습니다. IPython Notebook은 여러 가지 이유로 놀랍습니다 (그중 하나는 파워 포인트로 그림을 복사하거나 붙여 넣습니다). NumPy / SciPy / Scikit-Learn / Pandas와 같은 프로젝트는 실제로 Python을 재미 있고 사용하기 쉽게 만들었습니다. 여러 코어 또는 클러스터에서 사용하기가 매우 쉽습니다. 스위치가 정말 기뻤습니다.
  • Julia : Julia는 훌륭합니다. 특히 Matlab 사용자의 경우. 아직 초기 단계에 있기 때문에 많은 변화가 일어나고 있습니다. 파이썬의 주요 단점 중 하나는 Matlab의 모든 내장 기능이 없다는 것입니다. 물론 NumPy / SciPy는 이러한 기능을 제공하지만 기본 제공 기능은 아니며 순수 Python 객체인지 numpy 객체인지를 결정해야합니다. Julia는 기본적으로 Python이 Matlab에서 원하는 모든 것을 갖추고 있습니다. 기다릴 것이지만 이것은 향후 Matlab 사용자에게 가장 적합한 옵션입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.