Jak utrzymywać pod kontrolą analizy eksploracyjne dużych zbiorów danych?

22

Kiedy rozpoczynam analizę eksploracyjną dużego zbioru danych (wiele próbek, wiele zmiennych), często spotykam się z setkami zmiennych pochodnych i tonami różnych wykresów, i nie ma prawdziwego sposobu, aby śledzić, co się dzieje. Kod kończy się jak spaghetti, ponieważ od samego początku nie ma żadnego kierunku ...

Czy są jakieś zalecane metody utrzymywania porządku w analizie eksploracyjnej? W szczególności, w jaki sposób radzisz sobie z wieloma gałęziami eksploracji (w tym tymi, które były ślepymi zaułkami) i różnymi wersjami fabuł?


Dla porównania pracuję nad danymi geologicznymi (wiele zmiennych w czasie, czasem także w przestrzeni). Zwykle pracuję z Pythonem lub R i przechowuję wszystko w git, i wypróbowałem również Notatnik IPython. Jednak dobrze byłoby, gdyby odpowiedzi były nieco ogólna i użyteczne dla ludzi we wszystkich dziedzinach, z innymi rodzajami (duży?) Danych.

zera101
źródło
1
Wyobrażam sobie, że wiele porad, które otrzymacie, będzie miało również zastosowanie do badań symulacyjnych zaprojektowanych w celu oceny konkurencyjnych metod szacowania lub prognozowania.
probabilityislogic
1
Tak, ta odpowiedź jest prawdopodobnie wymagana także do przeczytania: stats.stackexchange.com/questions/2910/… . Myślałem, że może być bardziej konkretna rada, ale przypuszczam, że tak naprawdę nie jest.
naught101

Odpowiedzi:

10

Myślę, że często tendencja do odczuwania, że ​​wpadłeś do króliczej nory z analizami eksploracyjnymi, jest spowodowana utratą z oczu merytorycznego pytania, które zadajesz. Od czasu do czasu robię to sam, a potem muszę sobie przypomnieć, jakie są moje cele. Na przykład, czy próbuję zbudować konkretny model lub ocenić adekwatność istniejącego? Czy szukam dowodów problemów z danymi (tj. Analizy danych kryminalistycznych)? Czy też jest to na wczesnych etapach analizy, gdzie badam nieformalnie określone pytania (np. Czy istnieje związek między dwiema zmiennymi?) Przed przejściem do opracowania modelu formalnego? Podsumowując, jeśli przyłapiesz się na wyrabianiu fabuł i tabel, ale nie możesz jasno określić, jaki jest twój bezpośredni cel lub dlaczego ta fabuła / tabela jest istotna, to wiesz, że „

Staram się podchodzić do eksploracyjnej analizy danych tak, jak piszę, czy to pisząc program, czy pisząc artykuł. W obu przypadkach nie zacząłbym od zrobienia najpierw szkicu. Zarys ten może się oczywiście zmienić (i często się zmienia), ale rozpoczęcie pisania bez niego jest nieefektywne i często daje kiepski produkt końcowy.

Organizacja WRT, każdy analityk musi znaleźć przepływ pracy, który będzie dla niego odpowiedni - to IMO jest ważniejsze niż próba sztywnego śledzenia przepływu pracy innej osoby (chociaż zawsze pomocne jest uzyskanie pomysłów na podstawie tego, co robią inni). Jeśli pracujesz programowo (tj. Piszesz kod, który można uruchomić, aby wygenerować / zregenerować zestaw wyników) i sprawdzasz swoją pracę w git, oznacza to, że masz wiele mil w tym zakresie. Podejrzewam, że być może będziesz musiał poświęcić trochę czasu na uporządkowanie kodu, i do tego sugerowałbym podążanie za swoim szkicem. Na przykład pliki analizy powinny być stosunkowo krótkie i ukierunkowane, aby każdy z nich odpowiadał na jedno pytanie (np. Wykresy diagnostyczne dla konkretnego modelu regresji). Zorganizuj je w podkatalogach na jednym lub dwóch poziomach, w zależności od wielkości i złożoności projektu. W ten sposób projekt sam się dokumentuje; widok listy katalogów, podkatalogów i plików (wraz z komentarzem u góry każdego pliku) powinien teoretycznie odtworzyć zarys.

