\n",
"\n",
"\n",
"The goal of this byte is to explore some algorithms and visualizations relating to networks"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"K-Core Algorithm Introduction:\n",
"============\n",
"* K-Core is an approach of simplifying a graph by removing the edges that have small degrees. The goal of the algorithm is to find groups of nodes that are all connected to at least k other people in the same group \n",
"* For more information, you can read this paper http://arxiv.org/pdf/cs/0504107v2.pdf\n",
"\n",
"Algorithm:\n",
"-------------\n",
"1. Delete all the nodes and corresppoding edges that have degrees less than k\n",
"2. Calculate the degrees of all the remaining nodes.\n",
"3. If the degrees of all the nodes are larger than k or equal to k, return; Otherwise, repeat from step 1"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"271570\n"
]
}
],
"source": [
"import copy\n",
"# open the file you have downloaded\n",
"# these files are organized \n",
"file = open(\"amazon.txt\")\n",
"# this returns an array with one entry for each line ni the file\n",
"lines = file.readlines()\n",
"print len(lines)\n",
"\n",
"# Note: the format of the snap files is to list a node (identified by a unique number)\n",
"# and all of the nodes it links to (also identified by numbers), on the same line, separated by tabs."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of unique edges\n",
"99433\n",
"number of unique nodes\n",
"134386\n"
]
}
],
"source": [
"# construct the graph\n",
"\n",
"# a set is an unordered collection of unique elements\n",
"edges = set()\n",
"\n",
"# this will store our nodes\n",
"nodes = {}\n",
"\n",
"# divide the line into the node and all of its edges\n",
"\n",
"# for each line in the file that was loaded in\n",
"for line in lines:\n",
" # divide the line into the node and all of its edges \n",
" data = line.split()\n",
" a = int(data[0])\n",
" b = int(data[1])\n",
" # add the edge\n",
" edges.add((a, b))\n",
" # update the count for the number of times we've seen each node\n",
" nodes[a] = nodes.get(a, -1) + 1\n",
" nodes[b] = nodes.get(b, -1) + 1\n",
" \n",
"print \"number of unique edges\"\n",
"print len(edges)\n",
"print \"number of unique nodes\" \n",
"print len(nodes)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# get the degrees of each node in a set of edges\n",
"def get_degrees(edges):\n",
" degree_counts={}\n",
" \n",
" # for each pair of nodes (edge) \n",
" for i,j in edges:\n",
" # increment the count for the number of edges connected\n",
" # to each node by one \n",
" degree_counts[i] = degree_counts.get(i, 0) + 1\n",
" degree_counts[j] = degree_counts.get(j, 0) + 1\n",
" return degree_counts\n",
"\n",
"# Delete all nodes in delete_nodes from edges\n",
"def delete_node(edges, delete_nodes):\n",
" # construct a new set of edges\n",
" new_edges = []\n",
" \n",
" print \"# of nodes to be deleted\", len(delete_nodes)\n",
" \n",
" # loop through all the current edges\n",
" for i, j in edges:\n",
" # if an edges two nodes are not in the\n",
" # set of nodes to be deleted\n",
" if i not in delete_nodes and j not in delete_nodes:\n",
" # append that edge to our new edges\n",
" new_edges.append((i,j))\n",
" return new_edges\n",
"\n",
"# kcore algorithm\n",
"# We run the kcore algorithm to delete all \n",
"# the nodes whose cores are less than k\n",
"# returns a new set of edges and nodes\n",
"# including only those in the k core.\n",
"def kcore(edges, k):\n",
" # make a complete copy of the edges so we can delete or change \n",
" # things without messing up our original\n",
" edges = copy.deepcopy(edges)\n",
" # now for each pair of nodes, count the number of \n",
" degree_counts = get_degrees(edges)\n",
" # sort the nodes by degree and return\n",
" # only the node numbers (not their degree)\n",
" sorted_nodes = sorted(degree_counts, key = degree_counts.get)\n",
" print \"largest degree: \", degree_counts[sorted_nodes[0]]\n",
" # repeatedly delete all nodes with degrees < k to find the k core\n",
" # if we run out of nodes, or the largest count is < k we should stop\n",
" while ((len(sorted_nodes) > 0) and (degree_counts[sorted_nodes[0]]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# code to analyze undirected graphs\n",
"%matplotlib inline\n",
"from pylab import *\n",
"import matplotlib.pyplot as plt\n",
" \n",
"# get the degrees for each node (again)\n",
"nodes = get_degrees(edges)\n",
"\n",
"v = nodes.values()\n",
"# this ensures that we don't have any values more than once\n",
"noRep = list(set(v))\n",
"noRep.sort()\n",
"\n",
"x = []\n",
"y = []\n",
"for count in noRep:\n",
" # f is the number of times this value occurs\n",
" f = v.count(count)\n",
" x.append(count)\n",
" y.append(f)\n",
"figure()\n",
"loglog(x, y, '*')\n",
"xlabel('x')\n",
"ylabel('y')\n",
"title('power law plot')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Directed Graphs\n",
"============\n",
"Directed graphs are handled slightly differently than regular graphs:\n",
"We need to keep track of both incoming and outgoing edges..."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": [
"iVBORw0KGgoAAAANSUhEUgAAAYwAAAEeCAYAAACZlyICAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n",
"AAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xmc3FWV9/HPqeolne6sJGQj+0ISElFkERWIkEAYVGSR\n",
"TZCJis4DoiOj4jg8EgdlUdFBZQ2gBnwIiwFERAiBIIpIgFGWZkkISWcn+9ad3uo8f9xfUdWddLo6\n",
"Xd1V1f19v155ddWvqn51+wddt+4599xr7o6IiEhrYrlugIiIFAZ1GCIikhF1GCIikhF1GCIikhF1\n",
"GCIikhF1GCIikhF1GFIwzCxhZmNy3Y62Sm+3md1sZldk6bwjzGyHmVl0f5GZfTEb547O90czuyBb\n",
"55PCV5TrBohA+FAFxrn7sly3pSO5+//J5Hlmthz4grs/tY9zVQG90g9F/9rMzGYDY939/Q7C3f9l\n",
"f84lXZdGGJJPLCdvapaPfwfOPq6HmenLnnS6fPxDkQJlZpOisMgWM3vNzD6V9liTcImZ/auZPRvd\n",
"/nN0+J9RiOWz0fFvmdkaM1tlZl9o9l6lZvYTM1thZuuiUE+PtMe/nfbaLzULC/06ev4fzWwnMM3M\n",
"hprZ78zsPTNbZmaXpp3LzOw7ZrbUzDaa2b1m1m8f12Ff7f61mV0V3R5gZn+IrtcmM/tz9F53ASOA\n",
"R6Lr8U0zGxX9Dl8wsxXAk2Y2MjqW/nc8zsz+bmbbzOyhZDvNbJqZrWzWluVmdoKZzQT+Ezg7er//\n",
"bf7fLGrXFdFr1pvZb8ysd/RYsm2fj/57bDCz77Z0faRwqcOQrDCzYuAR4E/AQOBS4LdmNj56Sovh\n",
"Enc/Nrr5AXfv5e73Rx9i/wFMByZEP9NdC4wDDo1+DgO+F7VlJvAN4ARgPDBtL297LnCVu1cAf4va\n",
"/r/A0Oh1/25mJ0bP/RrwaeBYYAiwBbixhevQWrvTr8N/ACuBAcCBwH96cAFQBXwyuh4/SXv9scBE\n",
"4CT2HIEY8HlgVtTOBuDne2tnelvc/U/A1cC86P0+tJe2zgIuJFzLMUAF8Mtm5/tY9DufAHzPzCbu\n",
"472lAKnDkGz5CFDu7te6e4O7Pw38AThvP893FnCnu1e6ezVwZfKBKMl7EXCZu291953ANcA5zV77\n",
"hrvXpL82zUPu/rfo9geAAe7+g6jt7wK3p53v34Ar3H2Nu9cD3wfObCGU1WK796KO8ME+yt0b3f2v\n",
"rV0UYLa717h77V4ec2Bu2nv/X+CsZFK8Fca+Q4KfA6539+XuvoswIjmn2TX4vrvXuvsrwD8Jnbl0\n",
"IYqDSrYMJXxbTrciOr4/hgCL0+5Xpd0eCPQEXkr7LDRSX4CGAC+kPX9Vs3M7sDrt/khgqJltSTsW\n",
"B/6c9viDUWI+qQEYBKxtQ7vT2wrwY2A28ET0e9zm7tft5fnpml/jfT1eBRQTRjDtNYTw3zP93EWE\n",
"a5C0Lu12NVCehfeVPKIOQ7JlDTDczMxTSyCPBN6Mbu+i6QfI4FbOt5YQx09Kv70RqAEmu3vzD+zk\n",
"a4en3R++l+ekh8eqgHfdfUILbakCZqWNSPZlX+1u2oAwMvom8E0zOwR4ysxeiEZnLc12am0WVPP3\n",
"ridcr12EThYAM4sTOt5Mz7sGGNXs3A3AevbxO0rXopCUZMvzhG+V3zazYjObBnwSmBc9/g/gdDMr\n",
"M7NxQPN6gfXA2LT79wH/GiXSe5IW2nH3BDAH+B8zGwhgZsPScg73AbPMbGL02v/b7L2ah15eAHZE\n",
"ifIyM4ub2RQzOzx6/BbgajMbEb3XQDP7dAvXocV2N39vM/ukmY2LQkbbgUYgOYppfj0yYcD5ae/9\n",
"38D9UQf+NtDDzP4lyjddAZSmvXYdMGof4at7gG9ECe4KUjmPRAvPb/K7StegDkOyIortfwo4GdhA\n",
"SIhe4O5vR0/5GSFmvx74FXA3Tb/VzgZ+E80YOjNKxP4P8BThw25hs+dfDiwFnjezbcACQsKV6LU/\n",
"B56OXpscGSTj/k0S8NGH3ieBDwLLovbfBvSOnnID8HtC6Gh7dL4jW7gOrbU7/b3HRe3eATwH3Oju\n",
"z0SPXQNcEV2Py9Jeu8dbNrs9F/g1YaRTQkjY4+7bgIsJuZlVwE6ahq/uj35uMrMX9/I+dwJ3EcJ0\n",
"ywhfDi5Ne7y1tkkXYPm0gVL0rfQq4DXCt5dn9v0KkdaZ2STgVaCklW/EIrIP+TbCSBC+bZWyZ6JS\n",
"JGNmdpqFWo1+wHXA79VZiLRPh3cYZnZnVOjzarPjM83sTTNbYmaXR4efjZYj+A5h6qLI/voyIfy1\n",
"lJD4zWhJDhFpWYeHpMzsGEK8dK67T42OxYG3CEVNqwnTEM919zeix0uA37r7Zzu0cSIikrEOn1br\n",
"7s+a2ahmh48Elrr7cgAzmwecGlWGngT0BX7R0W0TEZHM5aoOYxhNZ2isAo5y92uBB1t7sZnlT6Ze\n",
"RKSAuPt+T3fOVdK73R/47m4d+Y+wzEGHvra15+3r8ZYe29vx5sdau6/ruf/HOuNatud92vK6/b2e\n",
"+n9z/57XSdezXXI1wljNnpW4bZoVZWH9/kXuvih7zWqiPefN9LWtPW9fj7f02N6ONz/W2vt2hPa8\n",
"Z6avbe15+3p8b4+151hH29/3bMvrWntuS4+35XjzY629Z0doz3tm+tpMntfSc9pyvPmxRfB+ycK0\n",
"DNqwT+adUIcR5TAe8VTSu4iQ9D6BsOTAC6QlvTM4n2ejt5TAzGa7++xct6Mr0LXMLl3P7GrvZ2dn\n",
"TKu9h1DFOsHMVprZLHdvAL4KPA5UAvdm2lmknXd21GtK+y3KdQO6kEW5bkAXsyjXDegKov1QZrf7\n",
"PJ0xwsg2jTBERNou70cYIiLSNRTs8uadkPQWEekSCirpnW0KSYmItJ1CUiIi0ikUkhIR6eIUklJI\n",
"SkSkTRSSEhGRTqGQlIhIF6eQlEJSIiJtopCUiIh0CnUYIiKSEXUYIiKSESW9RUS6OCW9lfQWEWkT\n",
"Jb1FRKRTqMMQEZGMqMMQEZGMKOktItLFKemtpLeISJso6S0iIp1CHYaIiGREHYaIiGREHYaIiGRE\n",
"HYaIiGREHYaIiGREdRgiIl2c6jBUhyEi0iaqwxARkU6hDkNERDKiDkNERDKiDkNERDKiDkNERDKi\n",
"DkNERDKSdx2GmZWb2WIzOyXXbRERkZS86zCAbwP35roRIiLSVId3GGZ2p5mtN7NXmx2faWZvmtkS\n",
"M7s8OjYDqAQ2dHS7RESkbTq80tvMjgF2AnPdfWp0LA68BUwHVgOLgXOBzwHlwGSgBjjN99JAVXqL\n",
"iLRdez87O3wtKXd/1sxGNTt8JLDU3ZcDmNk84FR3vyK6fyGwYW+dhYiI5EauFh8cBqxMu78KOCp5\n",
"x91/09oJosUHk7QIoYhIM9ladDApVx1Gu0cO7j47C+0QEemyoi/Si5L3zezK9pwvVx3GamB42v3h\n",
"hFFGxrS8uYhIZrI10sjVtNoXgfFmNsrMSoCzgd+37RRjX1FnISLSOndflI2oTGdMq70HeA6YYGYr\n",
"zWyWuzcAXwUeJ0yjvdfd32jbmaddYzbxdbOhX852m0VEZE8Fu4ESHLoNqn4KW67SbCoRkZalhaSu\n",
"7KYbKH0kBv1fU2chIrJvBROS6ji/eQx2ntQRZzYzMxt9jZmpOFBECp6ZTWtWirB/5ynEL+gdXelt\n",
"Nu4MmHEnLJjlvnR+R72PiEhn0p7eWWQ29MtmE1+HaVfDTb2VWBcRSclVHUa7dUwdxto5ULYZ4teD\n",
"AfEe0HAZrNUoQ0QKVqHXYbSbu8/Odh1GSKCbQ6wvnFUJ1i86nHHcTvkPEck3Snp3mJLxsGAW3D8F\n",
"nvzXcL8txp4OMy+Gsad1SPNERHJESe8sCXmO3l+HjxfBnAlw0dvwlwbYfoP7mtty3T4Rkbxf3ryj\n",
"5N9aUsp/iEh+Ug6jA3IY7dHW/IdyHSLSWZTDyEttyX8o1yEihUU5jE6mXIeI5Eq3Ldwzs9lRXK7A\n",
"rJ0D9VeGHMf7uY7vheMpClmJSLZka2mQgu0w8i2HkanMcx0KWYlIdiiHUdBaznVoeRIRyVcFO622\n",
"kLlXXpt2t9m029an54Yw1airYfl3tby7iHQWjTDyTGYhK4WrRKTzqcPIS3sPWSlcJSK5VLAhqfyr\n",
"9M6elkNW+w5XKVQlInujSu8CnSXVHq2HqxSqEpE9ZWuWlAr3CozZ5O9A3dvwzoOhYygZD1u3qBhQ\n",
"RFrTbRcf7K72Fq4Koai9h6oUphKRbCnYkJSk7DtU1TRMpQpyEdlfCkl1EXuGqho+Bz0m7hmmqv4z\n",
"nHIeLJjlvlRLr4t0I+397FSH0UWFEcSYM2D69XDrCJixCVZWw8dq4HblOUS6oW67+KDs255hqjEl\n",
"UD8PivZY9DAZolK4SkT2pWCT3l25DiN7kgWAyTBV/LRUB9J/OBDlOGZcDAsWA5Z2W+EqkS4iW3UY\n",
"Ckl1I03zHAfdCOWnw8e3wXET4Kd1MBm4u0ThKpGuSSEpyZh75bXuS+eHcNWqS6D+qyE0dT4wfBuU\n",
"bU+Fq+q/ByWjFZ4SkSR1GN1U0xzH2ZUQK4d4edq03KPg5Ith7GnKbYgIKCTVrTUNUU2YC+6w4y/Q\n",
"5wo4qgx+PSCEp/5cBtMGwlOf01RckcKlabWSVU2n4x4zAq6vh0M3wK+GKrchUtiUw5CsahqqergS\n",
"RtZDUYlyGyKiDkP2Ijkd94Ep8OqNEO+1Z25jzGnKa4h0L3kVkjKzicDXgQOAx939jhaep5BUJ0nl\n",
"OXYNaJrb+NQaGDoYHr8Nqi7WAoci+a9L5jDMLAbMc/ezWnhcHUYnS+U2xtwCpQfA4AaYUwRfehue\n",
"jZLiCz8HiSPUcYjkp7zPYZjZnWa23sxebXZ8ppm9aWZLzOzytOOfAh4F5nV02yRzqdzG2GKoXgnx\n",
"OPwWeHk0fDQOt/aASb+AGd+G4TcpXCXS9XT4CMPMjgF2AnPdfWp0LA68BUwHVgOLgXPd/Y201z3s\n",
"7qe2cE6NMHIgFZ5KGMy4C97bDt4LdiagR0Vq1PHJNTBsMDx+m/uK/5PrdotIkPcjDHd/FtjS7PCR\n",
"wFJ3X+7u9YTRxKlmdpyZ3WBmtwJPd3TbpG2SleLQYzwsPB8eGhKS4mOiUcfKOHwKGHIg3BqD6ceb\n",
"TXzdbOiXc912EWm/XC0+OAxYmXZ/FXCUuz8DPJPJCaLFB5O0CGEnSt/1z2zyZnjqvDDqmH4XvF0L\n",
"8T6pabi1L8HaOTlsrki3la1FB98/X2fkJs1sFPBIWkjqDGCmu18U3T+f0GFcmuH5FJLKM3uGqzZs\n",
"h0QvGGSw8HxViIvkXt6HpFqwGhiedn84YZSRMTObHfWekgeahqv++Guo3AR9t8ItZXDcNWZjN5gN\n",
"/rKS4SKdz8ymNYvK7JdcdRgvAuPNbJSZlQBnA79vywncfbbCUPknhKtWXQL1V0JpQwhNbegH08uh\n",
"57j0/cVFpHO4+yJ3n93e83TGtNp7gOeACWa20sxmuXsD8FXgcaASuDd9hlSG59UII0+lpuAuHwiH\n",
"1kLNAFhdBp/4OtzUGz56k5LhIp0nWyOMvCzca41yGPkv5DRq34ZEDI6/Gc4cAA81wi1xmLYNVn0R\n",
"ls1XhbhI5ynUHIZ0cSGn8c58iDuUlMBPVoLF4fiNMKkP+JEw+ndwkkJUIgWiYDsMhaQKRXIhw6Uv\n",
"wtObYATwMaD8m3D8aXBz71RSfIhCVCIdQCEphaQKStO1qEoOgFgjHBKHa4FPNsDQBDx5rvsyTb8V\n",
"6SAKSUlBaLoWVc1KiMfgdeCDDoPjcEsJDJtjdrCS4SJ5qmA7DIWkClHJeHhyFiz/BtQ2wI6tMLIG\n",
"EjvgCeCQftDwKBSPNht5jdko1WyIZIFCUgpJFayme4kPfwwGnAgfrIc7SuCUzVDcF2gMixmqSlwk\n",
"W7rkfhitUYfRdZhN+g7U9YcxX4AdB8BWoBcwA/gh8LkG+PtuqP4P97XaR1ykHbptDkMhqa7B/Y1r\n",
"wf4echtlK+Fgh4MBJ1SJ76iGE+LQ4ySFp0T2j0JSGmF0GU0XLpz6W4iVQI3BOuBwhzMMHk7AU6th\n",
"5w/C6rcq+BNpK4WkpMsIHUfjIeFe/Rpo/Az0Hwf/EoOrgGN3wtrdUP8AnHIeLJil/IZI5tRhSJdl\n",
"NvYMmDoXBhbDGcVwlUMNMHkXzK2A4zbDe+tgxw3ua5TfEGlFez87c7WBkkgGSsfDy89CzxPDAscz\n",
"DSqAqorUNNy1d2iDJpHOUbAjDOD7aKe9Li/MoqrtDwf+GzT2CjOotgNTgTuBz2+Dxath2w3QY7Ty\n",
"GiJ7Stt570qFpKRLMxt3BhwyF6wH1MTC//fvJsK+4cfuhpWPhRlVJ50ATyqvIdKCDp9Wa2ZfM7N+\n",
"+/sGIu1XMh7enA+vXA+jauDxXRCLhZVvG3tA78/ACZ8JCxlOu0Z7bYh0jEzqMAYBi83sPjObqbnw\n",
"0tnCUulvXQA9NsPC8+HdJ+DxnbCmP9QBhxoMsDDKaBgL1X9WXkMk+zIKSZlZDDgR+FfgcOA+4A53\n",
"f6dDW9dyexSS6sbCl5bRZ8AhN0GfgeHoQGBNI6x3WH422BHKZ4g01SmV3u6eIFRRrQcagX7AA2b2\n",
"4/194/ZSpXf3FTqBmEO8HHYmYDPwusPuBhifAPsZzPgGjNbGTCJ0YqW3mX0d+DywCbgdeNDd66NR\n",
"xxJ3H9veRrSVRhjStMivZiD0/AgMLgHKYBTwK1IzqLarTkOEzqnD6A+c7u4r0g+6e8LMPrW/byzS\n",
"Hu6V1yZvhxDVQTfDmi9BGTApemRVH2hIhHWpRKS9Wg1JufuVzTuLtMcqs98kkbYJIaqSBTCpFvo2\n",
"hqPnABOAhg1QMlp7a4i0n+owpEsIIara/lD+DbAiOAw4C7gNaHQ4MAELH4blZyoRLt2V1pISiYRO\n",
"o+GQKKcxI2wDWw58DDgJeAhYUAM1/669NaQ7Uoch0kxYtHDKXFhXClviYTmRmcDHgYeBhZth138q\n",
"ES7dTbfdQEmkZaXj4bUbYXAtDHUoBf4E/AW4CRhUAj1+aDbiMTMzs9HKb4hkoGA7DNVhSEvCDKrS\n",
"zWE5kTXPQkk9DPdQRvQ4UF8OU/vAycfBmOtg5sUwVjUb0mVpxz2FpCQDqXqN6oFhmXSPlkgfDewm\n",
"zBqfC1y4Hl7YpJoN6cqUwxDJgNmo+VByLEzoC33iMBzoDSwHxgJ/3AarvgjL5msWlXRVymGIZGTF\n",
"GdD4KyiKwUpgAfAcsA14HpjYBxouglFXK58hsnfqMKRbCKOG+BCobYDqrdDYCG8B7xAqw28GBsyA\n",
"6ZfDiJty21qR/KQOQ7qRotdgyTnwUn/Y/geYDAxJwJvA8cCHYnCbwfTjtaeGyJ6Uw5BuJXQCvb8O\n",
"wwfC8QPhDw7VBkOBKYQk+B8aoeoVqPqw8hnSlSiHIdIma+dA/ZUwpiYkvLc4VOwMK/YvB/4G9I/D\n",
"6A/AGE21FUmjDkO6lTBiMIdYX9hcCRN2Q10cXgD+AawmzJ76YBzG32d28BqFpkSCvOswzOxUM7vN\n",
"zOaZ2Yxct0e6opLxsGAWPDAFXr0R+hVD343Q36GesET6T4EaAxq0PLpIkLc5DDPrC/zE3b+0l8eU\n",
"w5CsCIV9dW9DwmDKb2FHCUww+AzwIPDkQ/Du6cplSFdQEDkMM7vTzNab2avNjs80szfNbImZXd7s\n",
"ZVcAv+yM9kn35V55rfvS+dBjPLx1PyxbAosd7nG4BRh6Ckx4TWEpkU4aYZjZMcBOYK67T42OxQkT\n",
"4acTAseLgXMJcxyvBZ5w94UtnE8jDOkQZiPmQ+lJ8IkSOL0oWhJ9IzRsh6pxGmlIISuIEYa7Pwts\n",
"aXb4SGCpuy9393pgHnAq8FXgBOBMM/tKZ7RPJKX4t1BeDC8WwQOENacGl8PJY2DkY7lunUguZbKn\n",
"d0cZRlijIWkVcJS7Xwr8orUXN1t5cZG7L8pq66RbSdVnfKII+hTDywl4PhaWDzm6LCyLPm262dgG\n",
"2HWP+7oLct1mkdZEK3pPy9b5ctlhtGto7+6zs9QOEUJ9RtlmiF8foqcbgCMdRlv4XvMEcEAcJjTA\n",
"k0eE9aZGXQ3Lv6swleSr6Iv0ouR9M7uyPefLZYexmrBkaNJwwigjI9EIQyMLyQp3d7NxUX3Gxkro\n",
"Mx6ogT/2DtHUxcDJQEURnHQwLKiF6Y3w1GJgfk4bL9KKbI00Om1arZmNAh5JS3oXEZLeJwBrCJVT\n",
"57r7GxmcS0lvybrUFNt3HoRhr0LvQ6C3wxQLK9omgBGEfTTGAXOAC7bDi6u0j4YUgoJIepvZPYRg\n",
"8AQzW2lms9y9gZDgfhyoBO7NpLNIO6d23JOsSk6xDSGmiruh9mE4NAFnAmOAEsKufQcCA6JXrSiH\n",
"mtoQ0hLJT9pxTyMM6WBmY38EE74FKx36GjQAuwidxxjgdUJV+DaHFWe6v6vQlOQ17bgn0kHMJj0G\n",
"ta9AXR8YeBEkYtAI9CRsvFQOjAeGAG82wrvvwY7ZCk1JviqIkFRHUEhKOpr7Gye7L7scShfAyN1w\n",
"RD18gLAUeilQDfQCrgfWxsEHgB+TyzaL7I1CUhphSCcJyfDa/jDjK/BSHA4qh6rtEO8NHwJGASuA\n",
"BUtg2cGaZiv5SiEpkU6QmkFVfz70OBaG94Cq8jAz/WjgNuBDDrsSKuyTfNVtOwzg+6gOQzpZKNg7\n",
"6GYY8AWoKA4bLw0mLCHyAjCgERae5b5MCXDJG2l1GFd2yw5DIwzJFbOxZ8DUuVBdCkvjYEAfYCbw\n",
"A+DjwLpaqPma+1olwCVvdNukt0julI4PGy+N3gXldWG21EhCYd8TwCDgBIMeJ4URiUjXULAjDBSS\n",
"khxquvHSiHugrhg2E+oyTgaOAR4GFm6GXf+pqbaSSwpJKSQleSB0HDu+CT37hQpwYmHpkBmE8NRx\n",
"O+G9Kth+A/QYrcUKJZcUkhLJIffKa2HVQKhZCFtiYcmQYYS1NS8GJldA/XYo2wQzL4axpyVfa2Zm\n",
"Nvoaha2kUGiEIZIFZmN+BAd9C7YSCvrKgcMJHccG4GCHuw2O2wzvrYMdN0DPTTDjTlgwK2wTK9Kx\n",
"uu0IQ5Xekl9Kp8Lyf0CNh0UKy4CXgIOA04FeFhLih/SDmpVhs6ZpV8NNvWHaNWYTX9e+4dJRVOmt\n",
"EYbkkfBh3+sqGFMEm/qHPEY5YcHCXsB2YCpwJ3DBNnhhOxxTDnf0h69UwcLL4J35ym9IR+q2IwyR\n",
"/LJ2DjRcAsWNUAvUE/IZI4A4YaThwHXAKxXQMA/i5fDZSrB+4A6jrlY+Q/KZRhgiWWI2/Gbo9xWo\n",
"SEBFHNYBPYBiQm5jQtrPpxphciO8dm4o/IudBid8WvkM6UjddmkQdRiSb8wmfQfq+sP0s2HdiLBf\n",
"hhFGGLsJeY2RNN2xb1oNrCuBw3fD3eVw0dvwlwbYpmm4knUKSYnkCfc3rgX7e9gXfPN66FcPkzys\n",
"NVVGWBL9PcL29QMInUlFMQxxKO8ZdS49oOF7e5uGK5JrBTvCQJXekoea7gs+7mkY8HHYHg+hqV5A\n",
"X8ISIk7Y0r4cmAIcAKxx2AJUbYVjNsCcCakRh/YMl/2nSm+FpCTPhc6j4RDgMOg7CdygJgEjYrCr\n",
"ATwG/WJhJtVwYPdGeLoOSp6C44+FW0doBpVkk0JSInlr62aIHQYT+kLcYLfDsFjYtW+bQU8PRX4l\n",
"hBHHa/1g7FBorAhhrbOiGVS4OgvJBxphiHSQMEV2zBkwfg78e1+4cQMMLIU7esPRO2BTBZRZ2CO8\n",
"mpAQHwMscqhugB33QvmDwKWw7Hh1GtJeGmGI5KnwAW8Oo2NwZ2Wouyguho+tga0VMJlQpxEjhKUG\n",
"EfbUONrAon02zODEw5T8lnygEYZIB2qaBJ8wNxTo1T8MRfeBxeAQwoyphYTd+2YCVwGHNkJ9Axy5\n",
"FX49KH0NKiW/ZX9phCGSx9wrr3VfGiWsdzwLsQ/DmBuhPBbqM14FXiTMoDoIWE9Yc+qjcaj/E5TV\n",
"wuPAxP5Qtz1UlIvkhkYYIp0k5DSGLoJex8ABFmozKgjTbNcT8hjFwKHAHcDkOuhZAlMScE4MHgIW\n",
"rYSdP0iOMsI5R12tAj/JRLcdYWi1Wik04QO99OfQuyGEoXYDbwIrgMboXy/CyGM60KsENju8Fguj\n",
"jluBw4dCr9mplW3Hnq4CP2mNVqvVCEMKTPiQ730VDOgJvSvCAoVxYMlOOMagthxeIIw8jgI2AssJ\n",
"I5CPALcBxzusWgU7n4E+h8HHi1TgJ5nqtiMMkcKzdg7UXwKNcTgWGFUFSx+C+NuwpgT+6lBEqMl4\n",
"jjAKOYHQYcSBc4CDDfwlWPd5qHsrLCViQKwH1L6lHId0JHUYIp0kNc32A8A/EmADgbsgVgl1Cejn\n",
"kPDQAQwgJMT/ROgsnifUa9wMHHUKjF8BU08BBoYCv/cGwIkzFZqSjqSQlEgniUJS/w3jGuH3Q+Ej\n",
"W2FjL+jtMLYINgFrCR1ECdHihNG/Y4FlhLzHawk4dB18dCjcvhW2l8ERu2FuH4WmZF8UkhIpGGvn\n",
"QP1XYVhD+NP74HbgZzBiC4wHPkwYZYwn5DF2EzqPkcCThJVuewK9E+D94DGg1KDuF1Bk8GPA3g9N\n",
"mY2+RhsySTapwxDpJKmQVHKdqFi/6H45bEnAqwnoa/APDxstHQzsItRhrCYU9t0CeBFUlYWzTuoD\n",
"dixs6w3vOCwdFEJTY67T7CnJNoWkRDpR08rvsadB8UWQ2Aj1D0LxadBwEFgf6DkFKA6ji3UACTgg\n",
"BkvDTfoCowhLpMei204YlfQADmyEO+Jw4Xp4YZNCVAJdbMc9MxsN/BfQx90/u4/nqcOQLsts3Bkw\n",
"7LfQrzTUZpQB7wKHAS9HzxpG2EujjlDwNxU4DpifgNNj8FAj3BKHY7dB1Xqw+bBCxX3dXJfKYbj7\n",
"u+7+pVy3QyS3SsaHD/k3dsAghw8C24E/A4MdaggdSBnwIUKCfAvwM4d4DH60EYjDSQ5FfeCwCXDi\n",
"ZQpPSXt1eIdhZnea2Xoze7XZ8Zlm9qaZLTGzyzu6HSKFwr3yWlg+CnZXwkuJMKr4GVBWD7Uechlb\n",
"HV4i/FsFLK+Gd2vh0V2wogIed3jHQkdzMLChBA7/ndmErakqcZG26YwRxq8IS3C+z8ziwC+j45OB\n",
"c81sUidBB5S5AAAVAUlEQVS0RaQghNBR0Y9hZG3YGzwGjCyCUQ1QtxFGW8hvbErA4cCmOEw2ODkG\n",
"/ipMsTDbagTwT8K+4mtroeGLKu6T/dXhHYa7P0sYL6c7Eljq7svdvR6YB5xqZv3N7Bbggxp1iJSO\n",
"h5efhZfiMK8Bqg2eLIH6AaFm4y2gOBZGII2lsLEUFpVB+RGhYvxdwlpVQ4GbgHGlUHIPDJ6bu99J\n",
"CllRjt53GLAy7f4q4Ch33wz8WyYnaLaQ1iJ3X5S11onkAffKa8PAe9srUDQLvj4AriRstNQbeJ2w\n",
"JPo44G+E3foOJEzDXUlIim9PhLyGEWo6Gp4Ly4pIdxAt0DotW+fLVYfR7pka7j47C+0QyXPbNkPJ\n",
"t+Av/eEpwp/ONsIOfQ48AywiVIMfBNxN6Bw+CtwOTIuFQMKZ0bRc/7tmSnUf0RfpRcn7ZnZle86X\n",
"qw5jNTA87f5wwigjY9EIQyML6bJClfbI0VDyGBz4STigT1gepJhQd7GEUI9RS5h+uwMYAlQ5xC10\n",
"HHXAgipYNgpGPgexM8xGJsJjmmbbXWRrpNEpdRhmNgp4xN2nRveLCAHYE4A1hDWdz3X3NzI8n+ow\n",
"pMsL9Rgz7oQnboXhXwt1GcsIoScnVIP3i372JTX6gDAzalMt9C+FJ38E9gJMmQseD48PTsDC892X\n",
"zu/s30tyJ+8L98zsHkJF0QGExXC+5+6/MrOTgf8hBFbvcPdr2nBOdRjSZUWLFH497HVx3AS4rhGq\n",
"Y0C0S18dYZRRRthwqYowwigHjoluLwFWJKChHorjoVYjVhRCVzMI+4Z/wGH3Lqj+D/e1t6XeX7v4\n",
"dVXt/ezs8JCUu5/bwvHHCKun7ReFpKTrWjsHyjZD/Ho4H7h/c9jSNTYgbKo0kZD0XkHYhe8TCegd\n",
"CxXfsejYqQmwBPQthUQ9JGqgT+8QiqoGfgRMMBjYA57c2PT9x54OMy6GBYsBjUC6gIIKSWWbRhjS\n",
"1aXCUZtWQd0oGGTw93oY3TvMhHqV0GmsdehpYZHCA4BSUutL9QVOIow6biPsG76GMKjvQyiD+iHw\n",
"OeDFbbDjEe3i17V1qaVB2kJ7ekvXVjIeFsyC+6fAG/Ph6Qegdh28vhKeugs2rYclO6D6t1C+O3QO\n",
"2z0sPDhodyjUG04IT90NvOnw3kooqoQ+iVDQ54SFDBcnoO6pMN229kpIDA5tWDII6r8Xlko303Lp\n",
"hUt7emuEIRKNRKbMJfQUsbD21DMeQlRDCZ3CdkKHMrABFj4KA04Ns6kGE+abjAQGNMLTZ4F/BE78\n",
"Fry5EQ4eAAt+5P7O5akRz4JZSpQXrrxPencEdRgi7yfHr4KhJVDbF9Y4mIWQUx2hsygmtRT6akKF\n",
"eAkhj2HRYzOBScD1hP05+hiMrYPbS+D43bDW4Mit8JtBClMVtrxPencUJb1FksnxcdfDaX3hgQS8\n",
"F09t7bqJUKPRj7Cu1BeBWxx6Wxh9bCIk0Z2QXJ9XC4N3wJkD4KHoPOPfg6r7oOysqFq8BzRcBms1\n",
"yigg2Up6F2wOw91nq7OQ7qzpDn7XbQ/TZ9+pDX/WuwijjOSXyU3AZUDMQoHfVuBFwnM3A+cAG4oh\n",
"3hd+tBIa4/Dh7fDMQeBpuwTSDxrP6/RfVtrF3RdlY3WMgu0wRARCcvzJW6GsBBY8BF4PlTtgTWNI\n",
"gq9JwKoELKwOBX+VDeGxtxug0eENQnnU4s1hf/D1wOod8A4Qr4BPxKDoglQC/slb4MRTtLdG96Qc\n",
"hkiBalrgN2cCTF8Py/pHOYiiEI5a4mFUcRCpkUUdUE8o9BtBSIrXEQoBNxC2ee0JfByYA3wJeBoo\n",
"qoFjV2rKbeFSDkNhKem20gv8DBhbC+/eACMuhPEDwwILD0SJcANOA24h5Dc2EjqPUcBnCMV+EwmV\n",
"489Hj8VJrXLrD0P93an3Ui6jkCiHoRyGdHOpHIb1hc9sBOsHONgA2JKAn0ZLm79QHT70fxy9spow\n",
"ooDw4f/d8DI2A494mFmVzH+cTtgaNuFg5wF94YhqeGtQODbq6lCjMeqa8C9p9DXNjzdvv2o7Ok+2\n",
"chgFO8IQEUjlMKZ/BRbcDEUXwhaDVxdD8W7o+VGoi4dRAw4bLPzZ1xGK9v5O6CCqCCGrmMNru6C0\n",
"HP7XYUMNnFgOC06ECTF48hX4wJGhpmPV12DGh+CJOEy9JFSjL1wMWFhaZI/jzUYjWoKk0CiHIVKg\n",
"muYw1kwIK9l+jBB5+BmhQ6gm5CQShIBCsrq7NDpLI6EDSa/VSOY4Ggi5j1JgLaFDqQBGE/Iju4Gd\n",
"0e2TiWo5HPomYHcc6hxmWlh+5Pw6eHET7Jgd3jc996J8SGdRDkNhKem20nMYjwBHVUO8Z6ip+B3Q\n",
"pwbGl4VRxEZCJ9CT8CHfQKjwrmPPWo1bHQ62EKJKhqV+R+hQXoyedxww3+E0g1sT4LHwvvftgAPr\n",
"4IwB4Twe5U/KtkP9pamcR3ruRfmQjqYchnIY0s01rcM4txJixeFP+qwobFBaDI9sDN8LGwmPxQn3\n",
"jVRoKvmFcwthx4GYwTaHlxPh+dd7eO7DteG5WwkjmLjBjzdCLAabHc5NQKwUisrh+pWp4+ckIFYO\n",
"MU9KtfusymTuRUupd5xs5TAUkhIpYGaTvwN1b8M7D8LBq6BhM7zzARj/GtAH4q9C4wiIDQPKwjd+\n",
"DCwOjQmIJaJNlRLQ8CYUDQ2dgj8KsROgvh6K34D6/lA8GRJVwEvACPDhUPQ2JMrAq6DxISj+L0i8\n",
"DrFK8Jmp4/HPQNHr7pXX7dnusadByfjkY9JxtJaUSDeWvtlRONJ046Omj4+4GhLHgY0AqsKIY8XH\n",
"4KCrIXYJJG6E2AXgdxFiTkS5jynAa6nbsdfC60auhBXDYeRfgWdgxXdh1F9h+ceajxai7Wb/Cv5M\n",
"s9+A5Fax+7txkzZ8yly3zWGICDSbaWR7zjpKPv5EPGzzWl0aCvYYFrZxXTAfKj4JY4pg9bdhWAy2\n",
"fBssCldvBvoDHJ26ffDRsOAtmDEs/Dx0PAz4MCycBCceDU9cC1zetJ1jroNDj4bGwwk9T2RwIjWD\n",
"an9nTWm2VWfRCEOkAO25jetP62AycHdJmHW0sAJKDA6KwbpBoZo7ika9X+H9BiFH0UDqu2Nj9LOB\n",
"VOFe8nYFYZYVhOR5ctZUWXT7COB24IuN8FwDbLs/PLfH2VBSFHIjScmtYn8IfKIR1jkcuaktK+Lu\n",
"Wemu2Vat6bYjDM2Sku5tj21ct0GZhaK9eA+IfQ3qDMZeHxYdvDYBNbHQWcQIM54uAf6L0HlsIezY\n",
"l5wumyAkt6NaQLZGj08gNUAYBSym6ZaxRqjrqP85rItGGaPXw8HfgF5pH1QWndeAsVug6tdtXxG3\n",
"eaW7Zlu1RLOkNEtKurGmM43OrgyzkOLlqVlH5hD3sPrsT1dCUSz8uaf/yf+ctA94UvtoxAjfJdNn\n",
"VcWi58YIOe8i4NHo/ta0259Nnih9RlQivH81qX+7CJ3UOR7a3fZZU5ptlTnNklJISrq5pjONJswN\n",
"y5AvuTA56wiw8HjRBODLwCDwOqAU6hNQZGEabKIOYjXQWBGmwtIIxMMaVA6QACsKt+u3QXGvsNJt\n",
"0RZIGHgtxOqgsScU/SzMqCqd6l75L6Gdkx4LM6lYCX4YMBhsKzRWga2MRgcDoX5OW2dNabZV22iW\n",
"lIiIZKS9n50FG5ISEZHOVbBJbxFpqnk9Qms1GqnXjLw6RKHsghAmih8G/jIwIoSLGqvADgvhrHgJ\n",
"NL4MicNCJfmKIhjaEDZuKioCXgihq9gIaLwL7BKw7WBV0PhMuB/bDtzVtPUO2HFgUT0HhHZBuJ9e\n",
"6wHp9zP9XaX9FJIS6SLMxp0BM+6EBbPcl85Pv0+o0Xj/saavmTIX1pRAeVHYfe9AQlIawqyq9wjf\n",
"LRuix94jJMmPB55IQFksdDhDotfsAoYByxJQGs3M6pt2fxiQaIxOGNkWg37FMLAOnjo3tHfK3LDS\n",
"7ZNPwKGnwoDoMf8IHPqt5P1Mf1dRDkOk29v7znur+8KRW2HGoD1rNP7SANtehh7HQ+NgIJaqxfDo\n",
"X4xwLDn9NdlhONCHUHeRfG5x9LwEqb00iM5RTJiqC1AS/Uv/062N7vcFTiKsePsDQm1HOWEHwApg\n",
"JrANeCx67kyiGg6Pajg2tPy7qi4jSXUYmlor3d7edt5b/otQ17C3Go2Gy2DdfBh9Bky9CbYMDB/u\n",
"m4ABhGmvBvQgfGDHCR1Df8Ke3wlgOvACqU5lcNSWGmAQsIrw8VJB2MVvJaHzGBodS0pu3FQW3T4f\n",
"mFcNsQaY3Du8dnH02C+AY2vhgOKwOq4Bo3dA1W37/l1Vl6E6DNVhiAB7q0eIRdV2LdVoJGsVYg7F\n",
"5WERwmJS9RdxUqODIlKPlZDaR6OM0FmUkKrXSFaGF5MapSRXxU0W6cUIIatkPUYNqRHIZuBcoKg4\n",
"TPfdmoA/JsJrtgDnAUXxMPV3C3AOUNxj3/UoqssA1WEoJCWSZs96hOKLUnUNe9ZouFdeF17TeAjY\n",
"8eA9wXqF0YPB+18m0//MEqnD1HlYeiT9MSd0Go1APDqRJyDRAPGop2ncHZ5gZUAt2DqwvqEWpPHN\n",
"8Jzi8cB6qPshlFwBiSHAAmhYCyVfAd8E9d8CjoLi6RB7r7XfNftXvDAphyEiIhlRHYaIiHQKdRgi\n",
"IpIRdRgiIpIRdRgiIpKRvKrDMLNy4CbCPLtF7v7/ctwkERGJ5NsI43TgPnf/MvDpXDemu4iKeiQL\n",
"dC2zS9czv3T4CMPM7gROAd5z96lpx2cC/0OYuH27u19HWGTmn9FTGpufSzrMNGBRjtvQVUwjT65l\n",
"0wX5mv5MLdg38q/gz0TLfBwHNgK8Kvy0qvAYx4U6i/gUaLwRGi+BknKo+RH0uBwSz4NNgcbtwODw\n",
"J127DoqGhqLAWCwUCVIfWtYAFJWE2gsrDoV33hD23LAGaKwLBXiJeqgoMRuaiGpAYhBLQGN1KM5r\n",
"2AXxCt5fi6QOKC0B2wkN2yE2BOL1YSFFHwHeG6wE4nXgN4bFDtN/v6IpsKIPjNgWfs/YJRB7DVZ8\n",
"DEb8NXwkJZ+TvG5G88UR97y2kHoetLRA5P4WGEbvtRJWDE+eIxvn3ZvOCEn9ilDTPzd5wMziwC8J\n",
"6wusBhab2e8J6wkMB14hx6MfM5u2v5Xkmb62teft6/GWHtvb8ebH2vO77a9CvJ7tOdbRMnvPsafD\n",
"jIvhiTic+JXwc/LFEF8MzIcx18GhR0Pj4WGdpurisH7TrmHhZ/0wKDoifJBvBsYAy74dtno9BHj+\n",
"chhrsPnoUAG+vVfqvYuHhSrw+njoQIoNdpWG8+4mLDtSXxpu9wIao+ftjociv+Lo8Xqgdzy11lVp\n",
"HGp6hUrzXb2iyvOoKLAmOldpL9jaK5zjwFLYdXSIcifPMaYUtnwb+sVgyxGwNdoc6mjgie1waEX4\n",
"PfvH4OCjYcHzMPLIsHTK0cCC1XDokHDdGhMQnxSu44APw1N7ubYkos5mMWFhxIthQfS85H+jBYvN\n",
"bHOmf9NNj495EGYMgwXzzeyGcCx53nurgav2/f9J5jr8Q9ndnyXU8ac7Eljq7svdvR6YB5wKzAfO\n",
"MLObgN93dNtaMa0TXtva8/b1eEuP7e1482OtvW9HaM97Zvra1p63r8f39lh7jnW0Ft/TbOiXzSa+\n",
"DiNvhJW9Ycw3ws/jLoPDyqHibrMxCSj6FvwDeLkYlhXDWuAdwgfjCuBVYElRuL0JeB7YEQsLD74E\n",
"7DRYQli9diWwk9DxrCJ8eG+Lfu4kfARsjH5WEzqgndHPLYRzbo7Olby9g9ChbEs738bo+IboPFui\n",
"524ljDDei95/N7AdeDu6vzE6xw7C99GqGLwc/X6rouNPAHUV4Xerj4X2/QnYfSSsIXQ2TwHFQ8Lv\n",
"u7EY/lYKfU4N+5rfWgIVD5iN8XBt3wDWFMMhpVBcChW/g6PmwU29YeRNZhN3w0dvDPenXQP97gsL\n",
"SWb637rnXWYTEzDt03AzMO1U6Pu02YRqmHZ1OO9BXzeb+HoL522zTqn0NrNRwCPJkJSZnQmc5O4X\n",
"RffPB45y90szPF/hlaeLiOSBQlyttl0f+FoWRESk8+UqT7CakKtIGk4YF4qISJ7KVYfxIjDezEaZ\n",
"WQlwNrnPWYiIyD50eIdhZvcAzwETzGylmc1y9wbgq8DjQCVwr7u/0dFtERGR/VeQy5uLiEjny7dK\n",
"7/1iZuVm9hszu83Mzst1ewqZmY02s9vN7P5ct6UrMLNTo/8v55nZjFy3p9CZ2UQzu9nM7jOzL+a6\n",
"PYUu+uxcbGanZPT8rjDCMLMLgM3u/qiZzXP3c3LdpkJnZve7+2dz3Y6uwsz6Aj9x9y/lui1dgZnF\n",
"gHnuflau21LIzOz7hCKUN9z90daen7cjDDO708zWm9mrzY7PNLM3zWyJmV0eHR5GqKQBLSmyhzZe\n",
"S2nFfl7PKwirG0gzbb2eZvYp4FFCwa+kacu1jEa8lYQqyIzkbYdBWFJkZvqBtCVFZgKTgXPNbBKp\n",
"JUUgv3+nXGnLtZTWZXw9LbgOeMzd/9H5TS0Ibfr/090fcfeTgQs7u6EFoC3X8jjgI8B5wEVh/al9\n",
"y6vlzdO5+7NRhXi695cUATCz5JIiPwd+GcXhND23mbZcSzNbD1wNfNDMLo8WhZQ0bfx/czpwAtDb\n",
"zMa5+62d2NSC0Mb/Pw8krGrdA3i6E5tZENpyLd39iuj+hcCGTBYpzNsOowXpoScII4uj3L0a+EJu\n",
"mlSwWrqWm4F/y02TClpL1/NSwuKb0jYtXc9ngGdy06SCtddrmbzj7r/J9ESFFr4p/Ax9/tC1zC5d\n",
"z+zS9cyerF3LQuswtKRI9uhaZpeuZ3bpemZP1q5loXUYWlIke3Qts0vXM7t0PbMna9cybzsMLSmS\n",
"PbqW2aXrmV26ntnT0deySxTuiYhIx8vbEYaIiOQXdRgiIpIRdRgiIpIRdRgiIpIRdRgiIpIRdRgi\n",
"IpIRdRgiIpIRdRgiIpIRdRgiIpIRdRgiWWBmR5jZP82sNNon+TUzm5zrdolkk5YGEckSM7uKsLFP\n",
"GbBSm09JV6MOQyRLzKyYsDJoDXB0JjuYiRQShaREsmcAUA5UEEYZIl2KRhgiWWJmvwf+HzAGGBJt\n",
"zyrSZRTant4iecnMPg/Uuvs8M4sBz5nZNHdflOOmiWSNRhgiIpIR5TBERCQj6jBERCQj6jBERCQj\n",
"6jBERCQj6jBERCQj6jBERCQj6jBERCQj6jBERCQj/x8Yf0W0AoPgnQAAAABJRU5ErkJggg==\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# code to analyze directed graphs\n",
"file = open(\"twitter.txt\")\n",
"lines = file.readlines()\n",
"edges = set()\n",
"nodes_indegree = {}\n",
"nodes_outdegree = {}\n",
"\n",
"# construct the indegree info and edges\n",
"# very similar to what we did for directed graphs\n",
"for line in lines:\n",
" data = line.split()\n",
" source = int(data[0])\n",
" endpoint = int(data[1])\n",
" # add the edge\n",
" edges.add((source, endpoint))\n",
" # update the count for the number of times we've seen each node\n",
" nodes_indegree[source] = nodes_indegree.get(source, -1) + 1\n",
" nodes_outdegree[endpoint] = nodes_outdegree.get(endpoint, -1) + 1\n",
"\n",
"%matplotlib inline\n",
"from pylab import *\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# now show this to the viewer\n",
"v_indegree = nodes_indegree.values()\n",
"v_outdegree = nodes_outdegree.values()\n",
"noRep_indegree = list(set(v_indegree))\n",
"noRep_outdegree = list(set(v_outdegree))\n",
"noRep_indegree.sort()\n",
"noRep_outdegree.sort()\n",
"\n",
"x_indegree = []\n",
"y_indegree = []\n",
"x_outdegree = []\n",
"y_outdegree = []\n",
"\n",
"for count in noRep_indegree:\n",
" f = v_indegree.count(count)\n",
" x_indegree.append(count)\n",
" y_indegree.append(f)\n",
" \n",
"for count in noRep_outdegree:\n",
" f = v_outdegree.count(count)\n",
" x_outdegree.append(count)\n",
" y_outdegree.append(f)\n",
" \n",
"figure()\n",
"loglog(x_indegree, y_indegree, '*')\n",
"xlabel('x')\n",
"ylabel('y')\n",
"title('indegree distribution')\n",
"show() \n",
"\n",
"figure()\n",
"loglog(x_outdegree, y_outdegree, '*')\n",
"xlabel('x')\n",
"ylabel('y')\n",
"title('outdegree distribution')\n",
"show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TODO for this byte\n",
"==============\n",
"* Choose a graph data set from http://snap.stanford.edu/data/index.html \n",
"* Use the code given above and make sure everything works\n",
"* Now explore the way in which k impacts the results. Experiment with different values of k. How does the number of connected components change as you increase k? How does the number of nodes in a the connected components change as you increase k? \n",
"* Can you create a chart that shows the relationship between k and the number of connected components? Chart at least two different data sets and try to write something about how they are different. If you have trouble doing this in code, do it on paper and include an image of the result in your hand in\n",
"* [optional] Can you make a version of k-core that works for directed graphs? For directed graphs the node degree is defined to be the in-degree + out-degree."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}