IBM SPSS Modeler i Python

Start / Blog / IBM SPSS Modeler i Python

W pierwszym wpisie po wakacjach chciałem pochylić się nad zagadnieniem wykorzystania języka programowania Python w narzędziu IBM SPSS Modeler.

W celu zobrazowania działania owego języka w IBM SPSS Modeler posłużę się, często wykorzystywanym przeze mnie, przykładem pętli, w której kolejne wartości z tabeli wyjściowej (węzeł Tabela) wykorzystywane są iteracyjnie w węźle Selekcja. Zbudowany przepływ danych wygląda następująco:

Python1

Węzeł Selekcja wykorzystuje następujący warunek:
branch = ‚$P-Branches’,
gdzie jako wartości parametru Branch podstawiane są kolejne wartości z tabeli wyjściowej ‘Branches’:

Python2

Wynikiem stworzonego przepływu danych są wykresy rozkładu zmiennej age osobno dla każdego z oddziałów:

Python3

 

Uruchomienie owego iteracyjnego przepływu danych wymaga skorzystania z edytora skryptów i napisania pętli. Pętlę taką można napisać zarówno korzystając ze ‘starej składni’ SPSS Modeler, jak i z języka Python. Na początek zobaczmy, jak wygląda skrypt napisany w ‘starej składni’:

Python4

Bardzo dużą zaletą owego skryptu jest zwięzłość i prostota. Do węzłów można się odnosić bezpośrednio poprzez ich nazwy. Skrypt może zawierać wyrażenia napisane w składni CLEM (składnia wykorzystywana w węzłach SPSS Modeler). Oczywistą wadą owego języka jest jednak fakt, że nie może on być wykorzystany nigdzie poza SPSS Modeler. Język jest ograniczony, nie można pisać w nim funkcji, ciężko jest się go nauczyć (brak podręczników i skryptów). Moim zdaniem będzie on w coraz mniejszym stopniu wspierany przez IBM i niedługo zaniknie.

Python z kolei jest standardem wykorzystywanym również poza IBM. Za wikipedią:

„Pythonjęzyk programowania wysokiego poziomu ogólnego przeznaczenia, o rozbudowanym pakiecie bibliotek standardowych, którego ideą przewodnią jest czytelność i klarowność kodu źródłowego. Jego składnia cechuje się przejrzystością i zwięzłością.”

W internecie można znaleźć wiele miejsc, z których można się nauczyć Pythona, np.:

Powyższy kod zapisany w języku Python wygląda w następujący sposób:

Python5

Na początku importuję API SPSS Modeler. Następnie deklaruję zmienną lokalną stream, która reprezentuje bieżący przepływ danych. W dziewiątej linii deklaruję zmienną lokalna table. Jak widać odwołanie do poszczególnych węzłów jest nieco bardziej pracochłonne niż w starej składni SPSS, w której wystarczyło podać nazwę węzła. Oczywiście wykorzystanie komendy findByType(), nie jest jedynym sposobem odwołania się do węzła. Kombinacja klawiszy Ctrl+Spacja pomaga nam znaleźć odpowiednie wyrażenie zaczynające się od zadanej frazy. Warto jeszcze dodać, że bardziej leniwi użytkownicy zamiast nazwy lub typu węzła mogą wpisać None.

Następnie uruchamiam węzeł końcowy tabelę ‘Branches’. Wywołać węzeł możemy na kilka sposobów. Oto przykładowe komendy:

  • runAll – uruchomienie wszystkich węzłów końcowych, które znajdują się w przepływie danych

  • runSelected – uruchomienie wskazanego węzła

  • runScript – uruchominie skryptu

W przypadku, gdybym chciał uruchomić więcej niż jeden węzeł, mogę stworzyć listę węzłów jako zmienną lokalną. Przykładem takiej zmiennej jest zmienna nodes. Węzły uruchamiam przy użyciu komendy runSelected.

Wykorzystanie funkcji: getRowSet() oraz getRowCount() umożliwia mi obliczenie liczby oddziałów, dla których budowane będą histogramy. W ostatniej sekcji definiuje funkcję, która wykorzystując pętle tworzy histogramy zmiennej age w kolejnych oddziałach. Liczba iteracji równa jest liczbie oddziałów. W każdej iteracji nazwa kolejnego oddziału podawana jest do węzła Selekcja. W tym celu wykorzystuję komendę setParameterValue. Parametry każdego węzła można zmieniać korzystając z komendy setPropertyValue.

Podsumowując, pisanie skryptów w języku Python wydaje się bardziej pracochłonne, ale nauczenie się owej składni jest wysiłkiem, który w dłużej perspektywie na pewno się opłaci. Głównym argumentem ‘za’ są bardzo szerokie możliwości zapewniane przez Pythona, które wykraczają daleko poza zaprezentowany przykład.

Dla zainteresowanych pisaniem własnych skryptów w języku Python załączam link do oficjalnego przewodnika.