377 lines
7.5 KiB
Text
377 lines
7.5 KiB
Text
{
|
|
"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
|
|
}
|