W gąszczu grafów - Toruń JUG

Post on 17-Jun-2022

2 views 0 download

Transcript of W gąszczu grafów - Toruń JUG

W gąszczu grafówczyli jak zostać bohaterem swoich danych w Neo4j

a code

a codep u b l i c v o i d m ( ) { n ( t h i s ) ;}

p u b l i c s t a t i c n ( O b j e c t o b j ) { i f ( o b j = = n u l l ) { d o S o m e t h i n g ( ) ; }}

inliningp u b l i c v o i d m ( ) { i f ( t h i s = = n u l l ) { d o S o m e t h i n g ( ) ; }}

null check foldingp u b l i c v o i d m ( ) { i f ( f a l s e ) { d o S o m e t h i n g ( ) ; }}

dead code eliminationp u b l i c v o i d m ( ) {

}

and last but not least-XX:+UseFastEmptyMethods

WAT?

W gąszczu grafówczyli jak zostać bohaterem swoich danych w Neo4j

O mnie czyli kim jestemJarek Pałka

Allegro.tech, obecnie tajny projekt o którym nie mogę mówić

JDD/4Developers, naczelny sprawca zamieszania czyli człowiekod kłopotów,

a tak poza tym jeśli cokolwiek ma związek z JVM i HotSpot,bytecode’em, parserami, językami programowania na JVM oraztechnikami JIT, wcześniej czy później się tym zainteresuje :)

były architekt, manager, sysadmin i człowiek od wydajności,

O mnie czyli kim chciałbymbyć

Neo4j, obecnie modelowanie rzeczywistości w grafach, wprzyszłości rozbudowa parsera Cypher, lepsze narzędzia doimportu danych

OpenJDK kontrybutor, może w przyszłym życiu

Python3 na JVM, ale to już na emeryturze :)

Wstęp do grafów

Odświeżający łyk teoriigraf G składa się z dwóch zbiorów – V oraz E, przy czymV jest niepustym zbiorem, którego elementy nazywane sąwierzchołkami, a E jest rodziną dwuelementowych podzbiorów zbioruwierzchołków V, zwanych krawędziami

Gatunki i podgatunkigraf prosty

graf skierowany

graf mieszany

graf z wagami

hipergraf

Ważne pojęciagęstość grafu - stosunek ilości wierzchołków do krawędzi

droga/ścieżka - kolekcja wierzchołków lub krawędzi

cykl - kolekcja połączonych wierzchołków, gdzie pierwszyelement jest taki sam jak ostatni

klika - podzbiór wierzchołków, gdzie istnieje połączeniepomiędzy każdym z każdym

stopień wierzchołka - ilość krawędzi wychodzących zwierzchołka

Algorytmy i inne znane ilubiane pojęcia

algorytmy A*, Dijkstra, Bellman-Ford, Floyd-Warshall,

przeszukiwania grafu wgłąb i wszerz,

"clusters"

"connected components"

"small worlds"

Wstęp do Neo4j

Wstęp do Neo4j“A Graph — records data in › Nodes — which have › Properties”

“Nodes — are organized by › Relationships — which also have › Properties”

“Nodes — are grouped by › Labels — into › Sets”

Słowem wyjaśnieniaNeo4j to baza danych a nie nakładka na inną bazę danych

Własny mechanizm przechowywania danych, zooptymalizowanypod strukturę grafów

Dostępne wsparcie dla następujących modeli:

embedded

serwer (REST)

serwer (binary protocol, prace ciągle trwają)

HA (edycja "enterprise")

Podstawowe elementywęzły ("node")

identyfikator

etykiety ("labels")

własności

Węzeł

Podstawowe elementyrelacje ("relationship")

typ relacji ("relationship type")

kierunek ("direction")

własności

Relacje

Podstawowe elementyschemat ("schema")

indeksy ("index")

ograniczenia ("constraints")

Własności węzłów i relacjiwłasności ("properties")

prymitywy Java (long, int, float, etc.)

łańcuchy znakowe

tablice powyższych

Podstawy Cypher

Podstawy Cypher*Looks like SQL, feels like pattern-matching*

M A T C H ( n : L a b e l ) R E T U R N n ;M A T C H ( n ) - [ : L I K E S ] - > m r e t u r n m ;M A T C H ( n ) - [ r : L I K E S ] - > m r e t u r n r ;

Dopasowywanie w grafach( a ) - - > ( b )( a ) - - > ( b ) < - - ( c )( a : U s e r ) - - > ( b )( a : U s e r : A d m i n ) - - > ( b )( a ) - [ r : R E L _ T Y P E ] - > ( b )( a ) - [ * 2 ] - > ( b )( a ) - [ * 3 . . 5 ] - > ( b )

