{ "cells": [ { "cell_type": "code", "execution_count": null, "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": null, "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": null, "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": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G.to_undirected(combine_edges=\"first\")" ] }, { "cell_type": "markdown", "metadata": { "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "source": [ "# Clique distribution" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G.clique_number()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "cl = G.cliques()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "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": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "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": null, "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": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "G.subgraph_edges(G.es(lambda e: e[\"time\"] < 0.1)).summary()" ] }, { "cell_type": "code", "execution_count": null, "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": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "temporal_subgraph(G, tmin=0.1, tmax=0.3).summary()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "autoscroll": false, "collapsed": false, "ein.tags": "worksheet-0", "slideshow": { "slide_type": "-" } }, "outputs": [], "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": null, "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": null, "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.4" }, "name": "bitcoin.ipynb" }, "nbformat": 4, "nbformat_minor": 2 }