핵심 데이터 분석 옵션


18

저는 5 년 가까이 SAS를 전문적으로 사용해 왔습니다. 랩톱에 설치했으며 1,000-2,000 개의 변수와 수십만 개의 관측치로 데이터 세트를 자주 분석해야합니다.

비슷한 크기의 데이터 세트에서 분석을 수행 할 수있는 SAS의 대안을 찾고있었습니다. 이런 상황에서 다른 사람들이 무엇을 사용하는지 궁금합니다. 이것은 오늘날 사용되는 방식에서 "빅 데이터"가 아닙니다. 또한 내 데이터 세트가 메모리에 들어갈만큼 작지 않습니다. 하드 드라이브에 저장된 데이터에 알고리즘을 적용 할 수있는 솔루션이 필요합니다. 이것들은 내가 쓸모없는 것으로 조사한 것들입니다.

  1. R-BigMemory는 메모리에서 저장된 매트릭스를 작성할 수 있지만 요소는 동일한 모드 여야합니다. 나는 문자와 숫자로 거의 50/50 분할 된 데이터로 작업합니다. FF 패키지는 필요한 것에 더 가까워 지지만 어떤 절차가 호환되는지 이해하지 못합니다. 지원이 다소 제한적이라고 생각합니다.
  2. 팬더-R에 대한 Pythonic 대안에 매우 흥분했지만 모든 데이터를 메모리에 보관해야합니다.
  3. 혁명 R-이것은 약간의 약속을 보여줍니다. 가정용 컴퓨터에 사본이 있으며 (카글에 가입하면 무료 임) 아직 SAS의 대안으로 테스트하지 않았습니다. SAS 대안으로 Revolution R에 대한 의견은 대단히 높이 평가됩니다.

감사

업데이트 1

사람들이 성공적으로 사용한 실제적이고 실용적인 솔루션을 찾고 있다고 덧붙여 편집. 대부분의 경우 SAS를 사용하면 메모리 제약에 대해 1 비트 걱정할 필요없이 큰 파일을 처리 할 수 ​​있습니다. 그러나 SAS는 구현되어 메모리 관리를 사용자에게 투명하게 만드는 방법을 알아 냈습니다. 그러나 SAS를 제 업무에 사용했던 것은 마음이 무겁습니다. 필자는 데이터의 위치에 대해 너무 열심히 생각할 필요없이 "대형"데이터를 처리 할 수있는 FOSS 대안을 좋아할 것입니다. 특정 시간 (메모리 또는 디스크).

내가 찾은 가장 가까운 것은 R의 FF 패키지와 Blaze 라는 Python의 지평선에있는 것입니다 . 그러나 이러한 문제는 수년 동안 존재 해 왔기 때문에 분석가는 그 동안 무엇을하고 있습니까? 메모리 제한과 동일한 문제를 어떻게 처리합니까? 제공되는 솔루션의 대부분은 다음과 같습니다.

  • 더 많은 RAM 확보-이것은 좋은 해결책이 아닙니다. RAM을 초과 할 수 있지만 여전히 하드 드라이브에 적합한 데이터 세트를 쉽게 찾을 수 있습니다. 또한 작업 흐름은 탐색 적 데이터 분석 중에 생성 된 모든 구조를 수용해야합니다.
  • 데이터 하위 집합-탐색에 적합하지만 결과 및보고를 마무리하는 데는 적합하지 않습니다. 결국, 서브셋에서 개발 된 프로세스는 전체 데이터 세트 (내 경우에는 어쨌든)에 적용되어야합니다.
  • 데이터 청크-실제로이 워크 플로를 구현하는 사람들로부터 더 많은 정보를 얻고 싶습니다. 어떻게 되나요? 어떤 도구로? 사용자에게 투명한 방식으로 수행 할 수 있습니까? (즉, 일부 온 디스크 데이터 구조를 작성하고 프레임 워크는 후드 아래의 청크를 처리합니다).

1
64 비트 시스템에서 최신 버전의 Stata는이 크기의 데이터 세트에 문제가 없지만 (5GB는 RAM에 쉽게 맞기 때문에) SAS의 상용 대안에 관심이 있거나 FOSS 만보고 있습니까?
whuber

1
예, FOSS 솔루션은 내가 찾고있는 것입니다. 데이터 집합이 5GB의 RAM에 들어갈 수 있지만 탐색 적 데이터 분석 중에 생성되는 작업 및 추가 데이터 구조도 처리해야한다는 데 동의합니다. 빈약 한 4GB RAM이 장착 된 상용 노트북과 함께 사용하면 OS 및 메모리 오류에 의해 소비되는 오버 헤드가 매우 빠르게 나타납니다.
Zelazny7

2
@ Zelazny7 : 요즘 랩톱에 다른 4Gigs를 추가하는 것은 꽤 저렴합니다. :)
curious_cat 5

