Nieszablonowe opcje analizy danych

18

Używam SAS profesjonalnie od prawie 5 lat. Mam go zainstalowanego na swoim laptopie i często muszę analizować zestawy danych z 1000-2 000 zmiennych i setkami tysięcy obserwacji.

Szukałem alternatyw dla SAS, które pozwalają mi przeprowadzać analizy zbiorów danych o podobnych rozmiarach. Jestem ciekawy, co inni ludzie używają w takich sytuacjach. Z pewnością nie jest to „Big Data” w sposób, w jaki jest dziś używany. Moje zestawy danych nie są też wystarczająco małe, aby pomieścić je w pamięci. Potrzebuję rozwiązania, które może zastosować algorytmy do danych przechowywanych na dysku twardym. Oto rzeczy, które zbadałem bezskutecznie:

  1. R - BigMemory może tworzyć macierze przechowywane poza pamięcią, ale elementy muszą mieć ten sam tryb. Pracuję z danymi, które są prawie w 50/50 podzielone między znak i cyfrę. Pakiet FF zbliża się do tego, czego potrzebuję, ale nie do końca rozumiem, które procedury są z nim zgodne. Myślę, że wsparcie jest nieco ograniczone.
  2. Pandy - Byłem bardzo podekscytowany pytoniczną alternatywą dla R. Jednak to też musi przechowywać wszystkie dane w pamięci.
  3. Revolution R - Ten pokazuje sporo obietnic. Mam kopię na moim komputerze domowym (bezpłatnie, jeśli zarejestrujesz się w Kaggle) i jeszcze nie przetestowałem jej jako realnej alternatywy dla SAS. Komentarze na temat Revolution R jako alternatywy SAS są bardzo mile widziane.

Dzięki

AKTUALIZACJA 1

Edycja dodająca, że ​​szukam praktycznych praktycznych rozwiązań, z których ludzie z powodzeniem korzystają. W większości przypadków SAS pozwala mi przeszukiwać duże pliki bez martwienia się o ograniczenia pamięci. Mimo że SAS został wdrożony, wymyślili, jak zarządzać pamięcią w sposób przejrzysty dla użytkownika. Ale z ciężkim sercem użyłem SAS do mojej pracy (muszę) i UWIELBIAM alternatywę FOSS, która pozwala mi pracować na „dużych” danych bez zbytniego zastanawiania się, gdzie są one umieszczone określony czas (w pamięci lub na dysku).

Najbliższe rzeczy, na które natknąłem się, to pakiet FF R i coś na horyzoncie dla Pythona o nazwie Blaze . A jednak problemy te istnieją od wielu lat, więc co robili analitycy w międzyczasie? Jak radzą sobie z tymi samymi problemami z limitami pamięci? Większość oferowanych rozwiązań to:

  • Uzyskaj więcej pamięci RAM - to nie jest dobre rozwiązanie, imo. Łatwo jest znaleźć zestaw danych, który może przekraczać pamięć RAM, ale nadal mieści się na dysku twardym. Ponadto przepływ pracy musi uwzględniać wszystkie struktury tworzone podczas analizy danych eksploracyjnych.
  • Podzbiór danych - nadaje się do eksploracji, ale nie do finalizacji wyników i raportowania. W końcu wszelkie procesy opracowane na podzbiorze będą musiały zostać zastosowane do całego zestawu danych (w moim przypadku i tak).
  • Przekrój dane - o tym chciałbym dowiedzieć się więcej od osób, które faktycznie wdrażają ten przepływ pracy. Jak to jest zrobione? Z jakich narzędzi? Czy można to zrobić w sposób przejrzysty dla użytkownika? (tzn. utwórz strukturę danych na dysku, a praca nad ramkami zajmie się fragmentami pod maską).
Zelazny7
źródło
1
Nowsze wersje Stata na komputerach 64-bitowych nie mają problemu z zestawami danych o tym rozmiarze (ponieważ 5 GB łatwo mieści się w pamięci RAM w dzisiejszych czasach), ale czy interesuje Cię komercyjna alternatywa dla SAS, a może tylko FOSS?
whuber
1
Tak, szukam rozwiązań FOSS. Zgadzam się, że zestaw danych mógłby zmieścić się w 5 gigabajtach pamięci RAM, ale musi także obsługiwać operacje i dodatkowe struktury danych tworzone podczas analizy danych eksploracyjnych. Połącz to z komercyjnymi laptopami wyposażonymi w skąpe 4 GB pamięci RAM, a koszty ogólne zużyte przez system operacyjny i błędy pamięci pojawią się dość szybko.
Zelazny7
2
@ Zelazny7: Dodanie kolejnych 4Gigs do laptopa powinno być dość tanie. :)
ciekawy kot
3
Inną opcją jest przechowywanie danych w bazie danych (SQL lub w inny sposób). Często analiza wymaga tylko podzbioru danych (zmienne 1:10, ale nie 1: 1000), które zmieszczą się w pamięci. Jeśli podzbiór jest nadal większy niż pamięć, analizę można przeprowadzić w porcjach (załaduj dane z bazy danych 1000 obserwacji na raz, odpowiednio zestawiając razem wyniki na końcu).
jthetzel
1
Pamiętaj, aby zapoznać się z Big Data pytania dotyczące SO, a także wysokiej wydajności obliczeniowej widoku zadań na CRAN dalszych powiązanych dyskusji, jeśli nie masz.
jthetzel

Odpowiedzi:

3

jeśli osiągasz maksimum przy 500 000 rekordów x 2000 zmiennych, wydałbym trochę więcej pieniędzy na RAM dla twojego laptopa i skończyłem z tym. jeśli masz 16 GB, prawdopodobnie możesz bezpośrednio odczytać opisywany zestaw danych w R. i w tym momencie będziesz mógł zrobić znacznie więcej - i to bardzo szybko… ale mówisz, że to nie jest opcja, więc:

spójrz na pakiety oparte na SQL dla R. Te pozwalają ci połączyć się z zewnętrznymi bazami danych i uzyskać dostęp do tych tabel poprzez SQL. ponieważ SQL jest dość uniwersalny (a ponieważ R jest oprogramowaniem typu open source), twój kod nie zostanie utracony, jeśli zmienisz zadania lub utracisz dostęp do SAS. najłatwiejsza do skonfigurowania zewnętrzna baza danych jest, RSQLiteale zdecydowanie najszybsza MonetDB.R( testy prędkości )

prawdopodobnie istnieje kilka dobrych rozwiązań twojego stwierdzonego problemu, domyślam się, że prawie wszystkie dotyczą R;)

Anthony Damico
źródło
2

Być może chodzi nie tyle o aplikacje / problemy, do których dążysz i ich cechy, ale o algorytmy i warianty, których używasz. Mówiąc dokładniej, w celu obsługi dużych zbiorów danych pojawiło się wiele wariantów opartych na stochastycznym spadku gradientowym popularnych algorytmów, takich jak SVM, które są w stanie sobie z tym poradzić.

Scikit oferuje obsługę niektórych z tych algorytmów (SVM, kNN, kmeans, ...). Myślę, że ten ładny wykres może pomóc ci szybko dowiedzieć się, czy scikit ma dla ciebie sens.

Mam nadzieję, że to pomaga

UWAGA: poniżej znajduje się odpowiedź na komentarz zelazny7

Teraz cię zrozumiałem. To, czego szukasz, to pandy . Spójrz na sekcję rozmów. Jest prezentacja porównująca przebieg pracy Pandy i jej przebieg. Panda pozwala importować dane w różnych formatach i obsługiwać pliki bgu poprzez integrację tabel HDF5 . Poza tym możesz interfejs Scikit.

