{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Scale-Free Networks\n", "\n", "Code examples from [Think Complexity, 2nd edition](https://thinkcomplex.com).\n", "\n", "Copyright 2016 Allen Downey, [MIT License](http://opensource.org/licenses/MIT)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import print_function, division\n", "\n", "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "import random\n", "import networkx as nx\n", "import numpy as np\n", "\n", "import thinkplot" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from thinkstats2 import RandomSeed\n", "RandomSeed(18)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Graphs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To represent social networks, we'll use `nx.Graph`, the graph representation provided by NetworkX.\n", "\n", "Each person is represented by a node. Each friendship is represented by an edge between two nodes.\n", "\n", "Here's a simple example with 4 people:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "G = nx.Graph()\n", "G.add_edge(1, 0)\n", "G.add_edge(2, 0)\n", "G.add_edge(3, 0)\n", "nx.draw(G)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of friends a person has is the number of edges that connect to their node, which is the \"degree\" of the node." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 1\n", "0 3\n", "2 1\n", "3 1\n" ] } ], "source": [ "for node in G.nodes():\n", " print(node, G.degree(node))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are often intereted in the \"degree distribution\" of a graph, which is the number of people who have 0 friends, the number who have 1 friend, and so on.\n", "\n", "The following function extracts a list of degrees, one for each node in a graph." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def degrees(G):\n", " \"\"\"List of degrees for nodes in `G`.\n", " \n", " G: Graph object\n", " \n", " returns: list of int\n", " \"\"\"\n", " return [G.degree(node) for node in G]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the result for the small example." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 3, 1, 1]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "degrees(G)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll use `Pmf` from `thinkstats2` to make a probability mass function." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pmf({1: 0.75, 3: 0.25})" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from thinkstats2 import Pmf\n", "\n", "pmf = Pmf(degrees(G))\n", "pmf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And `thinkplot` to display it." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAEqRJREFUeJzt3XuwnHddx/H3pykBRvAy9iBMk5AoQY1cBI8BxFHU4gSYSZyxOIk36oARNRRldCyKUav/iKMoEsUgHasjDaU6eKwHgiAMl5GSgKWQxOgxXnqsTmOFIorU1K9/7Obnst1zdtNznmy2vF8zZ/Jcfvvs95cn2c/5PbvPb1NVSJIEcNm0C5AkXToMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJai6fdgEX6oorrqitW7dOuwxJmikf/vCH/62q5sa1m7lQ2Lp1K8ePH592GZI0U5L84yTtvHwkSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJambujuZpOvBLN027hKl53av2TbsESReBIwVJUmMoSJIaQ0GS1BgKkqTGUJAkNYaCJKkxFCRJjaEgSWoMBUlS02koJNmV5HSSpSTXjdj/miS393/+Jsknu6xHkrS6zqa5SLIBOAQ8F1gGjiVZqKqT59tU1Y8PtH8Z8LSu6pEkjdflSGEnsFRVZ6rqPuAIsGeV9vuAz9/JhSTpEtBlKFwJ3Dmwvtzf9gBJHg9sA/6iw3okSWN0GQoZsa1WaLsXuKWq7h95oGR/kuNJjp89e3bdCpQkfa4uQ2EZ2Dywvgm4a4W2e1nl0lFVHa6q+aqan5ubW8cSJUmDugyFY8D2JNuSbKT3wr8w3CjJVwJfAvxlh7VIkibQWShU1TngAHAUOAXcXFUnklyfZPdA033Akapa6dKSJOki6fSb16pqEVgc2nZwaP3nu6xBkjQ572iWJDWGgiSpMRQkSY2hIElqDAVJUmMoSJIaQ0GS1BgKkqTGUJAkNYaCJKkxFCRJjaEgSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqek0FJLsSnI6yVKS61Zo811JTiY5keRNXdYjSVpdZ9/RnGQDcAh4LrAMHEuyUFUnB9psB14JPLuqPpHkMV3VI0kar8uRwk5gqarOVNV9wBFgz1CbHwQOVdUnAKrq7g7rkSSN0WUoXAncObC+3N826InAE5N8IMkHk+zqsB5J0hidXT4CMmJbjXj+7cBzgE3A+5I8qao++TkHSvYD+wG2bNmy/pVKkoBuRwrLwOaB9U3AXSPa/ElV/U9V/T1wml5IfI6qOlxV81U1Pzc311nBkvT5rstQOAZsT7ItyUZgL7Aw1OatwLcAJLmC3uWkMx3WJElaRWehUFXngAPAUeAUcHNVnUhyfZLd/WZHgXuSnATeDfxkVd3TVU2SpNV1+Z4CVbUILA5tOziwXMAr+j+SpCnzjmZJUmMoSJIaQ0GS1BgKkqTGUJAkNYaCJKkxFCRJjaEgSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJagwFSVJjKEiSGkNBktR0GgpJdiU5nWQpyXUj9l+T5GyS2/s/L+myHknS6i7v6sBJNgCHgOcCy8CxJAtVdXKo6Zur6kBXdUiSJtflSGEnsFRVZ6rqPuAIsKfD55MkrVGXoXAlcOfA+nJ/27DvTHJHkluSbO6wHknSGF2GQkZsq6H1PwW2VtVTgHcCN448ULI/yfEkx8+ePbvOZUqSzusyFJaBwd/8NwF3DTaoqnuq6rP91TcAXzfqQFV1uKrmq2p+bm6uk2IlSd2GwjFge5JtSTYCe4GFwQZJHjewuhs41WE9kqQxOvv0UVWdS3IAOApsAG6oqhNJrgeOV9UCcG2S3cA54N+Ba7qqR5I0XmehAFBVi8Di0LaDA8uvBF7ZZQ2SpMl5R7MkqTEUJEmNoSBJagwFSVJjKEiSGkNBktQYCpKkxlCQJDWGgiSpMRQkSY2hIElqDAVJUmMoSJIaQ0GS1BgKkqTGUJAkNYaCJKlZNRSS/N7A8os6r0aSNFXjRgpPHVh+eZeFSJKmb1wo1FoOnmRXktNJlpJct0q7q5NUkvm1PJ8kaW0uH7N/U5LXAhlYbqrq2pUemGQDcAh4LrAMHEuyUFUnh9o9GrgWuO1B1C9JWkfjQuEnB5aPX+CxdwJLVXUGIMkRYA9wcqjdLwKvBn7iAo8vSVpnq4ZCVd24hmNfCdw5sL4MPGOwQZKnAZur6tYkK4ZCkv3AfoAtW7asoSRJ0mpWDYUkC6vtr6rdqz181EMGjn0Z8BrgmtWeo/88h4HDAPPz82t6n0OStLJxl4+eRe+3/ZvoXfMf9UK/kmVg88D6JuCugfVHA08C3pME4LHAQpLdVXWhl6okSetgXCg8lt4bxfuA7wb+DLipqk5McOxjwPYk24B/Bvb2jwFAVd0LXHF+Pcl7gJ8wECRpelb9SGpV3V9Vb6+qFwHPBJbo/Wb/snEHrqpzwAHgKHAKuLmqTiS5Pslql50kSVMybqRAkocDL6A3WtgKvBb440kOXlWLwOLQtoMrtH3OJMeUJHVn3BvNN9K77v824Beq6uMXpSpJ0lSMGyl8H/CfwBOBlyc5/8mfAFVVX9hlcZKki2vcfQrOoipJn0fGXT56BPBS4AnAHcAN/TeQJUkPQeNGAjcC88DHgOcDv9p5RZKkqRn3nsKOqnoyQJI3Ah/qviRJ0rSMGyn8z/kFLxtJ0kPfuJHCU5N8qr8c4JH9dT99JEkPQeM+fbThYhUiSZo+P3IqSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJajoNhSS7kpxOspTkuhH7X5rkY0luT/L+JDu6rEeStLrOQiHJBuAQ8DxgB7BvxIv+m6rqyVX1tcCrgV/rqh5J0nhdjhR2AktVdaaq7gOOAHsGG1TVpwZWvwAoJElTM26W1LW4ErhzYH0ZeMZwoyQ/CrwC2Ah8a4f1SJLG6HKkkBHbHjASqKpDVfUVwE8Brxp5oGR/kuNJjp89e3ady5QknddlKCwDmwfWNwF3rdL+CPAdo3ZU1eGqmq+q+bm5uXUsUZI0qMtQOAZsT7ItyUZgL7Aw2CDJ9oHVFwB/22E9kqQxOntPoarOJTkAHAU2ADdU1Ykk1wPHq2oBOJDkKnpf+/kJ4EVd1SNJGq/LN5qpqkVgcWjbwYHll3f5/JKkC+MdzZKkxlCQJDWGgiSpMRQkSY2hIElqDAVJUmMoSJIaQ0GS1BgKkqSm0zuaJWnYgV+6adolTMXrXrVv2iVMxJGCJKkxFCRJjaEgSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqek0FJLsSnI6yVKS60bsf0WSk0nuSPKuJI/vsh5J0uo6C4UkG4BDwPOAHcC+JDuGmv0VMF9VTwFuAV7dVT2SpPG6HCnsBJaq6kxV3QccAfYMNqiqd1fVf/VXPwhs6rAeSdIYXYbClcCdA+vL/W0reTHwtg7rkSSN0eUsqRmxrUY2TL4XmAe+eYX9+4H9AFu2bFmv+iRJQ7ocKSwDmwfWNwF3DTdKchXwM8DuqvrsqANV1eGqmq+q+bm5uU6KlSR1GwrHgO1JtiXZCOwFFgYbJHka8Dv0AuHuDmuRJE2gs1CoqnPAAeAocAq4uapOJLk+ye5+s18BHgW8JcntSRZWOJwk6SLo9JvXqmoRWBzadnBg+aoun1+SdGG8o1mS1BgKkqTGUJAkNYaCJKkxFCRJjaEgSWoMBUlSYyhIkhpDQZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJagwFSVJjKEiSGkNBktQYCpKkxlCQJDWdhkKSXUlOJ1lKct2I/d+U5CNJziW5ustaJEnjdRYKSTYAh4DnATuAfUl2DDX7J+Aa4E1d1SFJmtzlHR57J7BUVWcAkhwB9gAnzzeoqn/o7/vfDuuQJE2oy8tHVwJ3Dqwv97ddsCT7kxxPcvzs2bPrUpwk6YG6DIWM2FYP5kBVdbiq5qtqfm5ubo1lSZJW0mUoLAObB9Y3AXd1+HySpDXqMhSOAduTbEuyEdgLLHT4fJKkNeosFKrqHHAAOAqcAm6uqhNJrk+yGyDJ1ydZBl4I/E6SE13VI0kar8tPH1FVi8Di0LaDA8vH6F1WkiRdAryjWZLUGAqSpMZQkCQ1hoIkqTEUJEmNoSBJagwFSVJjKEiSGkNBktQYCpKkxlCQJDWGgiSpMRQkSY2hIElqDAVJUmMoSJIaQ0GS1BgKkqSm01BIsivJ6SRLSa4bsf/hSd7c339bkq1d1iNJWl1noZBkA3AIeB6wA9iXZMdQsxcDn6iqJwCvAX65q3okSeN1OVLYCSxV1Zmqug84AuwZarMHuLG/fAvwbUnSYU2SpFV0GQpXAncOrC/3t41sU1XngHuBL+2wJknSKi7v8NijfuOvB9GGJPuB/f3VTyc5PWENVwD/NmHbWTC1/hz62e/u4rCen0vfQ61Pn8//hx4/SaMuQ2EZ2Dywvgm4a4U2y0kuB74I+PfhA1XVYeDwhRaQ5HhVzV/o4y5V9ufS9lDrDzz0+mR/xuvy8tExYHuSbUk2AnuBhaE2C8CL+stXA39RVQ8YKUiSLo7ORgpVdS7JAeAosAG4oapOJLkeOF5VC8AbgT9IskRvhLC3q3okSeN1efmIqloEFoe2HRxY/m/ghR2WcMGXnC5x9ufS9lDrDzz0+mR/xohXayRJ5znNhSSpmflQmGAqjWuSnE1ye//nJdOoc1JJbkhyd5KPr7A/SV7b7+8dSZ5+sWu8EBP05zlJ7h04PwdHtbtUJNmc5N1JTiU5keTlI9rM2jmapE8zc56SPCLJh5J8tN+fXxjRZmam2JmwP+v3OldVM/tD7w3svwO+HNgIfBTYMdTmGuB10671Avr0TcDTgY+vsP/5wNvo3ePxTOC2ade8xv48B7h12nVeQH8eBzy9v/xo4G9G/JubtXM0SZ9m5jz1/94f1V9+GHAb8MyhNj8CvL6/vBd487TrXmN/1u11btZHCpNMpTFTquq9jLhXY8Ae4Per54PAFyd53MWp7sJN0J+ZUlX/UlUf6S//B3CKB96pP2vnaJI+zYz+3/un+6sP6/8Mv3k6M1PsTNifdTProTDJVBoA39kfxt+SZPOI/bNk0j7Pkmf1h8ZvS/I10y5mUv1LDk+j95vboJk9R6v0CWboPCXZkOR24G7gz6tqxXNUMzDFzgT9gXV6nZv1UJhkmow/BbZW1VOAd/L/vx3MqommBpkhHwEeX1VPBX4TeOuU65lIkkcBfwT8WFV9anj3iIdc8udoTJ9m6jxV1f1V9bX0ZlLYmeRJQ01m6hxN0J91e52b9VAYO5VGVd1TVZ/tr74B+LqLVFtXJpk+ZGZU1afOD42rd1/Lw5JcMeWyVpXkYfRePP+wqv54RJOZO0fj+jSL5wmgqj4JvAfYNbSrnaPVpti51KzUn/V8nZv1UBg7lcbQtdzd9K6XzrIF4Pv7n3B5JnBvVf3LtIt6sJI89vy13CQ76f2bvGe6Va2sX+sbgVNV9WsrNJupczRJn2bpPCWZS/LF/eVHAlcBfz3UbGam2JmkP+v5OtfpHc1dq8mm0rg2yW7gHL3fBK6ZWsETSHITvU96XJFkGfg5em8sUVWvp3eH+POBJeC/gB+YTqWTmaA/VwM/nOQc8Blg76X6n7Pv2cD3AR/rX+MF+GlgC8zmOWKyPs3SeXoccGN6X/R1GXBzVd2a2Z1iZ5L+rNvrnHc0S5KaWb98JElaR4aCJKkxFCRJjaEgSWoMBUlSM9MfSZXWS5L7gY/R+7jsOXp3hP56Vf3vVAuTLjJDQer5TH8aAZI8BngTvbtcf26tB06yoaruX+txpIvBy0fSkKq6G9gPHOjflbwhya8kOdafcOyHAJJcluS3+nPc35pkMcnV/X3/kORgkvcDL0zyFUnenuTDSd6X5Kv67eaS/FH/2MeSPHtqHZdwpCCNVFVnklwGPIbeNMv3VtXXJ3k48IEk76A3v8xW4Mn9dqeAGwYO899V9Y0ASd4FvLSq/jbJM4DfAr4V+A3gNVX1/iRb6N2d/9UXpZPSCIaCtLLzM2l+O/CU86MAepeVtgPfCLyl/77DvyZ599Dj3wxt9tFvAN4yMGX/w/t/XgXsGNj+hUke3f9eA+miMxSkEZJ8OXA/vfnrA7ysqo4OtXnBmMP8Z//Py4BPnn/PYshlwLOq6jNrLFlaF76nIA1JMge8nt7XGxa9Szo/3J9emiRPTPIFwPvpfbHJZUm+jN7Efw/Q/26Cv0/ywv7jk+Sp/d3vAA4MPPeo4JAuGkcKUs8j+zOEnv9I6h8A56eR/l167x18pD999FngO+h9/8C3AR+n973Gt9H7Bq9Rvgf47SSv6j/HEXrfKX4tcCjJHfT+P74XeOl6d06alLOkSmuQ5FFV9ekkXwp8CHh2Vf3rtOuSHixHCtLa3Nr/ApSNwC8aCJp1jhQkSY1vNEuSGkNBktQYCpKkxlCQJDWGgiSpMRQkSc3/ATbFdcLxY96lAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Hist(pmf, width=0.6)\n", "thinkplot.Config(xlabel='Degree', ylabel='PMF', xlim=[0.4, 3.6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Add another node or nodes to the graph above, and add a few edges. Plot the new degree distribution." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Facebook data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following function reads a file with one edge per line, specified by two integer node IDs." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def read_graph(filename):\n", " G = nx.Graph()\n", " array = np.loadtxt(filename, dtype=int)\n", " G.add_edges_from(array)\n", " return G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll read the Facecook data downloaded from [SNAP](https://snap.stanford.edu/data/egonets-Facebook.html)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4039, 88234)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# https://snap.stanford.edu/data/facebook_combined.txt.gz\n", "\n", "fb = read_graph('facebook_combined.txt.gz')\n", "n = len(fb)\n", "m = len(fb.edges())\n", "n, m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To see how popular \"you\" are, on average, we'll draw a random sample of 1000 people." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "sample = np.random.choice(fb.nodes(), 1000, replace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each \"you\" in the sample, we'll look up the number of friends." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "num_your_friends = [fb.degree(node) for node in sample]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To plot the degree distribution, I'll use `EstimatedPdf`, which computes a smooth Probability Density Function that fits the data." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xt0XeV55/HvT1fLd2NkwDdsgw1xuEdxYHJtnBCTpJh2yIpps0JbZmjT0IR2sjIwmTAtbaelTUKagaTDhDSEpDGENImSkpALhIasYCzM1QaDsA0WNiB8t2xLlvTMH3vr+Oj4SEe2dHSOdH6ftbS893vevc9zLFuP3st+X0UEZmZmx6uq1AGYmdnY5kRiZmbD4kRiZmbD4kRiZmbD4kRiZmbD4kRiZmbD4kRiZmbD4kRiZmbD4kRiZmbDUlPqAEbDiSeeGAsWLCh1GGZmY8qjjz76ekQ0FqpX1EQiaQXwT0A18NWI+Puc1+uBbwBvAnYAH46ILZJmAvcAbwa+HhHXZF1TB9wCvAvoBT4TEd8dLI4FCxbQ0tIyYp/LzKwSSHpxKPWKlkgkVQO3Au8F2oC1kpojYkNWtauAXRFxuqRVwE3Ah4FDwGeBs9KvbJ8BXouIJZKqgBOK9RnMzKywYo6RLANaI2JTRHQBq4GVOXVWAnekx/cAyyUpIjoi4iGShJLrj4C/A4iI3oh4vTjhm5nZUBQzkcwBtmadt6VleetERDewB5g50A0lTU8P/1rSOknfkXTSAHWvltQiqaW9vf14P4OZmRVQzESiPGW5a9YPpU62GmAu8OuIuAD4DfC5fBUj4raIaIqIpsbGgmNFZmZ2nIqZSNqAeVnnc4FtA9WRVANMA3YOcs8dwAHge+n5d4ALRiJYMzM7PsVMJGuBxZIWpjOtVgHNOXWagSvT48uB+2OQnbbS135IMmMLYDmwYaD6ZmZWfEWbtRUR3ZKuAe4jmf77tYhYL+lGoCUimoHbgTsltZK0RFb1XS9pCzAVqJN0GXBxOuPrv6fXfBFoB/6wWJ9hILv3HaC3Nzhh2qTRfmszs7KjSthqt6mpKUbqOZLntrzKZ774fZD420+uZMmCvGP9ZmZjnqRHI6KpUD0vkXKMfvLQenoj6O3t5dfrXih1OGZmJedEcgwigsefPTKjeXv7nhJGY2ZWHpxIjsHmttfZs+9g5nxb++4SRmNmVh6cSI7Bume29jt/9fW9dHf3lCgaM7Py4ERyDB575qV+570RvLpzX4miMTMrD04kQ9RxsJPnNr96VLnHScys0jmRDNETG9vozTNVettrHicxs8rmRDJEj204Mj4yZdKEzLETiZlVOieSIcid9nvxf1qaOXbXlplVOieSIXhp+0527ukAYFJDPW9vWpx5zYnEzCqdE8kQPP5sW+b4nDPmcsqJU6mqSv7qduzu4FDn4VKFZmZWck4kQ/Dajr2Z4zMWnERNTTUnzZySKXvldbdKzKxyOZEMwb4DnZnjqZOTgfbZjdMzZS+/5kRiZpXLiWQIDhw8kkgmTawH4JTGaZkyj5OYWSVzIhmCfR1HEsnkhiSRzJ51JJF4CrCZVTInkiHoyGqRTJ7Ul0iOdG25RWJmlayoiUTSCkkbJbVKui7P6/WS7kpfXyNpQVo+U9IDkvZLumWAezdLerqY8ffZ13Eoczw5T9eWWyRmVsmKlkgkVQO3ApcAS4ErJC3NqXYVsCsiTgduBm5Kyw8BnwU+NcC9fxfYX4y4c0UEHQeO7tqaOX0SdbXJTsX7D3T2SzZmZpWkmC2SZUBrRGyKiC5gNbAyp85K4I70+B5guSRFREdEPESSUPqRNBn4C+Bvihf6EQcOddG3wlZ9XS01NdV9cXDyiVMz9dy9ZWaVqpiJZA6QvYFHW1qWt05EdAN7gJkF7vvXwOeBAyMT5uA6DnZljidPrOv3WvY4ibu3zKxSFTORKE9Z7vK5Q6lzpLJ0HnB6RHyv4JtLV0tqkdTS3t5eqPqA9md1WU1Ku7X6zPGAu5lZURNJGzAv63wusG2gOpJqgGnAzkHueRHwJklbgIeAJZJ+ma9iRNwWEU0R0dTY2HhcHwCS8Y8+2av+Apw4Y3LmeOeeUWkgmZmVnWImkrXAYkkLJdUBq4DmnDrNwJXp8eXA/RF5Nv1IRcRXImJ2RCwA3gY8FxHvGvHIs2Q/1d43Y6vPtCkNmePsvdzNzCpJTbFuHBHdkq4B7gOqga9FxHpJNwItEdEM3A7cKamVpCWyqu/6tNUxFaiTdBlwcURsKFa8A8mesZXbtTU9K5Hs3ucWiZlVpqIlEoCIuBe4N6fshqzjQ8CHBrh2QYF7bwHOGnaQBewftEUyMXPsRGJmlcpPtheQ76n2Pv1bJAcZpFfOzGzcciIpoN9T7TldWxPqa6mvqwWgp6eXA4e6MDOrNE4kBfR7qj1n1hYc3SoxM6s0TiQF7D848BgJ9J+5tXuvx0nMrPI4kRSw/0DWk+0NRycSt0jMrNI5kRSw/0DWk+0FWiR7PHPLzCqQE0kB/Z9sz5dIjkwB9kOJZlaJnEgG0d3dw6HOw0CyKNjECXVH1ZnR71kSJxIzqzxOJIPIXvl30sR6pKPXmPQyKWZW6ZxIBlFoxhZ4mRQzMyeSQQy2zlaf/tN/3SIxs8rjRDKIwdbZ6jM9Z70tL5NiZpXGiWQQ2VN/8z3VDtAwoZbadPvdw1mD82ZmlcKJZBD9WiQDdG1JymmVuHvLzCqLE8kghtK1BZ65ZWaVzYlkEB0H+k//HUj2zK1dXm/LzCpMUROJpBWSNkpqlXRdntfrJd2Vvr5G0oK0fKakByTtl3RLVv2Jkv5d0rOS1kv6+2LGvy97jGTi0Q8j9nGLxMwqWdESiaRq4FbgEmApcIWkpTnVrgJ2RcTpwM3ATWn5IeCzwKfy3PpzEXEmcD7wVkmXFCN+yFlCfmL+wXbImbm13y0SM6ssxWyRLANaI2JTRHQBq4GVOXVWAnekx/cAyyUpIjoi4iGShJIREQci4oH0uAtYB8wt1gfY5zESM7OCiplI5gBbs87b0rK8dSKiG9gDzBzKzSVNB34b+MWwIx1AhxOJmVlBxUwkRy9MBblP6w2lztE3lmqAbwNfiohNA9S5WlKLpJb29vaCweazfwhPtoP3JDGzylbMRNIGzMs6nwtsG6hOmhymATuHcO/bgOcj4osDVYiI2yKiKSKaGhsbjynw9Pp+a23lW0K+T/+l5D1GYmaVpZiJZC2wWNJCSXXAKqA5p04zcGV6fDlwfxRYY0TS35AknGtHON5+ug53093dA0B1dRV1tTUD1u0//dctEjOrLAP/dBymiOiWdA1wH1ANfC0i1ku6EWiJiGbgduBOSa0kLZFVfddL2gJMBeokXQZcDOwFPgM8C6xLl3W/JSK+OtLx99vQauKEvEvI95k8sZ7q6ip6enrp7DpMZ9dh6utqRzokM7OyVLREAhAR9wL35pTdkHV8CPjQANcuGOC2A/9EH0FDfaodkmVSpk1uYOeeDgD27D/ErBOcSMysMvjJ9gH0G2gvkEggdzl5j5OYWeVwIhnAUBZszOaZW2ZWqZxIBtDvGZJBZmz18cwtM6tUTiQDGOpT7X1muEViZhXKiWQAQ32qvU92i8RjJGZWSZxIBjDUp9r7zJjqza3MrDI5kQyg83B35niwp9r79Ju15TESM6sgRX2OZCz7s9//LT724XfQcbCL+rrCf00zprlry8wqkxPJIGpqqvu1NAaT3bXlZVLMrJK4a2uETJxQR01NNQCdXYc51Hm4xBGZmY0OJ5IRIokZU7JbJe7eMrPK4EQygqZP9TIpZlZ5nEhGUPY4yU4nEjOrEE4kI2j6VM/cMrPK40Qygqb3W2/LM7fMrDI4kYyg/lOA3SIxs8rgRDKC+nVt+el2M6sQRU0kklZI2iipVdJ1eV6vl3RX+voaSQvS8pmSHpC0X9ItOde8SdJT6TVf0mB74I6yGVmztnbucSIxs8pQtEQiqRq4FbgEWApcIWlpTrWrgF0RcTpwM3BTWn4I+CzwqTy3/gpwNbA4/Vox8tEfn+nek8TMKlAxWyTLgNaI2BQRXcBqYGVOnZXAHenxPcBySYqIjoh4iCShZEg6BZgaEb+JiAC+AVxWxM9wTHIH23t7e0sYjZnZ6ChmIpkDbM06b0vL8taJiG5gDzCzwD3bCtyzZGprqzNLzvdGsK+js8AVZmZjXzETSb6xiziOOsdVX9LVkloktbS3tw9yy5E1wwPuZlZhiplI2oB5WedzgW0D1ZFUA0wDdha459wC9wQgIm6LiKaIaGpsbDzG0I/fdA+4m1mFKWYiWQsslrRQUh2wCmjOqdMMXJkeXw7cn4595BUR24F9ki5MZ2t9FPjById+/Px0u5lVmqLtRxIR3ZKuAe4DqoGvRcR6STcCLRHRDNwO3CmplaQlsqrveklbgKlAnaTLgIsjYgPwMeDrQAPw4/SrbHgFYDOrNEXd2Coi7gXuzSm7Iev4EPChAa5dMEB5C3DWyEU5srJbJF4mxcwqgZ9sH2H9VwDuKGEkZmajw4lkhHmMxMwqjRPJCMt+KNGJxMwqgRPJCMteb2u3x0jMrAI4kYywKZMmUFWV/LUeONRF1+HuEkdkZlZcTiQjTFK/VomnAJvZeOdEUgQeJzGzSuJEUgTT/VCimVUQJ5IiyF5va/deD7ib2fjmRFIE/fZu9wrAZjbOOZEUwYypkzLHHiMxs/HOiaQIZkw70iLZsXt/CSMxMys+J5IimHXClMxx+04nEjMb35xIiqAxK5G8umMvg2yxYmY25jmRFMGkhjom1NcCcLi7h737D5U4IjOz4nEiKQJJ/Vol7Tv3lTAaM7PiGjSRSPpp1vH1x3pzSSskbZTUKum6PK/XS7orfX2NpAXZ75eWb5T0vqzyP5e0XtLTkr4tacKxxjUaZs3ISiS7PE5iZuNXoRZJY9Zx3p0MByKpGrgVuARYClwhaWlOtauAXRFxOnAzcFN67VKSbXffCKwAviypWtIc4BNAU0ScRbKF7yrKUOMJkzPHr7lFYmbjWKFEMpxR4mVAa0RsioguYDWwMqfOSuCO9PgeYLkkpeWrI6IzIjYDren9INkeuEFSDTAR2DaMGIsmu2vr9V1OJGY2fhXas32RpGZAWccZEXHpINfOAbZmnbcBbxmoTkR0S9oDzEzLH865dk5E/EbS54CXgIPATyPip5ShRk8BNrMKUSiRZLcgPneM91aestwWzkB18pZLmpHGtBDYDXxH0kci4ptHvbl0NXA1wPz5848l7hExy11bZlYhBk0kEfFg37GkxrSsfYj3bgPmZZ3P5ehuqL46bWlX1TRg5yDXvgfY3BeDpH8D/hNwVCKJiNuA2wCamppG/UEOz9oys0pRaNaWJP0vSa8DzwLPSWqXdMMQ7r0WWCxpoaQ6kkHx5pw6zcCV6fHlwP2RPL3XDKxKZ3UtBBYDj5B0aV0oaWI6lrIceGZoH3V0TZvcQG1NNZDslNhxsLPEEZmZFUehwfZrgbcBb46ImRExg2Sc462S/nywCyOiG7gGuI/kh/3dEbFe0o2S+sZWbgdmSmoF/gK4Lr12PXA3sAH4CfDxiOiJiDUkg/LrgKfS+G871g89GiTROONI99brngJsZuOUBlu+Q9JjwHsj4vWc8kaSge7zixzfiGhqaoqWlpZRf98bv/wjntjYBsB1/3UFbz5rwajHYGZ2vCQ9GhFNheoVapHU5iYRyIyT1B5vcJXC4yRmVgkKJZKu43zN8BRgM6sMhab/nitpL0em4/b1gwkoy6VJykn2GImnAJvZeFVo+m/1aAUyHs1y15aZVYBBE0m6IOKfAKcDTwJfS2dj2RD069ryrC0zG6cKjZHcATSRTLV9P/D5okc0jpwwbSJVVclf8d79B+nsOlziiMzMRl6hMZKlEXE2gKTbSR4KtCGqqqpi5rRJtKeLNrbv2s/ck2aUOCozs5FVqEWS+RXaXVrHZ9ZMz9wys/FtqLO2IJmp1ZA1iysiYmpRoxsH/CyJmY13nrVVZCdmTQF2IjGz8ch7thdZ9nLyrzqRmNk45ERSZKc0Ts8cv/zq7hJGYmZWHE4kRTb/lBMyx22v7qKnp7eE0ZiZjTwnkiKbPLGeE6ZNAqC7u4dXduwtcIWZ2djiRDIKslslL27bUcJIzMxGnhPJKMhOJC9t31nCSMzMRp4TySjITiRbtzmRmNn4UtREImmFpI2SWiVdl+f1ekl3pa+vkbQg67Xr0/KNkt6XVT5d0j2SnpX0jKSLivkZRoJbJGY2nhUtkUiqBm4FLgGWAldIWppT7SpgV0ScDtwM3JReuxRYBbwRWAF8Ob0fwD8BP4mIM4FzSfaDL2tzT56e2dBle/seug57tRkzGz+K2SJZBrRGxKaI6AJWAytz6qwkWWEY4B5guSSl5asjojMiNgOtwDJJU4F3ALcDRERXRJT9wxn1dbWcdGKymkzg50nMbHwpZiKZA2zNOm9Ly/LWSReF3APMHOTaRUA78C+SHpP0VUmTihP+yHL3lpmNV8VMJMpTFkOsM1B5DXAB8JWIOB/oAI4aewGQdLWkFkkt7e3tQ4+6SObPnpk59hRgMxtPiplI2oB5WedzgW0D1ZFUA0wDdg5ybRvQFhFr0vJ7SBLLUSLitohoioimxsbGYX6U4XOLxMzGq2ImkrXAYkkLJdWRDJ4359RpBq5Mjy8H7o+ISMtXpbO6FgKLgUci4hVgq6Qz0muWAxuK+BlGjBOJmY1XhfYjOW4R0S3pGuA+oJpkv/f1km4EWiKimWTQ/E5JrSQtkVXptesl3U2SJLqBj0dET3rrPwO+lSanTcAfFuszjKRTTpxKdXUVPT297NjdQcfBTiY11Jc6LDOzYStaIgGIiHuBe3PKbsg6PgR8aIBr/xb42zzlj5PsIz+m1NRUM2fW9ExrZOv2XZy56OQSR2VmNnx+sn0UzZ/t7i0zG3+cSEaRx0nMbDxyIhlFp2ZNAW596bUSRmJmNnKcSEbRklNnZY5feKmdg4e6ShiNmdnIcCIZRVMnN2RaJb0RbHhhe4kjMjMbPieSUXb24iOrxDz9fO7zmWZmY48TySg7a8nszPHTrU4kZjb2OZGMsqWnnZJZSGzz1nb2H+gsaTxmZsPlRDLKJjXUs2hesvZXgMdJzGzMcyIpgbOXHBkneeq5thJGYmY2fE4kJfDG07PGSTzgbmZjnBNJCSw97RSqqpK/+pe272TPvoMljsjM7Pg5kZTAhPpaFmc9nOjZW2Y2ljmRlMhZ/bq3Xi5hJGZmw+NEUiLZA+5rn9pCb29vCaMxMzt+TiQl8oZFJzN1cgMAu/Ye4CkPupvZGFXURCJphaSNklolXZfn9XpJd6Wvr5G0IOu169PyjZLel3NdtaTHJP2omPEXU01NNW+74LTM+YNrnythNGZmx69oiURSNXArcAmwFLhC0tKcalcBuyLidOBm4Kb02qUk2+6+EVgBfDm9X59PAs8UK/bR8s6mJZnjh5/YzKHOwyWMxszs+BSzRbIMaI2ITRHRBawGVubUWQnckR7fAyyXpLR8dUR0RsRmoDW9H5LmAh8AvlrE2EfFafMbmd04DYDOrsM88tTmEkdkZnbsiplI5gBbs87b0rK8dSKiG9gDzCxw7ReBTwNjfnRaEu9cdkbm/MG1z5cwGjOz41PMRKI8ZTHEOnnLJX0QeC0iHi345tLVkloktbS3txeOtkTe0bQ4c/zEs1vZuaejhNGYmR27YiaSNmBe1vlcIHdqUqaOpBpgGrBzkGvfClwqaQtJV9m7JX0z35tHxG0R0RQRTY2NjcP/NEUy64QpLD3tFCDJoA+tay1tQGZmx6iYiWQtsFjSQkl1JIPnzTl1moEr0+PLgfsjItLyVemsroXAYuCRiLg+IuZGxIL0fvdHxEeK+BlGxTvffGTQ/Re/eZbkr8DMbGwoWiJJxzyuAe4jmWF1d0Ssl3SjpEvTarcDMyW1An8BXJdeux64G9gA/AT4eET0FCvWUrvovEXU19UC0PbqLtY+/WKJIzIzGzpVwm+/TU1N0dLSUuowBnXH939D8wNPAHDGwpP539deVuKIzKzSSXo0IpoK1fOT7WXig+86m+rq5NuxcfMrPOMNr8xsjHAiKRMzp0/u94Di937+eAmjMTMbOieSMrJy+bmZec+PbniRF7ftLGk8ZmZD4URSRuaeNIM3n70gc/79XzxWumDMzIbIiaTM/M57zs8c/6rleV7ctqOE0ZiZFeZEUmaWLDiJC5bOB5IHFO9sfri0AZmZFeBEUoY+8tsXZsZKHntmK09sbCtpPGZmg3EiKUOnzj6B33rLmZnzb/zgYT/tbmZly4mkTK16fxO1NckWLFtefp3/aPHKwGZWnpxIytTM6ZO59LfOzZx/84drOHioq4QRmZnl50RSxi5bfl5mX/edezpYfW95L/NiZpXJiaSMTWyo4w8uuyhz/u8PPsmmreW7t4qZVSYnkjL3jqbFnL0k2RwygH++6z/o7R3zm0Oa2TjiRFLmJPFfP/T2zIKOL2xt5ycPrS9xVGZmRziRjAFzZk3nP7/3gsz5N3/4CNvb95QwIjOzI5xIxojffc/5zJk1HYDOrsPcfMfP6e4et3t9mdkY4kQyRtTWVnPtR5f36+K6+yePljgqM7MiJxJJKyRtlNQq6bo8r9dLuit9fY2kBVmvXZ+Wb5T0vrRsnqQHJD0jab2kTxYz/nKzaF4jv/eBZZnzf/vZOta3bithRGZmRUwkkqqBW4FLgKXAFZKW5lS7CtgVEacDNwM3pdcuBVYBbwRWAF9O79cN/LeIeANwIfDxPPcc11a++1zOWjwbSGZxfeHrP/d4iZmVVDFbJMuA1ojYFBFdwGpgZU6dlcAd6fE9wHJJSstXR0RnRGwGWoFlEbE9ItYBRMQ+4BlgThE/Q9mRxCc+8m4mT6wHYPe+A/zVrT/i9V37SxyZmVWqYiaSOcDWrPM2jv6hn6kTEd3AHmDmUK5Nu8HOB9bke3NJV0tqkdTS3j6+HuKbOX0y//2/rMisxdW+ax9/desP2b3vQIkjM7NKVMxEojxluUvYDlRn0GslTQa+C1wbEXvzvXlE3BYRTRHR1NjYOMSQx46lp53Cp696X2bwfVv7Hq77/PdoWf9iiSMzs0pTzETSBszLOp8L5I4MZ+pIqgGmATsHu1ZSLUkS+VZE/FtRIh8jLlg6nz//6HsyWbd91z7+7rYf84+338crr+fNr2ZmI66YiWQtsFjSQkl1JIPnzTl1moEr0+PLgfsj2XijGViVzupaCCwGHknHT24HnomILxQx9jHjovMW8d/+8OLMmAnAw09u5uN//a/8r1ua+eUjGznUebiEEZrZeKdibpgk6f3AF4Fq4GsR8beSbgRaIqJZ0gTgTpKxjp3AqojYlF77GeCPSGZqXRsRP5b0NuBXwFNA34JT/yMi7h0sjqampmhpGd8r5+7df5A7fvAwv3xk41GvTZ3cwGXLz2PF25ZSX1dbgujMbCyS9GhENBWsVwk771VCIumzvnUb3/v5Yzz+zNajBqSmTWng9z6wjOUXnknSuDMzG5gTSZZKSiR9du7p4MG1z/HjXz3Njt0d/V5791vO5OoPvZ3a2uoSRWdmY4ETSZZKTCR9Dh/u4RcPP8t3f7aOnXuOJJQzFp7Mp6+6mOlTJpYwOjMrZ0NNJF5ra5yrra1mxdvfyK2fvYJ3NC3OlG/c/Aqf/tx3efm13SWMzszGAyeSClFXW8MnPvJuPrryosx04R27O/jsl37Ai9t2lDQ2MxvbnEgqiCRWvvtc/scfv5+62hoA9uw7yA3/p5nWF18rcXRmNlY5kVSgC5bO54aPfYCGCXUA7D/QyQ23/JBfP/ZCiSMzs7HIiaRCveG0U/irj/925kHGzq7DfOHrP+OO7/+Gnh7vCW9mQ+dEUsFOm9/I33zyMk4+cWqmrPmBJ/ifX/oBG17YXsLIzGws8fRfo+NgJ1+68/6jFnw8a/FsLlt+PucsmZNZHNLMKoefI8niRFJYRPDdnz3GXfeupTfn38SUSRN4yzkLecs5Czlr8ezMQL2ZjW9OJFmcSIZue/sevvuzdTz4yHNHJRSA2ppqzlo8m/PfMJ+zl8xh3skzvNyK2TjlRJLFieTYvfL6Xv79wSf5zeOb2LV34A2zpk1pYOlps1myYBaL589i0bwTvTCk2TjhRJLFieT4RQQbN7/Kw09sYt2Glwo+CV8lMX/2TBaf2sgZC07mrMWzaTxhyihFa2YjyYkkixPJyHl1x14e27CVp55r4+nWbew/0FnwmpNPnMo5Z8zl3DPmcvaSOUxqqC94jZmVnhNJFieS4ogItry8g+e2vMpzL75G64uv8fKru45avj5blcRp8xs56/TZLD19Nm9YdHLmwUgzKy9OJFmcSEbPgYNdvLC1nedefJX1z29jwwvbOdzdM2D9KonFC07i7CVzOO+MuSxZcJKnGpuVibJIJJJWAP9EskPiVyPi73Nerwe+AbwJ2AF8OCK2pK9dD1wF9ACfiIj7hnLPfJxISufw4R42bnmFJze+zOPPbmXT1vZBWyyTJ9bTdNYC3nzWqZyzZC4TG9xaMSuVkicSSdXAc8B7gTaSPdyviIgNWXX+FDgnIv5E0irgdyLiw5KWAt8GlgGzgZ8DS9LLBr1nPk4k5WNfxyHWtyYtlfWt29ny8usD1q2qquLMhSdx7pnzOG1eI6fOPoEZUycOabpxRNDZ1c3ufQfZ33GIjkNd7D/QSUQgCQkmTqhjysQJTJ5Uz7TJDUyo92wzG3/6/s0fj6EmkmI+WbYMaM3ag301sBLI/qG/EvjL9Pge4BYln3glsDoiOoHNklrT+zGEe1oZmzJpAheeu4gLz10EJHvNP/X8Np54divrNrzUb6pxb28vG17Y3m+5lokT6pg+pYFJE+uZ1FBPVZXSusHBzsMcPNTFgUNd7Nl3cNAutXzqamuYNjm598QJtUycUEdtbQ011VVUV1dRJVFVlSSh7P+Yws/R2MiKrHZ7RBCR/BvvjaCnp5funl66u3voOtxN5+FuOru66ew8nDnu7umlJ/06Y+HJ/M0nVxY13mImkjnA1qzzNuAtA9WJiG5Je4CZafnDOdfOSY8L3dPGkKmTG3jr+afx1vNPIyJ44aWncpfoAAAKM0lEQVR2HnlqC49ueClva+VAmiiKoetwN+279tG+a19R7m9WCt09x/YL1fEoZiLJ92tabj/aQHUGKs83Cpu3b07S1cDVAPPnzx84Sisbkjj91Fmcfuosfu+Dy9i19wBPPLuVjVte5cVtO3lx2w4OdR4e8v1qa6qZOnkCUyY1MHliHZMb6lFVVfobXtBxsJP9B7rY13GQPfsP0X2MLRizsaB7FFbzLmYiaQPmZZ3PBbYNUKdNUg0wDdhZ4NpC9wQgIm4DboNkjOT4PoKV0oypE3nXsjN417IzgKSJv3f/IfZ2HKLjQCcdBzszv0UIaJhQR0N9LQ0T6pg2eQIT6muH3DccERzqPMzufQc5eKiLjoNdHOw8zOHuHrq7e+ju6aG390gXQ957DDqNwGxwg3WR9nWpVlWJmupqqquS7tb6uprkq7aG+vpaJtTVUFdbQ01NFdVVVZlu2WIrZiJZCyyWtBB4GVgF/F5OnWbgSuA3wOXA/RERkpqBf5X0BZLB9sXAIyQ/Lwrd08YpSUyb0sC0KQ1FuXfDhDo/02J2HIqWSNIxj2uA+0im6n4tItZLuhFoiYhm4HbgznQwfSdJYiCtdzfJIHo38PGI6AHId89ifQYzMyvMDySamVleQ53+60eIzcxsWJxIzMxsWJxIzMxsWJxIzMxsWJxIzMxsWCpi1pakduDF47z8RGDglQVLz/ENX7nH6PiGr9xjLNf4To2IxkKVKiKRDIeklqFMfysVxzd85R6j4xu+co+x3OMrxF1bZmY2LE4kZmY2LE4khd1W6gAKcHzDV+4xOr7hK/cYyz2+QXmMxMzMhsUtEjMzGxYnkgFIWiFpo6RWSdeVMI6vSXpN0tNZZSdI+pmk59M/Z6TlkvSlNOYnJV0wCvHNk/SApGckrZf0yXKKUdIESY9IeiKN76/S8oWS1qTx3SWpLi2vT89b09cXFDO+rDirJT0m6UdlGt8WSU9JelxSS1pWFt/j9D2nS7pH0rPpv8WLyiU+SWekf299X3slXVsu8Y2Ivt3i/HXki2SJ+heARUAd8ASwtESxvAO4AHg6q+wfgOvS4+uAm9Lj9wM/Jtm35UJgzSjEdwpwQXo8BXgOWFouMabvMzk9rgXWpO97N7AqLf9n4GPp8Z8C/5werwLuGqXv818A/wr8KD0vt/i2ACfmlJXF9zh9zzuA/5Ie1wHTyym+rDirgVeAU8sxvuP+XKUOoBy/gIuA+7LOrweuL2E8C3ISyUbglPT4FGBjevx/gSvy1RvFWH8AvLccYwQmAuuAt5A8/FWT+/0m2evmovS4Jq2nIsc1F/gF8G7gR+kPkLKJL32vfImkLL7HwFRgc+7fQ7nElxPTxcCvyzW+4/1y11Z+c4CtWedtaVm5OCkitgOkf85Ky0sad9rNcj7Jb/1lE2PabfQ48BrwM5LW5u6I6M4TQya+9PU9wMxixgd8Efg00Le59swyiw8ggJ9KelTS1WlZuXyPFwHtwL+k3YNflTSpjOLLtgr4dnpcjvEdFyeS/PJtnjwWpreVLG5Jk4HvAtdGxN7BquYpK2qMEdETEeeR/Oa/DHjDIDGManySPgi8FhGPZhcPEkOpvsdvjYgLgEuAj0t6xyB1RzvGGpLu369ExPlAB0lX0UBK8neYjnNdCnynUNU8ZWX988eJJL82YF7W+VxgW4liyedVSacApH++lpaXJG5JtSRJ5FsR8W/lGCNAROwGfknS7zxdUt9W09kxZOJLX59Gsg10sbwVuFTSFmA1SffWF8soPgAiYlv652vA90gScrl8j9uAtohYk57fQ5JYyiW+PpcA6yLi1fS83OI7bk4k+a0FFqczZ+pImqPNJY4pWzNwZXp8Jcm4RF/5R9NZHxcCe/qazsUiScDtwDMR8YVyi1FSo6Tp6XED8B7gGeAB4PIB4uuL+3Lg/kg7qoshIq6PiLkRsYDk39n9EfH75RIfgKRJkqb0HZP08z9NmXyPI+IVYKukM9Ki5cCGcokvyxUc6dbqi6Oc4jt+pR6kKdcvkpkTz5H0p3+mhHF8G9gOHCb5TeUqkj7xXwDPp3+ekNYVcGsa81NA0yjE9zaSZveTwOPp1/vLJUbgHOCxNL6ngRvS8kXAI0ArSVdDfVo+IT1vTV9fNIrf63dxZNZW2cSXxvJE+rW+7/9DuXyP0/c8D2hJv8/fB2aUWXwTgR3AtKyysolvuF9+st3MzIbFXVtmZjYsTiRmZjYsTiRmZjYsTiRmZjYsTiRmZjYsTiQ2rkgKSZ/POv+UpL8coXt/XdLlhWsO+30+lK5g+0Ce1/5RySrG/5jntUs1QitVS/pLSZ8aiXvZ+FdTuIrZmNIJ/K6kv4uI10sdTB9J1RHRM8TqVwF/GhFHJRLgj4HGiOjMuX9NRDRTXg/OWoVwi8TGm26SbUv/PPeF3BaFpP3pn++S9KCkuyU9J+nvJf2+kn1MnpJ0WtZt3iPpV2m9D6bXV6cthbXp/hF/nHXfByT9K8mDZbnxXJHe/2lJN6VlN5A85PnPua0OSc3AJGCNpA+nn+cLacvlJkl/IOmWtG6jpO+mMa2V9Na0/C+V7HHzS0mbJH0i6/6fUbIHz8+BM7LKPyFpQ/rZVh/LN8Mqg1skNh7dCjwp6R+O4ZpzSRZz3AlsAr4aEcuUbNT1Z8C1ab0FwDuB04AHJJ0OfJRkGYs3S6oHfi3pp2n9ZcBZEbE5+80kzQZuAt4E7CJZWfeyiLhR0ruBT0VES/Y1EXGppP2RLECJpEuAJcB7IqJH0h9kVf8n4OaIeEjSfJLl5/sWqzwT+C2S/WM2SvoKyQoAq0hWb64hWW6/byHJ64CFEdHZt9yMWTYnEht3ImKvpG8AnwAODvGytZGuZyTpBaAvETxF8kO3z90R0Qs8L2kTyQ/li4Fzslo704DFQBfwSG4SSb0Z+GVEtKfv+S2STcy+P8R4+3xngC6z9wBLk6XQAJjat14W8O9p11inpNeAk4C3A9+LiANpPNldZE8C35L0/eOIzyqAE4mNV18k+a36X7LKukm7c9PFJuuyXssec+jNOu+l//+T3DWFgmRtpD+LiPuyX5D0LpIlzfPJt1T48Rjo/lUkG2D1S6RpYsn+rD0c+XwDrZf0AZIkdynwWUlvjCN7pZh5jMTGp4jYSbJd7VVZxVtIupIAVpJsvXusPiSpKh03WUSye919wMeULKePpCXpKrmDWQO8U9KJkqpJVoZ98DjiGchPgWv6TiSdV6D+fwC/I6khbbn8dnpdFTAvHfj/NMkWtpNHME4bB9wisfHs82T9MAX+H/ADSY+QrLY60G/zg9lI8gP/JOBPIuKQpK+SjJ2sS1s67cBlg90kIrZLup5kuXgB90bEDwa75hh9ArhV0pMk/8//A/iTQeJZJ+kuktWbXwR+lb5UDXxT0rQ0zpsj2dfFLMOr/5qZ2bC4a8vMzIbFicTMzIbFicTMzIbFicTMzIbFicTMzIbFicTMzIbFicTMzIbFicTMzIbl/wMrC+3fCy4AXgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from thinkstats2 import EstimatedPdf\n", "\n", "you_pdf = EstimatedPdf(num_your_friends)\n", "thinkplot.Pdf(you_pdf)\n", "thinkplot.Config(xlabel='Number of friends', ylabel='PDF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now what if, instead of \"you\", we choose one of your friends, and look up the number of friends your friend has." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "num_friends_friends = []\n", "for node in sample:\n", " friends = list(fb.neighbors(node))\n", " friend = np.random.choice(friends)\n", " num_friends_friends.append(fb.degree(friend))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the degree distribution for your friend's friends:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "friends_pdf = EstimatedPdf(num_friends_friends)\n", "thinkplot.Pdf(friends_pdf)\n", "thinkplot.Config(xlabel='Number of friends', ylabel='PDF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The bulk of the distribution is wider, and the tail is thicker. This difference is reflected in the means:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(43.158, 105.745)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(num_your_friends), np.mean(num_friends_friends)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can estimate the probability that your friend has more friends than you." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.68" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean([friend > you for you, friend in zip(num_your_friends, num_friends_friends)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Power law distributions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we'll see below, the degree distribution in the Facebook data looks, in some ways, like a power law distribution. To see what that means, we'll look at the Zipf distribution, which has a power law tail.\n", "\n", "Here's a sample from a Zipf distribution." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "zipf_sample = np.random.zipf(a=2, size=10000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the PMF looks like." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pmf = Pmf(zipf_sample)\n", "thinkplot.Pdf(pmf, style='.')\n", "thinkplot.Config(xlabel='Zipf sample', ylabel='PMF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here it is on a log-x scale." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Pdf(pmf, style='.')\n", "thinkplot.Config(xlabel='Zipf sample (log)', ylabel='PMF', xscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And on a log-log scale." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Pdf(pmf, style='.')\n", "thinkplot.Config(xlabel='Zipf sample (log)', ylabel='PMF (log)', \n", " xscale='log', yscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On a log-log scale, the PMF of the Zipf distribution looks like a straight line (until you get to the extreme tail, which is discrete and noisy." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7.5801, 126.11134121874207)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mu, sigma = zipf_sample.mean(), zipf_sample.std()\n", "mu, sigma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For comparison, let's look at the Poisson distribution, which does not have a power law tail. I'll choose the Poisson distribution with the same mean as the sample from the Zipf distribution." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7.6425, 2.7605966293538793)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poisson_sample = np.random.poisson(lam=mu, size=10000)\n", "poisson_sample.mean(), poisson_sample.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the PMF on a log-log scale. It is definitely not a straight line." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "poisson_pmf = Pmf(poisson_sample)\n", "thinkplot.Pdf(poisson_pmf, style='.')\n", "thinkplot.Config(xlabel='Poisson sample (log)', ylabel='PMF (log)', \n", " xscale='log', yscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So this gives us a simple way to test for power law behavior. If you plot the PMF on a log-log scale, and the result is a straight line, they is evidence of power law behavior.\n", "\n", "This test is not entirely reliable; there are better options. But it's good enough for an initial exploration." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Barabási and Albert" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what the degree distribution for the Facebook data looks like on a log-log scale." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "pmf_fb = Pmf(degrees(fb))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Pdf(pmf_fb, style='.', label='Facebook')\n", "thinkplot.config(xscale='log', yscale='log', loc='upper right',\n", " xlabel='Degree (log)', ylabel='PMF (log)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For degrees greater than 10, it resembles the Zipf sample (and doesn't look much like the Poisson sample).\n", "\n", "We can estimate the parameter of the Zipf distribution by eyeballing the slope of the tail." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.plot([20, 1000], [5e-2, 2e-4], color='gray', linestyle='dashed')\n", "\n", "thinkplot.Pdf(pmf_fb, style='.', label='Facebook')\n", "thinkplot.config(xscale='log', yscale='log', loc='upper right',\n", " xlabel='Degree (log)', ylabel='PMF (log)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a simplified version of the NetworkX function that generates BA graphs." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# modified version of the NetworkX implementation from\n", "# https://github.com/networkx/networkx/blob/master/networkx/generators/random_graphs.py\n", "\n", "def barabasi_albert_graph(n, k, seed=None):\n", " \"\"\"Constructs a BA graph.\n", " \n", " n: number of nodes\n", " k: number of edges for each new node\n", " seed: random seen\n", " \"\"\"\n", " if seed is not None:\n", " random.seed(seed)\n", " \n", " G = nx.empty_graph(k)\n", " targets = set(range(k))\n", " repeated_nodes = []\n", "\n", " for source in range(k, n):\n", "\n", " G.add_edges_from(zip([source]*k, targets))\n", "\n", " repeated_nodes.extend(targets)\n", " repeated_nodes.extend([source] * k)\n", "\n", " targets = _random_subset(repeated_nodes, k)\n", "\n", " return G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the function that generates a random subset without repetition." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def _random_subset(repeated_nodes, k):\n", " \"\"\"Select a random subset of nodes without repeating.\n", " \n", " repeated_nodes: list of nodes\n", " k: size of set\n", " \n", " returns: set of nodes\n", " \"\"\"\n", " targets = set()\n", " while len(targets) < k:\n", " x = random.choice(repeated_nodes)\n", " targets.add(x)\n", " return targets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll generate a BA graph with the same number of nodes and edges as the Facebook data:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4039, 88234, 22)" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = len(fb)\n", "m = len(fb.edges())\n", "k = int(round(m/n))\n", "n, m, k" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Providing a random seed means we'll get the same graph every time." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "ba = barabasi_albert_graph(n, k, seed=15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of edges is pretty close to what we asked for." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(4039, 88374, 21.88016835850458)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ba), len(ba.edges()), len(ba.edges())/len(ba)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So the mean degree is about right." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(43.69101262688784, 43.76033671700916)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(degrees(fb)), np.mean(degrees(ba))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The standard deviation of degree is pretty close; maybe a little low." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(52.41411556737521, 41.15058490188548)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.std(degrees(fb)), np.std(degrees(ba))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at the degree distribution." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "pmf_ba = Pmf(degrees(ba))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking at the PMFs on a linear scale, we see one difference, which is that the BA model has no nodes with degree less than `k`, which is 22." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAF3CAYAAADkVf5vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XmcVNWd///3p6o39rURpFkFRBBRwV000WjQGIlRopiJuHyHZFwmM5lMRr8TM8Yx399kvo5O8o0ziYmJJDESMRIZxRD3GTe0FURAwAZRGlCanQZ6P78/6tLcqq7qrqZrubf69Xw8+sGte0/d+tyu9tTHT517jjnnBAAAACA3IvkOAAAAAOhOSMABAACAHCIBBwAAAHKIBBwAAADIIRJwAAAAIIdIwAEAAIAcIgEHAAAAcogEHAAAAMghEnAAAAAgh0jAAQAAgBwqyncAuTB48GA3evTofIcBAJ329ttv73DOlec7jlyizwYQVun22d0iAR89erQqKyvzHQYAdJqZfZTvGHKNPhtAWKXbZzMEBQAAAMghEnAAAAAgh0jAAQAAgBzqFmPAAWRPY2OjqqurVVdXl+9QQq2srEwVFRUqLi7OdygAChz9dtd1tc8mAQfQJdXV1erTp49Gjx4tM8t3OKHknNPOnTtVXV2tMWPG5DscAAWOfrtrMtFnMwQFQJfU1dVp0KBBdOJdYGYaNGgQ1SgAOUG/3TWZ6LNJwAF0GZ141/E7BJBL9Dld09XfHwk4gNCLRqM6+eSTW382bdqUsXNff/31evzxx7t8nocffli33nprBiICgPA73G9PnTpVp556ql577bW44/fff7/Kysq0d+/enMeWi/6aMeAAQq9Hjx5asWJFvsMAAKTJ328vXbpUd9xxh15++eXW448++qhOO+00LVq0SNdff/1Rv05zc7Oi0WhXw804KuAACtKmTZs0Y8YMnXrqqW2qK//6r/+qKVOmaOrUqbr99tslSRs2bNDMmTM1bdo0zZgxQ2vXrm1t/9xzz2nGjBmaMGGCnnrqKUmxMZQ33HCDpkyZolNOOUUvvvhiu/v9nn76aZ111lnasWNHNn8FABAK+/bt04ABA1ofb9iwQbW1tbrnnnv06KOPJn1OS0uLbr75Zk2ePFmXXXaZLr300tZvK0ePHq27775b5557rhYuXKif//znOu200zR16lRdeeWVOnjwoKTYN5zf+MY32vTvkrR161bNnDlT48eP13e+852MXzMV8A445xgnBaTpym/+NGvn/sOPvpHy2KFDh3TyySdLksaMGaNFixZpyJAhevbZZ1VWVqYPPvhAc+bMUWVlpZ555hn98Y9/1LJly9SzZ0/t2rVLkjRv3jz99Kc/1fjx47Vs2TLdfPPNeuGFFyTFkvmXX35ZGzZs0Gc/+1lVVVXpgQcekCS99957Wrt2rS6++GKtX78+5f7DFi1apPvuu09LliyJ+8DB0WtqblGLi/XXRdGIohH6bCBd/+sXlVk79y/+1/SUxw7323V1ddq2bVtrfyvFqt9z5szRjBkztG7dOm3fvl1DhgyJe/4TTzyhTZs26b333tP27dt1wgkn6MYbb2w9XlZWpldeeUWStHPnTv3lX/6lJOm73/2uHnroId12222SkvfvkrRixQotX75cpaWlOv7443XbbbdpxIgRmfnFiAS8XQ/94RX9d+UHum7WmbrwzBPyHQ6AFJINQWlsbNStt96qFStWKBqNtibBzz33nG644Qb17NlTkjRw4EDV1tbqtdde0+zZs1ufX19f37r9la98RZFIROPHj9fYsWO1du1avfLKK60d+MSJEzVq1CitX78+5X5JevHFF1VZWak///nP6tu3b/Z+Id3Mvy/9QGu37pck/d0lE3TCcH63QND5++3XX39d1113nVatWiUz04IFC7Ro0SJFIhF9+ctf1sKFC3XLLbfEPf+VV17R7NmzFYlENHToUH32s5+NO3711Ve3bq9atUrf/e53tWfPHtXW1urzn/9867Fk/bskXXjhherXr58kadKkSfroo49IwHPhkx37tOS/V0mS/uPRl0nAgZC5//77dcwxx+jdd99VS0uLysrKJCX/VqulpUX9+/dPOY48sb2ZyTmXtG2q/ZI0duxYbdy4UevXr9f06akrQ+iciO/9Sf3bBxBUh4fk1dTU6JNPPtEHH3ygiy66SJLU0NCgsWPHtknA2+trJalXr16t29dff73++Mc/aurUqXr44Yf10ksvtR5L1r9LUmlpaeu+aDSqpqamo7q2VEjAU9i7/2C+QwBCp71hIrm2d+9eVVRUKBKJaP78+WpubpYkXXzxxbr77rt17bXXtg5BGThwoMaMGaOFCxdq9uzZcs5p5cqVmjp1qiRp4cKFmjt3rj788ENt3LhRxx9/vM477zw98sgjuuCCC7R+/Xp9/PHH7e5/5513NGrUKN1777264oortHDhQk2ePDmfv6KC4f/4bOngQxlAvPaGieTK2rVr1dzcrEGDBun+++/XXXfdpTvuuKP1+JgxY/TRRx9p1KhRrfvOPfdczZ8/X3PnzlVNTY1eeuklXXvttUnPv3//fg0bNkyNjY165JFHNHz48NZjyfr35cuXZ+9iPdyECaAg3XzzzZo/f77OPPNMrV+/vrUaMnPmTF1++eWaPn26Tj75ZN17772SpEceeUQPPfSQpk6dqsmTJ+vJJ59sPdfxxx+v888/X5dccol++tOfqqysTDfffLOam5s1ZcoUXX311Xr44YdVWlqacr//XI888ohmz56tDRs25PaXUqD8BSzybyAcDo8BP/nkk3X11Vdr/vz5ikajWrBgga644oq4tldccYUWLFgQt+/KK69URUWFTjzxRH3961/XGWec0TpkJNE///M/64wzztBFF12kiRMnxh1L1r/ngnVUwi8E06dPd5WVnbvJYP2mT3XH/YtaHwepsgcEyfvvv68TTmCIViYk+12a2dvOufyXqHKos332j5Z+oPc2x+YKvu3icZo6sn+2QgMKQqH027W1terdu7d27typ008/Xa+++qqGDh2a9vOvv/56XXbZZbrqqquO6vW70mczBAUAEGr+ISjdoKYEwHPZZZdpz549amho0J133tmp5DvfSMABAKEW8U072B2+1QUQ47+Z8mg8/PDDGYnjaDAGHAAQav4x4C3k3wBCgAQcQJdRdew6fodHL24IChMRAmmhz+marv7+SMBTYPFLID1lZWXauXMnnXkXOOe0c+fOnN19X2ji5gHnzxDoEP1212Siz2YMOIAuqaioUHV1tWpqavIdSqiVlZWpoqIi32GEEtMQAp1Dv911Xe2zScABdElxcbHGjBmT7zDQjfkr4CzEA3SMfjv/GIKSgokxKAAQBlTAAYQNCXiannpppQ4cqs93GACABEYFHEDIkICnkHgn/a8WvaZfP/lGnqIBAKQSPwsKAAQfCXgKyYooz73+fu4DAQC0K34WFFJwAMFHAp5CC6s5AEAoRPwL8bTkLw4ASBcJeApUUQAgJPw3YTIIBUAIkICnwI08ABAOLMQDIGxIwFOgAg4A4eCfhpDiCYAwIAFPgT4cAI4ws5lm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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.preplot(cols=2)\n", "\n", "thinkplot.Pdf(pmf_fb, label='Facebook')\n", "thinkplot.config(xlabel='degree', ylabel='PMF')\n", "\n", "thinkplot.subplot(2)\n", "\n", "thinkplot.Pdf(pmf_ba, label='BA graph')\n", "thinkplot.config(xlabel='degree', ylabel='PMF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we look at the PMF on a log-log scale, the BA model looks pretty good for values bigger than about 20. And it seems to follow a power law." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuMAAAF6CAYAAACz/FayAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xt03NV5//vPnu/MaGSNLOOLbrENQgIR15hLBC1QQiDF8UnjpA1JVpwDNHGLm1BI1lmrNGGtXw7l165S6qymhGY1dRqXBPiZUyCQOCFgUhKSYhLHECAKeLCE8AXdLNsaz8gazW2fP+SZjC6jiz2jr2b0fq3FYuZ7m2cEbD9sPfvZxlorAAAAAHPP43YAAAAAwEJFMg4AAAC4hGQcAAAAcAnJOAAAAOASknEAAADAJSTjAAAAgEtIxgEAAACXkIwDAAAALiEZBwAAAFzidTuAYli+fLk955xz3A4DAGbtpZdeGrDWrnA7jrnEmA2gVBVizC7LZPycc87R3r173Q4DAGbNGHPA7RjmGmM2gFJViDGbMhUAAADAJSTjAAAAgEtIxgEABWWMOdcY8y1jzGNuxwIA811Z1owDKJ5EIqHDhw8rFou5HUpJCwQCWrlypXw+n9uhjGGM2S7pQ5L6rbVrc45vkHSfJEfSf1hr/zHfM6y1b0n6c5JxwH2M2YVRzDGbZBzArBw+fFjV1dU655xzZIxxO5ySZK3V0aNHdfjwYTU1NbkdzngPSPpXSd/JHDDGOJK+Lul6SYcl/coY832NJub3jLt/s7W2f25CBTAdxuwzV+wxm2QcwKzEYjEG9TNkjNGyZct05MgRt0OZwFr7M2PMOeMOXy6p49SMt4wxj0j6iLX2Ho3Oos+aMWaLpC2StHr16tOOF8DUGLPPXLHHbGrGAcwag/qZK7Gf4bskHcp5f/jUsUkZY5YZY74h6RJjzJ2TXWOt3WatbbPWtq1YsaDaqgNzrsTGm3mpmD/DspoZN8ZslLSxpaXF7VAAoJxM9qeQzXextfaopM8WLxwAKB9lNTNurd1prd1SU1PjdigAishxHF188cXZv95+++2CPfvTn/60HnvszNcdPvDAA7rtttsKENG8cFjSqpz3KyV1uxQLgBKTGbMvuugiXXrppdq9e/eY81/96lcVCAQUDofnJJ5gMFiQawqlrGbGAcxPoa5etXd0a21Lo1qb6s/4eZWVlXrllVcKEBlm6FeSzjPGNEl6R9InJX3K3ZAAFEtnX1ShnohaG6rVXHfmSWnumP3MM8/ozjvv1PPPP589v2PHDl122WV64okn9OlPf/qMP6/UlNXMOID5J9TVqy13PaSvbN+lLXc9pFBXb1E+5+2339bVV1+tSy+9dMLMyz/90z/pwgsv1EUXXaQvfelLkqTOzk5t2LBB73nPe3T11Vdr37592et//OMf6+qrr9b555+vH/zgB5JGF0F95jOf0YUXXqhLLrlEP/nJT6Y8nuuHP/yhrrjiCg0MDBTluxeSMWaHpBcltRpjDhtj/txam5R0m6RnJL0h6b+stb91M04AxdHZF9UdO17Tv/13p+7Y8Zo6+6IFff6JEyd01lln/e7zOjsVjUb193//99qxY8ek9/z0pz/VNddco0984hM6//zz9aUvfUkPP/ywLr/8cl144YXq7OyUJB04cEDvf//7tW7dOr3//e/XwYMHJUldXV264oordNlll+nLX/7ymGdv3bpVl112mdatW6e77rqroN91ppgZR0EVegYUpa+9o1vxRFKNtUvU3T+o9o7uM/53Y3h4WBdffLEkqampSU888YRqa2v17LPPKhAIaP/+/dq0aZP27t2rH/3oR3ryySf1y1/+UosWLdKxY8ckSVu2bNE3vvENnXfeefrlL3+pW2+9Vc8995yk0cT++eefV2dnp6699lp1dHTo61//uiTpN7/5jfbt26f169frzTffzHs844knntA///M/66mnnhrzB9B8Za3dlOf4U5KeKuRnsc5n/ir0zChKR6gnokQqrbqagPrCMYV6Imf870BmzI7FYurp6cmOtdLorPimTZt09dVXKxQKqb+/X7W1tROe8eqrr+qNN97Q0qVLde655+ov/uIvtGfPHt133326//779S//8i+67bbbdPPNN+vP/uzPtH37dn3+85/Xk08+qS984Qv63Oc+p5tvvjk7ZkvSrl27tH//fu3Zs0fWWn34wx/Wz372M733ve89o+87WyTjKJjMDGg8kZTf59W2u28kIYfWtjTK7/Oqu39Qfp9Xa1saz/iZk5WpJBIJ3XbbbXrllVfkOE42If7xj3+sz3zmM1q0aJEkaenSpYpGo9q9e7c+/vGPZ+8fGRnJvv7EJz4hj8ej8847T+eee6727dun//mf/9Htt98uSbrgggt09tln680338x7XJJ+8pOfaO/evdq1a5cWL158xt+73Fhrd0ra2dbWdovbseB3MjOjiVRaPsejrZvWkZAvIK0N1fI5HvWFY/I5HrU2VJ/xM3PH7BdffFE333yz2tvbZYzRI488oieeeEIej0cf/ehH9eijj+qv/uqvJjzjsssuU0NDgySpublZ69evlyRdeOGF2d9Ivvjii/rud78rSbrpppv0N3/zN5KkF154QY8//nj2+Be/+EVJo8n4rl27dMkll0iSotGo9u/fTzKO0lWMGVCUvtamem27+8ai/8bkq1/9qurq6vTqq68qnU4rEAhIGt2sYXxLqnQ6rSVLluStOx9/vTFG1k7ePCTfcUk699xz9dZbb+nNN99UW1vbbL4O4JpizIyidDTXBbV107qi/WYkU7J35MgR9fb2av/+/br++uslSfF4XOeee+6kyXhFRUX2tcfjyb73eDxKJpOTflbuWD5Za0Jrre6880795V/+5Rl9pzNFzTgKphgzoJMJdfXq8WdfLlrtMQqvtaleN1x/aVH/5ywcDquhoUEej0cPPvigUqmUJGn9+vXavn27Tp48KUk6duyYFi9erKamJj366KOSRgfkV199NfusRx99VOl0Wp2dnXrrrbfU2tqq9773vXr44YclSW+++aYOHjw45XFJOvvss/Xd735XN998s377W0qsURqKMTOK0tJcF9QHL24oyv+E7du3T6lUSsuWLdOOHTv0t3/7t3r77bf19ttvq7u7W++8844OHDhwWs++8sor9cgjj0iSHn74Yf3hH/6hJOmqq64aczzjAx/4gLZv365odLQu/p133lF//9xvIMzMOApmLmZAKYVBPrfeeqtuuOEGPfroo7r22mtVVVUlSdqwYYNeeeUVtbW1ye/364Mf/KD+4R/+QQ8//LA+97nP6e///u+VSCT0yU9+UhdddJEkqbW1Vddcc436+vr0jW98Q4FAQLfeeqs++9nP6sILL5TX69UDDzygioqKvMczWltb9fDDD+vjH/+4du7cqebmZld+PsBMFXtmFAtP7jofa62+/e1vy3EcPfLII/rRj3405to//dM/1SOPPJItJZmNr33ta9q8ebO2bt2qFStW6D//8z8lSffdd58+9alP6b777tMNN9yQvX79+vV64403dMUVV0gabWf40EMPTVqz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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.preplot(cols=2)\n", "\n", "thinkplot.Pdf(pmf_fb, style='.', label='Facebook')\n", "thinkplot.config(xlabel='degree', ylabel='PMF')\n", "thinkplot.config(xscale='log', yscale='log')\n", "\n", "thinkplot.subplot(2)\n", "\n", "thinkplot.Pdf(pmf_ba, style='.', label='BA model')\n", "thinkplot.config(xlabel='degree', ylabel='PMF')\n", "thinkplot.config(xlim=[1, 1e4],\n", " xscale='log', yscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cumulative distributions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cumulative distributions are a better way to visualize distributions. The following function shows what a cumulative probability is:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "def cumulative_prob(pmf, x):\n", " \"\"\"Computes the cumulative probability of `x`.\n", " \n", " Total probability of all values <= x.\n", " \n", " returns: float probability\n", " \"\"\"\n", " ps = [pmf[value] for value in pmf if value<=x]\n", " return sum(ps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The total probability for all values up to and including 11 is 0.258, so the 25th percentile is about 11." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.2577370636296113" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cumulative_prob(pmf_fb, 11)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The median degree is about 25." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5060658578856153" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cumulative_prob(pmf_fb, 25)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the 75th percentile is about 57. That is, about 75% of users have 57 friends or fewer." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.751671205743996" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cumulative_prob(pmf_fb, 57)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`thinkstats2` provides `Cdf`, which computes cumulative distribution functions." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "from thinkstats2 import Cdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the degree CDFs for the Facebook data, the WS model, and the BA model." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "cdf_fb = Cdf(degrees(fb), label='Facebook')" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "cdf_ba = Cdf(degrees(ba), label='BA model')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we plot them on a log-x scale, we get a sense of how well the models fit the central part of the distribution.\n", "\n", "The BA model is ok for values above the median, but not very good for smaller values." ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEOCAYAAABmVAtTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAH3JJREFUeJzt3Xt4VPW97/H3NyEhKKJy0bqN3FpUEBTbYIu2XitCPYViRQkqamnVWrR9ejlHTrfVbXueZ++NTylW9rb0YKU+SDTtoXBOsbAtWqv1Fi3Y6CA3RSKlXFQslVvge/6YyTgZJpnMZNasuXxez8PDzForK79kQT75/b7r91vm7oiIiABUhN0AEREpHAoFERGJUyiIiEicQkFEROIUCiIiEqdQEBGROIWCiIjEKRRERCROoSAiInEKBRERiesRdgMy1b9/fx88eHDYzRARKSovv/zyTncfkO64oguFwYMH09TUFHYzRESKiplt7spxGj4SEZE4hYKIiMQpFEREJK7oagoiUnoOHjxIS0sL+/btC7spRa+mpoba2lqqqqqy+vjAQsHMHgT+G7Dd3Uem2G/AXOALwIfADe7+SlDtEZHC1dLSwjHHHMPgwYOJ/miQbLg7u3btoqWlhSFDhmR1jiCHjx4CxneyfwIwLPbnJuA/A2yLiBSwffv20a9fPwVCN5kZ/fr161aPK7Cegrs/bWaDOzlkEvBLjz4P9HkzO87MTnL3vwbVJhEpXGEHwt69e9m7dy/pHlHcr1+/nHy+9z/4kHd3/4PDWTwS+RMDT+hwX3e/j2HWFE4GtiS8b4ltOyIUzOwmor0JBg4cmJfGiUg4uvPDMlmlOT0qDnfp2MEDazn99NPj73++4BeccsopRxz33tvbM27Hf//O7Vx08aVMuPyLGX9sol83NtD86hoeXrigW+fpTJihkCrOUv4rcPf5wHyAurq67v9LEZGC8uG+A2zasqPDIMjkh3u2ampq+N3KJwL9HMUgzFtSW4DEGK4FtobUFhEJwdJVa5j2vQV8uHcfVRWt9Kw8lPJP0IGQqPVwBfsPVbL/UCUb33qHKyZPZvxllzH+sst47oWP7oWZ/8D9XD7uAr44/iJm/+sPAdi8+S2+Mn0qX7r8UuqvnMjGDevjx//p2aepv3Iil144llW/XwnAwf37uet/fofJl1/ClEmXsWXja3xi4AnUntCH/3XX/zhi+4n9+nDsMb0A+O1vf8vYsWPZuXNnTr/+MHsKy4CZZtYAfBrYrXqCSGmLRCI0NzfT2trKtp27adn2HidVR3sCbW7+l0cBqKiwnNUZKisrqays5Ndzb+nwmH379vHFyycAMGTIEJYsWcI/9e/NH59+ipqaGtavX099fT1NTU08/vjjPPPUE/z5lZc56qijePfdd+nbty8331jPgp//jGHDhvHCCy8wa9YsVq1aRZ+ja9i2bRsvPP8nNm7cyEUXXcT0+iuZN28e1VU9+Mtf/sLatWsZN24c69atY968eQBHbG+zZMkSfvzjH7N8+XKOP/74nHyP2gR5S+pi4EKgv5m1AHcBVQDu/gCwnOjtqBuI3pJ6Y1BtEZH8SwyAZG2BkKy6RyWVlR0PYLT9cA9Cr169WL16dbttBw8eZObMmaxevZrKysr4D+YnnniCG2+8kaOOOgqAvn37smfPHv70pz8xZcqU+Mfv378//vqqq66ioqKCYcOGMXToUNauXcszzzzDbbfdBsDpp5/OoEGDWLduXYfbAZ588kmamppYuXIlffr0yfn3Ici7j+rT7HfgG0F9fhHJv86CAKJhsHX7bg4fbj8cVFlRwdG9etKrVy+qq6vz0dQumTNnDieeeCJr1qzh8OHD1NTUANH5AMm9mMOHD3PccccdESxtko83sw7vdOrsDqihQ4eyadMm1q1bR11dXSZfTpdoRrOIZCVdACRr6x0cxnh/fy8+OBj9ATt90lj69Kmmb9++AJ0O8eTb7t27qa2tpaKigoULF3Lo0CEAxo0bxz333MO0adPaDR8NGTKExsZGpkyZgrvz6quvctZZZwHQ2NjI9ddfz5tvvsmmTZs47bTTOP/881m0aBEXX3wx69at4+233+50+yuvvMKgQYO49957mTx5Mo2NjZxxxhk5/Zq19pGIdFkkEqGxsZHFixezevXqtIHQo0cPRo8ezVEnjuCZDfDWnuN5e89xfHCwhp7VVUyfNJZJF5+Vp9Zn7tZbb2XhwoV85jOfYd26dRx99NEAjB8/nokTJ1JXV8fo0aO59957AVi0aBELFizgrLPO4owzzmDp0qXxc5122mlccMEFTJgwgQceeICamhpuvfVWDh06xKhRo7j66qt56KGH6NmzZ4fbE8+1aNEipkyZwsaNG3P6NVu6iRqFpq6uzvU8BZH8yLQ3ANEgGDlyJMOHD2fpqjU8+ngT+w8cbHdMchhEIhGGDx+es3aXu1TfTzN72d3Tjjdp+EhE4jINgcQASLR01Rp++OCCI8IAjgwEKSwKBREBooHQUZE0UUdBAHTYMwDoWV3F1RPqFAgFTqEgUsa60jPoLAQSLV21hl8ufe6I7QqD4qJQEClD6cJg9OjRXR7j76h3oDAoTgoFkTKSLgy62ito01HvQHWD4qVQECkTHdUMMg0CUO+glCkURMpAqkDIJgygdHsHlZWVjBo1CnensrKS+++/n3PPPTe+f86cOcyaNYu//e1vHHvssYG3p3fv3uzZs6fbx2RKoSBS4lIFQiY1g2SPPt5+nlCp9A4S1z5asWIFs2bN4g9/+EN8/+LFixkzZgxLlizhhhtuCKmVwdOMZpESlstAaFvmOnHIaPqksTwye0bRB0KyDz74oN3qoxs3bmTPnj386Ec/YvHixSk/5qmnnuKCCy7gqquu4tRTT+WOO+5g0aJFnHPOOYwaNSo+83jz5s1ccsklnHnmmVxyySW8/fbbALz55puMHTuWMWPGcOedd7Y79+zZsxkzZgxnnnkmd911V0BfdZR6CiIlqKOCcncCIXnIqGd1VSBh0NEP3Vyor+94nc69e/cyevRo9u3bx1//+ldWrVrVrk319fV87nOf44033mD79u2ccMKRj8Rcs2YNkUiEvn37MnToUL761a/y4osvMnfuXH7605/yk5/8hJkzZzJ9+nSuv/56HnzwQW6//XZ+85vf8M1vfpOvf/3rTJ8+Pb50NsDKlStZv349L774Iu7OxIkTefrppzn//PNz+82JUU9BpMS09Q6CDoSrJ+R+hc4wtQ0frV27lt/97ndMnz49vlppQ0MDU6dOpaKigiuuuILGxsaU5xgzZgwnnXQSPXv25OMf/zjjxo0DYNSoUbz11lsAPPfcc0ybNg2A6667jmeeeQaAZ599Nh5a1113XfycK1euZOXKlZx99tl88pOfZO3ataxfv56gqKcgUkJyXVDuyrpFpajtiWY7duxg27ZtrF+/nksvvRSAAwcOMHToUL7xjSNX/k9ctK6ioiL+vqKiosPbgBOX1E71UCF3Z9asWdx8883d+pq6SqEgUiJyXT8I6w6jzoZ48mXt2rUcOnSIfv36MWfOHO6++25mzZoV3z9kyBA2b97MoEGDMj73ueeeS0NDA9dddx2LFi3is5/9LADnnXceDQ0NXHvttSxatCh+/GWXXcadd97JNddcQ+/evXnnnXeoqqpKOXyVCxo+EikBQQdCMSxz3V1tNYXRo0dz9dVXs3DhQiorK2loaGDy5Mntjp08eTINDQ1ZfZ777ruPX/ziF5x55pk8/PDDzJ07F4C5c+cyb948xowZw+7du+PHjxs3jmnTpjF27FhGjRrFlVdeyd///vfsv9A0tHS2SJHLVSCEOVykpbNzqztLZ6unIFLEctlDKNf6gbSnmoJIkcr1kFFiIJTKhDTJnEJBpAgFWUPoWV3FI7NndLuNUpwUCiJFqLm5ud37XNYQwpp/4O4pb8mUzHS3TqyagkiRiUQi7e55zzYQfrn0uYKpIdTU1LBr165u/0Ard+7Orl27qKmpyfoc6imIFJHkYaMePXrkZJXTsGsItbW1tLS0sGPHjlA+fympqamhtrY2649XKIgUkeRho5EjR2b08akCoRDuMKqqqmLIkCGhtkGiNHwkUiS6O2xUqIEghUWhIFIkEnsJmQ4bKRCkqxQKIkUguZeQybCRAkEyoVAQKXDdKS4rECRTCgWRApZqklpXewkKBMlGoKFgZuPN7A0z22Bmd6TYP9DMnjSzP5vZq2b2hSDbI1JMujNrWYEg2QosFMysEpgHTABGAPVmNiLpsH8GHnP3s4GpwH8E1R6RYqJAkLAE2VM4B9jg7pvc/QDQAExKOsaBPrHXxwJbA2yPSNHIdhkLBYJ0V5CT104GtiS8bwE+nXTM3cBKM7sNOBr4fIDtESka2cxHUCBILgTZU0i1slXywib1wEPuXgt8AXjYzI5ok5ndZGZNZtakafBS6iKRSLv3CgTJpyBDoQU4JeF9LUcOD80AHgNw9+eAGqB/8oncfb6717l73YABAwJqrkhhSJ6k1hWPPt7+aYQKBMlWkKHwEjDMzIaYWTXRQvKypGPeBi4BMLPhRENBXQEpW9lMUkt+QI4CQbojsFBw91ZgJrACiBC9y+g1M7vHzCbGDvsO8DUzWwMsBm5wrZ0rZSqbSWqpHpCjQJDuCHSVVHdfDixP2vaDhNevA+cF2QaRYpHNCqjJw0ZhPSBHSoeWzhYpAJmugJrqqWkaNpJc0DIXIgUg0xVQkwNBw0aSKwoFkZBlWlxOLiy3PTVNJBc0fCQSskx6CakKy4/MnhFo+6S8qKcgEqJMegmpJqiphyC5plAQCVEmvQRNUJN8UCiIhCTTXoLuNJJ8UCiIhKSrvQRNUJN8UiiIhKCrvQTVESTfdPeRSAjS9RJSTU4DDRtJ8NRTEAlBul6CAkHCop6CSJ515XkJqSanKRAkHxQKInmW7nkJS1etafdek9MknzR8JJJH6QrMqe40EsknhYJIHnVWYNadRlIIFAoiedRZL0EzlqUQKBREQpLcS9CMZSkECgWRPEm+66iNZixLIVEoiORJqruOVEeQQqNQEMmT5HpCqkDQsJGETaEgkgfJQ0fr/npAgSAFSZPXRPIgcejob+/u4Y/PKxCkMKmnIJIHiUNHr2/Z326fAkEKiUJBJI+27dzNrr0fddAVCFJoNHwkEqBIJBIfOtq2czct294Djgd066kUJvUURALU3NxMa2trPBAOY/F9uvVUCpFCQSRAbbWErdt3cxjj/f01gIaNpHBp+EgkIIm3oR4+fJi390SHjRQIUsgUCiIBaW5uZtvO3fFeQhsFghQyDR+JBKS1tTUaCIcPx4eN9HwEKXQKBZGAbNsZDQSADw7WxB+rKVLIAg0FMxtvZm+Y2QYzu6ODY64ys9fN7DUzeyTI9ojkSyQSYev23fH3PaureGT2DA0dScELrKZgZpXAPOBSoAV4ycyWufvrCccMA2YB57n7e2Z2QlDtEcmnFaueifcSDmPqIUjRCLKncA6wwd03ufsBoAGYlHTM14B57v4egLtvD7A9InmxdNUatmzdGX//j0O91UOQohFkKJwMbEl43xLbluhU4FQze9bMnjez8QG2RyQvkh+refm4z4XUEpHMBXlLqqXY5ik+/zDgQqAW+KOZjXT399udyOwm4CaAgQMH5r6lIjm0/8BBqI6+rv3Y8eolSFEJsqfQApyS8L4W2JrimKXuftDd3wTeIBoS7bj7fHevc/e6AQMGBNZgke5YumoN0763gD5V++LbPtb/2BBbJJK5IEPhJWCYmQ0xs2pgKrAs6ZjfABcBmFl/osNJmwJsk0gg2p6itv/AQY7rGQ2FioqK+GM3RYpFYKHg7q3ATGAFEAEec/fXzOweM5sYO2wFsMvMXgeeBL7n7ruCapNIUBLrCBU4FRUV/NMJxzJy5MgQWyWSuUB/jXH35cDypG0/SHjtwLdjf0SK0tJVa6J1hJjajx0fHzYaPnx4WM0SyYr6tiLdlNhL6Fldxcf6HxVia0S6R6EgkqWlq9bw6ONN8V5Cn6p9nDW4MuRWiXSP1j4SyVJiIAD063WAE/v2jr9XkVmKkUJBJAvJdYSe1VWcfEKf+PsePXqoyCxFSaEgkoXkOsIjs2e0m5MwZcoUFZmlKKl/K5KB5DoCRJ+1nPiUNZFipp6CSAaSA6FndRWTLj6L5ubm+DbVEqSYdRoKZvZQwuvrA2+NSAFLVUdoWxK7tbU1vl21BClm6X6lSVzJ65vAwgDbIlLQUtURUlEtQYpZulBIXtVUpOx0VEcQKUXpQqHWzO4jugx22+s4d789sJaJFIiO6ggipShdKHwv4XVTh0eJlLCO6ghtdOeRlJJOQ8HdVUOQstU2bJQoVR1Bdx5JKUl7S6qZXW9mr5jZP2J/msxsej4aJxKmVMNGqejOIyklnf5aE/vh/y2iS1u/QrS28Elgtpnh7r8Mvoki4Ug3bJSK7jySYpeur3srMNnd30rYtsrMvgw0AAoFKTldHTYSKUXpQqFPUiAA4O5vmVmfFMeLFL2uDhtFIpF29QSRUpCuprA3y30iRaurw0bNzc3t6gkqMkspSPeveLiZvZpiuwFDA2iPSKiWrlrT7n1nw0bJgaAis5SCrixzcSKwJWn7IGBrIC0SCVHyUhZdNWXKlCCaI5J36YaP5gAfuPvmxD/Ah7F9IiVh6ao1TPveAi1lIWUvXSgMdvcjho/cvQkYHEiLREKgpSxEotKFQk0n+3rlsiEiYcpmToJIKUpXU3jJzL7m7j9P3GhmM4CXg2uWSH5kOydB6x1JqUoXCt8ClpjZNXwUAnVANTA5yIaJ5ENX5yQk03pHUqrSLYj3N+BcM7sIaLvf7rfuvirwlonkQbbDRlrvSEpVl37FcfcngScDbotIXqR6aA5kv5SF1juSUpJ2lVSRUpMqEDKZkyBSyhQKUnZSBYLuNhKJUoVMykaqO41+PfeWkFojUpgC7SmY2Xgze8PMNpjZHZ0cd6WZuZnp1zUJTLZ3GiWKRCI0NjbmslkiBSWwUDCzSmAeMAEYAdSb2YgUxx0D3A68EFRbRCA3E9S0MqqUuiD/RZ8DbHD3TQBm1gBMAl5POu6HwL8D3w2wLSLtZHunkVZGlVIXZCicTPvVVVuATyceYGZnA6e4+/8zM4WCBCJVLSEXtDKqlKIgawqWYpvHd5pVEF1p9TtpT2R2k5k1mVnTjh07cthEKQe5qCWIlIsgQ6EFOCXhfS3tn8FwDNFZ0k+Z2VvAZ4BlqYrN7j7f3evcvW7AgAEBNllKkRa7E+m6IIePXgKGmdkQ4B1gKjCtbae77wb6t703s6eA78aW5RbpllzPWhYpF4H1FNy9FZgJrAAiwGPu/pqZ3WNmE4P6vCKgWcsi2Qr0fjp3Xw4sT9r2gw6OvTDItkh5CWLWspbLlnKgm6yl5OVq1rKWy5ZyoH/ZUlKCuv0UtFy2lActiCclJV+3n2q5bClVCgUpKbr9VKR7NHwkJUu3n4pkTqEgRa+jOQkikjkNH0nR05wEkdxRKEjR05PURHJHw0dSUvQkNZHuUSiIpBGJRNpNXBMpZQoFKUr5LC7raWtSTlRTkKKUz+KynrYm5US/8khRCqu4rKetSalTKEjRU3FZJHcUClI0NElNJHiqKUjR0CQ1keApFKRoaJKaSPA0fCRFSXUEkWAoFKRghV1D0KQ1KUcaPpKC1VEg5KuOoElrUo4UClKwOgqEfNURNGlNypF+9ZGiEHYNQZPWpFwoFKRghF1DEBENH0kBCbuGICIKBSkgYdcQRETDR1Kgwq4hiJQrhYKERjUEkcKj4SMJjWoIIoVHoSChUQ1BpPBo+EgKgmoIIoVBoSCSRGseSTkLNBTMbDwwF6gE/re7/2vS/m8DXwVagR3AV9x9c5BtknAUU1FZax5JOQuspmBmlcA8YAIwAqg3sxFJh/0ZqHP3M4FfAf8eVHskXJ0FQqEVlrXmkZSzIH8FOgfY4O6bAMysAZgEvN52gLs/mXD888C1AbZHQtRZIBRyYVlrHkm5CTIUTga2JLxvAT7dyfEzgMcDbI8UCBWVRQpXkKFgKbZ5ygPNrgXqgAs62H8TcBPAwIEDc9U+ERFJEmQotACnJLyvBbYmH2Rmnwe+D1zg7vtTncjd5wPzAerq6lIGixSOYioqi0h7QU5eewkYZmZDzKwamAosSzzAzM4GfgZMdPftAbZF8qiYisoi0l5goeDurcBMYAUQAR5z99fM7B4zmxg7bDbQG2g0s9VmtqyD00kRKdaisogEPE/B3ZcDy5O2/SDh9eeD/PwSPhWVRYqL1j4SEZE4TdWUrKmgLFJ61FOQrKULBBWVRYqPQkGyli4QirGoHIlEwm6CSKg0fCQ5USoF5cTVUbUQnpQj9RREEiQuhqeF8KQc6VchSatcC8rDhw8PuwkieaeegqSlgrJI+VAoSFqlWFAWkdQ0fCQZKZWCsoikpp6CiIjEqacgZVtIFpEjqacgXQ4EFZRFSp9CQbocCCooi5Q+DR9JOyoki5Q3hUIJU61ARDKlUChhmQZCOdcMIpFIu3WPRMqVagolLNNAKOeaQXNzc7t1j7QYnpQr/csvE6oVdC45ELQYnpQrhYJIkilTpoTdBJHQKBSKhIrGIpIPqikUie4EQjkXkEUkMwqFItGdQCjnArKIZEbDR0VIRWMRCYp6CiIiEqeeQh6oSCwixUI9hTzIZSCoaCwiQVIo5EEuA0FFYxEJkoaP8kxFYhEpZGUTChrXFxFJL9DhIzMbb2ZvmNkGM7sjxf6eZvZobP8LZjY4qLYUQiCoHiAihS6wUDCzSmAeMAEYAdSb2Yikw2YA77n7J4A5wL8F1Z5CCATVA0Sk0AU5fHQOsMHdNwGYWQMwCXg94ZhJwN2x178C7jczc3cPsF0a1xcR6UCQw0cnA1sS3rfEtqU8xt1bgd1AvwDbJCIinQgyFCzFtuQeQFeOwcxuMrMmM2vasWNHThonIiJHCjIUWoBTEt7XAls7OsbMegDHAu8mn8jd57t7nbvXDRgwIKDmioiIBTV8H/shvw64BHgHeAmY5u6vJRzzDWCUu99iZlOBK9z9qs7OW1dX501NTYG0WUSkVJnZy+6e9m6XwArN7t5qZjOBFUAl8KC7v2Zm9wBN7r4MWAA8bGYbiPYQpgbVHhERSS/QyWvuvhxYnrTtBwmv9wF69qGISIHQ2kciIhKnUBARkTiFgoiIxCkUREQkTqEgIiJxgc1TCIqZ7QbWp9h1LNFlMjrb1h/YGVDT0knVvnyco6sfk+64jvZnsj3VtrCuSS6uR7bn0TVJrdCvSbbXo7N9+bwmg9w9/exfdy+qP8D8rm5P3kZ0fkRBtTvoc3T1Y9Idl8n3vavXI8xrkovroWtSXtck2+tRbNekGIeP/m8G2zs6Ngy5aEs25+jqx6Q7LpPve0fbS+16ZHseXZPUCv2aZHs9OttXcNek6IaPusPMmrwL07wlf3RNCo+uSeHJ5zUpxp5Cd8wPuwFyBF2TwqNrUnjydk3KqqcgIiKdK7eegoiIdEKhICIicQoFERGJK+tQMLOjzWyhmf3czK4Juz0CZjbUzBaY2a/CbotEmdmXYv9HlprZuLDbU+7MbLiZPWBmvzKzr+f6/CUXCmb2oJltN7PmpO3jzewNM9tgZnfENl8B/MrdvwZMzHtjy0Qm18TdN7n7jHBaWj4yvCa/if0fuQG4OoTmlrwMr0fE3W8BrgJyfptqyYUC8BAwPnGDmVUC84AJwAig3sxGEH1u9JbYYYfy2MZy8xBdvyaSHw+R+TX559h+yb2HyOB6mNlE4Bng97luSMmFgrs/TfTRnonOATbEfgs9ADQAk4AWosEAJfi9KBQZXhPJg0yuiUX9G/C4u7+S77aWg0z/j7j7Mnc/F8j5sHe5/CA8mY96BBANg5OB/wN82cz+k8Ka7l8OUl4TM+tnZg8AZ5vZrHCaVrY6+n9yG/B54EozuyWMhpWpjv6PXGhm95nZz0h63HEuBPqM5gJiKba5u/8DuDHfjRGg42uyC9APnnB0dE3uA+7Ld2Okw+vxFPBUUJ+0XHoKLcApCe9rga0htUWidE0Kj65JYQnlepRLKLwEDDOzIWZWDUwFloXcpnKna1J4dE0KSyjXo+RCwcwWA88Bp5lZi5nNcPdWYCawAogAj7n7a2G2s5zomhQeXZPCUkjXQwviiYhIXMn1FEREJHsKBRERiVMoiIhInEJBRETiFAoiIhKnUBARkTiFgkgKZna3mX037HaI5JtCQSQgsaWPRYqKQkEkxsy+H3ugyRPAabFtHzez35nZy2b2RzM7PWH782b2kpndY2Z7YtsvNLMnzewR4C+xbdea2YtmttrMftYWFmY2zsyeM7NXzKzRzHqH85WLfEShIAKY2aeIri1zNtEn8o2J7ZoP3ObunwK+C/xHbPtcYK67j+HIRcrOAb7v7iPMbDjRp5Wd5+6jiT7M6Roz60/0oTWfd/dPAk3AtwP7AkW6qFyWzhZJ53PAEnf/EMDMlgE1wLlAo1l8FeOesb/HAl+KvX4EuDfhXC+6+5ux15cAnwJeip2jF7Ad+AzRp2k9G9teTXTtG5FQKRREPpK8EFgF8H7sN/xM/CPhtQEL3b3dA4PM7IvAf7l7febNFAmOho9Eop4GJptZLzM7Bvgi8CHwpplNAYg9lvKs2PHPA1+OvZ7ayXl/T/SJZSfEztHXzAbFPv48M/tEbPtRZnZqzr8qkQwpFESA2LOHHwVWA78G/hjbdQ0ww8zWAK/x0XOkvwV828xeBE4Cdndw3teJ1g5WmtmrwH8BJ7n7DuAGYHFs+/PA6QF8aSIZ0dLZIlkws6OAve7uZjYVqHf3Sek+TqTQqaYgkp1PAfdbtEr8PvCVkNsjkhPqKYiISJxqCiIiEqdQEBGROIWCiIjEKRRERCROoSAiInEKBRERifv/detlOHogzVIAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Cdf(cdf_fb, label='Facebook')\n", "thinkplot.Cdf(cdf_ba, color='gray')\n", "thinkplot.config(xlabel='degree', xscale='log',\n", " ylabel='CDF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On a log-log scale, we see that the BA model fits the tail of the distribution reasonably well." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Cdf(cdf_fb, label='Facebook', complement=True)\n", "thinkplot.Cdf(cdf_ba, color='gray', complement=True)\n", "thinkplot.config(xlabel='degree', xscale='log',\n", " ylabel='CCDF', yscale='log')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But there is certainly room for a model that does a better job of fitting the whole 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.6.4" } }, "nbformat": 4, "nbformat_minor": 1 }