3
다른 옵션은 데이터를 데이터베이스 (SQL 또는 기타)에 저장하는 것입니다. 종종 분석에는 메모리에 맞는 데이터의 하위 집합 (변수 1:10이지만 1 : 1000은 아님) 만 필요합니다. 부분 집합이 여전히 메모리보다 큰 경우, 분석은 청크로 수행 될 수 있습니다 (한 번에 한 번에 데이터베이스 1000 개의 관측치에서 데이터를로드하고 결과를 적절하게 조합합니다).
jthetzel

1
SO에 대한 빅 데이터 질문 과 CRAN의 고성능 컴퓨팅 작업보기를 검토하여 추가 관련 토론이 있는지 확인하십시오 (아직없는 경우).
jthetzel

답변:


3

500,000 레코드 x 2,000 변수를 최대로 사용하는 경우 랩톱의 RAM에 조금 더 많은 돈을 소비하고 완료 할 것입니다. 16GB가 있다면 설명하려는 데이터 세트를 R로 직접 읽을 수 있습니다. 그리고 그 시점에서, 당신은 훨씬 더 빨리 그리고 훨씬 더 빨리 할 수있을 것입니다. 그러나 당신은 그것이 옵션이 아니라고 말합니다 :

R 용 SQL 기반 패키지를 살펴보십시오.이를 통해 외부 데이터베이스에 연결하고 SQL을 통해 해당 테이블에 액세스 할 수 있습니다. SQL은 매우 보편적이므로 (R은 오픈 소스이므로) 작업을 변경하거나 SAS에 대한 액세스 권한을 잃어도 코드가 손실되지 않습니다. 설정하는 가장 쉬운 외부 데이터베이스가 RSQLite있지만, 지금까지 가장 빠른입니다 MonetDB.R( 속도 테스트 )

아마도 당신의 언급 된 문제에 대한 몇 가지 좋은 해결책이있을 것입니다. 제 생각에는 거의 모든 것이 R과 관련이 있습니다.)


2

어쩌면 그것은 당신이 목표로하는 응용 프로그램 / 문제와 그 특성에 관한 것이 아니라 사용중인 알고리즘과 변형에 관한 것입니다. 보다 구체적으로, 빅 데이터를 처리하기 위해 SVM과 같은 널리 사용되는 알고리즘의 확률 적 경사 하강에 기반한 많은 변형이 처리 할 수있는 것으로 나타났습니다.

Scikit은이 알고리즘 중 일부 (SVM, kNN, kmeans 등)를 지원합니다. scikit 이 당신에게 전혀 의미가 없다면 이 멋진 그래프 가 신속하게 알아내는 데 도움이 될 것 같습니다 .

희망이 도움이

참고 : 다음은 zelazny7 의 의견에 대한 답변입니다.

이제 이해 했어 당신이 찾고있는 것은 팬더 입니다. 회담 섹션을 살펴보십시오. 팬더의 워크 플로와 팬더를 간단히 비교 한 프레젠테이션이 있습니다. Panda를 사용하면 다양한 형식으로 데이터를 가져오고 HDF5 테이블 통합을 통해 bgu 파일을 처리 할 수 ​​있습니다 . 또한 Scikit과 인터페이스 할 수 있습니다.


감사! 알고리즘은 확실히 작동 on-line하거나 데이터를 메모리로 읽고 디스크에 다시 기록해야합니다. Scikit은 훌륭하고 실제로는 내가 좋아하는 것이지만 이러한 알고리즘을 적용하기 전에 필요한 탐색, 뭉개 기 및 데이터 준비 단계에 어떤 도구 / 작업 흐름 / 접근이 존재합니까? 이러한 언어는 이러한 단계를 처리 할 수 ​​있지만 실제로 메모리 부족 문제를 해결해야하는 사람으로부터 실제 예를 찾고 있습니다.
Zelazny7

나는 당신이 찾고있는 것 (또는 그렇게 믿는 것)으로 답장을 편집했습니다
jpmuc

2

이미 SAS에 익숙해 보였으며 데이터 세트가 RAM에 들어갈만큼 작지만 랩톱에 충분한 RAM을 넣을 수는 없습니다. SAS에 관심이 없다면 RAM이 많은 컴퓨터에서 원격으로 실행되는 SAS에 연결하는 것은 어떻습니까? 어떻게 작동하는지 모르겠지만이 링크를 사용하면 시작할 수 있습니다.

Pandas 또는 R을 사용해야하는 다른 큰 이유가 있지만 메모리 제한에 대해 걱정할 필요는 없다고 생각합니다. 랩톱에 메모리가 충분하지 않으면 Python 또는 R 인스턴스를 다른 곳에서 실행하고 SSH, iPython Notebook 또는 RStudio에 연결하십시오.


1

Graphchi 는 우수하며 거대한 데이터 세트를 처리 할 수 ​​있습니다. 작업하기에는 약간의 어려움이 있지만 그래픽 및 비 그래픽 데이터를 처리 할 수 ​​있습니다.


1

