Skip to content

Instantly share code, notes, and snippets.

@mikk-c
Created September 20, 2018 12:27
Show Gist options
  • Save mikk-c/5f4373466ebc2f4a845d97f2a4d2cd2d to your computer and use it in GitHub Desktop.
Save mikk-c/5f4373466ebc2f4a845d97f2a4d2cd2d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Path lengths distribution, and Average degree of separation"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import networkx as nx \n",
"import matplotlib.pyplot as plt\n",
"from collections import Counter\n",
"import pandas as pd\n",
"plt.rcParams['figure.figsize']=[15,7]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#g = nx.gnp_random_graph(500,0.1)\n",
"g = nx.read_edgelist(\"data/facebook.txt\",delimiter=',')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nfb/Oty5Pvs1ytnVFnLvOthi5rugjYn/2/QDwI+ovuWqSugGy7weyzfcDFzbsvjAbsxNYsKB+UdPR\n0cFtt93Gtm3b6OzspFqtv1iqVqt0dHSMb+5sm5QnX+CdbHPn2wSfu+1j0qKX9E8knT2+DPwr4EVg\nM1DONisDg9nyZmCNpDMkXQT0ANume+Ip+O1vf8vrr79+bPknP/kJl156KatWraJSqX/8UalU6Ovr\nG9/F2TYhb77A4WwX55uTz932kuetm07gR9lLsLnA9yNii6RngI2S7gJ+BawGiIidkjYCu6hfKd0T\nEUcLmX2bq9Vq3HbbbQC88847fO5zn2PlypVceeWVrF69mvXr17No0SI2btzI/fff72yblDdfoAo+\nd5vhc7e9TFr0EfH3wGUnGP8N0DvBPmuBtVOeXeI++tGP8sILL3xgfN68eQwPD59wH2ebX958JR0r\nHOebj8/d9uK/jDUzS5yL3swscS56M7PEuejNzBLnojczS5yL3swscS56M7PEuejNzBLnojczS5yL\n3swscS56M7PEuejNzBLnojczS5yL3swscS56M7PEuejNzBLnojczS5yL3swscS56M7PEuejNzBLn\nojczS5yL3swscS56M7PEuejNzBLnojczS5yL3swscS56M7PEuejNzBLnojczS1zuopc0R9Lzkh7J\nbp8vaUjSSPb9vIZt75O0R9JuSTcVMfGUHD16lMsvv5xbbrkFgIMHD1Iqlejp6aFUKnHo0KFj2zrb\n5jjbYjnf9tDMFf2XgZcabvcDwxHRAwxnt5G0BFgDLAVWAg9JmjM9003Tgw8+yCWXXHLs9sDAAL29\nvYyMjNDb28vAwADgbE+Fsy2W820PuYpe0kLgZuA7DcN9QCVbrgC3NoxviIi3I+JlYA+wYnqmm57R\n0VEeffRRvvSlLx0bGxwcpFwuA1Aul9m0adP4KmfbBGdbLOfbPvJe0T8AfA14t2GsMyKq2fKrQGe2\nvADY17DdaDb2PpLulrRd0vaxsbHmZp2Qe++9l29+85t86EPv/ShqtRrd3d0AdHV1UavVxlflyhac\nLzjbohWRr7MtxqRFL+kW4EBEPDvRNhERQDRz4IhYFxHLI2L5/Pnzm9k1GY888ggdHR1cccUVE24j\nCUlN3/dsz9fZFquofJ1tMebm2OYaYJWkTwNnAudIehioSeqOiKqkbuBAtv1+4MKG/RdmY3acp556\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113af70b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Path lengths distribution (way 1)\n",
"path_lengths1 = []\n",
"for n1 in g.nodes():\n",
" for n2 in g.nodes():\n",
" if n1 != n2 and nx.has_path(g,n1,n2):\n",
" path_lengths1.append(nx.shortest_path_length(g,n1,n2)) #Returns the shortest path length between two nodes n1,n2 (integer value to represent the length)\n",
"\n",
"#Another way (way 2)\n",
"path_lengths2 = []\n",
"for n1 in g.nodes():\n",
" for n2 in g.nodes():\n",
" if n1 != n2 and nx.has_path(g,n1,n2):\n",
" path_lengths2.append(len(nx.shortest_path(g,n1,n2))-1) #Returns the shortest path between two nodes n1,n2 (list to represent the length)\n",
"\n",
"#Another way (way 3)\n",
"path_lengths3 = []\n",
"for n in g.nodes():\n",
" paths = nx.single_source_shortest_path(g,n) # Returns the shortest paths between the node n and all the other nodes in the graph (dictionary key = target_node, value = list of nodes to represent a path) \n",
" for path in paths.values():\n",
" if len(path)!=1:\n",
" path_lengths3.append (len(path)-1)\n",
"\n",
"#Another way (way 4)\n",
"path_lengths4 = []\n",
"for n in g.nodes():\n",
" lengths=nx.single_source_shortest_path_length(g,n) #Returns the shortest paths between the node n and all the other nodes in the graph (dictionary key = target_node, value = integer value to represent a path length)\n",
" for length in lengths.values():\n",
" if length !=0:\n",
" path_lengths4.append(length)\n",
"\n",
" \n",
"figs,axes = plt.subplots(1,4)\n",
"axes[0].hist(path_lengths1)\n",
"axes[0].set_title(\"Way 1\")\n",
"\n",
"axes[1].hist(path_lengths2)\n",
"axes[1].set_title(\"Way 2\")\n",
"\n",
"axes[2].hist(path_lengths3)\n",
"axes[2].set_title(\"Way 3\")\n",
"\n",
"axes[3].hist(path_lengths3)\n",
"axes[3].set_title(\"Way 4\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1171ebfd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Average Path Length Distribution\n",
"avg_path_lengths = []\n",
"for n in g.nodes():\n",
" shortest_paths_lengths= nx.single_source_shortest_path_length(g,n).values()\n",
" avg_path_lengths.append(sum(shortest_paths_lengths)/len(shortest_paths_lengths))\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.hist(avg_path_lengths,bins=12)\n",
"ax.axvline(nx.average_shortest_path_length(g), color='red',linestyle ='dashed')\n",
"ax.set_xlabel('Average path length', fontsize=15)\n",
"ax.set_ylabel('Number of nodes', fontsize=15)\n",
"ax.set_title('Average degrees of separation', fontsize=20)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment