https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping
Testy danych data.table nie były aktualizowane od 2014 roku. Słyszałem, że gdzieś Pandas
jest teraz szybciej niż data.table
. Czy to prawda? Czy ktoś zrobił jakieś testy porównawcze? Nigdy wcześniej nie korzystałem z Pythona, ale rozważałbym zmianę, jeśli pandas
można pokonać data.table
?
Odpowiedzi:
Tak, test porównawczy, który podałeś w swoim pytaniu, został niedawno zaktualizowany dla najnowszej wersji data.table i pand. Dodatkowo dodano inne oprogramowanie. Zaktualizowany test porównawczy można znaleźć na stronie https://h2oai.github.io/db-benchmark
Niestety, jest on zaplanowany na urządzenie pamięci o pojemności 125 GB (nie 244 GB jako oryginalne). W rezultacie pandy i dask nie mogą wykonać próby
groupby
na danych 1e9 wierszy (50 GB csv), ponieważ zabrakło im pamięci podczas odczytu danych. Tak więc w przypadku pand vs data.table musisz spojrzeć na dane 1e8 wierszy (5 GB).Aby nie tylko połączyć treści, o które prosisz, wklejam najnowsze terminy dla tych rozwiązań.
należy pamiętać, że te czasy są nieaktualne,
odwiedź https://h2oai.github.io/db-benchmark, aby uzyskać zaktualizowane czasy
W 4 na 5 pytań tabela data jest szybsza i możemy ją lepiej skalować.
Wystarczy pamiętać, to czasy są już teraz , gdzie
id1
,id2
iid3
są pola znakowe.Zostaną one wkrótce zmienione na kategoryczneGOTOWE . Poza tym istnieją inne czynniki, które mogą wpłynąć na te terminy w najbliższej przyszłości (takie jakgrupowanie równoległeGOTOWE ). Zamierzamy również dodać osobne testy porównawcze dla danych posiadających NA iróżnychKORONALNOŚCI .Inne zadania idą do tej ciągłej projektu benchmarkingu więc jeśli jesteś zainteresowany
join
,sort
,read
a pozostałe należy sprawdzić ją później.I oczywiście zapraszamy do przesyłania opinii w repozytorium projektów!
źródło
blocksize
wread_csv
). Czy próbowałeś uniknąć wywoływaniacompute()
i zrzucania danych wyjściowych na dysk, aby uniknąć gromadzenia całej tabeli wyjściowej w pamięci?Wspólnie z kolegą przeprowadziliśmy wstępne badania różnic w wydajności między pandami a tabelą danych. Możesz znaleźć badanie (które zostało podzielone na dwie części) na naszym blogu (część druga znajdziesz tutaj ).
Doszliśmy do wniosku, że istnieją pewne zadania, w których pandy wyraźnie przewyższają tabelę danych. Ale także przypadki, w których tablica danych jest znacznie szybsza. Możesz to sprawdzić samodzielnie i dać nam znać, co myślisz o wynikach.
EDYCJA:
Jeśli nie chcesz szczegółowo czytać blogów, oto krótkie podsumowanie naszej konfiguracji i naszych ustaleń:
Ustawiać
Porównaliśmy
pandas
idata.table
na 12 różnych symulowanych zestawach danych dotyczących następujących operacji (jak dotąd), które nazwaliśmy scenariuszami.Obliczenia przeprowadzono na komputerze z procesorem Intel i7 2.2GHz z 4 rdzeniami fizycznymi, 16 GB pamięci RAM i dyskiem twardym SSD. Wersjami oprogramowania były OS X 10.13.3, Python 3.6.4 i R 3.4.2. Odpowiednie zastosowane wersje bibliotek to 0,22 dla pand i 1,10,4-3 dla tabeli danych
Wyniki w pigułce
data.table
wydaje się być szybszy przy wyborze kolumn (pandas
średnio zajmuje o 50% więcej czasu)pandas
jest szybszy w filtrowaniu wierszy (średnio około 50%)data.table
wydaje się być znacznie szybszy w sortowaniu (pandas
czasami był 100 razy wolniejszy)pandas
Pamiętaj, że starałem się maksymalnie uprościć wyniki, aby nie zanudzić cię na śmierć. Aby uzyskać pełniejszą wizualizację, przeczytaj badania. Jeśli nie możesz uzyskać dostępu do naszej strony internetowej, wyślij mi wiadomość, a ja przekażę Ci nasze treści. Możesz znaleźć kod pełnego badania na GitHub . Jeśli masz pomysły na ulepszenie naszego badania, napisz do nas e-mail. Możesz znaleźć nasze kontakty na GitHub.
źródło
Nie, w rzeczywistości, jeśli rozmiar zestawu danych jest tak duży, że pandy ulegają awarii, to po prostu utkniesz z dask, co jest do bani i nie możesz nawet zrobić prostej grupy według sumy. dplyr może nie być szybki, ale nie psuje się.
Obecnie pracuję nad jakimś małym
print(df.groupby(['INCLEVEL1'])["r"].sum())
zestawem danych 2G, a zwykła awaria dask.Ten błąd nie wystąpił w programie dplyr.
Tak więc, jeśli pandy mogą obsłużyć zestaw danych, używam pand, jeśli nie, trzymaj się tabeli danych R.
I tak, możesz przekonwertować dask z powrotem na ramkę danych pand za pomocą prostego,
df.compute()
ale zajmuje to dość dużo czasu, więc równie dobrze możesz po prostu cierpliwie czekać na załadowanie pand lub odczyt danych.źródło
Wiem, że jest to starszy post, ale pomyślałem, że warto o tym wspomnieć - użycie wtyczki (w języku R i Python) umożliwia działanie na ramkach danych / tabelach danych i dzielenie się tymi wynikami przez wtapianie.
Zobacz stronę github z piór
źródło