{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Neo4j in Python\n", "\n", "Kaj potrebujemo (SUPB):\n", "- Neo4j (najenostavneje `dbms.security.auth_enabled=false`)\n", "\n", "Kaj potrebujemo (Python, `pip install ...`)\n", "- py2neo \n", "- ipython-cypher\n", "- networkx\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ipython-cypher\n", "\n", "`ipython-cypher` ponuja direktivi `%%cypher` in `%cypher` za uporabo povpreševalnega jezika Cypher v delovnih zvezkih. \n", "`%cypher` je namenjen za enovrstične, `%%cypher` pa za večvrstične poizvedbe. Uporabljamo lahko ***izključno*** v delovnih zvezkih!\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The cypher extension is already loaded. To reload it, use:\n", " %reload_ext cypher\n" ] } ], "source": [ "%load_ext cypher" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Izpis vseh številk (ID) vozlišč, njihovih oznak in lastnosti." ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12 rows affected.\n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labels(n)ID(n)n
['Person']18{'age': 20, 'name': 'Drew'}
['Person']19{'age': 24, 'name': 'Nicole'}
['Drink']20{'calories': 0, 'name': 'Coke Zero'}
['Manufacturer']21{'name': 'Coca Cola'}
['Manufacturer']22{'name': 'Pepsi'}
['Drink']23{'calories': 9000, 'name': 'Mountain Dew'}
['Drink']24{'calories': 0, 'name': 'Coke Zero'}
['Person']25{'age': 20, 'name': 'Drew'}
['Manufacturer']26{'name': 'Pepsi'}
['Person']27{'age': 24, 'name': 'Nicole'}
['Manufacturer']28{'name': 'Coca Cola'}
['Drink']29{'calories': 9000, 'name': 'Mountain Dew'}
" ], "text/plain": [ "[[['Person'], 18, {'age': 20, 'name': 'Drew'}],\n", " [['Person'], 19, {'age': 24, 'name': 'Nicole'}],\n", " [['Drink'], 20, {'calories': 0, 'name': 'Coke Zero'}],\n", " [['Manufacturer'], 21, {'name': 'Coca Cola'}],\n", " [['Manufacturer'], 22, {'name': 'Pepsi'}],\n", " [['Drink'], 23, {'calories': 9000, 'name': 'Mountain Dew'}],\n", " [['Drink'], 24, {'calories': 0, 'name': 'Coke Zero'}],\n", " [['Person'], 25, {'age': 20, 'name': 'Drew'}],\n", " [['Manufacturer'], 26, {'name': 'Pepsi'}],\n", " [['Person'], 27, {'age': 24, 'name': 'Nicole'}],\n", " [['Manufacturer'], 28, {'name': 'Coca Cola'}],\n", " [['Drink'], 29, {'calories': 9000, 'name': 'Mountain Dew'}]]" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%cypher \n", "MATCH (n) RETURN labels(n), ID(n), n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## py2neo: povezava na Neo4j z razredom `Graph`\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from py2neo import Graph\n", "\n", "graph = Graph() # Ob nastavitvi dbms.security.auth_enabled=false, sicer je potrebna avtentikacija \n", " # v obliko povezovalnega niza" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "graph.delete_all()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Vozlišča\n", "\n", "Kreiranje vozlišč z uporabo razreda `Node`. Prvi argument je oznaka (labela, tip) vozlišča. Ostali argumenti so poljubne lastnosti (properties) vozlišča v obliki parov `ključ = vrednost`." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from py2neo import Node\n", "\n", "# Kreiranje vozlišč\n", "nicole = Node(\"Person\", name=\"Nicole\", age=24)\n", "drew = Node(\"Person\", name=\"Drew\", age=20)\n", "\n", "mtdew = Node(\"Drink\", name=\"Mountain Dew\", calories=9000)\n", "cokezero = Node(\"Drink\", name=\"Coke Zero\", calories=0)\n", "\n", "coke = Node(\"Manufacturer\", name=\"Coca Cola\")\n", "pepsi = Node(\"Manufacturer\", name=\"Pepsi\")\n", "\n", "# Kreiranje grafa\n", "graph.create(nicole | drew | mtdew | cokezero | coke | pepsi)\n" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(pepsi:Manufacturer {name:\"Pepsi\"})" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pepsi" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Povezave (razmerja)\n", "\n", "Kreiranje povezav med vozlišči z uporabo razreda `Relationship`." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from py2neo import Relationship\n", "\n", "graph.create(Relationship(nicole, \"LIKES\", cokezero))\n", "graph.create(Relationship(nicole, \"LIKES\", mtdew))\n", "graph.create(Relationship(drew, \"LIKES\", mtdew))\n", "graph.create(Relationship(coke, \"MAKES\", cokezero))\n", "graph.create(Relationship(pepsi, \"MAKES\", mtdew))\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 rows affected.\n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
person.namedrink.namedrink.calories
DrewMountain Dew9000
NicoleMountain Dew9000
NicoleCoke Zero0
" ], "text/plain": [ "[['Drew', 'Mountain Dew', 9000],\n", " ['Nicole', 'Mountain Dew', 9000],\n", " ['Nicole', 'Coke Zero', 0]]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%cypher\n", "MATCH (person:Person)-[:LIKES]->(drink:Drink)\n", "RETURN person.name, drink.name, drink.calories" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## py2neo in Cypher\n", "\n", "Izvajanje Cypher poizvedb z uporabo metode `Graph.cypher.execute`." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('name': 'Drew', 'drink': 'Mountain Dew')\n", "('name': 'Nicole', 'drink': 'Mountain Dew')\n", "('name': 'Nicole', 'drink': 'Coke Zero')\n" ] } ], "source": [ "query = \"\"\"\n", "MATCH (person:Person)-[:LIKES]->(drink:Drink)\n", "RETURN person.name AS name, drink.name AS drink\n", "\"\"\"\n", "\n", "data = graph.run(query)\n", "\n", "for d in data:\n", " print(d)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## py2neo - parametrizirane Cypher poizvedbe\n", "\n", "\n", "Ob klicu metode `Graph.cypher.execute` lahko podamo parametre v parov ključ=vrednost. Parametri v Cypher poizvedbi so poimenovani znotraj zavitih oklepajev." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('name': 'Nicole', 'avg_calories': 4500.0)\n" ] } ], "source": [ "query = \"\"\"\n", "MATCH (p:Person)-[:LIKES]->(drink:Drink)\n", "WHERE p.name = {name}\n", "RETURN p.name AS name, AVG(drink.calories) AS avg_calories\n", "\"\"\"\n", "\n", "data = graph.run(query, name=\"Nicole\") # Parameter {name} dobi vrednost \"Nicole\" \n", "\n", "for d in data:\n", " print(d)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## NetworkX \n", "\n", "Modul za delo z grafi (omrežji). Omogoča enostaven izris." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 rows affected.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAFkCAYAAACThxm6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XucXWV9qPHnx2wmBAiCwRrFSgMoNdQbEtRilYuA4K0W\nDBZaT2mjDW1NW9riaUGOFbQVrVoikppwQCvUxstpOVYLPUDESxWwWm0IaiDVqoQqXiZRmMkM7/nj\nXePsPZmZZDJr9tp7ref7+fjZyd57dn5JJHmy1rveFSklJEmSyrJP1QNIkqR6MS4kSVKpjAtJklQq\n40KSJJXKuJAkSaUyLiRJUqmMC0mSVCrjQpIklcq4kCRJpTIuJElSqYwLSZJUKuNCkiSVyriQJEml\nMi4kSVKpjAtJklQq40KSJJXKuJAkSaUyLiRJUqmMC0mSVCrjQpIklcq4kCRJpTIuJElSqYwLSZJU\nKuNCkiSVyriQJEmlMi4kSVKpjAtJklQq40KSJJXKuJAkSaUyLiRJUqmMC0mSVCrjQpIklcq4kCRJ\npTIuJElSqYwLSZJUKuNCkiSVyriQJEmlMi4kSVKpjAtJklQq40KSJJXKuJAkSaUyLiRJUqmMC0mS\nVCrjQpIklcq4kCRJpTIuJElSqVpVDyBJZYuIA4GjgAXAMLAlpbSj2qmk5jAuJNVCRCwDVg3CmcAR\nQLS9nBZE3DcCHwfWppTurmRIqSEipVT1DJK01yJi6QCsHYPTFsPoCmgtB5YB+wM/Ae4G7gQ2wOiD\n0BqAm8dgVUppa5WzS3VlXEjqWxGxcgDWLIHWFdA6Gxic4f0jwIeBi2B0G+wcg9UppfXdmVZqDhd0\nSupLEXExsO582G8ztM5l5rCgeP1cYDO0zoeFwLricySVyCMXkvpORKwE1l0GXDKHz7kMuDR/c2VK\n6Zq5TyYJPHIhqc8UayzWvBzYBvwCcCBwOHAO8PVJ718PnAgsAfYjr/T8TeAb5DBZCQzAmohY2pWf\ngNQAHrmQ1FdaETctgZOXQ+sO4JXA08ihsQbYAXyevKAT4HeBh4CnAocAW4H3Ao8A/05e9Lksr8G4\ndTSl07v6k5FqyriQ1DeKy003XU8+AnEcndfTbyFHxCuB98/wOf9WfO1fAhcBNwDn5ZeWpZQ2lz23\n1DSeFpHUT1YthtGzgeew60Y9RwHHALurg8OLxx8Wj2cBi2EUuKCsQaUmMy4k9Y1BOHMFtGa6KuQB\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import networkx as nx\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "results = %cypher MATCH p = (:Person)-[:LIKES]->(:Drink) RETURN p\n", "\n", "g = results.get_graph()\n", "\n", "nx.draw_networkx(g, arrows=True); _=plt.axis('off')" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "[('19', {'age': 24, 'labels': ['Person'], 'name': 'Nicole'}),\n", " ('20', {'calories': 0, 'labels': ['Drink'], 'name': 'Coke Zero'}),\n", " ('23', {'calories': 9000, 'labels': ['Drink'], 'name': 'Mountain Dew'}),\n", " ('18', {'age': 20, 'labels': ['Person'], 'name': 'Drew'})]" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.nodes(data=True)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "{'18': 1, '19': 2, '20': 1, '23': 2}" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.degree(g)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }