https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
data.table 벤치 마크는 2014 년 내가 들어 본 곳 이후 업데이트되지 않은 Pandas
지금보다 더 빨리이다 data.table
. 이것이 사실입니까? 누구든지 벤치 마크를 했습니까? 나는 전에 파이썬을 사용한 적이 없지만 pandas
이길 수 있다면 전환을 고려할 것 data.table
입니까?
https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
data.table 벤치 마크는 2014 년 내가 들어 본 곳 이후 업데이트되지 않은 Pandas
지금보다 더 빨리이다 data.table
. 이것이 사실입니까? 누구든지 벤치 마크를 했습니까? 나는 전에 파이썬을 사용한 적이 없지만 pandas
이길 수 있다면 전환을 고려할 것 data.table
입니까?
답변:
누구든지 벤치 마크를 했습니까?
예, 귀하의 질문에 링크 한 벤치 마크는 최근 버전의 data.table 및 pandas에 대해 최근 업데이트되었습니다. 또한 다른 소프트웨어가 추가되었습니다. 업데이트 된 벤치 마크는 https://h2oai.github.io/db-benchmark 에서 찾을 수 있습니다.
불행히도 125GB 메모리 시스템 (원래 시스템은 244GB가 아님)에 예약되어 있습니다. 결과적으로 팬더와 dask는 groupby
데이터를 읽을 때 메모리가 부족하여 1e9 행 (50GB csv) 데이터를 시도 할 수 없습니다 . 따라서 팬더와 data.table의 경우 1e8 행 (5GB) 데이터를 봐야합니다.
요청한 콘텐츠를 연결하기 위해 해당 솔루션에 대한 최신 타이밍을 붙여 넣습니다.
그 타이밍은 오래 참고하시기 바랍니다
방문 https://h2oai.github.io/db-benchmark을 업데이트 타이밍에 대한
| in_rows|question | data.table| pandas|
|-------:|:---------------------|----------:|------:|
| 1e+07|sum v1 by id1 | 0.140| 0.414|
| 1e+07|sum v1 by id1:id2 | 0.411| 1.171|
| 1e+07|sum v1 mean v3 by id3 | 0.574| 1.327|
| 1e+07|mean v1:v3 by id4 | 0.252| 0.189|
| 1e+07|sum v1:v3 by id6 | 0.595| 0.893|
| 1e+08|sum v1 by id1 | 1.551| 4.091|
| 1e+08|sum v1 by id1:id2 | 4.200| 11.557|
| 1e+08|sum v1 mean v3 by id3 | 10.634| 24.590|
| 1e+08|mean v1:v3 by id4 | 2.683| 2.133|
| 1e+08|sum v1:v3 by id6 | 6.963| 16.451|
| 1e+09|sum v1 by id1 | 15.063| NA|
| 1e+09|sum v1 by id1:id2 | 44.240| NA|
| 1e+09|sum v1 mean v3 by id3 | 157.430| NA|
| 1e+09|mean v1:v3 by id4 | 26.855| NA|
| 1e+09|sum v1:v3 by id6 | 120.376| NA|
질문 5 개 중 4 개에서 data.table이 더 빠르며 더 잘 확장되는 것을 볼 수 있습니다.
바로이 타이밍은 지금과 같다주의 , 어디서 id1
, id2
및 id3
문자 필드입니다. 이것은 곧 범주 형 완료 로 변경 될 것 입니다. 또한 가까운 미래에 타이밍에 영향을 줄 수있는 다른 요소들도 있습니다 ( 병렬 DONE 그룹화 와 같은 ). 우리는 또한 별도의 벤치 마크를 추가하려고 의 NA를 가진 데이터 및 다양한 카디널리티는 DONE .
당신이에 관심이 있다면, 그래서 다른 작업이 지속적으로 벤치마킹 프로젝트에오고있다 join
, sort
, read
등 확실히 나중에 확인합니다.
물론 프로젝트 리포지토리에 피드백을 제공 할 수 있습니다.
blocksize
in read_csv
). compute()
메모리에 전체 출력 테이블이 어셈블되는 것을 피하기 위해 호출을 피하고 디스크에 출력을 덤프하지 않습니까?
동료와 저는 팬더와 data.table의 성능 차이에 대한 예비 연구를 수행했습니다. 블로그 에서 연구 (두 부분으로 나뉘어 있음)를 찾을 수 있습니다 ( 여기에서 두 번째 부분을 찾을 수 있음 ).
우리는 팬더가 data.table을 분명히 능가하는 작업이 있지만 data.table이 훨씬 빠른 경우도 있다고 생각했습니다. 직접 확인하여 결과에 대한 의견을 알려주십시오.
편집 :
블로그를 자세히 읽고 싶지 않다면 설정 및 결과에 대한 간략한 요약입니다.
설정
우리는 비교 pandas
하고 data.table
우리가 시나리오라고합니다 (지금까지) 다음과 같은 작업에 12 개 가지 시뮬레이션 데이터 세트에.
계산은 4 개의 물리적 코어, 16GB RAM 및 SSD 하드 드라이브가 장착 된 Intel i7 2.2GHz 시스템에서 수행되었습니다. 소프트웨어 버전은 OS X 10.13.3, Python 3.6.4 및 R 3.4.2입니다. 사용 된 각 라이브러리 버전은 팬더의 경우 0.22, 데이터의 경우 1.10.4-3입니다.
간단히 말해서
data.table
열을 선택할 때 더 빠른 것 같습니다 ( pandas
평균 50 % 더 시간이 걸립니다)pandas
행 필터링 속도가 빠릅니다 (평균 50 % 정도).data.table
정렬 속도가 상당히 빠릅니다 ( pandas
때로는 100 배 느림).pandas
나는 당신을 죽이지 않기 위해 가능한 한 결과를 단순화하려고 노력했습니다. 보다 완벽한 시각화를 위해 연구를 읽으십시오. 웹 페이지에 액세스 할 수 없으면 메시지를 보내 주시면 내용을 전달하겠습니다. GitHub 에서 전체 연구를위한 코드를 찾을 수 있습니다 . 연구 개선 방법에 대한 아이디어가 있으면 이메일을 보내주십시오. GitHub에서 연락처를 찾을 수 있습니다.
사실, 데이터 세트 크기가 팬더가 충돌하는 sooooooo 크기이면 기본적으로 dask에 갇혀있어 간단한 그룹 별 합계를 수행 할 수도 없습니다. dplyr은 빠르지 않지만 엉망이되지 않습니다.
나는 현재 약간의 2G 데이터 세트를 작업 중이며 간단한 작업 print(df.groupby(['INCLEVEL1'])["r"].sum())
은 어둡습니다.
dplyr에서이 오류가 발생하지 않았습니다.
따라서 팬더가 데이터 세트를 처리 할 수 있다면 팬더를 사용합니다. 그렇지 않으면 R 데이터 테이블을 고수합니다.
그리고 예, 간단하게 dask를 팬더 데이터 프레임으로 다시 변환 할 수 df.compute()
는 있지만 꽤 오랜 시간이 걸리므로 팬더가로드되거나 데이터 테이블을 읽을 때까지 인내심을 가질 수도 있습니다.
나는 이것이 오래된 게시물이라는 것을 알고 있지만 언급 할 가치가 있다고 생각했습니다. 깃털 (R과 Python에서)을 사용하면 데이터 프레임 / 데이터 테이블에서 작업하고 깃털을 통해 결과를 공유 할 수 있습니다.