"Patterns are expressions too"Wzorce dopasowania, są wyrażeniami, które zwracają kolekcję

węzłów i relacji (ścieżek). Wszędzie tam gdzie możesz użyćwyrażenia (klauzula 'WHERE', 'RETURN', 'WITH', etc.), możesz

też użyć wzorców dopasowań.M A T C H a - [ : R E L ] - b W H E R E N O T b - [ : R E L ] - c R E T U R N b ;M A T C H a - [ : R E L ] - b R E T U R N a , b - [ : R E L ] - c ;M A T C H a - [ : R E L ] - b W I T H a , b - [ : R E L ] - c R E T U R N a , c o u n t ( d i s t i n c t c ) ;

Praca z kolekcjamiR E T U R N [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] A S c o l l e c t i o nR E T U R N r a n g e ( 0 , 1 0 ) [ 3 ]R E T U R N l e n g t h ( r a n g e ( 0 , 1 0 ) [ 0 . . 3 ] )R E T U R N [ x I N r a n g e ( 0 , 1 0 ) W H E R E x % 2 = 0 | x ^ 3 ] A S r e s u l t

Predykaty i zawężanie listR E T U R N [ x I N r a n g e ( 0 , 1 0 ) W H E R E x % 2 = 0 | x ^ 3 ] A S r e s u l t ;

W H E R E a . n a m e = ' A l i c e ' A N D b . n a m e = ' D a n i e l ' A N DA L L ( x I N n o d e s ( p ) W H E R E x . a g e > 3 0 ) ;

W H E R E a . n a m e = ' E s k i l ' A N D A N Y ( x I N a . a r r a y W H E R E x = " o n e " ) ;

W H E R E n . n a m e = ' A l i c e ' A N D N O N E ( x I N n o d e s ( p ) W H E R E x . a g e = 2 5 ) ;

W H E R E n . n a m e = ' A l i c e ' A N DS I N G L E ( v a r I N n o d e s ( p ) W H E R E v a r . e y e s = " b l u e " ) ;

M A T C H ( n )W H E R E E X I S T S ( n . n a m e )R E T U R N n . n a m e A S n a m e , E X I S T S ( ( n ) - [ : M A R R I E D ] - > ( ) ) A S i s _ m a r r i e d

ŚcieżkiM A T C H p = ( ( a ) - - ( b ) ) R E T U R N n o d e s ( p )M A T C H p = ( ( a ) - - ( b ) ) R E T U R N r e l a t i o n s h i p s ( p )M A T C H p = ( ( a ) - [ : R A I L S ] - ( b ) ) U N W I N D n o d e s ( p ) A S n r e t u r n D I S T I N C T n ;

PotokiKlauzula 'WITH' umożliwia przetwarzanie zapytań z w potokach,

gdzie wynik poprzedniego zapytania jest przekazywany donastępnego, myślmy o tym jak o '|' w *NIX.

M A T C H ( d a v i d { n a m e : " D a v i d " } ) - ( o t h e r P e r s o n ) - > ( )W I T H o t h e r P e r s o n , c o u n t ( * ) A S f o a fW H E R E f o a f > 1R E T U R N o t h e r P e r s o n

Pułapki CypherPonieważ Cypher jest składniowo, młodszym bratem SQL,wpadniesz w pułapkę pisania zapytań relacyjnych,które będą wykorzystywać iloczyn kartezjański.

To nie jest błogosławiona droga grafu.

Przygotowanie warsztatuNa nośniku USB lub też dla tych połączeniem:

prezentacja

dane do 3 modeli z którymi będziemy pracować

dokumentacja neo4j

neo4j-community-2.2.3

Narzędzia pracykonsola neo4j-shell

konsola interaktywna

Model zerowy, czyli coś narozgrzewkę

Zacznijmy od prostego modelu szkoleń, trenerów i umiejętności.

Model

Przygotowanie danychC R E A T E ( t 0 : T r a i n i n g { t i t l e : " A r c h e o l o g i a k o d u a a r c h i t e k t u r a " } ) , ( n 0 : T r a i n e r { n a m e : " J a r o s ł a w P a ł k a " } ) , ( s 0 : S k i l l { n a m e : " G i t " } ) , ( s 1 : S k i l l { n a m e : " S o n a r Q u b e " } ) , t 0 - [ : A U T H O R E D _ B Y ] - > n 0 , t 0 - [ : R E Q U I R E S ] - > s 0 , t 0 - [ : I N T R O D U C E S ] - > s 1 ;

Ćwiczenie 1Znajdź wszystkie szkolenia przygotowane przez danego trenera.

