Python w PS CLEMENTINE PRO – najważniejsze możliwości

Spis treści [Ukryj]

Przez lata SPSS Clementine było uważane za wzorzec środowiska otwartego wśród systemów eksploracyjnej analizy danych.

Najdobitniejsze przykłady tego, że jego twórcy mieli świadomość, że nie tworzą oprogramowania w próżni, a rozliczne i nie dające się precyzyjnie określić potrzeby w przyszłości będą wymagać od platform data mining dużej elastyczności to: 

  • Łatwość komunikacji z bazami danych przy pomocy SQL generowanego przez aplikację (a nie koniecznie hard-kodowanego przez człowieka),
  • możliwość korzystania z dodatkowych algorytmów data mining (bibliotek napisanych np. w języku C) implementowanych przez użytkownika dzięki interfejsowi CEMI, 
  • wdrażanie procesów scoringowych w oderwaniu od środowiska aplikacji Clementine dzięki technologii Solution Publisher.

Dzisiaj o otwartości PS CLEMENTINE PRO (czyli  następcy oprogramowania SPSS) świadczą najdobitniej możliwości jakie daje ona w kooperacji z R oraz Python-em. 

W tym wpisie skupimy się na tym drugim środowisku i przybliżymy „pożytki” płynące z jego wykorzystania, zwłaszcza, że nie jest to prosta zamiana jednego języka skryptowego na drugi. Python współwystępuje ze starszą wersją języka skryptowego (tzw. legacy script, czyli w skrócie LS), posiadając przy tym znacznie większe możliwości interakcji z otoczeniem informatycznym, np. systemem operacyjnym, niż LS.

Wraz z instalacją dostarczana jest dedykowana biblioteka modeler.api, dzięki której możemy sterować obiektami w strumieniach i superwezłach oraz tworzyć skrypty zarządzające wieloma strumieniami (skrypty sesji). Ktoś mógłby powiedzieć, że to tak samo jak w  przypadku korzystania z LS. Przyjrzyjmy się pierwszemu przykładowi żeby zobrazować niektóre różnice.

Python jako język skryptowy

 

Jedną z cech Pythona jest możliwość wykorzystywania licznych bibliotek. Dla przykładu biblioteka os pozwala na dostęp do plików i folderów znajdujących się na dysku twardym komputera. Możemy więc z poziomu PS CLEMENTINE PRO nie tylko definiować ścieżki dostępu do plików (na co pozwalały już wcześniej LS), ale również tworzyć foldery, zbierać informacje o plikach, usuwać je czy zmieniać ich nazwy. Dodajmy do tego wykorzystanie modułu datetime i uzyskujemy narzędzie automatycznego zapisu raportów - raporty z każdego dnia znajdować się będą w osobnych, tworzonych automatycznie, folderach. Poniżej znajduje się przykładowy fragment kodu służącego do utworzenia w folderze raportów projektowych podfolderu o nazwie będącej dzisiejszą datą (linie 1-9).

 

Rysunek 1. Skrypt tworzący folder przy użyciu modułu os

Rysunek 1. Skrypt tworzący folder przy użyciu modułu os

W dalszej części (linie 11-12) tworzone są ścieżki dostępu do plików csv, które będą zawierały osobne raporty dla województw mazowieckiego i małopolskiego wraz z dzisiejszą datą w nazwie.  Zakładając, że bieżący strumień generuje takie raporty osobnymi węzłami exportu (np. węzłami eksportu 'Plik płaski'), możemy automatycznie tworzyć ścieżki, które zostaną przez te węzły wykorzystane do zapisu plików. 

Biblioteka os pozwala również na przeszukiwanie zawartości folderów w celu znalezienia pliku/folderu o określonej nazwie. W połączeniu z biblioteką re (obsługa wyrażeń regularnych) można dzięki temu np. wczytywać wszystkie pliki, których nazwy zawierają określony fragment: "raport", ".csv" czy "2020-06".

 Korzystając z tych możliwości pamiętajcie o uprawnieniach swoich użytkowników do odpowiednich zasobów komputera – ta drobna rzecz może mocno wpłynąć na poczucie sukcesu lub porażki .

Python, czyli przyspieszamy

Poza możliwościami korzystania z wielu stworzonych już bibliotek, Python umożliwia również tworzenie własnych funkcji, upraszczających nam pracę. Przy bardziej skomplikowanych operacjach, pętlach czy instrukcjach warunkowych,  takie podejście pozwala nie tylko na skrócenie czasu pracy, ale także na skrócenie samego kodu, poprawienie jego czytelności oraz uniknięcie pomyłek. 

 

Rysunek 2. Przykładowa własna funkcja Python

Rysunek 2. Przykładowa własna funkcja Python

 

Przykładowa funkcja z rysunku powyżej ‘zwroc_nazwe_i_adnotacje’ zwraca … nazwę i adnotację wybranego węzła. Możemy ja wykorzystać  np. w celu dokumentacji operacji w strumieniu. 

