useR, grafy i rekomendacje filmów

Minął już ponad tydzień od (fantastycznie zorganizowanej) konferencji useR 2015. Dopiero teraz znalazłem trochę czasu by zebrać garść wrażeń. Przegląd wybranych wystąpień z krótkimi komentarzami znaleźć można w agregacie blogów rbloggers. Ograniczę się więc wrażenia do kilku tematów, ale napiszę o nich ciut więcej. Dziś będzie o tutorialu ,,Statistical Analysis of Network Data’’, który poprowadził Gábor Csárdi (Harvard). Link do materiałów: http://igraph.github.io/netuser15/user-2015.html.

Tutorial w znakomitej większości był poświęcony bibliotece igraph (http://igraph.org/) do której dostępne są łączniki z poziomu R i Pythona. Łącznik dla R to pakiet o nazwie igraph. Zgodnie z nazwą tutoriala nacisk położono na analizę danych sieciowych, ale nie zabrakło przykładów wizualizacji grafów. Zarówno statycznych, zaimplementowanych w igraph jak i dynamicznych zaimplementowanych w pakiecie networkD3 (skądinąd autorstwa Christopher Gandrud & JJ Allaire z RStudio). Obie biblioteki są przedstawione w świetnym wprowadzenie do wizualizacji sieci http://kateto.net/network-visualization autorstwa Katherine Ognyanova.

Poniżej przedstawię wybrane funkcje z tego pakietu, ale zanim to zrobię małe wprowadzenie do danych, które użyjemy.

Niedawno pisałem o studenckich projektach systemu rekomendującego filmy. Używając pakietu networkD3 można sieci podobieństwa pomiędzy filmami ciekawie wizualizować, zobacz prototyp: tutaj lub tutaj lub poniżej.

Wracamy do tutoriala.

Pakiet igraph poza wizualizacją pozwala na (względnie) łatwe operacje na grafach, takie jak stworzenie grafu, dodanie/usunięcie wierzchołków, krawędzi, konwersje pomiędzy różnymi reprezentacjami grafu (macierz sąsiedztwa / reprezentacja listowa). Pracować można na grafach skierowanych i nie skierowanych, z wagami na krawędzie lub bez wag, z prostymi grafami lub multi-grafami. Do operacji na wierzchołkach i krawędziach można wykorzystać przeciążone operatory [ i [[ oraz funkcje E() i V() (odpowiednio, do operacji na krawędziach / wierzchołkach).

Przykłady zamieszczone w tutorialu dotyczą połączeń pomiędzy lotniskami w stanach zjednoczonych, a więc nudy na pudy. Pobierzmy dane o podobieństwach pomiędzy filmami, zbudujmy z nich graf oraz pokażmy kilka przykładowych operacji.

Wierzchołki możemy wybierać nie tylko przez nazwy czy indeksy, ale również przez ich właściwości, np. sąsiedztwo z określonym wierzchołkiem, czy stopień w sieci.

Jak sprawdzić co sąsiaduje z filmem ‘Lego: Przygoda’? Które wierzchołki mają więcej niż 16 krawędzi?

Poza podstawowymi operacjami na grafach, dostępne są również funkcje analityczne, takie jak funkcje do wyznaczania najkrótszej ścieżki, macierzy odległości, rozmaite funkcje wyznaczające centralność wierzchołków.

Jaka najkrótsza ścieżka łączy Lego: Przygoda i Whiplash?

Narysujmy ten graf z zaznaczoną ścieżką. Aby określić parametry rysowanego grafu wystarczy modyfikować właściwości takie jak color czy size.

Dla dużych grafów przydatne mogą być funkcje służące do grupowania wierzchołków (czyli tzw. clustering). Mając wyznaczone klastry możemy pracować na podsieciach zawierających tylko wierzchołki z danego klastra jak też pracować na meta-sieci w której wierzchołki są klastrami oryginalnej sieci.

Zróbmy proste klastrowanie i zaznaczmy je na grafie.

Nic nie widać ;-)

Tak zazwyczaj jest gdy klastruje się przy domyślnych ustawieniach.

Mam nadzieję, że te kilka przykładowych instrukcji pokazuje jak prosto można pracować z grafami. Więcej funkcji znaleźć można w dołączonych materiałach lub w dokumentacji. Dane o filmach dotyczą podzbioru 2000 filmów, niedługo będzie ich więcej będzie można pobawić się z większym podzbiorem i tworzyć inne ciekawe sieci.

Jedna myśl na temat “useR, grafy i rekomendacje filmów”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">