Nie jesteś zalogowany | Zaloguj się

Data Pipes & DAST. Scalable mining and storage of complex data

Prelegent(ci)
Marcin Wojnarski
Afiliacja
Uniwersytet Warszawski
Termin
9 maja 2014 14:15
Pokój
p. 5820
Seminarium
Seminarium badawcze Zakładu Logiki: Wnioskowania aproksymacyjne w eksploracji danych

W referacie przedstawię dwie nowe technologie przetwarzania danych - 
"Data Pipes" oraz "DAST" - które opracowałem w ostatnich latach na potrzeby realizowanych przeze mnie projektów. Obie są już częściowo zaimplementowane w języku Python i dostępne w wersjach 'alpha' na github. Zapraszam do korzystania z nich - ułatwią implementację algorytmów i eksperymentów data mining, a feedback od użytkowników będzie pomocą dla mnie, aby je dopracować i uzupełnić dokumentację.

1) "Data Pipes" 
(https://github.com/mwojnars/nifty/blob/master/data/pipes.py) to modułowa architektura i biblioteka komponentów do strumieniowego przetwarzania danych, która po raz pierwszy pozwala programistom data 
mining łatwo konstruować dowolnie skomplikowane schematy przetwarzania danych, złożone z dowolnej liczby atomowych operacji i algorytmów, zachowując jednocześnie skalowalność: algorytmy mogą przetwarzać dowolnie duże zbiory danych - również przekraczające rozmiar pamięci - w sposób tak samo efektywny jak zbiory małe. Jest to możliwe dzięki strumieniowemu transferowi danych między operatorami, który usuwa konieczność materializacji pełnych zbiorów na wejściu/wyjściu każdego operatora (jak to ma miejsce w innych bibliotekach data mining).

Biblioteka Data Pipes wykorzystuje te same pomysły, które legły u podstaw biblioteki Debellor, pisanej przeze mnie kilka lat temu w języku 
Java. Jest jednak o wiele bardziej rozwinięta i dopracowana, zarówno pod 
względem ogólnej architektury, jak i dostępnych już teraz standardowych komponentów - Debellor zawierał najwyżej 20% tego, co jest dostępne obecnie w Data Pipes.

2) "DAST" (DAta STorage, 
https://github.com/mwojnars/nifty/blob/master/data/dast.py) to nowy format przechowywania i serializacji danych, szczególnie danych 
strukturalnych (nie tylko płaskich) i obiektowych (dowolne klasy definiowane przez użytkownika), którego składnia jest wzorowana na 
bardzo udanej i wygodnej strukturze języka Python, z hierarchią danych kodową przez indentację bloków tekstu. DAST jest formatem znacznie 
wygodniejszym w zastosowaniach data mining niż CSV, JSON, XML, czy formaty serializacji danych (Java, Python pickle). Spełnia on kilka 
istotnych warunków, których nie spełnia łącznie żaden z tych popularnych formatów:

- Jest formatem tekstowym, przy tym bardzo czytelnym (w odróżnieniu od XML). Pozwala na podgląd i ręczną edycję zawartości, co bardzo ułatwia analizowanie zbiorów danych i kontrolę poprawności algorytmów, które te dane wygenerowały.
- Pozwala zapisywać (serializować) dane obiektowe, tzn. instancje dowolnych klas - w przeciwieństwie do JSON czy CSV. Sposób kodowania 
obiektów jest zestandaryzowany i teoretycznie pozwala nawet na deserializację obiektów w innym języku programowania niż ten, który wykonał serializację.
- Pozwala serializować w sposób czytelny hierarchie obiektów o wielu poziomach zagnieżdżenia.
- Pliki mają postać listy obiektów, a nie pojedynczego obiektu jak np. w Python pickle. Lista ta może być dopisywana i odczytywana strumieniowo, co pozwala przechowywać duże ilości danych, przy zachowaniu skalowalności algorytmów, które będą później z tych danych korzystały.

Jedynie YAML posiada podobne właściwości, ale również on jest z kilku powodów mniej wygodny niż DAST. Oczywiście, DAST pozwala serializować nie tylko zbiory danych, ale też modele, co jest równie częstym wymaganiem w eksploracji danych.