Oczywiście w dużym projekcie możesz mieć również kod, który zajmuje się czyszczeniem i zarządzaniem danymi, kod napisany w celu oszacowania określonego typu modelu lub inne napisane narzędzia, które nie mieszczą się w zakresie merytorycznym zarys analizy danych, więc powinny być zorganizowane w innej części folderu projektu.

Aktualizacja: po opublikowaniu tego zdałem sobie sprawę, że nie odniosłem się bezpośrednio do twojego pytania dotyczącego „ślepych zaułków”. Jeśli naprawdę zdecydujesz, że cały zestaw analiz nie ma żadnej wartości, to jeśli pracujesz w git, zawsze możesz usunąć odpowiednie pliki z komunikatem zatwierdzenia, np. „Porzuciłem ten wiersz analizy, ponieważ nie był produktywny." W przeciwieństwie do pogniatania tego, co napisałeś i wyrzucania go do kosza, zawsze możesz w razie potrzeby wrócić do tego, co zrobiłeś później.

Myślę jednak, że przekonasz się, że jeśli przejdziesz do konturu, nad którym zastanowiłeś się, będziesz mieć mniej tzw. Ślepych uliczek. Zamiast tego, jeśli spędzasz czas na badaniu wartościowego i istotnego pytania - nawet jeśli prowadzi to do zerowego znalezienia lub nie okaże się, jak się spodziewałeś - prawdopodobnie nadal chcesz prowadzić rejestr tego, co zrobiłeś i wyniku (na minimum, aby nie popełnić błędu, powtarzając to później). Po prostu przenieś je na sam dół swojego konturu, w formie „dodatku”.

Phil Schumm
źródło
4

Nie wiem, jak pomocna będzie ogólna odpowiedź. Pytasz, jak zrobić coś trudnego; dobre odpowiedzi będą prawdopodobnie zależeć od dyscypliny i prawdopodobnie będą długie i dopracowane. :)

Jeśli chodzi o organizację, używasz już git, więc następnie powinieneś zacząć używać makefile do wykonania analizy. Plik makefile określa, w jaki sposób różne pliki zależą od siebie (tj. Od tego, które statystyki pochodzą z jakiego kodu), a kiedy zadzwonisz make, wszystko, co należy zaktualizować, będzie.

To nie pomaga w części eksploracyjnej. Do EDA używam (głównie) R w emacsie za pośrednictwem ESS. Potrzebujesz EPL dla REDA. Mój obieg pracy polega na odtwarzaniu wykresów, oszacowań itp. W ESS (w exploratory.Rpliku typu), decydowaniu o tym, co chcę zachować, a następnie przekodowaniu go, aby można go było wykonać wsadowo według marki. Re: git, nie wiem, jak go używasz, ale używam jednego repozytorium dla każdego projektu (zwykle pojedynczego papieru) i rozkładam piekło z mojej bazy kodu, aby zachować czystą historię; tzn. używam

$ git merge meandering-branch --squash
$ git add -p somefile
$ git rebase -i master
$ git reset HEAD --hard

o wiele więcej niż wtedy, gdy zaczynałem od git i o wiele więcej niż poleciłbym początkującym. Jeśli nie znasz wszystkich tych poleceń i opcji, możesz dowiedzieć się więcej o git. Najważniejszą rzeczą, która mi pomogła, jest dyscyplina w dokonywaniu logicznie odrębnych zobowiązań; tzn. każde zatwierdzenie powinno zawierać wszystkie zmiany, które możesz chcieć cofnąć wszystkie naraz w przyszłości (i nie więcej lub mniej).

Jeśli chodzi o eksplorację danych, uważam te książki za pomocne i interesujące, a dotyczą one szczególnie dużych zbiorów danych (przynajmniej częściowo):

  • Grafika dużych zbiorów danych , pod redakcją Unwin, Theus i Hofmann. przez springerlink, jeśli masz dostęp, w przeciwnym razie poszczególne rozdziały są prawdopodobnie dostępne przez Google.

  • Podręcznik wizualizacji danych , opracowany przez Chen, Härdle i Unwin. również poprzez link Springerlink

  • Analiza danych według Hubera (2011) ..