나는 최근에 SFramesGraphLab Create를 발견했습니다.. Pypi 사이트에서 다음과 같이 원하는 기능을 제공하는 Python 용 라이브러리입니다. "SFrame은 확장 가능한 코어 외부 데이터 프레임으로, RAM보다 큰 데이터 세트로 작업 할 수 있습니다. 시스템에서. " 따라서 Pandas의 데이터 조작 기능 및 API로 생각하지만 모든 데이터를 메모리에 넣지 않습니다. 내가 아는 한 SFrame은 무료이며 오픈 소스입니다. 반면 GraphLab은 SFrame 기능을 기반으로 SFrame에 저장된 데이터에 대해 설명적이고 예측적인 (머신 러닝) 분석을 수행하는 알고리즘을 제공합니다. GraphLab Create create는 무료 / 오픈 소스가 아니지만 무료 데모 라이센스가 있습니다. 어쨌든 알고리즘이 얼마나 정교한 지에 따라 SFrame으로 충분할 수 있습니다.


-1

Fortran과 같이 해석되지 않은 "실제"언어를 고려 했습니까?

지금까지의 제안은 공급 업체에 따라 다르거 나 해석되는 것처럼 보입니다. 해석 된 방법은 메모리 사용량이 많은 응용 프로그램에서 악명이 높습니다. MatLab은 "C"보다 훨씬 높은 수준의 언어 일 수 있지만 C의 메모리 처리 최적화를 통해 수백만 배 더 큰 100 배 빠른 데이터 세트를 처리 할 수 ​​있습니다.

"R"과 "Python"은 모두 훌륭하고 기술적으로 풍부하며 많이 사용되는 언어입니다. 그들은 또한 해석됩니다.

R-on-Hadoop 인스턴스 중 하나를 고려할 수 있습니다. (Rhipe, 기타) R (높은 수준, 프로그래밍하기 쉬운)을 MapReduce / Hadoop 명령어로 변환 할 수 있다는 장점이 있습니다. 하둡은 흥미로운 빈약 한 멀티 프로세싱 클러스터를 만들 수 있습니다.

http://www.datadr.org/ <-(Rhipe 링크)

포트란은 수십 년 동안 개발되어 왔습니다. 매우 효율적인 메모리 처리 및 컴파일 기능이 있습니다. 또한 높은 수준의 라이브러리가 있으므로 매우 기술적으로 정교한 작업을 간단하게 수행 할 수 있습니다. MatLab에서 장난감 CFD를 수행 할 수도 있지만 현실적이고 자체 코딩 된 작업에는 Fortran을 "큰 철"처리에 사용하고 MatLab 또는 R과 같은 데이터를 제시 / 요약하는 데 사용합니다. 아무도 "엔진"이 컴파일되는 대신 해석되는 상용 CFD 소프트웨어를 만들지 않습니다. 몇몇 벤더들은 그들의 돈 메이커 CFD를 C 또는 Fortran으로 코딩했습니다. SAS는 원래 C로 작성되었습니다 ( link ).

Fortran과 Rhipe에 액세스 할 수 있습니다. MatLab은 비용이 들며, 내 직업이 비용을 지불하지 않으면 R 또는 Python을 사용하고 있습니다.

업데이트 :
내 요점은 "컴파일"되었습니다. 파이썬에는 문자 그대로 동일한 (기본) 코드를 ~ 1000x 더 빠르게 실행할 수있는 cython이 있습니다. 즉, ~ 1000 배 더 큰 데이터를 보유하고 거의 동시에 처리 할 수 ​​있습니다. Cython을 깨끗하게 작동시키는 것은 어려운 일이지만 " Sage " 와 같은 도구는 이를 잘 마무리합니다. Rcpp 는 비슷한 것으로 추정되지만, 그것이 잘 개발되었다는 것을 개인적으로 모른다.

당신이 그것에 대해 생각한다면, 과학적 컴퓨팅, 심지어 해석 된 언어로 실행되는 거의 모든 것의 기본은 Fortran으로 컴파일되거나 C로 컴파일됩니다. BLAS는 BLAS입니다. EDA 를 할 때마다 코드를 다시 발명하지는 않습니다 . 귀하의 해석 언어는 매우 비효율적이지만 실행시 해당 라이브러리를 호출합니다.

제쳐두고, 당신은 JMP를 볼 수 있습니다 . 인터페이스를 사용하기 매우 쉽고 시각적 탐색 데이터 분석 ( EDA )에 탁월합니다 .


2
포트란과 같은 컴파일 된 언어로 데이터를 탐색하는 방법은 무엇입니까? 저에게 통역 언어의 매력은 풍부한 내부 관찰을 제공하고 내가 다루고있는 것을 빠르게 배우고 익숙하지 않은 새로운 라이브러리 기능을 사용할 수있는 REPL입니다.
Zelazny7

1
Rcpp는 매우 잘 개발되어 있지만 (CRAN에서 리버스 사용법을 확인하십시오) 실제로는 cython과 비교할 수 없습니다. 정의 된 함수가 있다면 R 입력을 가져 와서 Cpp로 처리하고 데이터를 R로 반환 할 수 있습니다.하지만 곧 R 스크립트 전체를 Cpp로 컴파일하지는 않습니다.
russellpierce
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.