Zdefiniowaną funkcję można zapisać w pliku skryptu pythona (.py) lub pliku tekstowym i używać jej w przyszłości w innych skryptach. Nic nie stoi na przeszkodzie, aby utworzoną funkcję przesłać do innych członków zespołu, którzy również używają Clementine. Co więcej, jeżeli stworzylibyśmy zestaw funkcji, który często jest wykorzystywany przez nasz zespół, Python umożliwia utworzenie pliku (nazwijmy go. nasza-bliblioteka), który działałby analogicznie jak wykorzystywane wyżej biblioteki. Po odpowiedniej konfiguracji wystarczyłoby na początku dowolnego skryptu wprowadzić linię: "import nasza_biblioteka", aby uzyskać dostęp do wszystkich zgromadzonych tam funkcji.

Oczywiście temat ten jest znacznie szerszy i postaramy się  opisać go w przyszłości. 

Nowe algorytmy

Python w PS CLEMENTINE PRO  jest wykorzystywany nie tylko w skryptach strumienia. Wykorzystują go również niektóre węzły. Znaleźć je możemy na palecie węzłów, w zakładce Python.

 

Rysunek 3. Zakładka Python na palecie węzłów

Rysunek 3. Zakładka Python na palecie węzłów

 

Chodzi oczywiście o dodatkowe algorytmy i techniki analityczne. Znajdziemy tutaj m.in. zaawansowane modele uczenia maszynowego (Drzewo XGBoost, Las losowy, SVM, KDE), algorytmy przydatne do preprocessingu danych na potrzeby budowy innych modeli (SMOTE), jak i węzły umożliwiające import i eksport do formatu JSON. Wszystkie one wykorzystują algorytmy napisane w języku Python. Tutaj warto pamiętać, że niektóre z nich wymagają instalacji określonych bibliotek zewnętrznych (np. imbalanced-learn dla SMOTE).

Rozszerzenia

Dla bardziej zaawansowanych użytkowników PS CLEMENTINE PRO ma jeszcze wyjątkowe funkcjonalności zawarte w węzłach rozszerzeń. Są to węzły, wewnątrz których możliwe jest wprowadzenie kodu w języku R lub w frameworku PySpark, czyli Pythonowym API, do Sparka - środowiska programistycznego do obliczeń rozproszonych.

 

Rysunek 4. Węzły Rozszerzeń

Rysunek 4. Węzły Rozszerzeń

Węzły te odpowiadają typom węzłów Clementine, zatem mamy tutaj węzły importu danych, przetwarzania rekordów i zmiennych, modelowania i eksportowania danych. Dzięki nim można m.in.:

  • pobierać dane z adresu url (i innych źródeł obsługiwanych przez Pythona), 
  • wczytywać dowolną ilość plików na raz i elastycznie łączyć wewnątrz tego samego węzła,
  • tworzyć zmienne w nowy sposób – wykorzystując funkcje PySpark
  • edytować dotychczasowe zmienne z wykorzystaniem funkcji Pythona,
  • tworzyć i oceniać modele niedostępne w podstawowych węzłach Modelera,
  • tworzyć własne wersje interfejsów algorytmów Python z opcjami, które uznamy za ważne,
  • generować wyniki w formie tekstowej i wizualnej,
  • formatować i eksportować dane np. do postaci plików JSON

Wykorzystanie tych możliwości wymaga jednak przynajmniej podstawowej znajomości PySparka. 

 

Rysunek 5. Przykładowy kod we frameworku PySpark

Rysunek 5. Przykładowy kod we frameworku PySpark

 

Rysunek powyżej przedstawia przykładowo wypełniony węzeł Rozszerzenie Przekształcenia. Jego zadaniem jest dodanie do zbioru nowej zmiennej zawierającej odległość Levensteina (metryka dystansu pomiędzy dwoma ciągami znaków, której wartość wzrasta wraz ze wzrostem zmian koniecznych, aby z ciągu A, utworzyć ciąg B). W tym przykładzie dystans mierzony jest pomiędzy zmiennymi "proper_words" a "misspelled_words". levenstein_distance() to miara, którą możemy zaimplementować właśnie przy użyciu węzła Rozszerzeń. Dalej w kodzie, po policzeniu dystansu edycyjnego, selekcjonowane są te rekordy, gdzie odległość Levensteina jest mniejsza niż 3. 

Rezultat działania tego węzła wygląda następująco.

Rysunek 6. Wynik z węzła Tabela zawierający wyliczoną odległość Levensteina

Rysunek 6. Wynik z węzła Tabela zawierający wyliczoną odległość Levensteina

  

Węzły rozszerzeń umożliwiają wykorzystywanie różnych bibliotek Pythona. Nic nie stoi więc na przeszkodzie, by w swoim strumieniu wykorzystać NumPy, pandas, Matplotlib, Seaborn czy Scikit-learn. Daje to bardzo szerokie możliwości zarówno w kontekście modelowania danych, jak i ich przetwarzania. 

Przy użyciu węzła Rozszerzenie Przekształcenia można również wykorzystywać skomplikowane wyrażenia regularne przy pomocy modułu re. Te z kolei mogą wesprzeć analizy text miningowe, co jest oczywiście dość szerokim tematem i zasługuje na osobne omówienie. 

 

 Mamy nadzieję, że tym szybkim przeglądem możliwości udało się zachęcić Was do bliższego przyjrzenia się Pythonowi w PS CLEMENTINE PRO i do rozpoczęcia z nim własnej przygody.


Powiązane wydarzenia:



Udostępnij artykuł w social mediach