Szary
źródło
3

Dwa słowa: mapa koncepcji. To jedyny skuteczny sposób, w jaki udało mi się podzielić i podbić duże zbiory danych lub dowolną koncepcję, która jest naprawdę skomplikowana. http://en.wikipedia.org/wiki/Concept_maps

Osobiście myślę lepiej na papierze niż na ekranie, więc po prostu mapuję to, z czym mam do czynienia, zanim zacznę robić jakąkolwiek podstawową analizę. Bardziej profesjonalny schemat zawiera wiele programów do mapowania umysłu http://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software

Mapowanie myśli ma kilka zalet:

  • mówi mi, co mam pod względem zmiennych „podstawowych” i zmiennych pochodnych (jeśli występują)
  • pozwala na organizację / sformułowanie modelu opartego na teorii / logice
  • wskazuje, jakich zmiennych mogę brakować i / lub mogę dodać, jeśli relacje między zmiennymi podstawowymi nie układają się tak, jak sądzę, że powinny

Edytuj :

Jako przykład, oto mapa pojęć do analizy czynnikowej: http://www.metacademy.org/graphs/concepts/factor_analysis#focus=factor_analysis&mode=explore Teraz służy to wyłącznie do nauki koncepcji, nie wykonywania analizy, ale idei jest to samo: z wyprzedzeniem zaplanować, co ma sens, a następnie zrobić to.

Jeśli szukasz zautomatyzowanej / zakodowanej wersji tego, nie sądzę, że istnieje. Nie możesz zautomatyzować koncepcji modelowania, gdy próbujesz zrozumieć system. (I to dobrze, ponieważ pozbawiłoby to mnóstwo ludzi pracy).

rocinante
źródło
Hrm ... To może zrobić z bardziej szczegółowym przykładem. Mam problem z widzeniem, jak to pomogłoby poradzić sobie ze złożonością, o której mówię. W szczególności nie pomaga poradzić sobie z tym, co zrobić z analizami (dane pochodne, wykresy itp.) Ze ścieżek dochodzeń prowadzących do ślepych zaułków.
naught101
Mapa pojęć ma na celu jedynie badanie ścieżek, które powinny gdzieś poprowadzić, w oparciu o teorię przedmiotową. Jeśli okaże się, że dane badanie nigdzie się nie udało, zanotuj je na mapie pojęć, ponieważ jest to twoja lista poradników / rzeczy do zrobienia, a następnie natychmiast zobaczysz, na jakie zmienne pochodne mają wpływ i jakie inne badania możesz przeprowadzić próbować.
Rocinante
3

Już korzystasz z git: dlaczego nie używać kontroli wersji do organizowania eksploracji? Utwórz nową gałąź dla każdej nowej „gałęzi” eksploracji i rozwidlaj gałęzie dla różnych wersji fabuły. Ta metoda nieco utrudni połączenie wyników końcowych, ale zawsze możesz utrzymywać nieśledzony katalog, w którym możesz umieścić „klejnoty” swojej analizy. Prawdopodobnie chciałbyś w jakiś sposób oznaczyć swoje pliki w tym katalogu, aby wskazać, z którego rozwidlenia / zatwierdzenia pochodzą. Ta metoda ma tę dodatkową zaletę, że naprawdę ułatwia kontrastowanie różnych analiz za pomocą diffpolecenia.

David Marks
źródło
1

Zajrzałbym do narzędzi Business Intelligence ... gdzie pojawiają się podobne problemy. W szczególności (hurtownie danych, analiza wymiarowa) hierarchie i drążenia w dół.

Podstawowa idea polega na tym, że próbujesz przedstawić swoje dane bazowe jako wartości agregowane (liczby, zarobki itp. Zamiast np. Wartości procentowych). Następnie projektujesz hierarchie, aby agregować według szczegółów (np. Miesięcy / tygodni / ...). Pozwala to uzyskać prosty przegląd wszystkich danych, a następnie powiększać poszczególne obszary. patrz np. http://cubes.databrewery.org/ (python) lub excel power pivot

seanv507
źródło