diff --git a/docs/m05-scalefree/lab05.ipynb b/docs/m05-scalefree/lab05.ipynb new file mode 100644 index 0000000..6ae1739 --- /dev/null +++ b/docs/m05-scalefree/lab05.ipynb @@ -0,0 +1,873 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# BA model and scale-free networks\n", + "\n", + "
\n", + " \n", + " \n", + " Open this notebook in Google Colab\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + " \n", + " Download this notebook (File -> Save As)\n", + " \n", + "
" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "XtLwnyz-Ys9j" + }, + "source": [ + "\n", + "## 1. Implement BA algorithm\n", + "For this assignment you will be implementing the BA algorithm from the reading (see [Barabasi Ch 5.3](http://barabasi.com/networksciencebook/)). Create a function that takes `n` the number of nodes for the graph, and `m0` the initial number of nodes, as arguments and returns a networkx graph with a scale-free degree distribution.\n", + "\n", + "The first step is figuring out how to do \"preferential attachment\" based on the degree of existing nodes. A brute-force way to do this is creating a huge list with duplicated items. Say, node 1's degree is 6, node 2's degree is 3, and node 3's degree is 2. (This is not a 'graphical' sequence. But for the sake of simplicity let's just assume that.) Then, we can create the following list to *preferentially sample* nodes from the network. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GQZErbFjYs9p" + }, + "outputs": [], + "source": [ + "alist = [1,1,1,1,1,1,2,2,2,3,3]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "wCe87EqOYs9q" + }, + "source": [ + "1 is repeated 6 times, 2 is repeated 3 times, and so on. Now if we randomly sample from this list, we will be three times more like to sample node 1 than node 3!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1644860506350, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "GASQfT4lYs9r", + "outputId": "014d84a6-e275-4ebc-ba9a-1cc7b3ae01ee" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[3]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import random\n", + "\n", + "random.sample(alist, 1)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "putSesFfYs9r" + }, + "source": [ + "So, if you can maintain this list for your network, you can implement preferential attachment. Simply update this list whenever you add an edge! \n", + "\n", + "A more space-efficient way is using `numpy`'s sampling method. If you run the following cell, the documentation for the [`np.random.choice`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html) function will appear. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qQEsSvShYs9s" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "np.random.choice?" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "2_3vrd5FYs9s" + }, + "source": [ + "It accepts `p` parameter and you can specifies the probability of each item in the list! So instead of creating" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "wlCS5F9oYs9t" + }, + "outputs": [], + "source": [ + "alist = [1,1,1,1,1,1,2,2,2,3,3]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "R8Mne9h1Ys9t" + }, + "source": [ + "You can do" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 165, + "status": "ok", + "timestamp": 1644860506513, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "AKsBZeY8Ys9u", + "outputId": "9c6e807d-967e-4727-f6bd-5c81a325e7ef", + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.5454545454545454, 0.2727272727272727, 0.18181818181818182]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nodes = [1,2,3]\n", + "degrees = [6,3,2]\n", + "sum_degrees = sum(degrees)\n", + "node_probs = [degree*1.0/sum_degrees for node, degree in zip(nodes,degrees)] \n", + "node_probs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1644860506514, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "F4u8bSHEYs9u", + "outputId": "3586ad0d-4b86-4eff-89ac-733a12afb4b6" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.choice(nodes, p=node_probs)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "rvmljTQ6Ys9v" + }, + "source": [ + "or sample two nodes from the list. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1644860506514, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "FGqHQ5duYs9v", + "outputId": "13da7c37-ad5d-4f45-c7ed-d456e36ea9a5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.choice(nodes, 2, replace=False, p=node_probs)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "8lFnaZpkkS9Z" + }, + "source": [ + "Ok, now the sampling can be done. How about the initial graph with `m0` nodes? `networkx` has a convenient function for that: https://networkx.org/documentation/stable/reference/generated/networkx.generators.classic.complete_graph.html \n", + "\n", + "Can you create a complete graph with 5 nodes and then check the edges to make sure you have the right graph? " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 662, + "status": "ok", + "timestamp": 1644860507174, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "JbgsmrAcj72N", + "outputId": "66fb5ee1-07cb-4d8b-d3d0-565ced1c0a82" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "EdgeView([(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "4xeLpD43Ys9v" + }, + "source": [ + "Now you're ready to implement the BA algorithm! Create a fully-connected network with `m0` nodes. Then in each step, sample `m` nodes from the existing node pool. Add a new node and connect it to the chosen `m` nodes. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vClsd6d9Ys9w" + }, + "outputs": [], + "source": [ + "def barabasi_albert_graph(n, m0, m=1):\n", + " \"\"\"Create a BA network with n nodes, where each new node connects to \n", + " m existing nodes according to the preferential attachment rule. The initial\n", + " network is a clique (fully-connected network) with m0 nodes. \n", + " \"\"\"\n", + " # Initial network of m_o nodes (a complete graph)\n", + "\n", + " # YOUR SOLUTION HERE\n", + "\n", + " # Until network has n nodes, \n", + " # 1. preferentially sample m nodes from the network,\n", + " # 2. create a new node, \n", + " # 3. and connect the new node to the m selected nodes. \n", + "\n", + " # YOUR SOLUTION HERE\n", + " return G " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "_Jbyx4JyYs9w" + }, + "source": [ + "## 2. BA graph analysis\n", + "Test your algorithm by creating a graph with `N = 1200` and `m0 = 7`. Calculate (and print) the average shortest path length of the graph:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "_-DFRrhyYs9w" + }, + "outputs": [], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "cO3K1xxWYs9x" + }, + "source": [ + "Calculate (and print) the average clustering coefficient of the graph. (Note: You may need to try values of m > 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 191, + "status": "ok", + "timestamp": 1644860510434, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "1GitJsGdYs9x", + "outputId": "874011c9-3b25-4d11-bc6d-95dcb505e62a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.039526110720144475\n" + ] + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "6YIsMN0zYs9x" + }, + "source": [ + "The [cumulative distribution function (CDF) and complementary cumulative distribution function (CCDF)](https://en.wikipedia.org/wiki/Cumulative_distribution_function) are among the most direct ways to identify a power-law-like distribution. Plot the **CCDF** of the graph's degree distribution. \n", + "\n", + "First, **CDF** for a discrete distribution is defined as the following:\n", + "\n", + "$$ F_X(x) = P(X \\le x) = \\sum_{x' \\le x} P(x') $$\n", + "\n", + "CCDF is it's reverse and is defined as following:\n", + "\n", + "$$\\bar F_X(x) = P(X > x) = \\sum_{x' > x} P(x') = 1 - F_X(x).$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "executionInfo": { + "elapsed": 1752, + "status": "ok", + "timestamp": 1644860512182, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "pu3WfD26Ys9y", + "outputId": "0c42ba86-bc14-42f4-dced-7d2768b31cd9" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "fhJSPdWfYs9y" + }, + "source": [ + "## 3. BA and ER comparison\n", + "\n", + "Now let's compare the scale-free and random graphs. Create a random graph with the same number of nodes and about the same number of edges, then calculate the average shortest path length of that graph:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 22799, + "status": "ok", + "timestamp": 1644860534979, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "3w7sjPKnYs9y", + "outputId": "8e8b5e7b-882b-4454-e861-37c47c37f300" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3.5471823742007227" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 14732, + "status": "ok", + "timestamp": 1644860549692, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "7tHIwwHVpo7T", + "outputId": "357cd73d-8c1a-421d-e191-40766df98e1d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "4.153923118904018" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "ppknthUJYs9z" + }, + "source": [ + "Calculate (and print) the average clustering coefficient of the graph:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 15, + "status": "ok", + "timestamp": 1644860549840, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "MHuwwy7pYs9z", + "outputId": "0afa0787-e6dc-4748-d5a2-ff8a53778805" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.029275119458150905\n", + "0.00488252488252488\n" + ] + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "_jpoPTy6Ys9z" + }, + "source": [ + "Now plot the CCDF (for BA and ER) of the degree distribution of the random graph:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "executionInfo": { + "elapsed": 730, + "status": "ok", + "timestamp": 1644860550564, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "0h5dCNw3Ys9z", + "outputId": "5f2e5a1b-9439-4655-c894-0d48de2cbddc" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "executionInfo": { + "elapsed": 590, + "status": "ok", + "timestamp": 1644860551152, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "_TeeOmehptT5", + "outputId": "6bd517eb-a008-48bd-e9fa-a67c7fc3b6c4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# YOUR SOLUTION HERE" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "BhUtqvbyYs9z" + }, + "source": [ + "How do the average shortest path lengths, average clustering coefficients, and degree distributions between the graphs compare?" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "adQWWn7yYs9z" + }, + "source": [ + "(use this markdown cell for your response)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "7O9-iutHYs9z" + }, + "source": [ + "## 4. Preferential attachment without using the degree\n", + "\n", + "As you know from the discussion and videos, it is possible to achieve the linear preferential attachment without calculating the degree by using the friendship paradox. Implement this version and see whether you can get a power-law degree distribution. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CEY9rPiRYs90" + }, + "outputs": [], + "source": [ + "def barabasi_albert_graph_alt(n, m0=2, m=1):\n", + " # YOUR SOLUTION HERE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "executionInfo": { + "elapsed": 1171, + "status": "ok", + "timestamp": 1644860914153, + "user": { + "displayName": "Shubham Singh", + "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GijoisQnjqkyk4XuiiLVRYCgmYcq1Gu2z5e_-09=s64", + "userId": "12193469281340462671" + }, + "user_tz": 300 + }, + "id": "DGA0dWpppzHA", + "outputId": "f9a3c1f7-2151-446e-9d5f-d0b3d3656d95" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# generate the network and show the CCDF\n", + "# YOUR SOLUTION HERE" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-yrbmZx0F_He" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/mkdocs.yml b/mkdocs.yml index 0d40fdd..e62c6fc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,5 +93,7 @@ nav: - m03-smallworld/lab03.ipynb - "Module 4: Strength of weak ties": - m04-weakties/lab04.ipynb + - "Module 5: Scale-free networks": + - m05-scalefree/lab05.ipynb - "Resources": - resources/index.md