Sytuacja kobiet w IT w 2024 roku
24.09.20195 min
Łukasz Prokulski

Łukasz ProkulskiData analyst, R developer, PMO manager, bloggerprokulski.net

Model jako API (w R)

Zobacz, jak przygotować model i funkcje w języku R do uruchomienia web service’u.

Model jako API (w R)

Budujemy model w R. Daje nawet dobre wyniki. Ale jak go użyć produkcyjnie? Gdyby tak pytać o wynik korzystając z API?

Dzisiaj o tym jak przygotować w R web-serwis, czyli narzędzie które zapytane (w odpowiedni sposób) przez internet zwróci nam jakiś wynik. W naszym przypadku odpowiedzią będzie wynik działania modelu.

Zadanie podzielimy na kilka etapów:

  • przygotowanie modelu
  • przygotowanie funkcji, które będą używać naszego modelu
  • web-service korzystający z tych funkcji

Przygotowanie modelu

Na warsztat weźmiemy bardzo prosty przykład i prosty model. Będziemy przewidywać gatunek irysa na podstawie rozmiarów płatka (petal) i kielicha (sepal) – czyli wykorzystamy popularny w uczeniu maszynowym zbiór iris.

Model też nie będzie wydumany. Na tym zbiorze sprawdza się las losowy, więc bez większych kombinacji po prostu takiego modelu użyjemy. W R to banalne:


I to wszystko – model jest gotowy. Oczywiście na inne potrzeby może bardziej skomplikowany model, z przetworzeniem danych wejściowych, szukaniem dodatkowych cech i tak dalej – ale nie o tym jest ten wpis.

Przygotowanie predykcji

Teraz czas na przygotowanie funkcji, która zwróci wynik działania modelu. Jako parametry podamy rozmiary płatka i kielicha, w odpowiedzi oczekujemy gatunku irysa.


Sprawdźmy jak nasz model odpowiada na przykładowe zapytanie:

I znowu – to wszystko. Teraz wystarczy to ubrać w API.

Przygotowanie web-service'u

Z pomocą przychodzi pakiet plumber, który właściwie całą pracę wykona za nas. O ile mu pomożemy.

W pierwszej kolejności budujemy skrypt (w R), w którym zdefiniujemy funkcje, jakie będą dostępne przez API.
Zacznijmy od prostego przykładu: przepisanie podanego jako argument tekstu. Odpowiedni kod rozumiany przez plumber to:


W pierwszej linii opisujemy krótko co funkcja (metoda API) robi.

W drugiej (i ewentualnie kolejnych) – jakie są parametry (ich nazwy) i do czego służą.

Trzecia linia mówi o sposobie pobrania parametrów (metoda HTTP: w tym przypadku GET, ale może by POST) oraz pod jakim adresem dostępna jest metoda.

Kolejne linie to już sama funkcja. Zwróćcie uwagę, że nie musimy już podawać jej nazwy.

W powyższym przykładzie, mając API uruchomione na adresie http://serwer.api możemy wywołać naszą funkcję poprzez zapytanie:

http://serwer.api/echo?msg=tekst bedacy parametrem

co w odpowiedzi da nam:

<p>Loading...</p>