W gąszczu grafów - Toruń JUG

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

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

Page 1: W gąszczu grafów - Toruń JUG

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

Page 2: W gąszczu grafów - Toruń JUG

a code

Page 3: W gąszczu grafów - Toruń JUG

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 ( ) ; }}

Page 4: W gąszczu grafów - Toruń JUG

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 ( ) ; }}

Page 5: W gąszczu grafów - Toruń JUG

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 ( ) ; }}

Page 6: W gąszczu grafów - Toruń JUG

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

}

Page 7: W gąszczu grafów - Toruń JUG

and last but not least-XX:+UseFastEmptyMethods

Page 8: W gąszczu grafów - Toruń JUG

WAT?

Page 9: W gąszczu grafów - Toruń JUG

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

Page 10: W gąszczu grafów - Toruń JUG

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,

Page 11: W gąszczu grafów - Toruń JUG

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 :)

Page 12: W gąszczu grafów - Toruń JUG

Wstęp do grafów

Page 13: W gąszczu grafów - Toruń JUG

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

Page 14: W gąszczu grafów - Toruń JUG

Gatunki i podgatunkigraf prosty

graf skierowany

graf mieszany

graf z wagami

hipergraf

Page 15: W gąszczu grafów - Toruń JUG

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

Page 16: W gąszczu grafów - Toruń JUG

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"

Page 17: W gąszczu grafów - Toruń JUG

Wstęp do Neo4j

Page 18: W gąszczu grafów - Toruń JUG

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”

Page 19: W gąszczu grafów - Toruń JUG

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")

Page 20: W gąszczu grafów - Toruń JUG

Podstawowe elementywęzły ("node")

identyfikator

etykiety ("labels")

własności

Page 21: W gąszczu grafów - Toruń JUG

Węzeł

Page 22: W gąszczu grafów - Toruń JUG

Podstawowe elementyrelacje ("relationship")

typ relacji ("relationship type")

kierunek ("direction")

własności

Page 23: W gąszczu grafów - Toruń JUG

Relacje

Page 24: W gąszczu grafów - Toruń JUG

Podstawowe elementyschemat ("schema")

indeksy ("index")

ograniczenia ("constraints")

Page 25: W gąszczu grafów - Toruń JUG

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

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

łańcuchy znakowe

tablice powyższych

Page 26: W gąszczu grafów - Toruń JUG

Podstawy Cypher

Page 27: W gąszczu grafów - Toruń JUG

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 ;

Page 28: W gąszczu grafów - Toruń JUG

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 )

Page 29: W gąszczu grafów - Toruń JUG

"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 ) ;

Page 30: W gąszczu grafów - Toruń JUG

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

Page 31: W gąszczu grafów - Toruń JUG

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

Page 32: W gąszczu grafów - Toruń JUG

Ś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 ;

Page 33: W gąszczu grafów - Toruń JUG

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

Page 34: W gąszczu grafów - Toruń JUG

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.

Page 35: W gąszczu grafów - Toruń JUG

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

Page 36: W gąszczu grafów - Toruń JUG

Narzędzia pracykonsola neo4j-shell

konsola interaktywna

Page 37: W gąszczu grafów - Toruń JUG

Model zerowy, czyli coś narozgrzewkę

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

Page 38: W gąszczu grafów - Toruń JUG

Model

Page 39: W gąszczu grafów - Toruń JUG

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 ;

Page 40: W gąszczu grafów - Toruń JUG

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

Page 41: W gąszczu grafów - Toruń JUG

Ć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ę.

Page 42: W gąszczu grafów - Toruń JUG

 

Page 43: W gąszczu grafów - Toruń JUG

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

Page 44: W gąszczu grafów - Toruń JUG

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

Page 45: W gąszczu grafów - Toruń JUG

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.

Page 46: W gąszczu grafów - Toruń JUG

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

pocztowej.

Page 47: W gąszczu grafów - Toruń JUG

Ć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.

Page 48: W gąszczu grafów - Toruń JUG

Ć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

Page 49: W gąszczu grafów - Toruń JUG

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.

Page 50: W gąszczu grafów - Toruń JUG

Ć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.

Page 51: W gąszczu grafów - Toruń JUG

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

Page 52: W gąszczu grafów - Toruń JUG

Ć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

Page 53: W gąszczu grafów - Toruń JUG

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

social".

Page 54: W gąszczu grafów - Toruń JUG

Ćwiczenie 3 / model

Page 55: W gąszczu grafów - Toruń JUG

Ć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

Page 56: W gąszczu grafów - Toruń JUG

Ć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".

Page 57: W gąszczu grafów - Toruń JUG

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

Page 58: W gąszczu grafów - Toruń JUG

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

pomiędzy nimi.

Page 59: W gąszczu grafów - Toruń JUG

"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 :)

Page 60: W gąszczu grafów - Toruń JUG

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 )

Page 61: W gąszczu grafów - Toruń JUG

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

Page 62: W gąszczu grafów - Toruń JUG

Zacznijmy od modelu

Page 63: W gąszczu grafów - Toruń JUG

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 } ) ;

Page 64: W gąszczu grafów - Toruń JUG

Ć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ę.

Page 65: W gąszczu grafów - Toruń JUG

Model

Page 66: W gąszczu grafów - Toruń JUG

Ć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.

Page 67: W gąszczu grafów - Toruń JUG

Ć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

− −−−−−−−−√

Page 68: W gąszczu grafów - Toruń JUG

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

Page 69: W gąszczu grafów - Toruń JUG

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