Języki do analizy danych – MATLAB

Środowiska obsługi „wielkich baz danych”, takich jak Hadoop zyskały dużo uwagi, z pewnych powodów: jeśli masz terabajty danych do opracowania, (a w dzisiejszych czasach, kto ich nie ma?) to dobrze mieć solidne i ogólnie dostępne narzędzia, które potrafią podzielić obliczenia na wiele rdzeni. Prawda jest taka, że wielu analityków i naukowców spędza większość czasu z małymi rezultatami (rzędu kilku mega- lub gigabajtów danych), takich jak mała próbka otrzymana z większego zbioru. Przykładem są rezultaty pracy Hadoop, lub Wikipedia, która może być skompresowana do kilku gigabajtów, bez większego problemu.

W tej skali, nie potrzebujesz modnych środowisk rozproszonych. Możesz po prostu załadować dane do pamięci i badać je w swoim ulubionym języku skryptowym. Często okazuje się, że lepszym rozwiązaniem będzie zastosowanie specjalnego języka programowania. Analiza danych jest jedną z kilku dziedzin, gdzie te języki są powszechnie używane. Chociaż pod wieloma względami, są one podobne do innych języków dynamicznych takich jak Ruby, JavaScript czy SPSS – http://www.bluemetrica.com/analiza-danych-ibm-spss/, to jednak mają one składnię oraz takie typy danych, które zwykłą analizę czynią szybszą i bardziej zwięzłą. Ten artykuł omówi główne cechy języków specjalnego przeznaczenia, a zaczniemy od MATLABa.

MATLAB

MATLAB (skrót od MATrix LABoratory – „laboratorium macierzowe”) jest jednym z najstarszych języków programowania stworzonym celowo do analizy danych, który ciągle jest bardzo popularny. MATLAB został wymyślony w latach 70-tych, jako prosty język skryptowy otaczający FORTRANowe biblioteki LINPACK i EISPACK (później ich następce LAPACKa), które w swoim czasie, były najlepszym sposobem do efektywnej pracy z dużymi macierzami danych. Biblioteki te oraz MATLAB były skoncentrowane na jednym typie danych: macierzy czyli dwuwymiarowej tablicy liczb.

Ten typ wydawać by się mógł dość ograniczony. W rzeczywistości bardzo dużo problemów naukowych jest efektywnie reprezentowane jako problemy macierzy dwuwymiarowych. Przetwarzanie obrazu jest oczywistym jej oczywistym przykładem. Innym przykładem jest obliczanie napięć i prądów w obwodzie, gdzie korzysta się z grafu skierowanego. Występuje on również w Twitterowym grafie podążania, lub jako graf wszystkich linków w sieci. Macierz (reprezentacja grafu) wyraża wtedy macierz sąsiedztwa, gdzie taki algorytm grafowy jak Google’owy PageRank może być w prosty sposób zaimplementowany jako seria prostych operacji macierzowych.

Znalezienie najkrótszej ścieżki dokonuje się korzystając z algebraicznej konstrukcji półpierścienia tropikalnego (ang. tropical semiring). Podobnie ocenianie filmów w Netflix, polega na reprezentacji macierzowej każdego filmu.

Można to sobie wyobrazić tak, iż każdy rząd reprezentuje widza, każda kolumna film, a każde wejście jest wykorzystywane do tworzenia rankingu. Szczególnym przykładem operacji jest „rozkład według wartości osobliwych”, który jest jedną z tych, dla których MATLAB i biblioteka LINPACK zostały zaprojektowane.

W MATLABie można tworzyć zarówno podprogramy pisane w języku wewnętrznym (tzw. m-pliki) jak i w języku C oraz Fortranie, które po skompilowaniu tworzą mex-pliki. Np. z punktu widzenia inżyniera elektryka MATLAB posiada następujące ciekawe toolboxy (biblioteki):

  • Signal Processing Toolbox – m-pliki do przetwarzania sygnałów. Zawiera szybką transformatę Fouriera (FFT) zarówno jedno jak i dwuwymiarową.
  • Control System Toolbox – zawiera elementy teorii sterowania, z podkreśleniem opisu zmiennych stanu.
  • System Identification Toolbox – modelowanie parametryczne, identyfikacja systemów oraz estymacja.
  • Optimization Toolbox – optymalizacja nieliniowa.
  • Neural toolbox – uczenie i testowanie sztucznych sieci neuronowych.

MATLAB posiada także możliwość wykonywania wykresów dwu- i trójwymiarowych wraz z ich transformacjami, co czyni go użytecznym w praktyce inżynierskiej.