{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "import igraph as ig" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Load the graph" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G = ig.read(\"data/bitcoin/bitcoinotc.graphml\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G.to_undirected(combine_edges=\"first\")" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'IGRAPH U-W- 5881 21492 -- \\n+ attr: b (v), g (v), id (v), label (v), r (v), size (v), x (v), y (v), Edge Label (e), id (e), rating (e), time (e), weight (e)'" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.summary()" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Clique distribution" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "11" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.clique_number()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "cl = G.cliques()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(list(map(len,cl)), bins=10);" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Rescale the timestamps" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "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", "
weightratingtime
count21492.021492.0000002.149200e+04
mean1.00.6414951.356940e+09
std0.03.9358593.309691e+07
min1.0-10.0000001.289242e+09
25%1.01.0000001.334097e+09
50%1.01.0000001.360080e+09
75%1.02.0000001.377251e+09
max1.010.0000001.453680e+09
\n", "
" ], "text/plain": [ " weight rating time\n", "count 21492.0 21492.000000 2.149200e+04\n", "mean 1.0 0.641495 1.356940e+09\n", "std 0.0 3.935859 3.309691e+07\n", "min 1.0 -10.000000 1.289242e+09\n", "25% 1.0 1.000000 1.334097e+09\n", "50% 1.0 1.000000 1.360080e+09\n", "75% 1.0 2.000000 1.377251e+09\n", "max 1.0 10.000000 1.453680e+09" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "edges = pd.DataFrame([e.attributes().values() for e in G.es])\n", "edges.columns = G.es.attribute_names()\n", "edges.drop([\"Edge Label\", \"id\"], axis=1, inplace=True)\n", "edges.describe()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "timerange = edges.time.max() - edges.time.min()\n", "timemin = edges.time.min()\n", "G.es[\"time\"] = (G.es[\"time\"] - timemin) / timerange" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Temporal subgraphs" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "'IGRAPH U-W- 570 1378 -- \\n+ attr: b (v), g (v), id (v), label (v), r (v), size (v), x (v), y (v), Edge Label (e), id (e), rating (e), time (e), weight (e)'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.subgraph_edges(G.es(lambda e: e[\"time\"] < 0.1)).summary()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "def temporal_subgraph(graph, tmin=None, tmax=None, delete_vertices=True):\n", " if tmin==None:\n", " tmin = min(graph.es[\"time\"])\n", " if tmax==None:\n", " tmax = max(graph.es[\"time\"])\n", " return G.subgraph_edges(G.es(lambda e: (e[\"time\"] > tmin) & (e[\"time\"] < tmax)), delete_vertices=delete_vertices)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "'IGRAPH U-W- 1788 4605 -- \\n+ attr: b (v), g (v), id (v), label (v), r (v), size (v), x (v), y (v), Edge Label (e), id (e), rating (e), time (e), weight (e)'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temporal_subgraph(G, tmin=0.1, tmax=0.3).summary()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "image/svg+xml": [ "\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" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ti = 0\n", "dt = 0.01\n", "subg = temporal_subgraph(G, tmin=ti, tmax=ti+dt)\n", "layout = subg.layout(\"kk\")\n", "ig.plot(subg, layout=layout)" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Export multilayer graph" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "dt = 0.05\n", "layout = []\n", "subg = []\n", "for i in range(2):\n", " subg.append(temporal_subgraph(G, tmin=i*dt, tmax=i*dt+dt))\n", " layout.append(subg[i].layout(\"kk\").coords)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "vs_df = pd.DataFrame()\n", "es_df = pd.DataFrame()\n", "for i in range(2):\n", " subg_vs = pd.DataFrame(layout[i])\n", " subg_vs.columns = [\"x\",\"y\"]\n", " subg_vs[\"id\"] = np.arange(len(layout[i]))\n", " subg_vs[\"layer\"] = i+1\n", " # subg_vs.to_csv(\"vs1.csv\", index=False)\n", " vs_df = pd.concat([vs_df,subg_vs])\n", " subg_es = pd.DataFrame([[e.source,e.target] for e in subg[i].es])\n", " subg_es.columns = [\"u\",\"v\"]\n", " # subg_es.to_csv(\"es1.csv\", index=False)\n", " es_df = pd.concat([es_df,subg_es])\n", " \n", "vs_df.to_csv(\"vs.csv\", index=False)\n", "es_df.to_csv(\"es.csv\", index=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.5" }, "name": "bitcoin.ipynb" }, "nbformat": 4, "nbformat_minor": 2 }