Ćwiczenie 2Znajdź najszybszą ścieżkę szkoleń o danej umiejętności do innej

docelowej umiejętności.Podpowiedź:Cypher oferuje funkcję 'shortestPath', która zwraca najkrótszą ścieżkę.

 

reduce na ratunekM A T C H ( a : S k i l l { n a m e : " J a v a " } ) < - [ : R E Q U I R E S ] - ( b : T r a i n i n g )M A T C H ( c : T r a i n i n g ) - [ : I N T R O D U C E S ] - > ( d : S k i l l { n a m e : " R E S T " } )M A T C H p = a l l S h o r t e s t P a t h s ( b - [ r e l s : R E Q U I R E S | I N T R O D U C E S * ] - c )W H E R E l e n g t h ( p ) % 2 = 0 A N D A L L ( i d x i n r a n g e ( 0 , l e n g t h ( p ) - 2 , 2 ) W H E R E t y p e ( r e l sR E T U R N p

Model pierwszy, czyli co kryjeTwoja skrzynka pocztowa

W tym modelu, naszym grafem będzie skrzynka pocztowa.Poszukamy węzłów i krawędzi pośród:

wiadomości email

osób wysyłających i odbierających

Przygotowanie danychAby pracować z tym modelem, należy skopiować zawartość

katalogu datasets/mails.workshop. Zawiera on zanimizowane mailez mojej skrzynki mailowej, celem nadanie ćwiczeniu więcej

realizmu.

Zacznijmy od modeluA poniżej model grafu po zaimportowaniu zawartości skrzynki

pocztowej.

Ćwiczenia 1Wyszukajmy wszystkie maile które są odpowiedzią na innego

maila.Podpowiedź: węzły z etykietą Message posiadają pola Message-Id oraz In-Reply-To.

Ćwiczenie 2Znajdźmy najdłuższy wątek mailowy.

Podpowiedź: na początek spróbuj zidentyfikować te wiadomości, które są początkiem i końcem wątku

Słów kilka o wydajnościzapytań

Cypher umożliwia analizę planu zapytań, w celu ich optymalizacji.E X P L A I NM A T C H ( p : P e r s o n { n a m e : " T o m H a n k s " } )R E T U R N p

P R O F I L EM A T C H ( p : P e r s o n { n a m e : " T o m H a n k s " } )R E T U R N p

Sugestia: Bądź jak najbardziej specyficzny w swych zapytaniach, wykorzystuj etykiety i typy relacji.

Ćwiczenie 2bPrawdopodobnie napisaliście to zapytanie myśląc SQLem i to jaknajbardziej w porządku. Zobaczymy teraz co tak naprawdę potrafi

Neo4j i Cypher, czyli czas na utworzenie nowych relacji.

Indeksy ku chwale wydajnościC R E A T E I N D E X O N : M e s s a g e ( ` I n - R e p l y - T o ` ) ;C R E A T E I N D E X O N : M e s s a g e ( ` M e s s a g e - I d ` ) ;

Sprawdźmy teraz status indeksun e o 4 j - s h ( ? ) $ s c h e m aI n d e x e s O N : M e s s a g e ( I n - R e p l y - T o ) O N L I N E O N : M e s s a g e ( M e s s a g e - I d ) O N L I N EN o c o n s t r a i n t s

Ćwiczenie 2cTym razem wyszukajmy najdłuższego wątku, korzystając z

nowych krawędzi.Podpowiedź:Wzorce w Cypher mogą być traktowane jak wyrażenia,nie pasujący wzorzec zwraca pusty rezultat

Ćwiczenie 3Spróbujmy odnaleźć znajomych w naszej skrzynce, czyli "let’s go

social".

Ćwiczenie 3 / model

Ćwiczenie 4Poszukajmy grup znajomych w naszym grafie.

Podpowiedź:Uwaga na węzeł, który jest znajomym wszystkich,czyli właściciel skrzynki pocztowej, węzeł o id=2.Możemy go usunąc, lub dla zachowania struktury grafu,nadać mu inną etykietę.

Definicja: clusters - tightly knit groups characterised by a relatively high density of ties; this likelihood tends to be greater than the average probability of a tie randomly established between two nodes

Ćwiczenie 4aDwie podstawowe techniki wyznaczania klastrów to "Global

clustering coefficient" oraz "Local clustering coefficient"( ).https://en.wikipedia.org/wiki/Clustering_coefficient

Spróbujmy policzyć współczynnik techniką "local clusteringcoefficient".

Kęs teoriiWspółczynnik ten jest liczony jako prawdopodobieństwo że dwasąsiadujące losowe wybrane węzły także są ze sobą połączone.

=Ci

{ : , ∈ , ∈ E}∣∣ ejk vj vk Ni ejk ∣∣( − 1)ki ki

gdzie sąsiedztwo określamy jako:Ni

= { : ∈ E ∨ ∈ E}Ni vj eij eji

i to liczba sąsiadów danego węzła.ki

Wszystkie ręce na konsoleWystarczy policzyć ilość bezpośrednich sąsiadów, i ilość relacji

pomiędzy nimi.

"Go deeper" Definicja:strongly connected components - a graph is said to be strongly connectedif every vertex is reachable from every other vertex

Dwa podstawowe algorytmy to algorytm Kosaraju oraz algorytmTarjan. Ciągle kombinuję jak zapisać to w Cypher :), dla

wytrwałych nagroda :)

