{
"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",
" labels(n) | \n",
" ID(n) | \n",
" n | \n",
"
\n",
" \n",
" ['Person'] | \n",
" 18 | \n",
" {'age': 20, 'name': 'Drew'} | \n",
"
\n",
" \n",
" ['Person'] | \n",
" 19 | \n",
" {'age': 24, 'name': 'Nicole'} | \n",
"
\n",
" \n",
" ['Drink'] | \n",
" 20 | \n",
" {'calories': 0, 'name': 'Coke Zero'} | \n",
"
\n",
" \n",
" ['Manufacturer'] | \n",
" 21 | \n",
" {'name': 'Coca Cola'} | \n",
"
\n",
" \n",
" ['Manufacturer'] | \n",
" 22 | \n",
" {'name': 'Pepsi'} | \n",
"
\n",
" \n",
" ['Drink'] | \n",
" 23 | \n",
" {'calories': 9000, 'name': 'Mountain Dew'} | \n",
"
\n",
" \n",
" ['Drink'] | \n",
" 24 | \n",
" {'calories': 0, 'name': 'Coke Zero'} | \n",
"
\n",
" \n",
" ['Person'] | \n",
" 25 | \n",
" {'age': 20, 'name': 'Drew'} | \n",
"
\n",
" \n",
" ['Manufacturer'] | \n",
" 26 | \n",
" {'name': 'Pepsi'} | \n",
"
\n",
" \n",
" ['Person'] | \n",
" 27 | \n",
" {'age': 24, 'name': 'Nicole'} | \n",
"
\n",
" \n",
" ['Manufacturer'] | \n",
" 28 | \n",
" {'name': 'Coca Cola'} | \n",
"
\n",
" \n",
" ['Drink'] | \n",
" 29 | \n",
" {'calories': 9000, 'name': 'Mountain Dew'} | \n",
"
\n",
"
"
],
"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",
" person.name | \n",
" drink.name | \n",
" drink.calories | \n",
"
\n",
" \n",
" Drew | \n",
" Mountain Dew | \n",
" 9000 | \n",
"
\n",
" \n",
" Nicole | \n",
" Mountain Dew | \n",
" 9000 | \n",
"
\n",
" \n",
" Nicole | \n",
" Coke Zero | \n",
" 0 | \n",
"
\n",
"
"
],
"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
}