jpmuc
źródło
Dzięki! Algorytmy na pewno musiałyby działać on-linelub na fragmentach danych wczytywanych do pamięci i zapisywanych z powrotem na dysk. Scikit jest świetny i właśnie tego chciałbym użyć, ale jakie narzędzia / przepływy pracy / podejścia istnieją dla bardzo niezbędnych kroków eksploracji, mungowania i przygotowania danych przed zastosowaniem tych algos? Te języki radzą sobie z tymi krokami, ale naprawdę szukam rzeczywistego przykładu od kogoś, kto musi poradzić sobie z tymi problemami z braku pamięci.
Zelazny7
Zredagowałem moją odpowiedź tym, czego szukasz (a
przynajmniej
2

Już wydajesz się komfortowo z SAS, a twoje zestawy danych są wystarczająco małe, aby zmieścić się w pamięci RAM, ale być może nie możesz zmieścić wystarczającej ilości pamięci RAM w swoim laptopie. Jeśli nie masz nic przeciwko trzymaniu się SAS, może po prostu połączysz się z SAS działającym zdalnie na komputerze z dużą ilością pamięci RAM? Nie mam pojęcia, jak to działa, ale te linki mogą pomóc Ci zacząć.

Są inne świetne powody, aby używać Pand lub R, ale nie sądzę, że musisz się martwić limitami pamięci. Jeśli nie możesz zmieścić wystarczającej ilości pamięci na swoim laptopie, uruchom instancję Python lub R w innym miejscu i połącz się z SSH, iPython Notebook lub RStudio.

Thomas Levine
źródło
1

Graphchi jest doskonały i może obsługiwać ogromne zbiory danych. To trochę kłopotliwe w pracy, ale może obsługiwać dane graficzne i nie graficzne.

Zach
źródło
1

Ostatnio natknąłem się na SFrames i GraphLab Create. Są to biblioteki dla Pythona, które oferują funkcjonalność, jakiej szukasz. Ze strony Pypi: „SFrame to skalowalna, poza rdzeniem ramka danych, która pozwala na pracę z zestawami danych, które są większe niż ilość pamięci RAM w twoim systemie. ” Pomyśl o tym jak o funkcjonalności manipulacji danymi i API w Pandach, ale bez umieszczania wszystkich danych w pamięci jako pierwszej. SFrame jest darmowym i otwartym oprogramowaniem, o ile wiem. Z drugiej strony GraphLab wykorzystuje funkcjonalność SFrame, aby zapewnić algorytmy do przeprowadzania analizy opisowej i predykcyjnej (uczenia maszynowego) danych przechowywanych w SFrame. GraphLab Create create nie jest darmowy / open source, ale ma bezpłatną licencję demo. W każdym razie, w zależności od stopnia zaawansowania algorytmów, SFrame może ci wystarczyć.

Mateo
źródło
-1

Czy rozważałeś „prawdziwy”, nieinterpretowany język, taki jak Fortran?

Wygląda na to, że dotychczasowe sugestie albo zależą od dostawcy, albo są interpretowane. Interpretowane metody są bardzo złe w aplikacjach intensywnie korzystających z pamięci. MatLab może być znacznie wyższym poziomem języka niż „C”, ale optymalizacja obsługi pamięci w C może sprawić, że poradzi sobie z setkami razy szybszymi zestawami danych, które są miliony razy większe.

Zarówno „R”, jak i „Python” są wspaniałymi, wysokopoziomowymi, bogatymi technicznie i często używanymi językami. Są również interpretowane.

Możesz rozważyć jedną z instancji R-on-Hadoop. (Rhipe, inni) Zaletą tego jest możliwość przetłumaczenia języka R (wysokiego poziomu, łatwego do zaprogramowania) na instrukcje MapReduce / Hadoop. Hadoop może stworzyć interesujący klaster wieloprocesowy dla biednych.

http://www.datadr.org/ <- (link Rhipe)

Fortran jest rozwijany od dziesięcioleci. Ma bardzo wydajną obsługę pamięci i kompilację. Ma również biblioteki wyższego poziomu, dzięki czemu może wykonywać bardzo skomplikowane technicznie operacje po prostu. Mógłbym zrobić zabawkowy CFD w MatLabie, ale dla czegoś realistycznego i samokodującego użyłbym Fortran do przetwarzania „dużego żelaza” i czegoś takiego jak MatLab lub R do prezentacji / podsumowania danych. Nikt nie tworzy komercyjnego oprogramowania CFD, którego „silnik” jest interpretowany zamiast kompilowany. Kilku sprzedawców ma swojego producenta pieniędzy CFD zakodowanego w C lub Fortran. SAS został pierwotnie napisany w C ( link ).

Fortran i Rhipe są dostępne. MatLab kosztuje pieniądze, a jeśli moja praca za to nie zapłaci, będę teraz używać R lub Pythona.

AKTUALIZACJA:
Mój punkt został „skompilowany”. Python ma cython, który dosłownie może uruchomić ten sam (podstawowy) kod ~ 1000 razy szybciej. Oznacza to, że możesz mieć dane, które są ~ 1000x większe i przetwarzać je prawie w tym samym czasie. Utrzymanie Cython w czystości może być wyzwaniem, ale narzędzia takie jak „ Sage ” dobrze go otaczają . Rcpp podobno ma podobny, ale osobiście nie wiem, czy jest tak dobrze rozwinięty.

Jeśli się nad tym zastanowić, podstawy prawie wszystkiego, co można uruchomić w informatyce naukowej, nawet w tłumaczonych językach, są kompilowane w Fortranie lub w C. C. BLAS to BLAS; nie wymyślasz kodu za każdym razem, gdy robisz EDA . Twój interpretowany język wywołuje te biblioteki, choć bardzo nieefektywnie, kiedy działa.

Na marginesie, możesz spojrzeć na JMP . Ma bardzo łatwy w użyciu interfejs i doskonale nadaje się do bardzo wizualnej analizy danych eksploracyjnych ( EDA ).

EngrStudent
źródło
2
Jak eksplorujesz dane w skompilowanym języku, takim jak fortran? Atrakcyjność języków interpretowanych jest dla mnie REPL, która zapewnia bogatą introspekcję i pozwala mi szybko dowiedzieć się, z czym mam do czynienia, a także grać z nowymi funkcjami bibliotecznymi, których być może nie znam.
Zelazny7
1
Rcpp jest bardzo dobrze rozwinięty (wystarczy sprawdzić odwrotne użycie w CRAN), ale nie jest tak naprawdę porównywalny z cytonem. Jeśli masz jakąś zdefiniowaną funkcję, tak, możesz wziąć wejście R, przetworzyć je w Cpp i zwrócić dane R. Jednak w najbliższym czasie nie skompilujesz całego skryptu R w Cpp.
russellpierce