2013-01-16 1 views
3

데이터 마이닝 리서치를 수행하고 SQLite 데이터베이스, CSV 파일, 피클 파일 등에서 대용량 데이터 세트를로드하는 Python 스크립트가있는 경우가 종종 있습니다. 개발 프로세스에서 스크립트가 자주 변경되어야하고 기다리는 시간이 20 ~ 30 초입니다. 데이터로드.대용량 데이터 셋을 Python에서 빠르게로드하려면 어떻게해야합니까?

데이터 스트림을로드하는 경우 (예 : SQLite 데이터베이스) 가끔은 작동하지만 일부 상황에서는 작동하지 않습니다. 데이터 세트를 자주 방문해야하는 경우 데이터를로드하는 데 소요되는 시간을 미리 지불해야합니다.

필자의 가장 좋은 해결책은 지금까지 최종 스크립트에 만족할 때까지 데이터를 서브 샘플링하는 것입니다. 누구든지 더 나은 솔루션/설계 방법을 가지고 있습니까?

내 "이상적인"해결책은 데이터가 메모리에로드 된 상태로 유지되도록 Python 디버거 (pdb)를 사용하고 스크립트를 편집 한 다음 주어진 지점에서 다시 시작할 수 있도록하는 것입니다. 이 작업을 수행하는

+0

RAM 드라이브를 사용할 수 있습니까? (그리고 거기에있는 db 파일을 복사 할 수 있습니까?) 또는 데이터 량이 너무 많습니까? – nvlass

답변

3

한 가지 방법은 별도의 파일의 X와 Y에 로딩 및 조작 스크립트를 유지하고 당신이 X.py을 코딩 할 때 X.py

import Y 
data = Y.load() 
.... your code .... 

을 읽을 수있다, 당신은 파일에서이 부분을 생략하고 것 대화식 셸에서 수동으로 실행하십시오. 그런 다음 X.py을 수정하고 셸에서 import X을 수행하여 코드를 테스트 할 수 있습니다.

+0

감사합니다! 그러나 만약에'X.py'에'if __name ___ == '__ main':'코드가 있다면'X.py'에서'data' 변수를 어떻게 볼 수 있습니까? – williampli

+0

다른 함수를 호출하지 않는 한 변수를 볼 수 있어야합니다.이 경우 함수에 데이터를 전달할 수도 있습니다. – dfb

+0

감사합니다. 위에서 설명한 내용을 수행 한 다음'execfile ('X.py')'을 실행하면됩니다. – williampli

0

선택, 개체 - 관계 변환을 수행 한 다음 로컬 파일로 데이터를 pickle하는 스크립트를 작성하십시오. 개발 스크립트는 데이터를 언 피클 링하고 계속 진행하여 시작할 것입니다.

데이터가 실제 RAM보다 훨씬 작은 경우 두 프로세스간에 공유되는 파일을 메모리 맵핑하고 절인 된 데이터를 메모리에 쓸 수 있습니다.

관련 문제