2011-07-28 11 views
7

내 python 환경에서 Rpy 및 Scipy 패키지가 이미 설치되어 있습니다.파이썬 : 많은 양의 데이터를 처리합니다. Scipy 또는 Rpy? 그리고 어떻게?

내가 해결하고 싶은 문제는 다음과 같습니다

1) 재무 데이터의 거대한 세트는 텍스트 파일에 저장됩니다. Excel에로드 할 수 없습니다.

2) 특정 필드를 합산하고 총계를 가져와야합니다.

3) 합계를 기준으로 상위 10 개 행을 표시해야합니다.

이 작업에 가장 적합한 패키지 (Scipy 또는 Rpy)는 무엇입니까?

그렇다면 해결책을 구현하는 데 도움이되는 몇 가지 지침 (예 : 설명서 또는 온라인 예)을 제공해 주시겠습니까?

속도가 문제 될 수 있습니다. 이상적인 scipy와 Rpy는 파일이 너무 커서 파일을 메모리에 끼울 수없는 경우에도 큰 파일을 처리 할 수 ​​있습니다.

+0

유용한 정보는 http://www.dabeaz.com/generators-uk/ – lazy1

+1

에서 찾을 수 있습니다. '거대한 세트'란 정확히 무슨 뜻입니까? – radek

답변

2

@ gsk3이 표시된대로 bigmemorybiganalyticsbigtabulate 패키지와 함께 훌륭한 패키지입니다. (더 많지만 체크 아웃 할 가치가 있습니다.) 또한 사용하기 쉽지 않지만 ff이 있습니다.

R 및 Python에 공통적 인 기능은 HDF5 (R의 ncdf4 또는 NetCDF4 패키지 참조)를 지원하므로 디스크의 대용량 데이터 세트에 매우 빠르고 쉽게 액세스 할 수 있습니다. 개인적으로는 주로 bigmemory을 사용합니다. HDF5는 Python에서 사용할 수 있고 매우 빠르므로 아마 파이썬에서 가장 좋은 방법이 될 것입니다.

5

numpy는 약간 더 쉽게 만들 수 있지만 Rpy 또는 Scipy는 필요하지 않습니다. 이 문제는 줄 단위 파서에 이상적으로 적합합니다. 파일을 열어 문자열을 행으로 읽어 들이고 행을 배열로 스캔 한 다음 (numpy.fromstring 참조) 실행중인 합계를 업데이트하고 다음 행으로 이동하십시오.

1

나는 Rpy에 대해 아무것도 모른다. SciPy는 대용량 데이터 세트를 사용하여 심각한 문제를 해결하는 데 사용되므로 문제가 발생할 수 있음을 알고 있습니다.

제퍼가 언급했듯이 둘 중 하나가 필요하지 않을 수도 있습니다. 만약 당신이 단지 몇 가지 합계를 유지해야합니다, 당신은 아마 파이썬에서 할 수 있습니다. CSV 파일 또는 다른 일반적인 파일 형식 인 경우이를 구문 분석 할 Python 모듈이 있는지 확인한 다음 적절한 값을 합친 루프를 작성하십시오.

상위 10 개 행을 얻는 방법을 모르겠습니다. 당신이 가면서 비행 중에 그들을 모을 수 있습니까, 아니면 합계를 계산 한 다음 행을 선택할 필요가 있습니까? 이들을 수집하려면 사전을 사용하여 현재 10 개의 가장 좋은 행을 추적하고 키를 사용하여 순위를 매기는 데 사용 된 메트릭을 저장하십시오 (다른 행이 그것을 대체하면 행을 쉽게 찾고 버려두기 위해)). 계산이 끝난 후 행을 찾으려면 numpy.array에 모든 데이터를 저장하거나 아니면 10 행을 꺼내기 위해 파일을 두 번째 통과시켜야합니다.

3

파이썬의 파일 I/O는 성능이 좋지 않으므로 file 모듈을 직접 사용할 수 있습니다. 대화 형 인터프리터에 help (file)을 입력하면 어떤 기능을 사용할 수 있는지 확인할 수 있습니다. 파일 작성은 핵심 언어 기능의 일부이므로 import file이 필요하지 않습니다. 같은

뭔가 :

f = open ("C:\BigScaryFinancialData.txt", "r"); 
for line in f.readlines(): 
    #line is a string type 
    #do whatever you want to do on a per-line basis here, for example: 
    print len(line) 

면책 조항 :이 파이썬 2 대답이다. 나는 이것이 파이썬 3에서 작동하는지 100 % 확신하지 못합니다.

상위 10 개 행을 표시하고 행 합계를 찾는 방법을 알아보기 위해 맡기 겠습니다. 특별한 라이브러리가 없어도 문제가되지 않아야하는 간단한 프로그램 로직으로이 작업을 수행 할 수 있습니다. 물론 행에 복잡한 형식이있어 값을 파싱하기 어려울 경우 예를 들어 re (re)과 같은 종류의 모듈을 사용할 수 있습니다 (대화 형 인터프리터에 help(re) 입력).

2

데이터가 얼마나 큽니까, PC의 메모리보다 큽니까? 메모리에로드 할 수있는 경우 numpy.loadtxt()를 사용하여 텍스트 데이터를 수십 개의 배열로로드 할 수 있습니다. 예를 들어 :

import numpy as np 
with file("data.csv", "rb") as f: 
    title = f.readline() # if your data have a title line. 
    data = np.loadtxt(f, delimiter=",") # if your data splitted by "," 
    print np.sum(data, axis=0) # sum along 0 axis to get the sum of every column