Algorytm Tarjana l g o r i t h m t a r j a n i s i n p u t : g r a p h G = ( V , E ) o u t p u t : s e t o f s t r o n g l y c o n n e c t e d c o m p o n e n t s ( s e t s o f v e r t i c e s )

i n d e x : = 0 S : = e m p t y f o r e a c h v i n V d o i f ( v . i n d e x i s u n d e f i n e d ) t h e n s t r o n g c o n n e c t ( v ) e n d i f e n d f o r

f u n c t i o n s t r o n g c o n n e c t ( v ) / / S e t t h e d e p t h i n d e x f o r v t o t h e s m a l l e s t u n u s e d i n d e x v . i n d e x : = i n d e x v . l o w l i n k : = i n d e x i n d e x : = i n d e x + 1 S . p u s h ( v )

Model drugi, czyli chodźmy dokina na film

W tym celu wykorzystamy bazę , tworzoną w ramachprojektu GroupLens Research, przy Uniwersytecie Stanu

Minnesota. Baza zawiera dane o filmach i rekomendacjach,wykorzystując system ocen punktowych w skali od 1-5.

MovieLens

Zacznijmy od modelu

Szybki kurs hodowania grafówL O A D C S V F R O M ' f i l e : d a t a . c s v ' A S l i n e F I E L D T E R M I N A T O R ' | 'W I T H l i n e [ 0 ] A S f i r s t n a m e , l i n e [ 0 ] A S l a s t n a m eC R E A T E ( : P e r s o n { f i r s t n a m e : f i r s t n a m e , l a s t n a m e : l a s t n a m e } ) ;

L O A D C S V W I T H H E A D E R S F R O M ' f i l e : d a t a . c s v ' A S l i n eC R E A T E ( : P e r s o n { f i r s t n a m e : l i n e . f i r s t n a m e , l a s t n a m e : l i n e . l a s t n a m e } ) ;

Ćwiczenie 1Rekomendacje z wykorzystaniem algorytmu "skip jump", jest to

technika oparta o prostą obserwację. Jeśli dwie osoby mająprzynajmniej jedną relację do tego samego węzła, w tym

przypadku filmu, to oznacza że istnieje wysokieprawdopodobieństwo, że osoba ta polubi także pozostałe filmy

polubione przez te drugą osobę.

Model

Ćwiczenie 2Rekomendacje z wykorzystaniem techniki "hammock", to

rozszerzenie techniki "skip jump", która bazuje na więcej niżjednym elemencie wspólnym dla dwóch wybranych węzłów.

Kolejnym rozwinięciem tej techniki, jest szukanie rekomendacji,gdy dwa lub więcej elementów są tego samego typy/kategorii, np.

gatunek filmowy.Podpowiedź:W pliku u.item zawarte są informacje o gatunku filmowym,spróbujmy je zaimportować do naszej bazy danych.

Ćwiczenie 3A teraz coś bardziej zakręconego, czyli collaborative filtering, k-

nearest neighbors i cosine similarity.

cos(θ) = =A ⋅ B

| |A| | ⋅ | |B| |×∑n

i=1 Ai Bi

⋅∑ni=1 ( )Ai

2− −−−−−−−−√ ∑n

i=1 ( )Bi2

− −−−−−−−−√

Materiały dodatkoweróżnej maści rozszerzenia, geo, rekomendacje czy modelowanieczasu, znajdziecie je na

teoria grafów, czyli od zera do bohatera, jedno z lepszych ibardziej dostępnych opracowań to

algorytmy rekomendacji z wykorzystaniem grafów, zostałyopisane w

czytać, testować, sprawdzać co inni wyczyniają z grafami, czyli

GraphAware extensions

Graph Theory by KeijoRuohonen

Studying Recommendation Algorithms by GraphAnalysis

GraphGist Project

dla prawdziwych "no life"raptem 857 strony "Social Network Analysis: Methods andApplications" autorstwa Stanley Wasserman (nie przebrnąłem)