2009-08-17 2 views
2

문제의 일반적인 아이디어는 데이터가

"Entity" "parent entity" "value" 
A001  B001  .10 
A001  B002  .15 
A001  B003  .2 
A001  B004  .3 
A002  B002  .34 
A002  B003  .13 
.. 
.. 
.. 
A002  B111  .56 

실체 수있는 값의 그래프가 테이블에 세 개의 열 아래에 배치된다 관여 상위 엔티티에서 엔티티로 향하는 에지의 가중치로 표시됩니다. 특정 엔티티의 상위 엔티티의 몇 가지 하위 집합이 .5 (말)보다 큰지 계산해야합니다. 더 많은 것을 계산하려면 (나중에 부분은 계산하기가 쉽지 않음)

요점은 데이터가 너무 큽니다 (Excel 파일은 데이터가 손실 됨 :()입니다.) 어떤 언어 나 도구를 사용할 수 있습니까? 어떤 사람들은 저에게 SAS 나 STATA를 제안했습니다. . 사전

+0

얼마나 많은 데이터 포인트에 대해 이야기하고 있습니까, 오래된 Excel은 64000 행을 포기합니다. –

+0

데이터가 엑셀 한도보다 훨씬 큽니다. 현재 그것의 STATA 파일. –

+0

저는 기술 논문의 조직을 위해 일하고 있으며 소스웨어의 라이센스는 문제가되지 않습니다. –

답변

1

SAS에서

덕분에 신속하게 큰 데이터 세트를 처리 (각 레코드 변수의 수백을 가지고있는 기록의 수백만)를위한 우수한 언어입니다. 그것은 학계에서 많은 산업 분야에서 사용된다 (우리가 사용 보증 청구 분석을 위해, 많은 임상 시험은 통계 분석을 위해 &보고를 위해 사용합니다.)

그러나 몇 가지주의 사항이 있습니다. 언어에 여러 가지 결함이있어 모듈화 된 재사용 가능한 코드를 작성하기가 어렵습니다 (매우 풍부한 매크로 기능이 있지만 버전 9.2까지는 사용자 정의 함수가 없음). 아마도 SAS 라이센스가 매우 비쌉니다. 따라서 한 개인이 자신의 실험을 위해 라이선스를 구입하는 것은 실용적이지는 않지만 라이선스 가격이 대기업에게 선입견이 될 수는 없습니다. SAS는 학습용 버전을 판매하고 있으며, 가격은 저렴합니다.

는 SAS 학습에 관심이 있다면, 여기에 몇 가지 훌륭한 자원 :

내 지역에는 MWSUG (중서부 SAS 사용자 그룹) 및 MISUG (미시간 SAS 사용자 그룹) 등 많은 정보를 얻을 수있는 지역 및 지역 SAS 사용자 그룹이 있습니다.

2

당신이 참조하는 테이블이 실제로 파일에 있고 파일이 Excel에서 처리하기에는 너무 크기 때문입니다. 내가 아는 언어를 사용하는 것이 좋습니다. 아는 사람들 중에서 다음 특성을 가진 사람을 선택하십시오 :

- 한 줄씩 파일을 읽을 수 있습니다.

- 메모리에서 사용하려는 유형의 데이터 구조를 지원합니다.

- 좋은 수학 기능을 갖추고 있습니다.

0

Perl은 시작하기에 좋은 장소이며, 파일 입력 및 문자열 구문 분석을 처리하는 데 매우 효과적입니다. 그런 다음 전체 세트를 메모리 또는 하위 세트 만 보유 할 수 있습니다.

+0

이 파일의 크기에 따라 메모리에 부품을 보관해야합니다. –

3

SAS를 고려한다면 데이터 마이닝에 사용되는 언어/환경이 무료 인 R을 살펴볼 수 있습니다.

+0

R은 대용량 데이터 집합을 정상적으로 처리하지 않습니다. 데이터 파일이 Excel의 한계보다 커질 때까지 자르기를하지 않는 메모리 조각화 문제가 있습니다. – Karl

4

SQL에서이를 수행 할 수 있습니다. 데스크톱을위한 두 가지 옵션은 MS Access 또는 OpenOffice Database입니다 (SQL 서버를 설치하지 않고). 둘 다 CSV 파일을 데이터베이스로 읽을 수 있습니다.

거기에 SQL 쿼리를 실행할 수 있습니다. 구문은 조금 이상한하지만 당신은 시작해야

select ParentEntity, sum(Value) 
from Data 
where sum(Value) > .5 
group by ParentEntity 

Data 당신이 데이터 EntityValueData 테이블의 열의 이름을로드하는 테이블의 이름입니다.

+0

적어도 간단한 SQL 문은 작동하지 않습니다. (문제는 carefuly를 읽으십시오) 모든 하위 집합의 합계를 찾고 집합의 요소의 합계를 확인해야합니다 .5. 감사합니다 –

+0

당신은 SQL에서 그룹화 및 합계를 할 수 있습니다. 내 편집을 참조하십시오. 나는 실제로 그것을 시도하지는 않았지만 그것은 당신을 시작해야합니다. –

1

실제로 언어에 익숙해지고 운영 체제 전용 호출을 사용하는 것을 신경 쓰지 않는다면 메모리 매핑 파일을 사용하는 C는 매우 빠릅니다.

먼저 텍스트 데이터를 메모리 맵 파일로 변환하는 변환기를 작성한 다음 파일을 메모리로 매핑하고 데이터를 스캔하는 두 번째 프로그램을 작성해야합니다.

0

SQL은 좋은 옵션입니다. 데이터베이스 서버는 방대한 양의 데이터를 관리하도록 설계되었으며 성능을 얻기 위해 컴퓨터에서 사용 가능한 모든 자원을 효율적으로 사용하도록 최적화되어 있습니다.

특히 Oracle 10은 다중 프로세서 시스템에 최적화되어 있으므로 가능하면 자동으로 요청을 분할합니다 (올바른 구성으로 즐겨 찾는 검색 엔진에서 "Oracle 요청 병렬화"를 검색하십시오).

이 솔루션은 훌륭한 데이터베이스 서버가 이미있는 대기업에있는 경우 특히 효율적입니다.

1

나는 이것을하는 것을 싫어하지만 단순히 C를 권하고 싶다. 실제로 필요한 것은 수학의 언어로 문제를 파악한 다음 C로 구현하는 것이다. 그래프를 메모리에 저장하는 방법은 연구 분야. 그래프가 밀집되어 있거나 (높게 연결된 경우) 인접 그래프를 사용할 수 있습니다. 그렇지 않은 경우 인접 목록을 사용할 수 있습니다. 각 하위 트리 검색은 멋진 코드 일 것이므로 힘든 문제 일 수 있습니다.

다른 사람들이 말했듯이 SQL은이를 수행 할 수 있으며 코드도 게시되었습니다. 텍스트 파일의 데이터를 SQL 데이터베이스에 저장하는 데 도움이 필요하면 다른 질문입니다. 대량 데이터 삽입을 찾습니다.

SQL의 문제점은 매우 간결한 언어이지만 데이터베이스 엔진이 구문 분석하고 기본 코드가 최상의 방법이 아닐 수 있다는 것입니다. 대부분의 데이터 액세스 루틴의 경우, SQL 데이터베이스 엔진은 놀라운 코드 효율성을 보여줄 것입니다. 그러나 그래프와 이와 같은 매우 큰 계산을 위해 저는 그것을 신뢰하지 않을 것입니다. 그것이 당신이 C에가는 이유입니다. 당신 자신을 그렇게 만드는 일부 하위 언어가 가장 효율적입니다.

대량의 데이터로 인해 효율적인 코드가 필요하다고 가정합니다.

이 모든 것은 데이터 세트가 메모리에 적합하다고 가정합니다. 그래프가 워크 스테이션의 RAM보다 크다면 (가능한 경우 24GB로 설정하십시오), 데이터가 적당하도록 파티션을 나누는 방법을 찾아야합니다.

1

내 경험상 Mathematica는 꽤 좋습니다 ...

0

적어도 간단한 SQL 문을 실 거예요 일 (읽어 보시기 바랍니다 문제는 carefuly) 나는 모든 부분 집합의 합과 세트 0.5 또는하지의 요소 체크 THT의 합계를 찾을 필요가 .

//input the data 
clear 
input str10 entity str10 parent_entity value 
A001 B001 .10 
A001 B002 .15 
A001 B003 .2 
A001 B004 .3 
A002 B002 .34 
A002 B003 .13 
A002 B111 .56 
end 

//create a var. for sum of all subsets 
bysort entity : egen sum_subset = total(value) 

//flag the sets that sum > .5 
bysort entity : gen indicator = 1 if sum_subset>.5 
recode ind (.=0) 
lab def yn 1 "YES", modify 
lab def yn 0 "No", modify 
lab val indicator yn 
li *, clean 
: - 감사 데이터가 STATA에 있기 때문에 8월 18일 ASIN 7시 36분

에서, 여기 당신이 STATA에 요청합니다 (DO-파일 편집기에이 코드를 붙여 넣기) 무엇을 할 수있는 코드

Stata를 사용할 때 데이터는 메모리에 저장되므로 시스템의 메모리 리소스에 의해서만 제한됩니다. .dta 파일을 열려고 시도하면 &에 'op. sys가 mem '을 제공하기를 거부하면, -set mem- 명령을 사용하여 메모리를 증가시켜 데이터를 실행해야합니다. 궁극적으로

, StefanWoe의 질문 :

당신이 우리에게 데이터 세트가 얼마나 큰의 아이디어를 줄 AY? 수백만? 의 10 억 개가 기록됩니까? 또한 중요한 질문 : 한 번만해야합니까? 또는 앞으로 매일 을 보내시겠습니까? 또는 각 시간에 번 번? - StefanWoe 팔월 13시 15분

18 이 정말 어렵지 않을 것 ... 심지어는 데이터의 엄청난 양에,이 사용 STATA 자동화 사용할 수있는 소프트웨어보다 질문이 더 많은 드라이브하지만 당신 자원 제한을 신속하게 최대화 할 수 있습니다.

0

Java의 BigInteger 라이브러리와 Hadoop과 같은 기능을 사용할 것입니다.