Wes가 data.table
고유 한 문자열 ( 레벨 ) 의 수가 10,000 인 경우 알려진 문제를 발견 한 것 같습니다 .
Rprof()
통화에 소비 된 대부분의 시간을 공개 합니까 sortedmatch(levels(i[[lc]]), levels(x[[rc]])
? 이것은 실제로 조인 자체 (알고리즘)가 아니라 예비 단계입니다.
최근에는 키에 문자 열을 허용하려는 노력이있어 왔으며, R의 자체 글로벌 문자열 해시 테이블과 더 밀접하게 통합하여이 문제를 해결해야합니다. 일부 벤치 마크 결과는 이미보고 test.data.table()
되었지만 해당 코드는 아직 연결되지 않은 레벨로 대체하기 위해 연결되지 않았습니다.
팬더는 data.table
일반 정수 열 보다 빨리 병합 됩니까? 알고리즘 자체와 요인 문제를 분리하는 방법이어야합니다.
또한, data.table
이 시계열 병합 마음을. 그 두 가지 측면 : I) 다중 열 정렬 II) 빠른 (가입 승소) 등 (ID, 날짜 등의 키를 roll=TRUE
일명 마지막으로 관찰 이월).
data.table
제시된 것과 비교 한 첫 번째 내용이므로 확인하는 데 약간의 시간이 필요합니다 .
2012 년 7 월에 출시 된 data.table v1.8.0에서 업데이트
- 'factor'유형의 열에 대해 i 레벨을 x 레벨과 일치시킬 때 내부 함수 sortedmatch ()가 제거되고 chmatch ()로 대체되었습니다. 이 예비 단계는 요인 열의 수준 수가 많을 때 (예 :> 10,000) (알려진) 상당한 속도 저하를 유발했습니다. Wes McKinney (Python package Pandas의 저자)가 시연 한 것처럼 4 개의 이러한 열을 결합하는 테스트에서 악화되었습니다. 예를 들어, 60 만 개의 고유 한 백만 개의 문자열이 16에서 0.5로 줄어 듭니다.
또한 그 릴리스에서 :
문자 열은 이제 키로 허용되며 요인을 고려하는 것이 좋습니다. data.table () 및 setkey ()는 더 이상 문자를 고려하지 않습니다. 요소는 여전히 지원됩니다. FR # 1493, FR # 1224 및 (일부) FR # 951을 구현합니다.
문자 함수에 대한 새로운 함수 chmatch () 및 % chin %, 더 빠른 버전의 match () 및 % in % R의 내부 문자열 캐시가 사용됩니다 (해시 테이블이 작성되지 않음). ? chmatch의 예제에서 match ()보다 약 4 배 빠릅니다.
2013 년 9 월 현재 data.table은 CRAN에서 v1.8.10이며 v1.9.0에서 작업하고 있습니다. 뉴스 가 실시간으로 업데이트됩니다.
그러나 내가 원래 쓴 것처럼 위의 :
data.table
이 시계열 병합 마음에. 그 두 가지 측면 : I) 다중 열 정렬 II) 빠른 (가입 승소) 등 (ID, 날짜 등의 키를 roll=TRUE
일명 마지막으로 관찰 이월).
따라서 Pandas는 두 개의 문자 열을 동등하게 결합하는 것이 아마도 data.table보다 빠릅니다. 그것이 결합 된 두 개의 열을 해시하는 것처럼 들립니다. data.table은 우선 순위가 높은 조인을 염두에두고 키를 해시하지 않습니다. data.table의 "키"는 문자 그대로 정렬 순서입니다 (SQL의 클러스터형 인덱스와 유사합니다. 즉, 데이터가 RAM에서 정렬되는 방식). 예를 들어 목록에 보조 키를 추가하는 것입니다.
요약하면, 알려진 문제가 해결되었으므로 10,000 개가 넘는 고유 한 문자열을 가진이 특정 2 자 열 테스트에서 강조된 눈부신 속도 차이는 지금 나쁘지 않아야합니다.
data.table
는에서 상속 받지만data.frame
, C 코드에 의존합니다.