Bogaty zestaw technik statystycznych, funkcji przekształceń i wizualizacji może zostać dodatkowo uzupełniony o funkcjonalności języka R. Przy czym PS IMAGO PRO zapewnia nie tylko możliwość uruchamiania skryptów czy pobierania zewnętrznych danych. Analitykom został udostępniony szereg funkcjonalności, które pozwalają na wygodną współpracę pomiędzy tymi dwoma środowiskami: pobieranie zmiennych z edytora danych, zapis przekształceń do nowego zbioru, pobieranie i modyfikacja właściwości zmiennych, włączanie obiektów wynikowych do raportów, czy nawet parametryzacja natywnych procedur PS IMAGO PRO.
Chcesz poznać podstawy pracy z R?
Zapraszamy na szkolenie OB 1b. R. Podstawy działania języka, praca z danymi i obiektami wynikowymi
Wtyczka pozwalająca wykorzystać R podczas pracy z PS IMAGO PRO nie jest domyślnie zainstalowana, jednak sama procedura instalacji jest prosta i przebiega w kilku krokach:
- Pobranie i instalacja na lokalnym komputerze właściwej wersji języka R. Dla PS IMAGO PRO 7 jest to wersja 3.6.x a dla poprzedniej wersji 3.5.x
- Instalacja wtyczki integrującej, której pobranie umożliwia centrum rozszerzeń w menu Rozszerzenia -> Centrum Rozszerzeń. Rozszerzenie którego poszukujemy to STATS_RXX_CONFIGURATION, gdzie XX to numer odpowiedniej wersji R (36 dla PS IMAGO PRO 7 i 35 dla wersji szóstej)
- Po zaznaczeniu opcji Pobierz Rozszerzenie i kliknięciu przycisku OK wtyczka zostanie dodana do oprogramowania
- W menu Rozszerzenia pojawi się nowa pozycja: Konfiguracja RX.X, gdzie X.X to wersja zainstalowanego rozszerzenia. Konfiguracja wymaga od użytkownika jedynie wskazania katalogu, w którym zainstalowana jest właściwa wersja języka R.
Warto zaznaczyć, że R jest w ten sposób zainstalowany jako zewnętrzny program a wtyczka umożliwia tylko wykorzystanie jego funkcjonalności. Użytkownik ma przede wszystkim dostęp do wszystkich bibliotek, które znajdują się w zainstalowanym środowisku. Dodanie biblioteki, której nie ma w podstawowej wersji instalacyjnej języka, pozwoli również na wykorzystanie w pracy z PS IMAGO PRO funkcji, których ona dostarcza.
Uruchamianie skryptów R za pomocą PS IMAGO PRO
Skrypty R najwygodniej jest uruchamiać za pośrednictwem edytora poleceń. Komendy R powinny być zapisane w bloku zawartym pomiędzy poleceniami BEGIN PROGRAM R. – END PROGRAM. Polecenia mogą być zapisane w edytorze poleceń w jednym bloku lub w celach porządkowych mogą zostać rozbite na kilka poleceń – zakończenie bloku nie usuwa z pamięci PS IMAGO PRO obiektów języka R takich jak zmienne, ramki danych czy funkcje. Można więc uruchomić skrypt, następnie komendy języka poleceń wbudowane w PS IMAGO PRO a potem ponownie uruchomić kolejny skrypt. Program będzie pamiętał ustawienia i parametry podczas trwania sesji.
Jeżeli jesteśmy zmuszeni uruchomić komendę PS IMAGO PRO, to nie możemy jej wpisać bezpośrednio w bloku ze skryptem R. Przykładowo, jeżeli chcemy przekształcić zmienną przed jej pobraniem przez R, czy dołączyć zewnętrzne dane, to musimy albo wykorzystać odpowiednie funkcje języka R, rozbić blok, albo też (i jest to opcja dająca wbrew pozorom dużo większe możliwości) wykorzystać specjalne polecenie, które pozwala uruchomić komendę za pomocą skryptu R. Zostanie ono omówiona w dalszej części tekstu.
Język R pozwala wprowadzić wartości zmiennych wprost za pośrednictwem kodu. Wykonajmy zamieszczony poniżej przykładowy, prosty kod.
![r w ps imago pro](https://www.predictivesolutions.pl/uploads/blog/r-w-ps-imago-pro/r-w-psip-1.png)
Rysunek 1. Skrypt języka R w edytorze poleceń PS IMAGO PRO
Skrypt tworzy dwie zmienne: zmienną kraje typu czynnikowego, która zawiera informacje o krajach. Zmienna wart to wartości, wyrażone jako wektor liczb. Trzecim poleceniem jest wywołanie wykresu słupkowego na którym zostaną zaprezentowane trzy wartości. Aby uruchomić skrypt wystarczy zaznaczyć fragment polecenia BEGIN PROGRAM R, choć najlepiej jest zaznaczyć cały blok kodu R i uruchomić kod albo poprzez ikonkę zielonego trójkątnego przycisku odtwarzania Uruchom zaznaczone menu Uruchom -> Zaznaczony kod. Jeżeli chcemy uruchomić cały kod, a nie tylko jego fragment to możemy skorzystać z opcji Uruchom -> Wszystko. Efektem działania kodu jest wykres słupkowy, który zostanie zamieszczony w oknie edytora raportów.
Naturalnie wprowadzanie ręczne danych do skryptu nie jest efektywną metodą pracy. R uruchomiony poprzez język poleceń PS IMAGO PRO może otwierać dowolne zbiory danych (na ile oczywiście pozwalają zainstalowane biblioteki), przetwarzać je i zapisywać wyniki bez potrzeby zamieszczania czegokolwiek w zbiorze danych PS IMAGO PRO. Takie postępowanie sprawia jednak, że obiekty i dane analizowane za pomocą funkcji R są niedostępne dla komend i procedur PS IMAGO PRO. Obiekty wynikowe mogą zostać wykorzystane jedynie podczas tworzenia raportów.
Wybrane komendy integrujące środowisko R z PS IMAGO PRO
Bezpośrednie wykorzystanie obiektów wynikowych języka R w raportach tworzonych za pomocą PS IMAGO PRO to jedna z podstawowych korzyści wynikających z integracji tych dwóch środowisk analitycznych. Dużo więcej możliwości daje jednak praca na aktywnym zbiorze danych, gdyż pozwala na łączenie komend PS IMAGO PRO z funkcjami R, sprawniejsze zarządzanie danymi za pomocą edytora danych, pobieranie słownika i atrybutów zmiennych bezpośrednio do obiektów R, parametryzację poleceń za pośrednictwem R, a wreszcie, na zapisywanie wyników do nowego zbioru danych PS IMAGO PRO.
Przeanalizujmy prosty przykład. Zbiór danych zawiera ceny sprzedaży 93 używanych samochodów. Oprócz ceny (Cena) mamy dostęp do informacji o lokalizacji producenta (Region), pojemności (Pojemność), typie silnika (Diesel, Gaz), przebiegu (Przebieg) oraz wieku auta (Lata).
Zacznijmy od pobierania danych. Do tego celu należy służy zamieszczona poniżej komenda:
spssdata.GetDataFromSPSS()
Polecenie to pozwala na dokonanie szeregu ustawień takich jak:
- Wybór zmiennych do pobrania (parametr: variables)
- Wybór przypadków do analizy (parametr: cases)
- Wskazanie zmiennej etykietującej obserwacje (row.label)
- Sposób traktowania braków danych (parametry: keepUserMissing i missingValueToNA)
- Konwersja zmiennych jakościowych na zmienne typu factor (factorMode)
- Sposób konwersji zmiennych daty i czasu (rDate,dateVar)
Domyślne ustawienia, bez żadnych dodatkowych parametrów, spowodują pobranie wszystkich zmiennych i wszystkich przypadków do ramki danych (obiekt R typu data.frame). Dla naszych celów zmodyfikuję sposób traktowania zmiennych jakościowych. Dla zmiennych posiadających etykiety program może pobrać wartości (liczby) za pomocą ustawienia parametru na factorMode="levels" albo etykiety (factorMode="labels"). Oczywiście etykiety można później pozyskać ze zbioru danych za pomocą odpowiedniego polecenia i wykorzystywać je podczas prezentacji wyników. Po modyfikacji polecenie zapisujące dane ze zbioru do ramki danych przedstawia się w następujący sposób:
dane<-spssdata.GetDataFromSPSS(factorMode="labels")
Pobrane dane możemy wprowadzić do modelu lub po prostu zaprezentować na wykresach – wszystkie funkcje dostępne w R mogą teraz skorzystać z danych ze zbioru PS IMAGO PRO. Poniżej zamieściłem kod przykładowego wykresu słupkowego, który obrazuje liczbę samochodów w bazie według pochodzenia samochodu (producenta).
freq<-table(dane$Region)
coord<-barplot(freq,main="Liczba samochodów w bazie",ylim=c(0,70),
xlab="Pochodzenie",ylab="Liczebność",col="Lightblue")
text(x=coord,y=freq+2,labels=freq)
Obiekt freq to tabela częstości obrazująca liczbę samochodów według krajów. Tworząc wykres zapisujemy jednocześnie współrzędne punktów, które bardzo przydadzą się podczas wyświetlania etykiet. Wykres słupkowy rysujemy funkcją barplot(). Ustawiamy tytuły osi (parametry xlab i ylab), tytuł wykresu (parametr main), oraz jego kolorystykę (parametr col).
Funkcja text() odpowiada za etykiety i ich położenie względem osi x (tutaj przydają się współrzędne zaczytane z wykresu), oraz y (nasze liczebności z tabeli, ale powiększone o 2, żeby leżały nieco powyżej słupka), wreszcie parametr labels określa tekstową zawartość etykiet, czyli w naszym przypadku znowu są to wartości z tabeli częstości.
![Rysunek 2. Wykres przygotowany za pomocą komendy R](https://www.predictivesolutions.pl/uploads/blog/r-w-ps-imago-pro/r-w-psip-2.png)
Rysunek 2. Wykres przygotowany za pomocą komendy R
W edytorze raportów obiekty wynikowe R domyślnie ustawiają się jako RGraphic. Dla każdego obiektu graficznego możemy zmodyfikować tytuł, wykorzystując następującą funkcję:
spssRGraphics.SetGraphicsLabel()
W nawiasach należy podać własną etykietę. Warto pamiętać, że etykietę ustawiamy na stałe, dla wszystkich kolejnych wykresów. Tworząc wizualizacje musimy więc teraz każdorazowo ją przestawiać, co jednak ułatwia identyfikację poszczególnych wykresów. Brak wartości w nawiasie przywraca domyślny opis obiektów. Przygotujmy kolejny wykres – tym razem zaprezentujemy na wykresie rozrzutu zależność pomiędzy wiekiem samochodu a jego ceną.
W poprzednim przykładzie etykiety osi ustawialiśmy ręcznie. Mogą one jednak zostać ustawione na podstawie etykiet zapisanych w zbiorze danych – służy do tego funkcja zamieszczona poniżej:
spssdictionary.GetVariableLabel()
Funkcje z tej grupy pozwalają na współpracę pomiędzy skryptami R a aktywnym zbiorem danych PS IMAGO PRO. Umożliwiają między innymi pobranie nazw, etykiet i etykiet wartości, pobieranie atrybutów, poziomu pomiaru, czy formatu wskazanych zmiennych. Polecenia wraz z funkcją tworzącą wykres rozrzutu zostały zamieszczone poniżej. Etykiety zostały pobrane jako zmienne i wykorzystane w kodzie rysującym wykres.
cenaLab<-spssdictionary.GetVariableLabel("Cena")
lataLab <-spssdictionary.GetVariableLabel("Lata")
plot(dane$Lata,dane$Cena,xlab=lataLab,ylab=cenaLab,
main="Zależność pomiędzy wiekiem a ceną samochodu",
col="Black",bg="Lightblue",pch=21,cex=1.5)
Wykres będący efektem kodu został zamieszczony poniżej.
![Rysunek 3. Wykres rozrzutu pomiędzy wiekiem a ceną samochodu](https://www.predictivesolutions.pl/uploads/blog/r-w-ps-imago-pro/3.%20Wykres%20rozrzutu.png)
Rysunek 3. Wykres rozrzutu pomiędzy wiekiem a ceną samochodu
Jak wspomniałem we wstępie komend języka poleceń PS IMAGO PRO nie da się bezpośrednio uruchomić w skrypcie. Takie działanie spowoduje błąd programu – R nie rozpozna komend, które pochodzą z innego środowiska. Jeżeli chcemy wykonać jakieś przekształcenie, ale niekoniecznie chcemy dzielić blok BEGIN PROGRAM R. - END PROGRAM to możemy skorzystać z funkcji:
spsspkg.Submit()
Treść komendy powinna być podana w cudzysłowie i nie należy zapominać o kropce na końcu polecenia. Komendy nie muszą być zapisane w 1 linii. Powinny być one jednak zapisane zgodnie ze wszystkimi regułami obowiązującymi w edytorze poleceń.
Aby zobrazować działanie tej funkcji wykonajmy nieco bardziej skomplikowane zadanie. Chcielibyśmy dla wszystkich zmiennych ilościowych w zbiorze danych przygotować histogram w oparciu o procedurę GRAPH /HISTOGRAM. Naturalnie chcemy ją uruchomić w skrypcie R. Należy więc w pętli przeskanować listę zmiennych, pobrać dla każdej z nich poziom pomiaru i jeżeli jest on poziomem ilościowym (scale) wygenerować histogram. Do pobrania poziomu pomiaru służy funkcja:
spssdictionary.GetVariableMeasurementLevel()
Pętla pobiera nazwę zmiennej (zm_name) z analizowanej ramki danych a następnie odwołuje się za jej pomocą do zmiennych w zbiorze danych. R znakomicie sprawdza się również jako język tworzenia makro-poleceń dla PS IMAGO PRO. Poniżej zamieściłem kod całej procedury:
for (zm_name in names(dane)){
if (spssdictionary.GetVariableMeasurementLevel(zm_name) == "scale"){
spsspkg.Submit(paste("GRAPH /HISTOGRAM=",zm_name,"."))
}
}
Tworząc polecenie nierzadko będziemy zmuszeni połączyć żądany parametr z kodem procedury. Z łatwością możemy to zrobić korzystając z funkcji paste() dostępnej w języku R. Wynikiem działania polecenia jest zestaw 4 histogramów, których nie będziemy już zamieszczać w tekście.
Poniżej zamieściłem również cały opisywany kod.
![Rysunek 4. Skrypt wykonanych poleceń](https://www.predictivesolutions.pl/uploads/blog/r-w-ps-imago-pro/r-w-psip-4.png)
Rysunek 4. Skrypt wykonanych poleceń
Zaprezentowane w niniejszym tekście funkcjonalności to jedynie wybrany fragment możliwości, jakie daje współpraca pomiędzy obydwoma środowiskami. Sama integracja przebiega sprawnie i po opanowaniu zasad pracy z edytorze poleceń nie jest szczególnie skomplikowana. R pozwala poszerzyć możliwości PS IMAGO PRO a z drugiej strony osoby pracujące w R zyskują bogate i wygodne narzędzia przygotowania danych, zarządzania danymi, procedury statystyczne czy wizualizacje dostępne w PS IMAGO PRO. Wyniki działania skryptów R mogą być wykorzystywane podczas tworzenia raportów, co czyni proces automatyzacji i raportowania jeszcze bardziej efektywnymi.