{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [NTDS'19] assignment 1: network science — solution\n", "[ntds'19]: https://github.com/mdeff/ntds_2019\n", "\n", "[Eda Bayram](https://lts4.epfl.ch/bayram), [EPFL LTS4](https://lts4.epfl.ch) and\n", "[Nikolaos Karalias](https://people.epfl.ch/nikolaos.karalias), [EPFL LTS2](https://lts2.epfl.ch)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Students\n", "\n", "* Team: ``\n", "* Students: ` (for the indivudual submission) or `` (for the team submission)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rules\n", "\n", "Grading:\n", "* The first deadline is for individual submissions. The second deadline is for the team submission.\n", "* All team members will receive the same grade based on the team solution submitted on the second deadline.\n", "* As a fallback, a team can ask for individual grading. In that case, solutions submitted on the first deadline are graded.\n", "* Collaboration between team members is encouraged. No collaboration between teams is allowed.\n", "\n", "Submission:\n", "* Textual answers shall be short. Typically one to two sentences.\n", "* Code has to be clean.\n", "* You cannot import any other library than we imported.\n", " Note that Networkx is imported in the second section and cannot be used in the first.\n", "* When submitting, the notebook is executed and the results are stored. I.e., if you open the notebook again it should show numerical results and plots. We won't be able to execute your notebooks.\n", "* The notebook is re-executed from a blank state before submission. That is to be sure it is reproducible. You can click \"Kernel\" then \"Restart Kernel and Run All Cells\" in Jupyter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objective\n", "\n", "The purpose of this milestone is to explore a given dataset, represent it by network by constructing different graphs. In the first section, you will analyze the network properties. In the second section, you will explore various network models and find out the network model fitting the ones you construct from the dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cora Dataset\n", "\n", "The [Cora dataset](https://linqs.soe.ucsc.edu/node/236) consists of scientific publications classified into one of seven research fields. \n", "\n", "* **Citation graph:** the citation network can be constructed from the connections given in the `cora.cites` file.\n", "* **Feature graph:** each publication in the dataset is described by a 0/1-valued word vector indicating the absence/presence of the corresponding word from the dictionary and its research field, given in the `cora.content` file. The dictionary consists of 1433 unique words. A feature graph can be constructed using the Euclidean distance between the feature vector of the publications.\n", "\n", "The [`README`](data/cora/README) provides details about the content of [`cora.cites`](data/cora/cora.cites) and [`cora.content`](data/cora/cora.content)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Section 1: Network Properties" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1: Construct a Citation Graph and a Feature Graph" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the `cora.content` file into a Pandas DataFrame by setting a header for the column names. Check the `README` file." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "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", " \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", " \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", "
paper_id123456789...142514261427142814291430143114321433class_label
031336000000000...001000000Neural_Networks
11061127000000000...010000000Rule_Learning
21106406000000000...000000000Reinforcement_Learning
313195000000000...000000000Reinforcement_Learning
437879000000000...000000000Probabilistic_Methods
\n", "

5 rows × 1435 columns

\n", "
" ], "text/plain": [ " paper_id 1 2 3 4 5 6 7 8 9 ... 1425 1426 1427 1428 1429 \\\n", "0 31336 0 0 0 0 0 0 0 0 0 ... 0 0 1 0 0 \n", "1 1061127 0 0 0 0 0 0 0 0 0 ... 0 1 0 0 0 \n", "2 1106406 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", "3 13195 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", "4 37879 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 \n", "\n", " 1430 1431 1432 1433 class_label \n", "0 0 0 0 0 Neural_Networks \n", "1 0 0 0 0 Rule_Learning \n", "2 0 0 0 0 Reinforcement_Learning \n", "3 0 0 0 0 Reinforcement_Learning \n", "4 0 0 0 0 Probabilistic_Methods \n", "\n", "[5 rows x 1435 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "feature_list = list(range(1,1434))\n", "column_list = ['paper_id'] + feature_list + ['class_label']\n", "pd_content = pd.read_csv('data/cora/cora.content', delimiter='\\t', names=column_list) \n", "pd_content.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print out the number of papers contained in each of the reasearch fields.\n", "\n", "**Hint:** You can use the `value_counts()` function." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Neural_Networks 818\n", "Probabilistic_Methods 426\n", "Genetic_Algorithms 418\n", "Theory 351\n", "Case_Based 298\n", "Reinforcement_Learning 217\n", "Rule_Learning 180\n", "Name: class_label, dtype: int64" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd_content['class_label'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Select all papers from a field of your choice and store their feature vectors into a NumPy array.\n", "Check its shape." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(818, 1433)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_field = \"Neural_Networks\"\n", "pd_field = pd_content[pd_content['class_label'] == my_field]\n", "features = pd_field[feature_list].to_numpy()\n", "features.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let $D$ be the Euclidean distance matrix whose $(i,j)$ entry corresponds to the Euclidean distance between feature vectors $i$ and $j$.\n", "Using the feature vectors of the papers from the field which you have selected, construct $D$ as a Numpy array. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(818, 818)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_nodes = features.shape[0]\n", "distance = np.zeros((num_nodes,num_nodes))\n", "\n", "for row in range(num_nodes):\n", " for row2 in range(num_nodes):\n", " distance[row,row2] = np.sqrt(((features[row,:]-features[row2,:])**2).sum())\n", " \n", "distance.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the mean pairwise distance $\\mathbb{E}[D]$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.689638434824233" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_distance = distance.mean()\n", "mean_distance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot an histogram of the euclidean distances." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(1, figsize=(8, 4))\n", "plt.title(\"Histogram of Euclidean distances between papers\")\n", "plt.hist(distance.flatten());" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now create an adjacency matrix for the papers by thresholding the Euclidean distance matrix.\n", "The resulting (unweighted) adjacency matrix should have entries\n", "$$ A_{ij} = \\begin{cases} 1, \\; \\text{if} \\; d(i,j)< \\mathbb{E}[D], \\; i \\neq j, \\\\ 0, \\; \\text{otherwise.} \\end{cases} $$\n", "\n", "First, let us choose the mean distance as the threshold." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "threshold = mean_distance\n", "A_feature = (distance < threshold).astype(float) - np.eye(distance.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now read the `cora.cites` file and construct the citation graph by converting the given citation connections into an adjacency matrix." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2708, 2708)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cora_cites = np.genfromtxt('data/cora/cora.cites', delimiter='\\t')\n", "# get graph edges and flatten them for processing\n", "edges = cora_cites.astype(int)\n", "edges = edges.flatten()\n", "\n", "# get adjacency matrix from edge_list\n", "newedge = pd.factorize(edges)[0]\n", "new_edge_list = newedge.reshape(-1, 2)\n", "dim = max(newedge) + 1\n", "adjmat = np.zeros((dim, dim))\n", "adjmat[new_edge_list[:, 0], new_edge_list[:, 1]] = 1\n", "\n", "# caution, matrix is not symmetric at this point \n", "A_citation = adjmat\n", "A_citation.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get the adjacency matrix of the citation graph for the field that you chose.\n", "You have to appropriately reduce the adjacency matrix of the citation graph." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# map the paper ids from the selected community to the relabeled ones\n", "nodemap = dict(zip(edges, newedge))\n", "\n", "community_nodes = [nodemap[i] for i in pd_field.paper_id]\n", "\n", "A_citation = A_citation[community_nodes, :][:, community_nodes]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check if your adjacency matrix is symmetric. Symmetrize your final adjacency matrix if it's not already symmetric." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_citation = ((A_citation + A_citation.T)>0).astype(float)\n", "np.count_nonzero(A_citation - A_citation.transpose())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the shape of your adjacency matrix again." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(818, 818)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_citation.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2: Degree Distribution and Moments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What is the total number of edges in each graph?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of edges in the feature graph: 136771.0\n", "Number of edges in the citation graph: 1175.0\n" ] } ], "source": [ "num_edges_feature = A_feature.sum() / 2\n", "num_edges_citation = A_citation.sum() / 2\n", "print(f\"Number of edges in the feature graph: {num_edges_feature}\")\n", "print(f\"Number of edges in the citation graph: {num_edges_citation}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the degree distribution histogram for each of the graphs." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "degrees_citation = A_citation.sum(1)\n", "degrees_feature = A_feature.sum(1)\n", "\n", "deg_hist_normalization = np.ones(degrees_citation.shape[0]) / degrees_citation.shape[0]\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(16, 4))\n", "axes[0].set_title('Citation graph degree distribution')\n", "axes[0].hist(degrees_citation, weights=deg_hist_normalization);\n", "axes[1].set_title('Feature graph degree distribution')\n", "axes[1].hist(degrees_feature, weights=deg_hist_normalization);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the first and second moments of the degree distribution of each graph." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1st moment of citation graph: 2.8728606356968216\n", "2nd moment of citation graph: 23.765281173594133\n", "1st moment of feature graph: 334.4034229828851\n", "2nd moment of feature graph: 167201.1980440098\n" ] } ], "source": [ "degfs, counts_feat = np.unique(degrees_feature, return_counts=True)\n", "degcs, counts_cit = np.unique(degrees_citation, return_counts=True)\n", "\n", "degfeatprobs = counts_feat / counts_feat.sum()\n", "degcitprobs = counts_cit / counts_cit.sum()\n", "\n", "cit_moment_1 = (degcs*degcitprobs).sum()\n", "cit_moment_2 = (degcs*degcs*degcitprobs).sum()\n", "\n", "feat_moment_1 = (degfs*degfeatprobs).sum()\n", "feat_moment_2 = (degfs*degfs*degfeatprobs).sum()\n", "\n", "print(f\"1st moment of citation graph: {cit_moment_1}\")\n", "print(f\"2nd moment of citation graph: {cit_moment_2}\")\n", "print(f\"1st moment of feature graph: {feat_moment_1}\")\n", "print(f\"2nd moment of feature graph: {feat_moment_2}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What information do the moments provide you about the graphs?\n", "Explain the differences in moments between graphs by comparing their degree distributions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** \n", "The first moment of the graph gives us the average degree.\n", "The second moment measures the spread of the distribution around 0. This is slightly different from the variance (second *central* moment)\n", "which measures the spread of the distribution *around the mean*.\n", "\n", "The citation graph is significantly sparser (recall the number of edges from the previous step). This leads to a spike at low degree nodes in the degree distribution and therefore explains the value of the first moment for that graph. For the feature graph we observe that it has more highly connected nodes (notice the fat tail of the distribution). This leads to a higher average degree for the feature graph.\n", "\n", "\n", "For the feature graph we observe from the degree histogram that the tail of the distribution is more spread out (larger range of degrees). This explains the value the second moment and its differences with the second moment of the citation graph which has less spread in its distribution (smaller range of degrees) and therefore smaller second moment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Select the 20 largest hubs for each of the graphs and remove them. Observe the sparsity pattern of the adjacency matrices of the citation and feature graphs before and after such a reduction." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# get degrees of the new unordered one\n", "sort_feat = np.argsort(degrees_feature)\n", "sort_cit = np.argsort(degrees_citation)\n", "\n", "reduced_A_feature = A_feature[sort_feat[:-20],:][:, sort_feat[:-20]]\n", "reduced_A_citation = A_citation[sort_cit[:-20],:][:, sort_cit[:-20]]\n", "\n", "A_feature = A_feature[sort_feat,:][:,sort_feat]\n", "A_citation = A_citation[sort_cit,:][:,sort_cit]\n", "\n", "fig, axes = plt.subplots(2, 2, figsize=(16, 16))\n", "axes[0, 0].set_title('Feature graph: adjacency matrix sparsity pattern')\n", "axes[0, 0].spy(A_feature);\n", "axes[0, 1].set_title('Feature graph without top 20 hubs: adjacency matrix sparsity pattern')\n", "axes[0, 1].spy(reduced_A_feature);\n", "axes[1, 0].set_title('Citation graph: adjacency matrix sparsity pattern')\n", "axes[1, 0].spy(A_citation);\n", "axes[1, 1].set_title('Citation graph without top 20 hubs: adjacency matrix sparsity pattern')\n", "axes[1, 1].spy(reduced_A_citation);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the new degree distribution histograms." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "reduced_degrees_feat = reduced_A_feature.sum(1)\n", "reduced_degrees_cit = reduced_A_citation.sum(1)\n", "\n", "deg_hist_normalization = np.ones(reduced_degrees_feat.shape[0]) / reduced_degrees_feat.shape[0]\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(16, 4))\n", "axes[0].set_title('Citation graph degree distribution')\n", "axes[0].hist(reduced_degrees_cit, weights=deg_hist_normalization);\n", "axes[1].set_title('Feature graph degree distribution')\n", "axes[1].hist(reduced_degrees_feat, weights=deg_hist_normalization);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the first and second moments for the new graphs." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Citation graph first moment: 1.9724310776942355\n", "Citation graph second moment: 6.270676691729323\n", "Feature graph first moment: 302.30827067669173\n", "Feature graph second moment: 142170.32581453634\n" ] } ], "source": [ "reduced_degfs, reduced_counts_feat = np.unique(reduced_degrees_feat,return_counts=True)\n", "reduced_degns, reduced_counts_net = np.unique(reduced_degrees_cit,return_counts=True)\n", "\n", "reduced_degfeatprobs = reduced_counts_feat / reduced_counts_feat.sum()\n", "reduced_degnetprobs = reduced_counts_net / reduced_counts_net.sum()\n", "\n", "reduced_cit_moment_1 = (reduced_degns*reduced_degnetprobs).sum()\n", "reduced_cit_moment_2 = (reduced_degns*reduced_degns*reduced_degnetprobs).sum()\n", "\n", "reduced_feat_moment_1 = (reduced_degfs*reduced_degfeatprobs).sum()\n", "reduced_feat_moment_2 = (reduced_degfs*reduced_degfs*reduced_degfeatprobs).sum()\n", "\n", "print(\"Citation graph first moment:\", reduced_cit_moment_1)\n", "print(\"Citation graph second moment:\", reduced_cit_moment_2)\n", "print(\"Feature graph first moment: \", reduced_feat_moment_1)\n", "print(\"Feature graph second moment: \", reduced_feat_moment_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print the number of edges in the reduced graphs." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feat graph edges 120621.0\n", "Citation graph edges 787.0\n" ] } ], "source": [ "print(\"Feat graph edges\", reduced_A_feature.sum() / 2)\n", "print(\"Citation graph edges\", reduced_A_citation.sum() / 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Is the effect of removing the hubs the same for both networks? Look at the percentage changes for each moment. Which of the moments is affected the most and in which graph? Explain why. \n", "\n", "**Hint:** Examine the degree distributions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Removing hubs has a more pronounced effect in the degree distribution of the citation graph. It is thin tailed and therefore the second moment is going to be affected the most. Notice that the second moment of the citation graph is roughly 0.25 of the original while for the feature graph it's closer to 0.85 times the original value. We also observe that the tail of the feature graph degree distribution still has a high probability and it hasn't shifted at all. This is in contrast with the citation graph where the maximum degree has shifted considerably." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3: Pruning, sparsity, paths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By adjusting the threshold of the euclidean distance matrix, prune the feature graph so that its number of edges is roughly close (within a hundred edges) to the number of edges in the citation graph." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of edges in the feature graph: 136771.0\n", "Number of edges in the feature graph after pruning: 1386.0\n", "Number of edges in the citation graph: 1175.0\n" ] } ], "source": [ "threshold = 2.83\n", "\n", "A_feature_pruned = (distance < threshold).astype(float) - np.eye(distance.shape[0])\n", "num_edges_feature_pruned = A_feature_pruned .sum() / 2\n", "\n", "print(f\"Number of edges in the feature graph: {num_edges_feature}\")\n", "print(f\"Number of edges in the feature graph after pruning: {num_edges_feature_pruned}\")\n", "print(f\"Number of edges in the citation graph: {num_edges_citation}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check your results by comparing the sparsity patterns and total number of edges between the graphs." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(12, 6))\n", "axes[0].set_title('Citation graph sparsity')\n", "axes[0].spy(A_citation);\n", "axes[1].set_title('Feature graph sparsity')\n", "axes[1].spy(A_feature_pruned);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let $C_{k}(i,j)$ denote the number of paths of length $k$ from node $i$ to node $j$. \n", "\n", "We define the path matrix $P$, with entries\n", "$ P_{ij} = \\displaystyle\\sum_{k=0}^{N}C_{k}(i,j). $" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate the path matrices for both the citation and the unpruned feature graphs for $N =10$. \n", "\n", "**Hint:** Use [powers of the adjacency matrix](https://en.wikipedia.org/wiki/Adjacency_matrix#Matrix_powers)." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "path_lengths = range(11)\n", "\n", "path_matrix_citation = sum([np.linalg.matrix_power(A_citation, k) for k in path_lengths])\n", "path_matrix_feature = sum([np.linalg.matrix_power(A_feature, k) for k in path_lengths])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the sparsity pattern for both of path matrices." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(16, 9))\n", "axes[0].set_title('Citation Path matrix sparsity')\n", "axes[0].spy(path_matrix_citation);\n", "axes[1].set_title('Feature Path matrix sparsity')\n", "axes[1].spy(path_matrix_feature);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now calculate the path matrix of the pruned feature graph for $N=10$. Plot the corresponding sparsity pattern. Is there any difference?" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "path_matrix_pruned = sum([np.linalg.matrix_power(A_feature_pruned, k) for k in path_lengths])\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.title('Feature Path matrix sparsity')\n", "plt.spy(path_matrix_pruned);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Yes, the path matrix for the unpruned graph doesn't have zero entries while the one for the pruned graph does." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Describe how you can use the above process of counting paths to determine whether a graph is connected or not. Is the original (unpruned) feature graph connected?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Compute the path matrix for $N=|V|-1$ where $V$ represents the vertex set of the graph. If the matrix has no zero entries then the graph is connected, otherwise it's not. $|V|-1$ is the largest possible number of steps between two nodes in any given graph. This is the case for the path graph on N nodes. It is straightforward to observe that $N-1$ steps are needed to get from one end of the path graph to the other." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the graph is connected, how can you guess its diameter using the path matrix?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** The diameter is the length of the \"longest shortest path\".\n", "Compute the smallest $N$ for which the path matrix has no zero entries. This means that $N$ will be the smallest path length at which paths between all pairs of nodes exist, which by definition is the diameter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If any of your graphs is connected, calculate the diameter using that process." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The diameter is: 2\n" ] } ], "source": [ "path_matrix = np.zeros((A_feature.shape[0],A_feature.shape[0]))\n", "for k in range(11):\n", " path_matrix += np.linalg.matrix_power(A_feature, k)\n", " if (path_matrix==0).sum() == 0:\n", " break \n", "\n", "diameter = k\n", "print(f\"The diameter is: {diameter}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check if your guess was correct using [NetworkX](https://networkx.github.io/documentation/stable/reference/algorithms/generated/networkx.algorithms.distance_measures.diameter.html).\n", "Note: usage of NetworkX is only allowed in this part of Section 1." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Diameter according to networkx: 2\n" ] } ], "source": [ "import networkx as nx\n", "feature_graph = nx.from_numpy_matrix(A_feature)\n", "print(f\"Diameter according to networkx: {nx.diameter(feature_graph)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Section 2: Network Models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section, you will analyze the feature and citation graphs you constructed in the previous section in terms of the network model types.\n", "For this purpose, you can use the NetworkX libary imported below." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import networkx as nx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us create NetworkX graph objects from the adjacency matrices computed in the previous section." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of nodes: 818, Number of edges: 1175\n", "Number of self-loops: 0, Number of connected components: 104\n" ] } ], "source": [ "G_citation = nx.from_numpy_matrix(A_citation)\n", "print('Number of nodes: {}, Number of edges: {}'. format(G_citation.number_of_nodes(), G_citation.number_of_edges()))\n", "print('Number of self-loops: {}, Number of connected components: {}'. format(G_citation.number_of_selfloops(), nx.number_connected_components(G_citation)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the rest of this assignment, we will consider the pruned feature graph as the feature network." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of nodes: 818, Number of edges: 1386\n", "Number of self-loops: 0, Number of connected components: 684\n" ] } ], "source": [ "G_feature = nx.from_numpy_matrix(A_feature_pruned)\n", "print('Number of nodes: {}, Number of edges: {}'. format(G_feature.number_of_nodes(), G_feature.number_of_edges()))\n", "print('Number of self-loops: {}, Number of connected components: {}'. format(G_feature.number_of_selfloops(), nx.number_connected_components(G_feature)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4: Simulation with Erdős–Rényi and Barabási–Albert models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create an Erdős–Rényi and a Barabási–Albert graph using NetworkX to simulate the citation graph and the feature graph you have. When choosing parameters for the networks, take into account the number of vertices and edges of the original networks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of nodes should exactly match the number of nodes in the original citation and feature graphs." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "818" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "assert len(G_citation.nodes()) == len(G_feature.nodes())\n", "n = len(G_citation.nodes())\n", "n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of match shall fit the average of the number of edges in the citation and the feature graph." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1280.0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = np.round((G_citation.size() + G_feature.size()) / 2)\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do you determine the probability parameter for the Erdős–Rényi graph?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** For the ER network, the expected number of edges is $$E[m] = pn(n-1)/2.$$" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "p = 2*m / (n * (n-1))\n", "G_er = nx.erdos_renyi_graph(n, p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the number of edges in the Erdős–Rényi graph." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My Erdos-Rényi network that simulates the citation graph has 1288 edges.\n" ] } ], "source": [ "print('My Erdos-Rényi network that simulates the citation graph has {} edges.'.format(G_er.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do you determine the preferential attachment parameter for Barabási–Albert graphs?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** For the BA network, m is fixed to $$m = q(n-q),$$ where $q$ is the model parameter." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "q = 2\n", "G_ba = nx.barabasi_albert_graph(n, q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the number of edges in the Barabási–Albert graph." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My Barabási-Albert network that simulates the citation graph has 1632 edges.\n" ] } ], "source": [ "print('My Barabási-Albert network that simulates the citation graph has {} edges.'.format(G_ba.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5: Giant Component" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the size of the largest connected component in the citation and feature graphs." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The giant component of the citation graph has 636 nodes and 1079 edges.\n" ] } ], "source": [ "giant_citation = max(nx.connected_component_subgraphs(G_citation), key=len)\n", "print('The giant component of the citation graph has {} nodes and {} edges.'.format(giant_citation.number_of_nodes(), giant_citation.size()))" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The giant component of the feature graph has 117 nodes and 1364 edges.\n" ] } ], "source": [ "giant_feature = max(nx.connected_component_subgraphs(G_feature), key=len)\n", "print('The giant component of the feature graph has {} nodes and {} edges.'.format(giant_feature.number_of_nodes(), giant_feature.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the size of the giant components in the generated Erdős–Rényi graph." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The giant component of the Erdos-Rényi network has 768 nodes and 1286 edges.\n" ] } ], "source": [ "giant_er = max(nx.connected_component_subgraphs(G_er), key=len)\n", "print('The giant component of the Erdos-Rényi network has {} nodes and {} edges.'.format(giant_er.number_of_nodes(), giant_er.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us match the number of nodes in the giant component of the feature graph by simulating a new Erdős–Rényi network.\n", "How do you choose the probability parameter this time? \n", "\n", "**Hint:** Recall the expected giant component size from the lectures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** We know from the lectures that in Erdős–Rényi networks, the fraction of nodes in the giant component $$S = \\frac{N_G}{N}$$ grows with the average degree by $$S = 1 - e^{-\\langle k \\rangle S}.$$ Therefore, as $\\langle k \\rangle = (N-1)p$:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "S = giant_feature.number_of_nodes() / n\n", "p_new = - np.log(1-S) / (S * (n-1))\n", "G_er_new = nx.erdos_renyi_graph(n, p_new)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the size of the new Erdős–Rényi network and its giant component." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My new Erdos Renyi network that simulates the citation graph has 463 edges.\n", "The giant component of the new Erdos-Rényi network has 249 nodes and 253 edges.\n" ] } ], "source": [ "print('My new Erdos Renyi network that simulates the citation graph has {} edges.'.format(G_er_new.size()))\n", "giant_er_new = max(nx.connected_component_subgraphs(G_er_new), key=len) # Your code here.\n", "print('The giant component of the new Erdos-Rényi network has {} nodes and {} edges.'.format(giant_er_new.number_of_nodes(), giant_er_new.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6: Degree Distributions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall the degree distribution of the citation and the feature graph." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA20AAAF1CAYAAAB76AIVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dfbRddX3n8ffHREEQC8gFIYkF2wwWHEW9TbG2jjUq8TGsztCGVid14aR/pFVa2wqurtG6mopdra2dStfK4EOmWjDiA7FaaybVPloxKFYDZogEyW1icoXiA9ho8Dt/nJ16CDe5N/fp7H3u+7XWXfvs3/ntc7+/k8Avn7N/e59UFZIkSZKkdnrEoAuQJEmSJB2doU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG1acJK8Psl1s/h6T0jy7SSLZus1ByHJc5KMDboOSZLaJsldSZ436Dq0cBnaNJSS/EKS7U2Y2pfkr5L8FEBV/V5Vvarpd26SSrL4OF77If/jrqq7q+oxVfXg7I9EkqTZ08xh32nmx8M/58zwNf3QT5pjhjYNnSS/Dvwx8HvAWcATgGuB1YOsa64dT/CUJC1oL20+bDz8s3eQxcz1/OX8qGFgaNNQSfJDwJuA9VX1waq6v6q+V1UfqarfbPq8Mcl7mkP+rtne13za+MwkP5Lkb5Lck+TrSd6b5NTm2D+nFwI/0vT/rSPP1iU5J8mWJPcm2ZXkf/TV98Ykm5P8nyTfSrIjyegxxvOCJDuTfCPJtUn+Nsnhs4S/lOQfk/xRknuBNx6r9uaYu5JcneS2JP+W5F1JTjzid742yYHmDOUrZ/hHIknqiCQXJ/mnJPcl+UKS5/Q998oktzdz151JfrlpPxn4K+Cc/jN3Sd6d5Hf7jn/I2bhmPnpdkn8B7k+yuDnuA0nGk+xO8upj1Pq4JB9J8s0kn03yu0n+oe/5SrI+yR3AHU3b25LsaY65JclP9/V/Y5Ibk7yvGePnkjz1iF97UZJ/aebk9x05f0pzydCmYfNM4ETgQ1Ps/+xme2rzaeOngQBvBs4BfgxYBrwRoKpeAdzNDz6l/P0JXvN6YKw5/r8Bv5dkZd/zLwNuAE4FtgB/OlFhSc4AbgSuBh4H7AR+8ohuPwHcCZwJbDhW7X1+EbgE+BHgPwG/3ffc44EfApYAVwBvT3LaRPVJkoZHkiXAR4HfBU4HfgP4QJKRpssB4CXAY4FXAn+U5OlVdT/wQmDvNM7cXQ68mN58+H3gI8AX6M1BK4Erk1xylGPfDtxPb95a2/wc6VJ68+QFzf5ngYua8f0F8P4jgtdq4P19z384ySP7nv85YBVwHvAU4JemOE5pxgxtGjaPA75eVYem+wJVtauqtlbVwaoaB94K/JepHJtkGfBTwOuq6t+r6lbgOuAVfd3+oao+1lwD9+fAkZ/kHfYiYEdzxvAQ8CfA147os7eq/ldVHaqq70yx9j+tqj1VdS+9oHd533PfA97UnJ38GPBt4PypjF2S1Bkfbs6m3Zfkw03by4GPNfPT96tqK7Cd3lxEVX20qr5SPX8LfAL46Ylffsr+pJmPvgP8ODBSVW+qqu9W1Z3A/wbWHHlQejf++q/AG6rqgaq6Ddg0weu/uarubV6fqnpPVd3TzJl/CJzAQ+e4W6rqxqr6Hr3580Tg4iPq3dvMnx+hFwCleeEaXw2be4AzkiyebnBLcia9gPTTwCn0Ptz4tykefg5wb1V9q6/tq0D/Esj+4PUAcOJR6j0H2HN4p6oqD7/Qe0//zhRr7z/mq83vOeyeI+p4AHgMkqRhcmlV/d8j2n4YuCzJS/vaHgl8EiDJC4E30Fuh8QjgJOCLM6yjfz76YXpLLO/ra1sE/P0Ex43Q+zds//F7Juh35Bz5WuBV9Oa9onfW8IyJ+lfV95s5t3+OPHL+ntENXKTj4Zk2DZtPA/9Ob0nEVNQEbW9u2p9SVY+l9+ljJjnmsL3A6UlO6Wt7AvCvU6yn3z5g6eGdJOnfP0otk9UOvSWT/bUN9AJ0SVIr7AH+vKpO7fs5uaquSXIC8AHgD4CzqupU4GP8YH6ZaF68n16wO+zxE/TpP24PsPuI339KVb1oguPGgUM8dE5cNkG//3j95vq119Fb4nhaM4Zv8NA5cllf/0c0r+8cqVYwtGmoVNU3gP9J71qsS5OclOSRSV6YZKLrz8bpraN/Yl/bKfSWBd7XrPH/zSOO2X9E//7fvwf4J+DNSU5M8hR614a9dxrD+Sjwn5txLAbWM/Gk12+y2gHWJ1ma5HTg9cD7plGbJGm4vAd4aZJLkixq5rDnJFkKPIreUsJx4FBz1u0FfcfuBx6X3s3ADrsVeFGS05M8Hrhykt9/M/DN5uYkj25qeHKSHz+yY3N5wQfp3YDrpCRPAv77JK9/Cr2gNw4sTvI/6Z1p6/eMJD/bzLlXAgeBf57kdaV5YWjT0KmqtwK/Tu8GG+P0Pr37FeDDE/R9gN51Xf/YrO2/GPgd4On0PoH7KL2Jod+bgd9u+v/GBCVcDpxL79O5D9Fbc791GuP4OnAZ8Pv0ln1eQO/6goPHOGyy2qF3cfUn6N3A5E56F51Lkhaw5kPH1fQ+zDs8d/4m8Ihmyf+rgc30ltz/Ar0baR0+9sv0bsJ1ZzM3nkPvmu0vAHfRm3OO+QFhE8ReSu86sd3A1+ldE/5DRznkV5rnvtb8rus59vz41/Tucvn/6F0a8O88fEnlTcDPN2N8BfCzzfVt0sCl6lgrvSS1RbNUYwz4xar65DRf4y7gVRNcyyBJUmcleQvw+Kqa6C6SUzn+jcCPVtXLZ7UwaZZ4pk1qsWaZyqnN9QSvp7f23qUakqQFLcmTkjwlPSvoXYow1a/7kTrHu0dK7fZMessZHwXcRu+OX98ZbEmSJA3cKfSWRJ5D7zvk/pDe8kZpKLk8UpIkSZJazOWRkiRJktRihjZJkiRJarFWXNN2xhln1LnnnjvoMiRJ8+CWW275elWNDLqOrnCOlKSF4VjzYytC27nnnsv27dsHXYYkaR4k+eqga+gS50hJWhiONT9OaXlkkl9LsiPJl5Jcn+TE5hvutya5o9me1tf/6iS7kuxMcslsDEKSJEmSFqJJQ1uSJcCrgdGqejKwCFgDXAVsq6rlwLZmnyQXNM9fCKwCrk2yaG7KlyRJkqThNtUbkSwGHp1kMXASsBdYDWxqnt8EXNo8Xg3cUFUHq2o3sAtYMXslS5IkSdLCMWloq6p/Bf4AuBvYB3yjqj4BnFVV+5o++4Azm0OWAHv6XmKsaXuIJOuSbE+yfXx8fGajkCRJkqQhNZXlkafRO3t2Hr1vnT85ycuPdcgEbQ/7Bu+q2lhVo1U1OjLiTcQkSZIkaSJTWR75PGB3VY1X1feADwI/CexPcjZAsz3Q9B8DlvUdv5TeckpJkiRJ0nGaSmi7G7g4yUlJAqwEbge2AGubPmuBm5rHW4A1SU5Ich6wHLh5dsuWJEmSpIVh0u9pq6rPJLkR+BxwCPg8sBF4DLA5yRX0gt1lTf8dSTYDtzX911fVg3NUvyRJkiQNtSl9uXZVvQF4wxHNB+mddZuo/wZgw8xKkyRJkiRN9Zb/kiRJkqQBMLRJkiRJUosZ2iRJkiSpxQxtkiRJktRiU7oRSVece9VHB10CAHdd8+JBlyBJ0n9oy/wIzpGSNB2eaZMkSZKkFjO0SZIkSVKLGdokSZIkqcUMbZIkSZLUYoY2SZIkSWoxQ5skSZIktZihTZIkSZJazNAmSZIkSS1maJMkSZKkFjO0SZIkSVKLGdokSZIkqcUMbZIkSZLUYoY2SZIkSWoxQ5skSZIktZihTZKkaUpyfpJb+36+meTKJKcn2ZrkjmZ7Wt8xVyfZlWRnkksGWb8kqRsMbZIkTVNV7ayqi6rqIuAZwAPAh4CrgG1VtRzY1uyT5AJgDXAhsAq4NsmigRQvSeoMQ5skSbNjJfCVqvoqsBrY1LRvAi5tHq8Gbqiqg1W1G9gFrJj3SiVJnWJokyRpdqwBrm8en1VV+wCa7ZlN+xJgT98xY02bJElHZWiTJGmGkjwKeBnw/sm6TtBWE7zeuiTbk2wfHx+fjRIlSR1maJMkaeZeCHyuqvY3+/uTnA3QbA807WPAsr7jlgJ7j3yxqtpYVaNVNToyMjKHZUuSusDQJknSzF3OD5ZGAmwB1jaP1wI39bWvSXJCkvOA5cDN81alJKmTFg+6AEmSuizJScDzgV/ua74G2JzkCuBu4DKAqtqRZDNwG3AIWF9VD85zyZKkjjG0SZI0A1X1APC4I9ruoXc3yYn6bwA2zENpkqQh4fJISZIkSWoxQ5skSZIktZihTZIkSZJabNLQluT8JLf2/XwzyZVJTk+yNckdzfa0vmOuTrIryc4kl8ztECRJkiRpeE0a2qpqZ1VdVFUXAc8AHgA+BFwFbKuq5cC2Zp8kFwBrgAuBVcC1SRbNUf2SJEmSNNSOd3nkSuArVfVVYDWwqWnfBFzaPF4N3FBVB6tqN7ALWDEbxUqSJEnSQnO8oW0NP/jy0LOqah9Asz2zaV8C7Ok7Zqxpe4gk65JsT7J9fHz8OMuQJEmSpIVhyqEtyaOAlwHvn6zrBG31sIaqjVU1WlWjIyMjUy1DkiRJkhaU4znT9kLgc1W1v9nfn+RsgGZ7oGkfA5b1HbcU2DvTQiVJkiRpITqe0HY5P1gaCbAFWNs8Xgvc1Ne+JskJSc4DlgM3z7RQSZIkSVqIFk+lU5KTgOcDv9zXfA2wOckVwN3AZQBVtSPJZuA24BCwvqoenNWqJUmSJGmBmFJoq6oHgMcd0XYPvbtJTtR/A7BhxtVJkiRJ0gJ3vHePlCRJkiTNI0ObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSNE1JTk1yY5IvJ7k9yTOTnJ5ka5I7mu1pff2vTrIryc4klwyydklSdxjaJEmavrcBH6+qJwFPBW4HrgK2VdVyYFuzT5ILgDXAhcAq4NokiwZStSSpUwxtkiRNQ5LHAs8G3gFQVd+tqvuA1cCmptsm4NLm8Wrghqo6WFW7gV3AivmtWpLURYY2SZKm54nAOPCuJJ9Pcl2Sk4GzqmofQLM9s+m/BNjTd/xY0/YwSdYl2Z5k+/j4+NyNQJLUCYY2SZKmZzHwdODPquppwP00SyGPIhO01UQdq2pjVY1W1ejIyMjMK5UkdZqhTZKk6RkDxqrqM83+jfRC3P4kZwM02wN9/Zf1Hb8U2DtPtUqSOszQJknSNFTV14A9Sc5vmlYCtwFbgLVN21rgpubxFmBNkhOSnAcsB26ex5IlSR21eNAFSJLUYb8KvDfJo4A7gVfS+0B0c5IrgLuBywCqakeSzfSC3SFgfVU9OJiyJUldYmiTJGmaqupWYHSCp1Yepf8GYMOcFiVJGjouj5QkSZKkFptSaEtyapIbk3w5ye1Jnpnk9CRbk9zRbE/r6391kl1Jdia5ZO7KlyRJkqThNtUzbW8DPl5VTwKeCtxO77bG26pqObCt2SfJBcAa4EJgFXBtkkWzXbgkSZIkLQSThrYkjwWeDbwDoKq+W1X3AauBTU23TcClzePVwA1VdbCqdgO7gBWzXbgkSZIkLQRTOdP2RGAceFeSzye5LsnJwFlVtQ+g2Z7Z9F8C7Ok7fqxpe4gk65JsT7J9fHx8RoOQJEmSpGE1ldC2mN6Xhf5ZVT0NuJ9mKeRRZIK2elhD1caqGq2q0ZGRkSkVK0mSJEkLzVRC2xgwVlWfafZvpBfi9ic5G6DZHujrv6zv+KXA3tkpV5IkSZIWlklDW1V9DdiT5PymaSW9LwbdAqxt2tYCNzWPtwBrkpyQ5DxgOXDzrFYtSZIkSQvEVL9c+1eB9yZ5FHAn8Ep6gW9zkiuAu4HLAKpqR5LN9ILdIWB9VT0465VLkiRJ0gIwpdBWVbcCoxM8tfIo/TcAG2ZQlyRJkiSJqX9PmyRJkiRpAAxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkjQDSe5K8sUktybZ3rSdnmRrkjua7Wl9/a9OsivJziSXDK5ySVJXGNokSZq5n6mqi6pqtNm/CthWVcuBbc0+SS4A1gAXAquAa5MsGkTBkqTuMLRJkjT7VgObmsebgEv72m+oqoNVtRvYBawYQH2SpA4xtEmSNDMFfCLJLUnWNW1nVdU+gGZ7ZtO+BNjTd+xY0/YQSdYl2Z5k+/j4+ByWLknqgsWDLkCSpI57VlXtTXImsDXJl4/RNxO01cMaqjYCGwFGR0cf9rwkaWHxTJskSTNQVXub7QHgQ/SWO+5PcjZAsz3QdB8DlvUdvhTYO3/VSpK6yNAmSdI0JTk5ySmHHwMvAL4EbAHWNt3WAjc1j7cAa5KckOQ8YDlw8/xWLUnqGpdHSpI0fWcBH0oCvTn1L6rq40k+C2xOcgVwN3AZQFXtSLIZuA04BKyvqgcHU7okqSumFNqS3AV8C3gQOFRVo0lOB94HnAvcBfxcVf1b0/9q4Iqm/6ur6q9nvXJJkgasqu4EnjpB+z3AyqMcswHYMMelSZKGyPEsj/Q7aCRJkiRpns3kmja/g0aSJEmS5thUQ5vfQSNJkiRJAzDVG5H4HTSSJEmSNABTOtPmd9BIkiRJ0mBMGtr8DhpJkiRJGpypLI/0O2gkSZIkaUAmDW1+B40kSZIkDc5MbvkvSZIkSZpjhjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiTNQJJFST6f5C+b/dOTbE1yR7M9ra/v1Ul2JdmZ5JLBVS1J6hJDmyRJM/Ma4Pa+/auAbVW1HNjW7JPkAmANcCGwCrg2yaJ5rlWS1EGGNkmSpinJUuDFwHV9zauBTc3jTcClfe03VNXBqtoN7AJWzFetkqTuMrRJkjR9fwz8FvD9vrazqmofQLM9s2lfAuzp6zfWtEmSdEyGNkmSpiHJS4ADVXXLVA+ZoK2O8trrkmxPsn18fHzaNUqShoOhTZKk6XkW8LIkdwE3AM9N8h5gf5KzAZrtgab/GLCs7/ilwN6JXriqNlbVaFWNjoyMzFX9kqSOMLRJkjQNVXV1VS2tqnPp3WDkb6rq5cAWYG3TbS1wU/N4C7AmyQlJzgOWAzfPc9mSpA6acmjzlsaSJE3JNcDzk9wBPL/Zp6p2AJuB24CPA+ur6sGBVSlJ6ozjOdPmLY0lSZpAVX2qql7SPL6nqlZW1fJme29fvw1V9SNVdX5V/dXgKpYkdcmUQpu3NJYkSZKkwZjqmbZZv6Wxd8aSJEmSpMlNGtrm6pbG3hlLkiRJkia3eAp9Dt/S+EXAicBj+29pXFX7pntLY0mSJEnSsU16ps1bGkuSJEnS4EzlTNvRXANsTnIFcDdwGfRuaZzk8C2ND+EtjSVJkiRp2o4rtFXVp4BPNY/vAVYepd8GYMMMa5MkSZKkBe94vqdNkiRJkjTPDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSpiHJiUluTvKFJDuS/E7TfnqSrUnuaLan9R1zdZJdSXYmuWRw1UuSusTQJknS9BwEnltVTwUuAlYluRi4CthWVcuBbc0+SS4A1gAXAquAa5MsGkjlkqROMbRJkjQN1fPtZveRzU8Bq4FNTfsm4NLm8Wrghqo6WFW7gV3AinksWZLUUYY2SZKmKcmiJLcCB4CtVfUZ4Kyq2gfQbM9sui8B9vQdPta0SZJ0TIY2SZKmqaoerKqLgKXAiiRPPkb3TPQSE3ZM1iXZnmT7+Pj4bJQqSeqwSUObF1pLknRsVXUf8Cl616rtT3I2QLM90HQbA5b1HbYU2HuU19tYVaNVNToyMjJndUuSumEqZ9q80FqSpCMkGUlyavP40cDzgC8DW4C1Tbe1wE3N4y3AmiQnJDkPWA7cPL9VS5K6aPFkHaqqgKNdaP2cpn0TvU8YX0ffhdbA7iSHL7T+9GwWLknSgJ0NbGo+mHwEsLmq/jLJp4HNSa4A7gYuA6iqHUk2A7cBh4D1VfXggGqXJHXIpKENehdaA7cAPwq8vao+k+QhF1on6b/Q+p/7DvdCa0nS0KmqfwGeNkH7PcDKoxyzAdgwx6VJkobMlG5EMhcXWnuRtSRJkiRN7rjuHjmbF1p7kbUkSZIkTW4qd4/0QmtJkiRJGpCpXNPmhdaSJEmSNCBTuXukF1pLkiRJ0oAc1zVtkiRJkqT5ZWiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJE1DkmVJPpnk9iQ7krymaT89ydYkdzTb0/qOuTrJriQ7k1wyuOolSV1iaJMkaXoOAa+tqh8DLgbWJ7kAuArYVlXLgW3NPs1za4ALgVXAtUkWDaRySVKnGNokSZqGqtpXVZ9rHn8LuB1YAqwGNjXdNgGXNo9XAzdU1cGq2g3sAlbMb9WSpC6aNLS5/EOSpGNLci7wNOAzwFlVtQ96wQ44s+m2BNjTd9hY0zbR661Lsj3J9vHx8bkqW5LUEVM50+byD0mSjiLJY4APAFdW1TeP1XWCtpqoY1VtrKrRqhodGRmZjTIlSR02aWhz+YckSRNL8kh6ge29VfXBpnl/krOb588GDjTtY8CyvsOXAnvnq1ZJUncd1zVts738Q5KkrkoS4B3A7VX11r6ntgBrm8drgZv62tckOSHJecBy4Ob5qleS1F2Lp9rxyOUfvblq4q4TtD1s+UeSdcA6gCc84QlTLUOSpLZ4FvAK4ItJbm3aXg9cA2xOcgVwN3AZQFXtSLIZuI3epQfrq+rB+S9bktQ1Uwptx1r+UVX7prP8o6o2AhsBRkdHJ1zTL0lSW1XVPzDxB5UAK49yzAZgw5wVJUkaSlO5e6TLPyRJkiRpQKZyps3lH5IkSZI0IJOGNpd/SJIkSdLgHNfdIyVJkiRJ88vQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEktZmiTJEmSpBYztEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSpinJO5McSPKlvrbTk2xNckezPa3vuauT7EqyM8klg6laktQ1k4Y2JyRJko7q3cCqI9quArZV1XJgW7NPkguANcCFzTHXJlk0f6VKkrpqKmfa3o0TkiRJD1NVfwfce0TzamBT83gTcGlf+w1VdbCqdgO7gBXzUqgkqdMmDW1OSJIkHZezqmofQLM9s2lfAuzp6zfWtD1MknVJtifZPj4+PqfFSpLab7rXtM14QpIkaYHJBG01Uceq2lhVo1U1OjIyMsdlSZLabrZvRDLlCclPESVJQ2p/krMBmu2Bpn0MWNbXbymwd55rkyR10HRD24wnJD9FlCQNqS3A2ubxWuCmvvY1SU5Ich6wHLh5APVJkjpmuqHNCUmStOAluR74NHB+krEkVwDXAM9Pcgfw/GafqtoBbAZuAz4OrK+qBwdTuSSpSxZP1qGZkJ4DnJFkDHgDvQloczM53Q1cBr0JKcnhCekQTkiSpCFWVZcf5amVR+m/AdgwdxVJkobRpKHNCUmSJEmSBme2b0QiSZIkSZpFhjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWM7RJkiRJUosZ2iRJkiSpxQxtkiRJktRihjZJkiRJajFDmyRJkiS1mKFNkiRJklrM0CZJkiRJLWZokyRJkqQWWzzoAobRuVd9dNAl/Ie7rnnxoEuQJEmSNAOeaZMkSZKkFjO0SZIkSVKLGdokSZIkqcW8pk2SJM2btlz37TXfkrrEM22SJEmS1GKGNkmSJElqMUObJEmSJLWY14Z1mbEAAAbzSURBVLRJkqQFpy3X1kG7rq9ry/vSpvdEaoM5C21JVgFvAxYB11XVNXP1uyRJ6grnRx2pLUFJUnvNSWhLsgh4O/B8YAz4bJItVXXbXPw+HV1bJgI/MZMk50dJ09eWf9NBe/5dt5Dek7k607YC2FVVdwIkuQFYDTgpSZIWMudHaQoW0j/GpamYq9C2BNjTtz8G/MQc/S7puLRpImiLNk1Ibfnz8T15uDa9Jx3m/Ch1TFv+H9wmvifzb65CWyZoq4d0SNYB65rdbyfZOQu/9wzg67PwOm0wTGMhbxmq8QzTWADOyFuGazzMwp9P3jILlcxcq/6uzcJ7cng8PzzjV+quSedHmJM5slV/lzrI92/6fO9mxvdv+ub1vZulfzccdX6cq9A2Bizr218K7O3vUFUbgY2z+UuTbK+q0dl8zUEZprHAcI1nmMYCjqfNhmksMHzjmaZJ50eY/TnS935mfP+mz/duZnz/pm/Y3ru5+p62zwLLk5yX5FHAGmDLHP0uSZK6wvlRknTc5uRMW1UdSvIrwF/Tu6XxO6tqx1z8LkmSusL5UZI0HXP2PW1V9THgY3P1+kcxq8stB2yYxgLDNZ5hGgs4njYbprHA8I1nWpwfO8n3b/p872bG92/6huq9S9XDrn+WJEmSJLXEXF3TJkmSJEmaBUMR2pKsSrIzya4kVw26nuOV5J1JDiT5Ul/b6Um2Jrmj2Z42yBqnKsmyJJ9McnuSHUle07R3dTwnJrk5yRea8fxO097J8QAkWZTk80n+stnv8ljuSvLFJLcm2d60dXk8pya5McmXm/+GntnF8SQ5v/kzOfzzzSRXdnEsw6Drc+R8GrY5bBCGaY6Zb8MyBwxCkl9r/pv9UpLrm3+/DdV71/nQlmQR8HbghcAFwOVJLhhsVcft3cCqI9quArZV1XJgW7PfBYeA11bVjwEXA+ubP4+ujucg8NyqeipwEbAqycV0dzwArwFu79vv8lgAfqaqLuq7rW+Xx/M24ONV9STgqfT+nDo3nqra2fyZXAQ8A3gA+BAdHEvXDckcOZ+GbQ4bhGGbY+bTUMwB8y3JEuDVwGhVPZneTZ7WMGTvXedDG7AC2FVVd1bVd4EbgNUDrum4VNXfAfce0bwa2NQ83gRcOq9FTVNV7auqzzWPv0XvfzhL6O54qqq+3ew+svkpOjqeJEuBFwPX9TV3cizH0MnxJHks8GzgHQBV9d2quo+OjqfPSuArVfVVuj+WLur8HDmfhm0Om28LZI6ZE0M8B8yXxcCjkywGTqL3/ZdD9d4NQ2hbAuzp2x9r2rrurKraB71JBDhzwPUctyTnAk8DPkOHx9Ms9bgVOABsraouj+ePgd8Cvt/X1tWxQC9AfyLJLUnWNW1dHc8TgXHgXc3SouuSnEx3x3PYGuD65nHXx9JFwzpHzrlhmcPm2bDNMfNpWOeAOVdV/wr8AXA3sA/4RlV9giF774YhtGWCNm+JOWBJHgN8ALiyqr456HpmoqoebJZ5LQVWJHnyoGuajiQvAQ5U1S2DrmUWPauqnk5v6df6JM8edEEzsBh4OvBnVfU04H46vpQjvS+Pfhnw/kHXsoA5R07DMM1h82VI55j5NHRzwHxprlVbDZwHnAOcnOTlg61q9g1DaBsDlvXtL6V3SrTr9ic5G6DZHhhwPVOW5JH0Jrv3VtUHm+bOjuewZpnCp+hdf9jF8TwLeFmSu+gtkXpukvfQzbEAUFV7m+0BetdMraC74xkDxpozuQA30pvAuzoe6IXpz1XV/ma/y2PpqmGdI+fMsM5h82Do5ph5NoxzwHx5HrC7qsar6nvAB4GfZMjeu2EIbZ8Flic5r/lUdw2wZcA1zYYtwNrm8VrgpgHWMmVJQm899u1V9da+p7o6npEkpzaPH03vfwxfpoPjqaqrq2ppVZ1L77+Tv6mql9PBsQAkOTnJKYcfAy8AvkRHx1NVXwP2JDm/aVoJ3EZHx9O4nB8sjYRuj6WrhnWOnBPDNofNp2GbY+bbkM4B8+Vu4OIkJzX/Da+kdz3qUL13Q/Hl2kleRG8d9SLgnVW1YcAlHZck1wPPAc4A9gNvAD4MbAaeQO8v42VVdeTNSlonyU8Bfw98kR+saX89vWsCujiep9C7eHURvQ85NlfVm5I8jg6O57AkzwF+o6pe0tWxJHkivbNr0FtW8hdVtaGr4wFIchG9C/gfBdwJvJLm7x0dG0+Sk+hdS/XEqvpG09bZP5su6/ocOZ+GbQ4blGGYYwZhmOaA+ZbeVzL9PL07wH4eeBXwGIbovRuK0CZJkiRJw2oYlkdKkiRJ0tAytEmSJElSixnaJEmSJKnFDG2SJEmS1GKGNkmSJElqMUObJEmSJLWYoU2SJEmSWszQJkmSJEkt9v8B/WVyHuejGCQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n", "axes[0].set_title('Citation graph')\n", "citation_degrees = [degree for node, degree in G_citation.degree()]\n", "axes[0].hist(citation_degrees);\n", "axes[1].set_title('Feature graph')\n", "feature_degrees = [degree for node, degree in G_feature.degree()]\n", "axes[1].hist(feature_degrees);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What does the degree distribution tell us about a network? Can you make a prediction on the network model type of the citation and the feature graph by looking at their degree distributions?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answe here:** The degree distribution may give us a hint about the formation pattern of a network. For example, a power-law degree distribution signifies a scale-free network and a binomial distribution is outcome of a random network formation. For the feature and the citation graph, we observe a degree distribution close to a power-law distribution. Hence, we can predict that they might have a scale-free growth." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, plot the degree distribution historgrams for the simulated networks." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 3, figsize=(20, 6))\n", "axes[0].set_title('Erdos-Rényi network')\n", "er_degrees = [degree for node, degree in G_er.degree()]\n", "axes[0].hist(er_degrees);\n", "axes[1].set_title('Barabási-Albert network')\n", "ba_degrees = [degree for node, degree in G_ba.degree()]\n", "axes[1].hist(ba_degrees);\n", "axes[2].set_title('new Erdos-Rényi network')\n", "er_new_degrees = [degree for node, degree in G_er_new.degree()]\n", "axes[2].hist(er_new_degrees);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In terms of the degree distribution, is there a good match between the citation and feature graphs and the simulated networks?\n", "For the citation graph, choose one of the simulated networks above that match its degree distribution best. Indicate your preference below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Degree distribution of the citation graph matches that of the Barabási-Albert network best." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also simulate a network using the configuration model to match its degree disctribution exactly. Refer to [Configuration model](https://networkx.github.io/documentation/stable/reference/generated/networkx.generators.degree_seq.configuration_model.html#networkx.generators.degree_seq.configuration_model).\n", "\n", "Let us create another network to match the degree distribution of the feature graph. " ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Configuration model has 818 nodes and 1386 edges.\n" ] } ], "source": [ "G_config = nx.configuration_model(feature_degrees) \n", "print('Configuration model has {} nodes and {} edges.'.format(G_config.number_of_nodes(), G_config.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Does it mean that we create the same graph with the feature graph by the configuration model? If not, how do you understand that they are not the same?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** It does not mean considering the topology. We can prove that they are not the same graph simply by checking the number of connected components for example." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "670" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.number_connected_components(G_config)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7: Clustering Coefficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us check the average clustering coefficient of the original citation and feature graphs. " ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.21693567980632192" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(G_citation)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.1220744470334593" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(G_feature)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What does the clustering coefficient tell us about a network? Comment on the values you obtain for the citation and feature graph." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Clustering coefficient give us a measure about the connectivity pattern of a node to its neighbors and give us a hint about the network model. We obtain small values for a \"small-world\" network models since they are subject to unexpected wirings to some degree. Relatively large values are observed for the networks having more regular connectivity patterns. By looking at the the values obtained here, we can say that the clustering coeficients of the citation and feature graphs are as large as to show that they are not random." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let us check the average clustering coefficient for the simulated networks." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.003341483292583537" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(G_er)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.023269203696504245" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(G_ba)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.056406212498437525" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(nx.Graph(G_config))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comment on the values you obtain for the simulated networks. Is there any good match to the citation or feature graph in terms of clustering coefficient?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Since ER network is constructed totally random, it has a very small clustering coefficient. BA and configuration model might have relatively higher clustering coefficient yet not as high as the original graphs that we constructed from the dataset. It is probably because the original graphs have much more of a regular pattern than a BA network model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the other [network model generators](https://networkx.github.io/documentation/networkx-1.10/reference/generators.html) provided by NetworkX. Which one do you predict to have a better match to the citation graph or the feature graph in terms of degree distribution and clustering coefficient at the same time? Justify your answer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** Our graphs display more regular patterns than a BA network considering the clustering coefficient, but still seem to have a power-law degree distribution considering the degree distributions. We can try clustered power-law graph, considering the sparsity pattern in the previous section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you find a better fit, create a graph object below for that network model. Print the number of edges and the average clustering coefficient. Plot the histogram of the degree distribution." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.179981922130866" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = 2 # preferential attachement (determines the number of edges)\n", "p = 0.2 # probability of triangle rewiring (determines regularity)\n", "G_pl = nx.powerlaw_cluster_graph(n, q, p)\n", "nx.average_clustering(G_pl)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1632" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G_pl.size()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.hist([degree for node, degree in G_pl.degree()]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comment on the similarities of your match." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Your answer here:** BA network was a good fit in terms of degree distribution but it has a very small clustering coefficient due to its random wirings. Using the clustered power law model, we are able to obtain a graph with a higher clustering coefficient since the graph has a more regular connectivity pattern due to the clusters. Also, it still displays a power-law degree distribution." ] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }