BIG DIVE, czyli o nurkowaniu w danych

Dziś będzie streszczenie bardzo interesujących warsztatów przygotowane przez Piotra Migdała. Temat bardzo ciekawy, linków dużo, więc bez niepotrzebnego przeciągania wstępu … zapraszamy do lektury.

BIG DIVE, czyli o dawaniu nura w dane

Piotr Migdał

Uczestniczyłem w pierwszej edycji BIG DIVE – 4-tygodniowym szkoleniu z analizy, obróbki i wizualizacji danych. Jako, że już niedługo będzie druga edycja (3. czerwca – 5. lipca 2013, Turyn, Włochy), a zgłoszenia są do 19. maja, zatem to ostatni gwizdek by nieco o tym napisać.

Zgłoszenie

O samym wydarzeniu dowiedziałem się z Twittera, i jak tylko zobaczyłem kombinację rzeczy, w które chcę wejść (analiza i wizualizacja danych, Python/JavaScript, sieci złożone, aplikacje webowe, uczenie maszynowe, 'nietylko-SQLowe’ bazy danych, a w dodatku ze słowem "hacking" (sugerującym, że do będzie pełne zanurzenie, a nie tylko chodzenie w brodziku)), poczułem że jest to dla mnie.

Pierwszym zaskoczeniem była kwalifikacja – zamiast standardowego CV i listów rekomendacyjnych – przedstawienie siebie (z możliwością wrzucenia 2 min klipu) i swoich projektów (skądinąd uważam taki rodzaj kwalifikacji za lepszy). I… bardzo szybki proces odpowiedzi (jedyny minus taki, że odpowiedź tuż przed terminem startu dodaje wrażeń).

Ludzie

Było 20 uczestników, z czego połowa to Włosi, a połowa – zbieranina z całego Świata. Najwięcej było programistów oraz… fizyków, czy to zajmujących się układami złożonymi (np. aż trójka z Systems Design ETH Zurich), czy też – zbaczających w stronę analizy danych. (Warsztaty były również bardzo udane od strony społeczno-gastronomicznej.)

Zaś wśród wykładowców byli zarówno pracownicy naukowi, zawodowi programiści i konsultanci, jak i – artyści zajmujący się wizualizacją danych. (Taki przekrój był świetny, i mam wrażenie, że tego bardzo brakuje na uczelniach – wszak podejście praktyczne nieraz najlepiej poznawać od ludzi doświadczających go w boju, nie – od ludzi zajmujących się podejściem praktycznym od strony teoretycznej.)

Polecam też poczytać wrażenia innej uczestniczki, Lessons From A Crash Course In Data Science.

Organizacja

Zajęcia wyglądały tak, że przez 4 dni w tygodniu siedziało się cały dzień na ćwiczeniach, zwykle 3 x 2h plus praca własna, przez większość czasu z laptopem na kolanach. I to było świetne, bo większość materiału się nie tylko słuchało, lecz też samemu testowało – i to w dość szybkim tempie (i podstawowa znajomość Pythona i konsoli była minimum, by się nie zgubić).

Wiele z zadań było otwartych, niektóre wymagały współpracy w grupie – np. w pierwszym tygodniu dostaliśmy pdf z danymi z refundacją wyjazdów posłów włoskich. Co przy okazji pracy z tymi danymi miało powstać? Cokolwiek/wszystko począwszy od jakiegoś zaprezentowania danych aż po stworzenie działającego czatu.

I, przynajmniej dla mnie, to było świetne (nieporównywalne z po prostu słuchaniem wykładu); nie ma innej drogi, by rzeczywiście nauczyć się praktycznych zdolności, jak właśnie – przez praktykę. Jako konsekwencja – wieczorem padałem z nóg, czując się wycieńczony, ale i szczęśliwy.

W piątki były wykłady, ogólnodostępne dla zainteresowanych – czy to odnoście zagadnień prawnych otwartych danych, bazy danych MongoDB, czy też – modelowania sieci powiązań banków, a także – przewidywania grypy.

Ostatni tydzień był przeznaczony na dłuższy projekt związany z przetwarzaniem większych danych (w oparciu o duże zbiory danych z Twittera i OpenStreetMap). W ostatni piątek były prezentacje uczestników i ogólne podsumowanie.

Po organizatorach było widać, że organizują bo chcieli. Tak samo prowadzący i byli (w większości) dobrzy w przekazywaniu wiedzy, i – jednak sporo dawało to, że jest tylko 20 uczestników – łatwo było o pomoc, indywidualną wskazówkę, itd.

Treść

Pewnie najważniejsze pytanie to: jaki był program, czego się nauczyłem i co z tego wynikło?

Główne zagadnienia to (linki niekoniecznie z zajęć):

O ile cokolwiek mniej wyniosłem w frameworków webowych (gdyż się wcześniej tym nie zajmowałem) i z sieci złożonych (gdyż wcześniej o tym wiedziałem za dużo), to zarówno część wizualizacyjna była niesamowita, jak i cześć dot. przetwarzania danych.

Jeśli chodzi o tego typu zdolności, wszystkiego można nauczyć się z Internetu, i ogólnie każda poważna nauka to w większości praca własna. Kluczowe pytania to:

  • czy dało dobry ogólny obraz oraz punkt startowy oraz
  • czy było to efektywniejsze od siedzenia samemu nad nowymi zagadnieniami?

I na oba była ona dla mnie pozytywna. Co więcej, przynajmniej dla mnie, o wiele przyjemniejsze i bardziej efektywne jest rzucenie się na tydzień czy miesiąc na dane zagadnienie (i zapomnienie o wszystkim innym) niż skubanie po kilka godzin w tygodniu przez dwa semestry.

Jeśli chodzi o "big picture", to zamiast tylko mówić, że "podobało się", postaram się podzielić nimi:

  • Python jest całkiem przyjemnym językiem, i środowiskiem, do analizy danych. Oprócz czytelnej składni i wszechstronności, ma sporo pakietów do numeryki (NumPy, SciPy), rysowanie wykresów (matplotlib), analizy danych (pandas), uczenia maszynowego (scikit-learn) oraz grafów (NetworkX), nawet nie wspominając o interfejsach do innych narzędzi (np. Boto do AWS czy PyMongo). Dodatkowo, IPython Notebook świetnie się nadaje zarówno do ekploracji danych.

  • JavaScript jest nieodzowne do interaktywnych wizualizacji, a także statycznych, które chcemy automatycznie uaktualnić w oparciu o dane (i to wszystko w dowolnej przeglądarce, bez instalacji czegokolwiek). To jest trickowy język, ale też nie brakuje dobrych kursów – na start polecam Eloquent JavaScript (jest też po polsku). W każdym razie przykładów jest wiele i wystarczą niewielkie podstawy, by się bawić wszechstronnym D3.js czy też bardziej wyspecjalizowanymi bibliotekami (np. polychart.js do standardowych wykresów, Sigma.js do dużych grafów, …).

  • Wizualizacja danych jest sztuką, w której od formy istotniejsza jest funkcja (niczym w architekturze) i w której minimalizm jest nieraz pożądany (przeładowanie danych, lub przeładowanie grafiki, zwykle działa na szkodę).
    Niestety, nie brakuje wizualizacji ohydnych (np. ciastko-chart w 3D z dzikimi kolorami), przez nieczytelne (np. wykresy słupkowe nie zaczynające się od 0, czy też słupowych w 3D – perspektywa uniemożliwia porównanie danych), czy też "pięknych, ale bezużytecznych" (np. „graph hairballs” i „network paint ball”, omawiane w Hive Plots). Należy pamiętać, że niestandardowe wizualizacje sprawdzają się wyłącznie, gdy są zgrane z danymi – np. tablica Mendeleywa pięknie odzwierciedla własności pierwiastków chemicznych, wrzucenie do niej innych danych to jak używanie iPhone’a jako młotka.

  • Kolory są nieraz istotne (i dla estetyki, i dla przejrzystości), i jak się samemu nie ma wyczucia (np. jest się samcem w porywach rozróżniącym 16 kolorów) warto skorzystać z gotowych palet lub generatorów (i want hue, chroma.js, ColorBrewer2).

  • D3.js jest naprawdę niesamowitą i wszechstronną biblioteką do wizualizacji danych, czy to statycznych, czy dynamicznych. O ile wymaga pewnej znajomości JavaScript, oraz nauki samej biblioteki, to przykłady powinny być nader wymowne. Zwłaszcza, że kod do nich jest krótki i zwykle publicznie dostępny (zatem łatwo zacząć własną wizualizację od iteracyjnej modyfikacji już istniejącej).

  • Gephi świetny statycznej wizualizacji grafów (niektórzy polecają Cytoscape) i, do pewnego stopnia, do eksploracji i analizy. O ile interfejs użytkownika czasem jest grą point-and-click połączoną z elementami łamigłówki, to rezultaty są warte przejścia przez początkowe trudności.

  • Jeśli chcemy uczynić nasze działo wolnym, warto korzystać z licencji CC-BY do programów i CC0 do danych (zobacz też dyskusję tematu tu i tu). Frazy typu "Share-Alike" czy "Non-Commercial" organiczają sposoby użycia.

  • Do relatywnie małych danych, które są bardziej skomplikowane niż tabelka (czyli CSV), JSON jest niezastąpiony (i znacznie lżejszy i bardziej jednoznaczny niż XML).

  • MongoDB to nawet ciekawa baza danych, ale też warto wiedzieć, że ma nachalny marketing.

  • Amazon Web Service jest nieraz niezłym sposobem na jednorazowe obliczenia (np. chcemy potężną moc na 10h) czy też zabawę rzeczami, na które nasz komputer jest za mały (np. Hadoop).

Z lekcji wyniesionych od uczestników – zacząłem używać Sublime Text 2 (wszechstronny edytor kodu i tekstu z mnóstwem pakietów (w tym do LaTeXa i R), taki Vim przyjazny użytkownikowi) oraz instalatora Homebrew do Mac OS X. Oraz wyrobiłem sobie nawyk, by wrzucać rzeczy na GitHuba wręcz instynktownie (raz, "mogą się przydać innym", dwa – wrzucenie publicznie daje motywację by wygładzić kod… dzięki temu pół roku później samemu się człowiek w nim nie pogubi).

Końcowo

A jak będzie wyglądała kolejna edycja? Tematy w większości się pokrywają, prowadzący też – zatem spodziewałem się podobnego czegoś podobnego, acz dłuższego o tydzień. I o ile ogólnie w sprawach edukacji jestem marudną, to uważam, że BIG DIVE wyszedł świetnie.

I na deser dwie moje wizualizacje, jedna końcowa z okazji BIG DIVE – graf języków, technik i pojęć programistycznych oraz późniejsza graf motywów literackich w ramach wizualizacji Wolnych Lektur.

A jak termin nie pasuje, nie zostanie się przyjętym, ew. finansowo nie da rady? Postarałem się przedstawić "big picture" i odnośniki. Reszta to i tak w większości praca własna.

4 thoughts on “BIG DIVE, czyli o nurkowaniu w danych”

  1. cóż mogę powiedzieć… wyrywa się z mojego gardła jedynie krótkie wow… W Twoim wpisie jest cała technologia, którą chciałbym wykorzystywać, a która jednocześnie mnie przeraża/poraża. Nie chodzi o trudność w uczeniu się poszczególnych narzędzi (składnia języka do opanowania to proste zadanie), a o ich liczbę. Python, R, MapReduce, JavaScript (z nieodzownym D3.js), MongoDB (którego fenomenu nie mogę pojąć), Hadoop, może do tego Illustrator od Adobe, etc…

    Wydaje się tego zdecydowanie za dużo. Data science to bardzo ciekawa dziedzina, jednak odpycha ilością wiedzy do przyswojenia. Sam R wymaga poznania przynajmniej kilku pakietów.

  2. @Tomasz
    To jest mniej straszne niż wygląda. Zresztą moim celem nie było zarzucenie nadmiarem informacji, co raczej danie pewnego poglądu. I na pewno nie trzeba wiedzieć wszystkiego. By było jasne, nie piszę tego z pozycji eksperta, ale kogoś, kto liznął kilka rzeczy. Do wielu rzeczy wystarczy dowolny język jedynie z bibliotekami do wczytywania danych.

    Co więcej, w większości przypadków możliwy jest postęp praktycznie „od zera”, gdzie na każdym kroku robi się rzeczy użyteczne (nie każda inna dziedzina jest tak samo przystępna pod tym względem). Zatem jak potrafisz coś policzyć czy zwizualizować w R, to nie musisz znać odpowiedniej biliotetki w Pythonie.

    Podobnie – co do MapReduce/Hadoop – o tym warto myśleć, jeśli się ma (powiedzmy) 50GB+. Dla kilku GB zwykle i tak szybciej trawić dane lokalnie.

    A D3.js się zachwycam nie dlatego, że jest niezbędny (bo nie jest), ale po prostu mi dużo dał (i pewnie jeszcze sporo da).

    Zaś MongoDB można sobie odpuścić bez żalu (jak będzie trzeba, można się i tak szybko nauczyć)…

  3. Rzeczywiście, może mój pierwszy wpis to pozycja defetysty.

    wszystkie te technologie, języki, koncepcje są interesujące i naprawdę chciałbym się nimi zająć na poważnie. Niestety, głównym moim przeciwnikiem w tej kwestii jest czas, drugim, wrodzona prokrastynacja 🙂

    Bardzo przydałoby się spójne, treściwe źródło prostej wiedzy z zakresu R. Obecnie wertuję wiele książek, przeglądam dziesiątki stron, żeby znaleźć rozwiązanie mojego problemu. Całkiem fajnie surfuje się w poszukiwaniu wiedzy, jednak może to być demotywujace i zbyt czasochłonne.

    Przy okazji chciałbym podzielić się naprawdę rewelacyjna książką z zakresu D3.js, niedawno wyszła nakładem wydawnictwa oreilly – Interactive Data Visulaization for the Web – szczerze polecam. Szkoda, że nie powstały podobne pozycje dla R czy Pythona, taki introductory level (a może są, a ja o tym nie wiem?).

    Podsumowując, zakres wiedzy dla potencjalnego statystyka/designera danych itp. itp. może być z początku onieśmielający i oszałamiający. Ja akurat zaczynam moją przygodę (aktualnie kończę studia podyplomowe z zakresu statystyki) i widzę ogrom pracy jaki mnie czeka. Czasami to motywuje, innymi momentami (tak jak wtedy, gdy pisałem poprzedni post) obciąża.

    Takie artykuły, jak powyższy, pozwalają zobaczyć „duży obraz”, wyczuć tendencje i kierunki. Dziękuję Piotrze za to repozytorium wiedzy. Powoli i systematycznie zacznę je eksplorować.

  4. Sam jestem prokrastynatorem. I taka prokrastynacja zwykle się bierze z perfekcjonizmu – „po co się zabierać za coś, skoro nie zrobię tego idealnie?”.

    Przy czym prawda jest taka, że nie ma nic idealnego, a nawet największe arcydzieła są „good enough”. A nawet najwięksi eksperci nie wiedzą wszystkiego w swojej działce.
    Dodatkowo – języków jest wiele, kursów do nich jeszcze więcej – ale to chodzi o to, by mieć wszystkie. Często jeden język i kilka pierwszych rodziałów wystarczy na początek. A potem – będzie jasne co potrzebujesz, co się przyda itd.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *