"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What are the random graph models?\n",
"\n",
"\"Random graph models\" may refer a wide range of models where randomness is involved in the generation of the graph, particularly in the edge formation. But, the most basic random graph models — that are usually referred as random graph models — are the Erdős-Rényi (ER) model and the configuration model. They both are commonly used as \"null models\" — the models that show us what we would expect if we don't know anything about the graph other than basic properties of the graphs — in network science. \n",
"\n",
"## Why random graphs?\n",
"\n",
"Probably the most important reason to study random graphs is that they provide a baseline for comparison, or act as \"null models\". Let's say you collected a network data and found that the average clustering coefficient of the network is 0.5. Is this high or low? \n",
"\n",
"\n",
"\n",
"If the network is large and very sparse, 0.5 may be almost impossibly high. On the other hand, if the network is extremely dense, then 0.5 may be extremely low. So, it is hard to say! What could be useful contexts? \n",
"\n",
"## ER random graph\n",
"\n",
"One useful context can be an ER random graph with the same number of nodes and edges. This model answers the following question: \"if we only know the number of nodes and edges, and nothing else, what would be the average clustering coefficient that we would expect?\" We can create many instances of ER random graphs and calculate the average clustering coefficient. Then, we can compare the average clustering coefficient of the real network with the distribution of the average clustering coefficient of the ER random graphs!\n",
"\n",
"Let's try with the dolphins network. "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"dolphin_net = nx.read_gml(\"dolphins.gml\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Q: Shall we measure the average clustering coefficent of this network?**"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Average clustering coefficient: 0.259\n"
]
}
],
"source": [
"# YOUR SOLUTION HERE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's then create many instances of ER random graphs and calculate the average clustering coefficient.\n",
"\n",
"**Q: plot the distribution of the average clustering coefficient of many (say 1,000) ER random graphs.**"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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69atU15envLy8rR27VoNHz5cDz/8sLtrBAAAKBUuLb5+8cUXdfToUXXp0kXe3r8cIj8/X4899hhrjAAAQLnlUjDy9fXVv//9b7344ovatWuX/P391aJFC9WpU8fd9QEAAJQal4LRZQ0bNlTDhg3dVQsAAIBHuRSM8vLyNG/ePK1Zs0anT59Wfn6+0/61a9e6pTgAAIDS5NLi6+HDh2v48OHKy8tT8+bNdcsttzjd3CUvL08TJkxQ3bp15e/vr3r16unFF1+UMcbRxxijiRMnKjw8XP7+/oqJibmmb+YGAAC4kkszRosXL9Z7772nbt26ubseJy+//LJmz56t+fPnq1mzZtq2bZsGDBggu92up59+WpI0bdo0zZgxQ/Pnz1fdunU1YcIExcbGas+ePfLz8yvR+gAAQMXi8uLr+vXru7uWAr788kv17NlT3bv/8hMXUVFRevfdd7VlyxZJv8wWJSYm6vnnn1fPnj0lSQsWLFBoaKiWL19e5FcHZGdnKzs727GdmZlZwo8EAACUBy59lDZq1Ci9/vrrTh9plYQOHTpozZo1OnDggKRfvkDyiy++0D333CNJSklJUVpammJiYhz3sdvtat++vTZt2lTkcRMSEmS32x23yMjIEn0cAACgfHBpxuiLL77QunXr9PHHH6tZs2by8fFx2r906VK3FDdu3DhlZmaqcePGqly5svLy8vTSSy8pLi5OkpSWliZJCg0NdbpfaGioY19hxo8fr/j4eMd2ZmYm4QgAALgWjIKCgnTfffe5u5YC3nvvPS1cuFCLFi1Ss2bNtHPnTo0YMUIRERHq37+/y8e12Wyy2WxurBQAAFQELgWjuXPnuruOQj3zzDMaN26cY61QixYtdOzYMSUkJKh///4KCwuTJKWnpys8PNxxv/T0dLVq1apUagQAABWHS2uMJCk3N1efffaZ3nzzTZ07d06SdOrUKWVlZbmtuAsXLqhSJecSK1eu7PjepLp16yosLExr1qxx7M/MzNTmzZsVHR3ttjoAAMCNwaUZo2PHjqlr1646fvy4srOz9cc//lEBAQF6+eWXlZ2draSkJLcU16NHD7300kuqXbu2mjVrph07dmj69On605/+JEny8vLSiBEjNHnyZDVo0MBxuX5ERIR69erllhoAAMCNw6VgNHz4cLVr1067du1SjRo1HO333XefBg0a5LbiZs6c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+1WvXr2SLbqCcuXfRXh4uHx8fFS5cmVHW5MmTZSWlqZLly7J19e3RGuuqFwZiwkTJqhfv37685//LElq0aKFzp8/r8GDB+u5555TpUrMP5SWot67AwMDr3m2SLoBZox8fX3Vtm1brVmzxtGWn5+vNWvWKDo6utD7REdHO/WXpNWrVxfZH9fGlbGQpGnTpunFF1/UqlWr1K5du9IotcIr7lg0btxYX3/9tXbu3Om43XvvvercubN27typyMjI0iy/QnHl30XHjh116NAhRziVpAMHDig8PJxQdB1cGYsLFy4UCD+XA6vhp0hLldveu4u3Lrx8Wrx4sbHZbGbevHlmz549ZvDgwSYoKMikpaUZY4zp16+fGTdunKP/xo0bjbe3t3n11VfN3r17zaRJk7hc302KOxZTp041vr6+5v/9v/9nUlNTHbdz58556iFUGMUdiytxVZr7FHcsjh8/bgICAsywYcPM/v37zYoVK0xISIiZPHmypx5ChVHcsZg0aZIJCAgw7777rjly5Ij59NNPTb169cxDDz3kqYdQYZw7d87s2LHD7Nixw0gy06dPNzt27DDHjh0zxhgzbtw4069fP0f/y5frP/PMM2bv3r1m1qxZXK5/NTNnzjS1a9c2vr6+5rbbbjNfffWVY98dd9xh+vfv79T/vffeMw0bNjS+vr6mWbNmZuXKlaVcccVVnLGoU6eOkVTgNmnSpNIvvAIq7r+LXyMYuVdxx+LLL7807du3Nzabzdx8883mpZdeMrm5uaVcdcVUnLHIyckxf/3rX029evWMn5+fiYyMNEOGDDE//fRT6Rdewaxbt67Q//5ffv779+9v7rjjjgL3adWqlfH19TU333yzmTt3brHP62UMc30AAADSDbDGCAAA4FoRjAAAACwEIwAAAAvBCAAAwEIwAgAAsBCMAAAALAQjAAAAC8EIAADAQjACUGLmzZunoKAgT5dRpKioKCUmJnq6DLfauHGjWrRoIR8fH/Xq1avQtvXr18vLy0tnz569pmPeeeedGjFiRInVDJQlBCPATTZt2qTKlSure/funi6l1Kxbt07dunVTjRo1VKVKFTVt2lSjRo3Sd999VyLne/zxxx1v9u6wdetWDR482G3Hu5odO3bowQcfVGhoqPz8/NSgQQMNGjRIBw4ccOt54uPj1apVK6WkpGjevHmFtnXo0EGpqamy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YPE88cQT2rdvn8aOHasDBw7ovffec3xXUFEfLVatWlX//Oc/tXLlSt1777367LPPdPToUW3btk1jxozRk08+KUkaMmSITpw4oaeeekr79u3T+++/r0mTJik+Pl6VKlW6rtfJbxk/fry2bt2qIUOGaPfu3dq3b59mz56tH374oUDfhg0bKi4uTo899piWLl2qlJQUbdmyRQkJCVq5cuU1n7OwsQTKBE8ucALKu//5n/8x3bp1K3Tf5s2bjSSza9cuY4wxe/bsMZJMnTp1nBbYGmNMfn6+SUxMNI0aNTI+Pj7mpptuMrGxsebzzz83xhRcLHtZSkqK6dy5s/H39zeRkZHmH//4R4EriE6dOmXuueceY7PZTJ06dcyiRYtMSEiISUpKcvTJzMw0Tz31lImIiDA+Pj4mMjLSxMXFmePHj1/18a9evdrExsaa6tWrGz8/P9O4cWMzevRox9VqVy6+NsaYiRMnmtDQUGO3283IkSPNsGHDHIuv9+zZY2JjY81NN91kbDabadiwoWMhuTHGnD592vzxj3801apVc7rEOzU11Tz22GOmZs2axmazmZtvvtkMGjTIZGRkGGOKXuhb2OLrZcuWOfW5cuHylZfrz54920gyP//881Wfq61bt5r777/f8djq169vBg8ebA4ePOjo81uX6//W66SwegtrK+z1tH79etOhQwdjs9lMUFCQiY2Ndey/8jV16dIlM3HiRBMVFWV8fHxMeHi4ue+++8zu3buNMYWP+7Jly8yv33KKGkvA07yM4UNf4EZy8uRJRUZG6rPPPlOXLl08XU6599JLLykpKUknTpzwdCkA3IDF10AFt3btWmVlZalFixZKTU3VmDFjFBUVpT/84Q+eLq1ceuONN3TrrbeqRo0a2rhxo1555RUNGzbM02UBcBOCEVDB5eTk6Nlnn9WRI0cUEBCgDh06aOHChQWuGsK1OXjwoCZPnqwzZ86odu3aGjVqlMaPH+/psgC4CR+lAQAAWLgqDQAAwEIwAgAAsBCMAAAALAQjAAAAC8EIAADAQjACAACwEIwAAAAsBCMAAADL/wdTJI3B3chW1AAAAABJRU5ErkJggg==",
"text/plain": [
"