From d20c44fadfa9105ab57734096989f55015edf8be Mon Sep 17 00:00:00 2001 From: Marvin Bertin Date: Tue, 15 Mar 2016 20:16:26 -0700 Subject: [PATCH] update This reverts commit e93aaa822da216bfeeaafe7d8d3d462238e05bf9. --- Amazon_Network_EDA.ipynb | 1663 ------------------------------------- Load Amazon Data.ipynb | 196 ----- Load Netflix data.ipynb | 607 -------------- MovieRatingNorm.scala | 43 - RunSparkNotebookAWS.txt | 11 - UnstackSparseMatrix.scala | 40 - exportEdges.scala | 15 - 7 files changed, 2575 deletions(-) delete mode 100644 Amazon_Network_EDA.ipynb delete mode 100644 Load Amazon Data.ipynb delete mode 100644 Load Netflix data.ipynb delete mode 100644 MovieRatingNorm.scala delete mode 100644 RunSparkNotebookAWS.txt delete mode 100644 UnstackSparseMatrix.scala delete mode 100644 exportEdges.scala diff --git a/Amazon_Network_EDA.ipynb b/Amazon_Network_EDA.ipynb deleted file mode 100644 index bf9002a..0000000 --- a/Amazon_Network_EDA.ipynb +++ /dev/null @@ -1,1663 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Amazon Network Data EDA\n", - "\n", - "The dataset from *[Stanford Network Analysis Project.](https://snap.stanford.edu/data/index.html)*\n", - "\n", - "## Data Information\n", - "Network was collected by crawling Amazon website. It is based on *Customers Who Bought This Item Also Bought* feature of the Amazon website. If a product i is frequently co-purchased with product j, the graph contains a directed edge from i to j.\n", - "\n", - "## EDA Dataset\n", - "For this Exploratory Data Analysis only a [subset](https://snap.stanford.edu/data/amazon0302.html) of the all Amazon Network dataset was taken (data from March 02 2003). \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import graphlab as gl\n", - "gl.canvas.set_target('ipynb')\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Load Product Co-Purchased Data into Sgraph" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PROGRESS: Finished parsing file /Users/marvinbertin/Desktop/data/amazon0302.txt.gz\n", - "PROGRESS: Parsing completed. Parsed 1234877 lines in 0.527384 secs.\n" - ] - } - ], - "source": [ - "# Load graph\n", - "graph = gl.load_graph('data/amazon0302.txt.gz', 'snap')\n", - "# num_edges: 1234877\n", - "# num_vertices: 262111" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "SGraph({'num_edges': 1234877, 'num_vertices': 262111})\n", - "Vertex Fields:['__id']\n", - "Edge Fields:['__src_id', '__dst_id']" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "graph" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Visualize Co-purchased Data of Product ID 1-5" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sgraph','View', {\"edges_labels\": null, \"selected_variable\": {\"name\": [\"subgraph\"], \"view_file\": \"sgraph\", \"view_component\": \"View\", \"view_params\": {\"elabel_hover\": false, \"vertex_positions\": null, \"h_offset\": 0.0, \"node_size\": 300, \"ecolor\": [0.37, 0.33, 0.33], \"elabel\": null, \"arrows\": true, \"ewidth\": 1, \"vlabel\": \"__id\", \"highlight_color\": [[0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498]], \"vcolor\": [0.522, 0.741, 0.0], \"vlabel_hover\": false, \"highlight\": {\"0\": [0.69, 0.0, 0.498], \"1\": [0.69, 0.0, 0.498], \"2\": [0.69, 0.0, 0.498], \"3\": [0.69, 0.0, 0.498], \"4\": [0.69, 0.0, 0.498], \"5\": [0.69, 0.0, 0.498]}, \"v_offset\": 0.03}, \"view_components\": [\"View\"], \"type\": \"SGraph\", \"descriptives_links\": {\"edges\": \"edges\", \"vertices\": \"vertices\"}, \"descriptives\": {\"edges\": 105, \"vertices\": 95}}, \"positions\": null, \"error_type\": 0, \"vertices\": [156436, 145964, 85411, 82048, 40345, 18779, 38208, 17791, 10, 5830, 20656, 73, 110, 7, 8, 5, 14957, 10045, 109, 65, 67, 63, 16, 241000, 39628, 145108, 18782, 69387, 7463, 2021, 18, 629, 98092, 39630, 608, 15, 0, 98094, 43614, 13805, 1722, 75, 13, 2, 9, 85475, 156435, 179438, 74, 6, 58286, 38209, 11928, 2555, 154, 4658, 38210, 12035, 3801, 12, 180, 14, 1723, 431, 258605, 3, 64, 19, 1, 101450, 29922, 98093, 39631, 69386, 69385, 30335, 282, 24572, 261985, 4034, 224407, 145109, 39629, 36996, 9762, 2772, 4, 630, 38211, 612, 66, 139, 17, 18781, 11], \"vertices_labels\": [156436, 145964, 85411, 82048, 40345, 18779, 38208, 17791, 10, 5830, 20656, 73, 110, 7, 8, 5, 14957, 10045, 109, 65, 67, 63, 16, 241000, 39628, 145108, 18782, 69387, 7463, 2021, 18, 629, 98092, 39630, 608, 15, 0, 98094, 43614, 13805, 1722, 75, 13, 2, 9, 85475, 156435, 179438, 74, 6, 58286, 38209, 11928, 2555, 154, 4658, 38210, 12035, 3801, 12, 180, 14, 1723, 431, 258605, 3, 64, 19, 1, 101450, 29922, 98093, 39631, 69386, 69385, 30335, 282, 24572, 261985, 4034, 224407, 145109, 39629, 36996, 9762, 2772, 4, 630, 38211, 612, 66, 139, 17, 18781, 11], \"edges\": [[18779, 5], [7, 5], [10, 5], [17791, 5], [5, 7], [145964, 5], [5, 8], [5, 10], [85411, 5], [38208, 5], [20656, 5], [82048, 5], [156436, 5], [40345, 5], [5, 6], [5, 9], [73, 4], [5830, 4], [110, 4], [18782, 5], [14957, 5], [39628, 5], [145108, 5], [109, 4], [10045, 4], [16, 4], [241000, 4], [69387, 5], [2021, 5], [7463, 5], [39630, 5], [98092, 5], [0, 5], [608, 5], [0, 2], [0, 3], [0, 1], [0, 4], [629, 4], [98094, 5], [13805, 5], [43614, 5], [2, 0], [2, 13], [2, 12], [2, 14], [1722, 4], [2, 11], [75, 4], [6, 5], [2555, 5], [179438, 5], [38209, 5], [156435, 5], [154, 5], [85475, 5], [58286, 5], [74, 4], [4658, 4], [11928, 4], [38210, 5], [258605, 5], [3, 65], [3, 63], [3, 67], [3, 64], [1723, 4], [180, 4], [12035, 4], [3, 66], [3801, 4], [431, 4], [30335, 5], [1, 5], [101450, 5], [261985, 5], [69385, 5], [69386, 5], [98093, 5], [29922, 5], [39631, 5], [24572, 5], [1, 15], [1, 0], [1, 2], [4034, 4], [1, 4], [19, 4], [282, 4], [18781, 5], [612, 5], [139, 5], [224407, 5], [2772, 5], [39629, 5], [4, 7], [145109, 5], [36996, 5], [38211, 5], [4, 16], [4, 18], [4, 19], [9762, 4], [4, 17], [630, 4]], \"ipython\": true, \"error_msg\": \"\"}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "subgraph = graph.get_neighborhood(ids=range(6), radius=1, full_subgraph=False)\n", - "subgraph.show(vlabel='__id',highlight= range(6), arrows=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Visualize Co-Purchased Data of Product ID 20-32" - ] - }, - { - "cell_type": "code", - "execution_count": 145, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sgraph','View', {\"edges_labels\": null, \"selected_variable\": {\"name\": [\"subgraph\"], \"view_file\": \"sgraph\", \"view_component\": \"View\", \"view_params\": {\"elabel_hover\": false, \"vertex_positions\": null, \"h_offset\": 0.0, \"node_size\": 140, \"ecolor\": [0.37, 0.33, 0.33], \"elabel\": null, \"arrows\": true, \"ewidth\": 0.3, \"vlabel\": \"__id\", \"highlight_color\": [[0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498]], \"vcolor\": [0.522, 0.741, 0.0], \"vlabel_hover\": true, \"highlight\": {\"32\": [0.69, 0.0, 0.498], \"20\": [0.69, 0.0, 0.498], \"21\": [0.69, 0.0, 0.498], \"22\": [0.69, 0.0, 0.498], \"23\": [0.69, 0.0, 0.498], \"24\": [0.69, 0.0, 0.498], \"25\": [0.69, 0.0, 0.498], \"26\": [0.69, 0.0, 0.498], \"27\": [0.69, 0.0, 0.498], \"28\": [0.69, 0.0, 0.498], \"29\": [0.69, 0.0, 0.498], \"30\": [0.69, 0.0, 0.498], \"31\": [0.69, 0.0, 0.498]}, \"v_offset\": 0.03}, \"view_components\": [\"View\"], \"type\": \"SGraph\", \"descriptives_links\": {\"edges\": \"edges\", \"vertices\": \"vertices\"}, \"descriptives\": {\"edges\": 557, \"vertices\": 462}}, \"positions\": null, \"error_type\": 0, \"vertices\": [240378, 125295, 107440, 92732, 168856, 88166, 78269, 76967, 68171, 54555, 48145, 60956, 45715, 12270, 42919, 29, 36702, 1706, 56108, 33483, 13229, 30528, 20009, 18495, 13630, 61065, 11462, 15091, 834, 7340, 7161, 7975, 5747, 64221, 80139, 615, 27, 1683, 55104, 172975, 765, 1035, 15121, 1838, 763, 15531, 53940, 11185, 268, 196, 8, 50, 7, 50011, 43535, 32163, 47, 1419, 29370, 29665, 27520, 27518, 24916, 22672, 22632, 19903, 14602, 14402, 12465, 26605, 9423, 7471, 7082, 3502, 2852, 2793, 13429, 1490, 1364, 7073, 1246, 1164, 402, 367, 38303, 46140, 884, 10056, 265, 14957, 202, 149, 21505, 53735, 444, 118, 451, 76, 46048, 67, 63, 294, 34, 1237, 30, 202265, 23, 2599, 121436, 250319, 840, 15532, 9196, 149450, 247467, 30418, 28337, 18575, 233080, 193187, 49, 33401, 29903, 220211, 110365, 23003, 56645, 58, 66237, 473, 30803, 45101, 89, 21, 37001, 98254, 31224, 224348, 222970, 207864, 205507, 174280, 95421, 79289, 77571, 74070, 54611, 51922, 80668, 50485, 47494, 36535, 1394, 31450, 10873, 24362, 34783, 18468, 17442, 322, 143, 17441, 5392, 28391, 16239, 6505, 5452, 14027, 4554, 49089, 35861, 219646, 65179, 4687, 194079, 4101, 3022, 20814, 2600, 168, 145, 368, 930, 2220, 445, 43, 215396, 40, 305, 183, 35363, 83, 1699, 103, 219848, 78, 52184, 146, 18, 20882, 38, 37, 242413, 234297, 215004, 207429, 55116, 45796, 41826, 73384, 129618, 39889, 99651, 14095, 3639, 37282, 36727, 28389, 27706, 26047, 47615, 33409, 23655, 20095, 19871, 46, 7083, 119263, 70282, 2851, 837, 2824, 2078, 1436, 3723, 2662, 1682, 12464, 1491, 59, 148, 22189, 26, 31, 88, 86, 107106, 51884, 23004, 48, 443, 1363, 96515, 13, 221214, 206959, 190837, 129771, 117653, 87579, 35371, 34667, 133798, 34562, 9711, 31741, 28, 25436, 309, 16588, 75671, 14134, 11538, 10028, 9285, 30106, 7622, 31835, 3016, 1204, 877, 269, 764, 1707, 556, 82272, 111, 455, 50517, 4003, 10378, 9714, 1141, 267, 10458, 237, 154, 21094, 31510, 9, 51, 32, 24327, 917, 156, 481, 212772, 6, 218508, 96968, 79355, 68991, 51341, 40172, 36226, 32710, 29473, 29093, 23520, 19717, 11765, 11763, 9962, 7910, 5415, 3464, 3438, 3038, 2570, 5455, 2658, 2572, 2421, 303, 13405, 6503, 182, 247223, 51046, 3801, 171, 32128, 1999, 25, 85, 65445, 98, 51652, 45, 80, 54186, 14, 220248, 143543, 111622, 77591, 75448, 68749, 183428, 48367, 64263, 20, 45767, 45704, 164, 63713, 34264, 32976, 25867, 56122, 26321, 17758, 7552, 142, 4029, 2664, 81, 1255, 2333, 40311, 169, 103521, 77301, 147, 141, 29878, 144, 42, 199875, 82, 219647, 79, 2056, 13786, 5453, 55919, 232, 210, 207865, 7635, 41, 13904, 10954, 3549, 386, 46387, 39, 252823, 242052, 260449, 152335, 112318, 205508, 16722, 111094, 112, 80667, 90514, 53606, 77, 42656, 41719, 18576, 86639, 14847, 18563, 72136, 16782, 74593, 14425, 11110, 13404, 8080, 201, 31632, 24, 2721, 2853, 157, 44864, 1667, 251697, 17, 603, 1489, 346, 210252, 84, 266, 57, 67469, 86121, 62078, 54345, 44, 30417, 9712, 150, 56179, 22, 82273, 11], \"vertices_labels\": [240378, 125295, 107440, 92732, 168856, 88166, 78269, 76967, 68171, 54555, 48145, 60956, 45715, 12270, 42919, 29, 36702, 1706, 56108, 33483, 13229, 30528, 20009, 18495, 13630, 61065, 11462, 15091, 834, 7340, 7161, 7975, 5747, 64221, 80139, 615, 27, 1683, 55104, 172975, 765, 1035, 15121, 1838, 763, 15531, 53940, 11185, 268, 196, 8, 50, 7, 50011, 43535, 32163, 47, 1419, 29370, 29665, 27520, 27518, 24916, 22672, 22632, 19903, 14602, 14402, 12465, 26605, 9423, 7471, 7082, 3502, 2852, 2793, 13429, 1490, 1364, 7073, 1246, 1164, 402, 367, 38303, 46140, 884, 10056, 265, 14957, 202, 149, 21505, 53735, 444, 118, 451, 76, 46048, 67, 63, 294, 34, 1237, 30, 202265, 23, 2599, 121436, 250319, 840, 15532, 9196, 149450, 247467, 30418, 28337, 18575, 233080, 193187, 49, 33401, 29903, 220211, 110365, 23003, 56645, 58, 66237, 473, 30803, 45101, 89, 21, 37001, 98254, 31224, 224348, 222970, 207864, 205507, 174280, 95421, 79289, 77571, 74070, 54611, 51922, 80668, 50485, 47494, 36535, 1394, 31450, 10873, 24362, 34783, 18468, 17442, 322, 143, 17441, 5392, 28391, 16239, 6505, 5452, 14027, 4554, 49089, 35861, 219646, 65179, 4687, 194079, 4101, 3022, 20814, 2600, 168, 145, 368, 930, 2220, 445, 43, 215396, 40, 305, 183, 35363, 83, 1699, 103, 219848, 78, 52184, 146, 18, 20882, 38, 37, 242413, 234297, 215004, 207429, 55116, 45796, 41826, 73384, 129618, 39889, 99651, 14095, 3639, 37282, 36727, 28389, 27706, 26047, 47615, 33409, 23655, 20095, 19871, 46, 7083, 119263, 70282, 2851, 837, 2824, 2078, 1436, 3723, 2662, 1682, 12464, 1491, 59, 148, 22189, 26, 31, 88, 86, 107106, 51884, 23004, 48, 443, 1363, 96515, 13, 221214, 206959, 190837, 129771, 117653, 87579, 35371, 34667, 133798, 34562, 9711, 31741, 28, 25436, 309, 16588, 75671, 14134, 11538, 10028, 9285, 30106, 7622, 31835, 3016, 1204, 877, 269, 764, 1707, 556, 82272, 111, 455, 50517, 4003, 10378, 9714, 1141, 267, 10458, 237, 154, 21094, 31510, 9, 51, 32, 24327, 917, 156, 481, 212772, 6, 218508, 96968, 79355, 68991, 51341, 40172, 36226, 32710, 29473, 29093, 23520, 19717, 11765, 11763, 9962, 7910, 5415, 3464, 3438, 3038, 2570, 5455, 2658, 2572, 2421, 303, 13405, 6503, 182, 247223, 51046, 3801, 171, 32128, 1999, 25, 85, 65445, 98, 51652, 45, 80, 54186, 14, 220248, 143543, 111622, 77591, 75448, 68749, 183428, 48367, 64263, 20, 45767, 45704, 164, 63713, 34264, 32976, 25867, 56122, 26321, 17758, 7552, 142, 4029, 2664, 81, 1255, 2333, 40311, 169, 103521, 77301, 147, 141, 29878, 144, 42, 199875, 82, 219647, 79, 2056, 13786, 5453, 55919, 232, 210, 207865, 7635, 41, 13904, 10954, 3549, 386, 46387, 39, 252823, 242052, 260449, 152335, 112318, 205508, 16722, 111094, 112, 80667, 90514, 53606, 77, 42656, 41719, 18576, 86639, 14847, 18563, 72136, 16782, 74593, 14425, 11110, 13404, 8080, 201, 31632, 24, 2721, 2853, 157, 44864, 1667, 251697, 17, 603, 1489, 346, 210252, 84, 266, 57, 67469, 86121, 62078, 54345, 44, 30417, 9712, 150, 56179, 22, 82273, 11], \"edges\": [[36702, 29], [15121, 29], [7161, 29], [765, 29], [68171, 29], [20009, 27], [43535, 27], [1838, 27], [45715, 29], [50011, 27], [7975, 27], [834, 29], [88166, 29], [92732, 29], [763, 29], [76967, 30], [55104, 30], [8, 21], [50, 30], [60956, 21], [56108, 21], [42919, 21], [125295, 30], [8, 23], [53940, 21], [7, 30], [27, 76], [615, 30], [27, 21], [1706, 23], [48145, 21], [15531, 23], [1035, 21], [172975, 21], [13630, 21], [27, 78], [29, 145], [29, 143], [29, 146], [12270, 31], [27, 13], [1683, 26], [32163, 28], [196, 28], [15531, 28], [78269, 28], [18495, 32], [1419, 28], [61065, 28], [5747, 32], [47, 25], [30528, 25], [168856, 20], [29, 144], [29, 147], [33483, 20], [1706, 20], [11185, 20], [13229, 22], [240378, 22], [8, 24], [8, 22], [15091, 22], [7340, 22], [80139, 22], [27, 77], [107440, 22], [42919, 24], [11462, 22], [64221, 22], [54555, 22], [30, 8], [30, 50], [444, 29], [121436, 29], [13429, 27], [21505, 27], [250319, 29], [26605, 27], [23003, 27], [23, 8], [18575, 27], [2793, 23], [30, 49], [451, 23], [473, 23], [1237, 30], [30803, 23], [98254, 21], [9423, 23], [367, 30], [38303, 21], [193187, 23], [294, 30], [22632, 21], [67, 30], [28337, 23], [149450, 30], [1246, 21], [29665, 23], [27518, 21], [19903, 23], [840, 30], [45101, 23], [89, 30], [1164, 21], [1490, 23], [21, 23], [7073, 30], [66237, 21], [118, 30], [202, 23], [202265, 30], [49, 30], [63, 30], [27520, 23], [12465, 21], [265, 26], [402, 26], [30, 48], [23, 13], [21, 13], [884, 28], [22672, 32], [15532, 28], [29903, 32], [3502, 28], [14957, 32], [247467, 32], [34, 32], [30418, 28], [7471, 28], [33401, 32], [37001, 32], [24916, 28], [29370, 32], [23, 111], [9196, 32], [30, 9], [46048, 32], [21, 28], [58, 25], [23, 20], [23, 142], [7082, 20], [56645, 20], [202, 20], [21, 164], [2852, 20], [220211, 20], [233080, 22], [1364, 22], [14402, 24], [3502, 22], [2599, 22], [14602, 22], [10056, 22], [31224, 22], [53735, 22], [110365, 22], [21, 77], [46140, 24], [445, 27], [930, 27], [6505, 27], [16239, 27], [35363, 27], [143, 29], [79289, 29], [2220, 27], [5392, 27], [146, 29], [219848, 29], [145, 29], [10873, 27], [368, 30], [2600, 21], [37, 23], [51922, 23], [205507, 30], [34783, 30], [4687, 30], [3022, 21], [224348, 30], [2600, 23], [183, 21], [4554, 30], [174280, 30], [78, 23], [47494, 23], [74070, 30], [5452, 21], [194079, 30], [445, 21], [54611, 21], [322, 23], [215396, 30], [183, 23], [83, 31], [1699, 26], [168, 31], [1394, 31], [50485, 31], [80668, 31], [14027, 26], [17442, 32], [18468, 28], [219646, 32], [207864, 32], [52184, 28], [305, 28], [28391, 32], [18, 32], [24362, 32], [49089, 28], [65179, 32], [35861, 32], [47494, 28], [17441, 32], [103, 28], [31450, 20], [78, 20], [77571, 20], [95421, 24], [36535, 24], [20882, 22], [20814, 22], [38, 22], [37, 22], [222970, 24], [4101, 22], [40, 24], [49089, 22], [445, 22], [47494, 22], [43, 24], [23655, 27], [2078, 27], [26047, 27], [3723, 27], [26, 268], [96515, 29], [33409, 29], [55116, 29], [443, 29], [36727, 29], [23004, 27], [19871, 23], [13, 21], [107106, 23], [119263, 30], [26, 265], [20095, 23], [1363, 30], [47615, 21], [837, 21], [70282, 21], [48, 30], [2662, 21], [20095, 21], [14095, 30], [3639, 30], [12464, 21], [13, 23], [31, 83], [1682, 26], [129618, 31], [37282, 26], [28389, 32], [7083, 32], [26, 267], [31, 9], [39889, 32], [234297, 32], [207429, 32], [20095, 28], [27706, 32], [99651, 28], [41826, 32], [41826, 28], [59, 25], [31, 85], [88, 25], [46, 25], [2851, 20], [51884, 20], [45796, 20], [73384, 20], [242413, 20], [41826, 20], [1491, 20], [13, 20], [1436, 22], [31, 17], [31, 84], [2824, 24], [2824, 22], [22189, 22], [86, 22], [26, 266], [26, 11], [215004, 22], [764, 29], [309, 29], [10458, 27], [34667, 29], [206959, 27], [30106, 27], [4003, 27], [14134, 27], [87579, 30], [1204, 23], [1707, 21], [9714, 21], [190837, 21], [1141, 21], [455, 21], [156, 30], [35371, 21], [7622, 23], [16588, 21], [31741, 21], [9711, 21], [32, 149], [455, 23], [481, 21], [269, 23], [35371, 23], [32, 18], [267, 26], [25436, 26], [11538, 31], [32, 148], [212772, 32], [556, 28], [455, 28], [50517, 32], [31510, 28], [237, 28], [129771, 32], [51, 32], [24327, 28], [269, 28], [35371, 28], [221214, 32], [21094, 32], [10378, 32], [32, 51], [28, 80], [111, 20], [28, 82], [7622, 20], [28, 79], [6, 20], [3016, 20], [117653, 20], [28, 81], [28, 20], [206959, 20], [154, 20], [10028, 22], [82272, 24], [34562, 22], [269, 22], [917, 22], [24327, 24], [9285, 22], [31835, 22], [455, 22], [133798, 24], [75671, 22], [877, 22], [32, 150], [14, 27], [54186, 29], [11765, 27], [2658, 27], [2658, 29], [40172, 29], [5415, 27], [25, 47], [13405, 27], [14, 29], [32710, 23], [23520, 21], [36226, 30], [247223, 30], [3464, 21], [5415, 21], [303, 23], [14, 21], [98, 30], [32128, 23], [218508, 30], [51046, 30], [1999, 21], [303, 21], [6503, 23], [51652, 21], [5455, 21], [29093, 26], [9962, 31], [25, 46], [85, 31], [3801, 32], [5415, 28], [7910, 32], [80, 28], [14, 28], [45, 25], [25, 45], [2421, 20], [3038, 20], [6503, 20], [11763, 20], [182, 20], [79355, 20], [96968, 20], [19717, 22], [25, 11], [65445, 22], [2572, 22], [68991, 22], [29473, 22], [2570, 22], [51341, 22], [171, 22], [3438, 22], [3549, 27], [25867, 27], [26321, 27], [40311, 27], [2333, 27], [20, 7], [20, 8], [183428, 29], [45704, 27], [48367, 29], [63713, 27], [144, 29], [75448, 23], [17758, 21], [10954, 23], [20, 30], [46387, 23], [13904, 21], [5453, 23], [56122, 23], [32976, 23], [20, 23], [10954, 21], [141, 23], [40311, 23], [68749, 30], [1255, 23], [77301, 21], [232, 23], [45704, 23], [142, 23], [1255, 21], [169, 31], [79, 28], [4029, 32], [219647, 32], [220248, 32], [81, 28], [207865, 32], [29878, 28], [20, 6], [13786, 32], [386, 28], [64263, 32], [40311, 28], [111622, 20], [210, 20], [143543, 20], [142, 20], [77591, 24], [7635, 22], [45767, 22], [199875, 24], [103521, 24], [42, 24], [55919, 24], [2664, 22], [41, 24], [2056, 22], [34264, 24], [39, 22], [7552, 22], [251697, 29], [13404, 27], [111094, 29], [90514, 29], [603, 29], [22, 8], [41719, 29], [31632, 29], [210252, 29], [54345, 23], [205508, 30], [72136, 21], [1489, 23], [17, 30], [42656, 23], [260449, 30], [346, 30], [2721, 23], [9712, 21], [152335, 30], [8080, 30], [112318, 30], [53606, 21], [201, 23], [2721, 21], [157, 30], [22, 23], [24, 40], [24, 43], [22, 37], [22, 38], [17, 31], [80667, 31], [266, 26], [11, 26], [84, 31], [16722, 32], [77, 28], [11110, 32], [30417, 28], [62078, 32], [14847, 28], [16782, 32], [74593, 32], [11, 25], [57, 25], [86121, 20], [11, 20], [2853, 20], [22, 39], [18576, 20], [112, 20], [56179, 20], [44864, 20], [24, 42], [24, 41], [252823, 20], [24, 44], [14425, 22], [82273, 24], [44, 24], [67469, 24], [86639, 22], [1667, 22], [18563, 22], [242052, 22], [54345, 22]], \"ipython\": true, \"error_msg\": \"\"}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "subgraph = graph.get_neighborhood(ids=range(20, 33), radius=1, full_subgraph=False)\n", - "subgraph.show(vlabel=\"__id\",highlight= range(20, 33), arrows=True, ewidth=0.3, node_size=140, vlabel_hover=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Products with Large in-degree, out-degree, and overall degree" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def count_degree(src, edge, dst):\n", - " dst['in_degree'] += 1\n", - " src['out_degree'] += 1\n", - " return (src, edge, dst)\n", - "\n", - "def get_degree(g):\n", - " new_g = gl.SGraph(g.vertices, g.edges)\n", - " new_g.vertices['in_degree'] = 0\n", - " new_g.vertices['out_degree'] = 0\n", - " return new_g.triple_apply(count_degree, ['in_degree', 'out_degree']).get_vertices()" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "sf_degree = get_degree(graph)\n", - "sf_degree['total_degree'] = sf_degree['in_degree'] + sf_degree['out_degree']" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idin_degreeout_degreetotal_degree
2620999514
262094156
2620366511
262031459
262017156
262015257
262013145
2619506511
261931257
261913257
\n", - "[262111 rows x 4 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tin_degree\tint\n", - "\tout_degree\tint\n", - "\ttotal_degree\tint\n", - "\n", - "Rows: 262111\n", - "\n", - "Data:\n", - "+--------+-----------+------------+--------------+\n", - "| __id | in_degree | out_degree | total_degree |\n", - "+--------+-----------+------------+--------------+\n", - "| 262099 | 9 | 5 | 14 |\n", - "| 262094 | 1 | 5 | 6 |\n", - "| 262036 | 6 | 5 | 11 |\n", - "| 262031 | 4 | 5 | 9 |\n", - "| 262017 | 1 | 5 | 6 |\n", - "| 262015 | 2 | 5 | 7 |\n", - "| 262013 | 1 | 4 | 5 |\n", - "| 261950 | 6 | 5 | 11 |\n", - "| 261931 | 2 | 5 | 7 |\n", - "| 261913 | 2 | 5 | 7 |\n", - "+--------+-----------+------------+--------------+\n", - "[262111 rows x 4 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sf_degree" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Visualize Degree Distributions" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "plt.rcParams['figure.figsize'] = (10, 10)\n", - "plt.rcParams['axes.labelsize'] = 20\n", - "plt.rcParams['axes.titlesize'] = 22\n", - "plt.rcParams['xtick.labelsize'] = 16\n", - "plt.rcParams['ytick.labelsize'] = 16\n", - "plt.rcParams['xtick.direction'] = 'out'\n", - "plt.rcParams['ytick.direction'] = 'out'\n", - "\n", - "def clean_plot(ax):\n", - " for x in ax.spines.values():\n", - " x.set_visible(False)\n", - " ax.grid(True, 'major', color='w', linestyle='-', linewidth=1.4)\n", - " ax.patch.set_facecolor('0.92')\n", - " ax.set_axisbelow(True)\n", - " ax.xaxis.set_ticks_position('bottom')\n", - " ax.yaxis.set_ticks_position('left')" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nxGIxjj/+eH72s59RV1fH/fffz+23387222+/zvV23XVX+vXrF9nnkw9KDEVERKTL5iyZH3mN2saW\nJuYsmZ9VYjhkyBB69+4NBH2QGxsb0573ySefMHDgQPr37w/AdtttB8DChQtxd0455RTi8TgtLS28\n//77fPTRR9TV1QGwww47MGfOHAA23XRTYrEYAPX19Vx++eVAkHhuscUWGa83YsSILnwi+afEUAom\nHzUNK6XdnjqkiEixGVc7Ki8jhuNqs/v7vKpqbcvgeDye8byamhpWrlzJp59+ysCBA3njjTcYPHgw\nQ4cOZaedduKss84iHo9zyy23MGTIEDbeeGPq6+upq6vjtddeS/t6tbW1nHvuuQwePJhXXnmF5cuX\ns95666W9XrFTYijdKt9t+cq53V7v6h45FcGeOW+JEkMR6TaFbKKQnKSl+zlZLBbj9NNP57TTTmPA\ngAH07BmkQqNGjeL555/npJNOYvXq1ey555707duX008/nYsvvpi+ffuy3nrrsdFGG63zGmeccQYX\nXnghLS0t9OjRg7PPPpvNN998nev16dMnD+8+WlXtZdUVKt7Q0EBLS0uh4yhL+ViDks7146Z1+rl+\n7Amtv7abfh1FOJGYvWBZTh1SAG4+e92/pGOxGDU1Neg+l3Km+1yicvfddzNu3DgGDhzIb37zG6qr\nqzn66KMLHRbQep9nzoI7QSOG0q3y+T/Kcm+3pw4pIiLZe+ONN7juuutaR/bi8ThVVVWMGzeOQw45\nJOvr1NTUcOqpp9KnTx++9KUv8fOf/zxfIRcFJYYiIiJSdr785S9z7bXXdvk6++yzT0mUmYmKOp+I\niIiICKDEUERERERCSgxFREREBFBiKCIiIiIhJYYiIiJSEf72t79lXb5owYIFXHzxxXmOqPgoMRQR\nEZGKcNttt7FmTfa1YNsrlF2uVK5GylJXahr+OMI4REQkv5qbm7nkkkt47733WLNmDYcffjj33HMP\nZ511FrW1tdx77718/PHHDB48mOXLl3Peeedx6aWXpr1WfX09l1xyCX369KF3794MGDAAgLlz53Ln\nnXcSi8XYfvvt+cEPfsCnn37K+eefzxdffEFtbS3PPfccd955J0cccQS1tbVUV1dz5plncumll7Ji\nxQoATj31VIYPH572esVCiaGUjXy32ytFmYpd9+kV45Axdey3y6bdHJGIlKuPH3yIj2beR7yxMbJr\n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\nrkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots()\n", - "\n", - "for deg_type in ['total_degree', 'in_degree', 'out_degree']:\n", - " counts = np.bincount(list(sf_degree[deg_type]))\n", - " ecdf = np.cumsum(counts) / float(sf_degree.num_rows())\n", - " ax.step(range(len(ecdf)), 1 - ecdf, lw=3, where='post', label=deg_type)\n", - "\n", - "ax.legend()\n", - "ax.set_yscale('log')\n", - "ax.set_xscale('log')\n", - "ax.set_xlabel(\"Degree\")\n", - "ax.set_ylabel(\"Fraction of products\")\n", - "ax.set_title(\"Degree Distributions\")\n", - "clean_plot(ax)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "* Large majority of products have a Total Degree of about 6 or above.\n", - "* A good proportion of products have a large Total Degree between 100-400." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Degree Outliers" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "In-degree outliers\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idin_degreeout_degreetotal_degree
149494205425
44294045409
333615366
105193345339
127713305335
\n", - "[5 rows x 4 columns]
\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tin_degree\tint\n", - "\tout_degree\tint\n", - "\ttotal_degree\tint\n", - "\n", - "Rows: 5\n", - "\n", - "Data:\n", - "+-------+-----------+------------+--------------+\n", - "| __id | in_degree | out_degree | total_degree |\n", - "+-------+-----------+------------+--------------+\n", - "| 14949 | 420 | 5 | 425 |\n", - "| 4429 | 404 | 5 | 409 |\n", - "| 33 | 361 | 5 | 366 |\n", - "| 10519 | 334 | 5 | 339 |\n", - "| 12771 | 330 | 5 | 335 |\n", - "+-------+-----------+------------+--------------+\n", - "[5 rows x 4 columns]" - ] - }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print \"Total-degree outliers\"\n", - "sf_degree.topk('total_degree', k=5)" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Out-degree outliers\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idin_degreeout_degreetotal_degree
2620999514
262094156
2620366511
262031459
262017156
\n", - "[5 rows x 4 columns]
\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tin_degree\tint\n", - "\tout_degree\tint\n", - "\ttotal_degree\tint\n", - "\n", - "Rows: 5\n", - "\n", - "Data:\n", - "+--------+-----------+------------+--------------+\n", - "| __id | in_degree | out_degree | total_degree |\n", - "+--------+-----------+------------+--------------+\n", - "| 262099 | 9 | 5 | 14 |\n", - "| 262094 | 1 | 5 | 6 |\n", - "| 262036 | 6 | 5 | 11 |\n", - "| 262031 | 4 | 5 | 9 |\n", - "| 262017 | 1 | 5 | 6 |\n", - "+--------+-----------+------------+--------------+\n", - "[5 rows x 4 columns]" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print \"Out-degree outliers\"\n", - "sf_degree.topk('out_degree', k=5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Something fishy about out-degree" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype: int\n", - "Rows: 6\n", - "[2, 0, 5, 4, 3, 1]" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sf_degree['out_degree'].unique()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Interestingly every product doesn't have more than 5 out-degree**" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Proportion of out-degree == 5: 0.892259386291\n" - ] - } - ], - "source": [ - "proportion_5 = sum(sf_degree['out_degree'] == 5) / float(len(sf_degree['out_degree']))\n", - "print \"Proportion of out-degree == 5: \", proportion_5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pagerank Algorithm to Identify the Most Influential Product\n", - "\n", - " \"PageRank works by counting the number and quality of links to a page to determine a rough estimate of how important the node is. The underlying assumption is that more important nodes are likely to receive more links from other nodes.\"" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idpagerankdelta
33282.9180670860.506583513519
93251.5668428380.456146200926
8223.4013250020.126130297959
2501206.5939508030.0969313117485
94206.0435203190.427786652087
4429193.1785035170.0209731444915
56178.5657087250.362861540252
95176.0511632870.356004734444
151169.3317711040.298081414703
2353162.3266150180.0718437036488
\n", - "[10 rows x 3 columns]
\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tpagerank\tfloat\n", - "\tdelta\tfloat\n", - "\n", - "Rows: 10\n", - "\n", - "Data:\n", - "+------+---------------+-----------------+\n", - "| __id | pagerank | delta |\n", - "+------+---------------+-----------------+\n", - "| 33 | 282.918067086 | 0.506583513519 |\n", - "| 93 | 251.566842838 | 0.456146200926 |\n", - "| 8 | 223.401325002 | 0.126130297959 |\n", - "| 2501 | 206.593950803 | 0.0969313117485 |\n", - "| 94 | 206.043520319 | 0.427786652087 |\n", - "| 4429 | 193.178503517 | 0.0209731444915 |\n", - "| 56 | 178.565708725 | 0.362861540252 |\n", - "| 95 | 176.051163287 | 0.356004734444 |\n", - "| 151 | 169.331771104 | 0.298081414703 |\n", - "| 2353 | 162.326615018 | 0.0718437036488 |\n", - "+------+---------------+-----------------+\n", - "[10 rows x 3 columns]" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pagerank_model = gl.pagerank.create(graph, verbose =False)\n", - "pagerank_graph = pagerank_model['graph']\n", - "\n", - "pagerank_out = pagerank_model['pagerank']\n", - "pagerank_out.topk('pagerank', k=10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Product with id = 33 is the most influential product in this dataset.**\n", - "\n", - "**It was also one of the outliers with the most total-degree (366).**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Most Influential Product (ID: 33)" - ] - }, - { - "cell_type": "code", - "execution_count": 148, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sgraph','View', {\"edges_labels\": null, \"selected_variable\": {\"name\": [\"subgraph\"], \"view_file\": \"sgraph\", \"view_component\": \"View\", \"view_params\": {\"elabel_hover\": false, \"vertex_positions\": null, \"h_offset\": 0.0, \"node_size\": 300, \"ecolor\": [0.37, 0.33, 0.33], \"elabel\": null, \"arrows\": true, \"ewidth\": 0.3, \"vlabel\": \"__id\", \"highlight_color\": [[0.69, 0.0, 0.498]], \"vcolor\": [0.522, 0.741, 0.0], \"vlabel_hover\": true, \"highlight\": {\"33\": [0.69, 0.0, 0.498]}, \"v_offset\": 0.03}, \"view_components\": [\"View\"], \"type\": \"SGraph\", \"descriptives_links\": {\"edges\": \"edges\", \"vertices\": \"vertices\"}, \"descriptives\": {\"edges\": 366, \"vertices\": 364}}, \"positions\": null, \"error_type\": 0, \"vertices\": [259115, 258534, 258062, 257410, 252562, 245203, 241561, 225689, 113247, 123155, 210647, 68557, 220384, 238176, 190274, 64579, 184545, 1180, 169338, 69158, 157371, 5942, 158642, 331, 156667, 150211, 212464, 137139, 219270, 114471, 127501, 119506, 224446, 188784, 44583, 112157, 104883, 96216, 83210, 77773, 246703, 176038, 41243, 96814, 32485, 16629, 216113, 27531, 9570, 157652, 5789, 27795, 96, 1818, 33, 167979, 165696, 155262, 144104, 119875, 110934, 83619, 71492, 64566, 48100, 42702, 124696, 39846, 22705, 50553, 11033, 76868, 9931, 149337, 8715, 158225, 210152, 192716, 56, 2590, 6897, 160958, 158708, 5867, 6703, 173871, 229212, 847, 256102, 238666, 624, 3913, 420, 160683, 178420, 4068, 121042, 188486, 222949, 35946, 215934, 208329, 258683, 246411, 241788, 240918, 230261, 18, 218495, 20537, 215024, 211520, 195240, 182200, 55861, 170286, 161625, 249776, 149393, 69405, 188232, 124680, 224004, 117057, 235457, 106098, 236814, 60366, 55677, 3311, 449, 42300, 92962, 24946, 4572, 227886, 40946, 18508, 114464, 261899, 14122, 8396, 43410, 12459, 4104, 3078, 10787, 626, 489, 229413, 17499, 3077, 1873, 490, 1476, 261937, 231587, 216292, 215477, 206394, 204675, 28536, 157346, 187809, 181061, 180716, 249998, 175603, 140010, 131212, 122758, 113284, 251220, 201983, 140745, 78037, 236811, 35, 31729, 235345, 821, 67792, 168097, 73946, 245894, 3175, 219348, 3661, 243, 98134, 261091, 255247, 246160, 245321, 235865, 232166, 229123, 232201, 206719, 195144, 187824, 121128, 219696, 175337, 63898, 212229, 27206, 161999, 116, 174, 151, 152283, 152042, 147832, 115233, 21577, 69999, 191883, 103111, 242518, 46177, 232125, 115380, 29099, 120690, 227332, 93, 7939, 127952, 28580, 577, 1986, 51039, 2850, 202744, 108925, 512, 58399, 14042, 187801, 103468, 86237, 1181, 107431, 257747, 253680, 226323, 223393, 210220, 209650, 202673, 147929, 184373, 142580, 119822, 98045, 93808, 84410, 65254, 33613, 25493, 20274, 18679, 77161, 14131, 3564, 12072, 45042, 210170, 17360, 142452, 429, 3911, 198014, 3909, 231650, 2769, 197541, 143223, 134671, 72753, 241111, 59907, 2558, 1477, 224, 38593, 11954, 94, 258424, 248408, 243212, 236481, 216861, 240134, 192160, 176923, 158187, 216622, 147066, 238686, 3082, 146019, 255710, 70936, 82254, 80074, 78941, 72435, 118019, 231766, 105093, 23878, 70674, 81677, 14080, 42383, 258438, 111622, 152713, 249291, 242112, 129805, 14927, 249076, 183646, 59259, 57016, 67704, 202913, 627, 247433, 225482, 188404, 182671, 180619, 163546, 158299, 100397, 124346, 122518, 9487, 72891, 95, 125072, 69036, 254384, 59222, 53218, 40729, 7323, 10883, 258259, 51049, 245307, 23882, 217960, 22247, 85921, 251697, 517, 1651, 47841, 65985], \"vertices_labels\": [259115, 258534, 258062, 257410, 252562, 245203, 241561, 225689, 113247, 123155, 210647, 68557, 220384, 238176, 190274, 64579, 184545, 1180, 169338, 69158, 157371, 5942, 158642, 331, 156667, 150211, 212464, 137139, 219270, 114471, 127501, 119506, 224446, 188784, 44583, 112157, 104883, 96216, 83210, 77773, 246703, 176038, 41243, 96814, 32485, 16629, 216113, 27531, 9570, 157652, 5789, 27795, 96, 1818, 33, 167979, 165696, 155262, 144104, 119875, 110934, 83619, 71492, 64566, 48100, 42702, 124696, 39846, 22705, 50553, 11033, 76868, 9931, 149337, 8715, 158225, 210152, 192716, 56, 2590, 6897, 160958, 158708, 5867, 6703, 173871, 229212, 847, 256102, 238666, 624, 3913, 420, 160683, 178420, 4068, 121042, 188486, 222949, 35946, 215934, 208329, 258683, 246411, 241788, 240918, 230261, 18, 218495, 20537, 215024, 211520, 195240, 182200, 55861, 170286, 161625, 249776, 149393, 69405, 188232, 124680, 224004, 117057, 235457, 106098, 236814, 60366, 55677, 3311, 449, 42300, 92962, 24946, 4572, 227886, 40946, 18508, 114464, 261899, 14122, 8396, 43410, 12459, 4104, 3078, 10787, 626, 489, 229413, 17499, 3077, 1873, 490, 1476, 261937, 231587, 216292, 215477, 206394, 204675, 28536, 157346, 187809, 181061, 180716, 249998, 175603, 140010, 131212, 122758, 113284, 251220, 201983, 140745, 78037, 236811, 35, 31729, 235345, 821, 67792, 168097, 73946, 245894, 3175, 219348, 3661, 243, 98134, 261091, 255247, 246160, 245321, 235865, 232166, 229123, 232201, 206719, 195144, 187824, 121128, 219696, 175337, 63898, 212229, 27206, 161999, 116, 174, 151, 152283, 152042, 147832, 115233, 21577, 69999, 191883, 103111, 242518, 46177, 232125, 115380, 29099, 120690, 227332, 93, 7939, 127952, 28580, 577, 1986, 51039, 2850, 202744, 108925, 512, 58399, 14042, 187801, 103468, 86237, 1181, 107431, 257747, 253680, 226323, 223393, 210220, 209650, 202673, 147929, 184373, 142580, 119822, 98045, 93808, 84410, 65254, 33613, 25493, 20274, 18679, 77161, 14131, 3564, 12072, 45042, 210170, 17360, 142452, 429, 3911, 198014, 3909, 231650, 2769, 197541, 143223, 134671, 72753, 241111, 59907, 2558, 1477, 224, 38593, 11954, 94, 258424, 248408, 243212, 236481, 216861, 240134, 192160, 176923, 158187, 216622, 147066, 238686, 3082, 146019, 255710, 70936, 82254, 80074, 78941, 72435, 118019, 231766, 105093, 23878, 70674, 81677, 14080, 42383, 258438, 111622, 152713, 249291, 242112, 129805, 14927, 249076, 183646, 59259, 57016, 67704, 202913, 627, 247433, 225482, 188404, 182671, 180619, 163546, 158299, 100397, 124346, 122518, 9487, 72891, 95, 125072, 69036, 254384, 59222, 53218, 40729, 7323, 10883, 258259, 51049, 245307, 23882, 217960, 22247, 85921, 251697, 517, 1651, 47841, 65985], \"edges\": [[245203, 33], [150211, 33], [64579, 33], [16629, 33], [258534, 33], [44583, 33], [96, 33], [157371, 33], [219270, 33], [259115, 33], [96814, 33], [127501, 33], [157652, 33], [69158, 33], [156667, 33], [77773, 33], [96216, 33], [212464, 33], [158642, 33], [176038, 33], [188784, 33], [32485, 33], [224446, 33], [220384, 33], [258062, 33], [1818, 33], [112157, 33], [137139, 33], [123155, 33], [114471, 33], [210647, 33], [41243, 33], [184545, 33], [246703, 33], [27795, 33], [5789, 33], [119506, 33], [104883, 33], [83210, 33], [113247, 33], [190274, 33], [1180, 33], [5942, 33], [68557, 33], [252562, 33], [257410, 33], [216113, 33], [238176, 33], [331, 33], [9570, 33], [241561, 33], [27531, 33], [169338, 33], [225689, 33], [33, 56], [33, 151], [33, 93], [33, 94], [33, 95], [119875, 33], [50553, 33], [144104, 33], [71492, 33], [22705, 33], [210152, 33], [48100, 33], [624, 33], [238666, 33], [9931, 33], [121042, 33], [39846, 33], [83619, 33], [420, 33], [5867, 33], [192716, 33], [215934, 33], [178420, 33], [158708, 33], [124696, 33], [149337, 33], [42702, 33], [173871, 33], [256102, 33], [4068, 33], [167979, 33], [155262, 33], [188486, 33], [35946, 33], [8715, 33], [847, 33], [158225, 33], [56, 33], [229212, 33], [165696, 33], [2590, 33], [76868, 33], [160958, 33], [6703, 33], [11033, 33], [222949, 33], [3913, 33], [160683, 33], [110934, 33], [208329, 33], [6897, 33], [64566, 33], [124680, 33], [4572, 33], [211520, 33], [1873, 33], [626, 33], [258683, 33], [14122, 33], [229413, 33], [215024, 33], [489, 33], [235457, 33], [69405, 33], [18, 33], [55677, 33], [230261, 33], [117057, 33], [92962, 33], [241788, 33], [218495, 33], [240918, 33], [43410, 33], [114464, 33], [4104, 33], [55861, 33], [40946, 33], [18508, 33], [227886, 33], [24946, 33], [12459, 33], [8396, 33], [1476, 33], [236814, 33], [188232, 33], [261899, 33], [490, 33], [449, 33], [246411, 33], [170286, 33], [224004, 33], [17499, 33], [249776, 33], [3311, 33], [60366, 33], [161625, 33], [3077, 33], [42300, 33], [10787, 33], [106098, 33], [195240, 33], [20537, 33], [182200, 33], [149393, 33], [3078, 33], [78037, 33], [131212, 33], [236811, 33], [168097, 33], [249998, 33], [181061, 33], [187809, 33], [219348, 33], [28536, 33], [206394, 33], [140745, 33], [216292, 33], [261937, 33], [231587, 33], [3175, 33], [204675, 33], [140010, 33], [201983, 33], [175603, 33], [98134, 33], [35, 33], [180716, 33], [73946, 33], [215477, 33], [235345, 33], [245894, 33], [157346, 33], [122758, 33], [251220, 33], [31729, 33], [821, 33], [3661, 33], [67792, 33], [243, 33], [113284, 33], [121128, 33], [1181, 33], [219696, 33], [27206, 33], [161999, 33], [195144, 33], [512, 33], [108925, 33], [261091, 33], [21577, 33], [212229, 33], [229123, 33], [127952, 33], [175337, 33], [187824, 33], [242518, 33], [2850, 33], [187801, 33], [93, 33], [58399, 33], [246160, 33], [63898, 33], [69999, 33], [29099, 33], [1986, 33], [152283, 33], [255247, 33], [14042, 33], [227332, 33], [232125, 33], [86237, 33], [120690, 33], [28580, 33], [107431, 33], [115380, 33], [191883, 33], [103111, 33], [202744, 33], [152042, 33], [46177, 33], [51039, 33], [116, 33], [7939, 33], [115233, 33], [235865, 33], [103468, 33], [174, 33], [232166, 33], [577, 33], [245321, 33], [232201, 33], [206719, 33], [147832, 33], [65254, 33], [11954, 33], [210220, 33], [1477, 33], [231650, 33], [197541, 33], [45042, 33], [25493, 33], [14131, 33], [72753, 33], [226323, 33], [38593, 33], [257747, 33], [198014, 33], [98045, 33], [59907, 33], [3909, 33], [3564, 33], [143223, 33], [253680, 33], [18679, 33], [224, 33], [147929, 33], [12072, 33], [119822, 33], [77161, 33], [17360, 33], [3911, 33], [223393, 33], [134671, 33], [2558, 33], [209650, 33], [142580, 33], [33613, 33], [20274, 33], [2769, 33], [84410, 33], [184373, 33], [93808, 33], [142452, 33], [210170, 33], [429, 33], [241111, 33], [202673, 33], [627, 33], [152713, 33], [255710, 33], [146019, 33], [111622, 33], [176923, 33], [129805, 33], [240134, 33], [248408, 33], [183646, 33], [82254, 33], [67704, 33], [249291, 33], [231766, 33], [192160, 33], [105093, 33], [70936, 33], [243212, 33], [59259, 33], [216861, 33], [23878, 33], [249076, 33], [118019, 33], [236481, 33], [202913, 33], [216622, 33], [14927, 33], [42383, 33], [258424, 33], [70674, 33], [80074, 33], [158187, 33], [14080, 33], [81677, 33], [258438, 33], [238686, 33], [3082, 33], [57016, 33], [78941, 33], [72435, 33], [242112, 33], [147066, 33], [85921, 33], [40729, 33], [9487, 33], [188404, 33], [124346, 33], [247433, 33], [1651, 33], [7323, 33], [122518, 33], [217960, 33], [72891, 33], [182671, 33], [10883, 33], [69036, 33], [180619, 33], [254384, 33], [51049, 33], [258259, 33], [100397, 33], [225482, 33], [53218, 33], [95, 33], [125072, 33], [47841, 33], [251697, 33], [517, 33], [245307, 33], [23882, 33], [65985, 33], [163546, 33], [59222, 33], [158299, 33], [22247, 33]], \"ipython\": true, \"error_msg\": \"\"}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Visualize all 366 connections of the most influential product\n", - "subgraph = graph.get_neighborhood(ids= 33, radius=1, full_subgraph=False)\n", - "subgraph.show(vlabel=\"__id\", highlight= [33], arrows=True, ewidth=0.3, vlabel_hover=True, node_size=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How are the 20 most influential products co-purchased?" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sgraph','View', {\"edges_labels\": null, \"selected_variable\": {\"name\": [\"subgraph\"], \"view_file\": \"sgraph\", \"view_component\": \"View\", \"view_params\": {\"elabel_hover\": false, \"vertex_positions\": null, \"h_offset\": 0.0, \"node_size\": 300, \"ecolor\": [0.37, 0.33, 0.33], \"elabel\": null, \"arrows\": true, \"ewidth\": 0.7, \"vlabel\": \"__id\", \"highlight_color\": [[0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498]], \"vcolor\": [0.522, 0.741, 0.0], \"vlabel_hover\": false, \"highlight\": {\"33\": [0.69, 0.0, 0.498], \"4931\": [0.69, 0.0, 0.498], \"2501\": [0.69, 0.0, 0.498], \"481\": [0.69, 0.0, 0.498], \"8\": [0.69, 0.0, 0.498], \"95\": [0.69, 0.0, 0.498], \"151\": [0.69, 0.0, 0.498], \"13\": [0.69, 0.0, 0.498], \"4429\": [0.69, 0.0, 0.498], \"2353\": [0.69, 0.0, 0.498], \"9106\": [0.69, 0.0, 0.498], \"21\": [0.69, 0.0, 0.498], \"23\": [0.69, 0.0, 0.498], \"56\": [0.69, 0.0, 0.498], \"429\": [0.69, 0.0, 0.498], \"1241\": [0.69, 0.0, 0.498], \"449\": [0.69, 0.0, 0.498], \"93\": [0.69, 0.0, 0.498], \"94\": [0.69, 0.0, 0.498], \"3589\": [0.69, 0.0, 0.498]}, \"v_offset\": 0.03}, \"view_components\": [\"View\"], \"type\": \"SGraph\", \"descriptives_links\": {\"edges\": \"edges\", \"vertices\": \"vertices\"}, \"descriptives\": {\"edges\": 49, \"vertices\": 20}}, \"positions\": null, \"error_type\": 0, \"vertices\": [33, 8, 56, 4429, 23, 21, 2501, 4931, 449, 13, 9106, 3589, 481, 151, 93, 1241, 429, 94, 2353, 95], \"vertices_labels\": [33, 8, 56, 4429, 23, 21, 2501, 4931, 449, 13, 9106, 3589, 481, 151, 93, 1241, 429, 94, 2353, 95], \"edges\": [[8, 21], [33, 56], [8, 23], [8, 13], [33, 151], [33, 93], [33, 94], [33, 95], [56, 33], [23, 8], [21, 23], [4429, 2501], [23, 13], [21, 13], [56, 93], [56, 94], [4429, 2353], [56, 95], [449, 33], [2501, 3589], [4931, 3589], [449, 151], [449, 1241], [13, 21], [13, 23], [93, 33], [93, 56], [481, 21], [3589, 4931], [151, 449], [151, 93], [93, 94], [151, 429], [481, 1241], [93, 95], [429, 33], [429, 56], [1241, 449], [429, 93], [1241, 429], [429, 94], [429, 95], [95, 33], [95, 56], [2353, 4429], [2353, 2501], [95, 93], [95, 429], [95, 94]], \"ipython\": true, \"error_msg\": \"\"}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "influential_products = pagerank_out.topk('pagerank', k=20)['__id']\n", - "subgraph = graph.get_neighborhood(ids= influential_products, radius=0, full_subgraph=True)\n", - "subgraph.show(vlabel='__id', highlight= influential_products, arrows=True, ewidth=0.7, node_size=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** There are different clusters of co-purchased influential products.**\n", - "\n", - "** Product 9,106 seems to not be connected/co-purchased with other influential products.**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Connected Components" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " A weakly connected component is a maximal subgraph of a directed graph such that for every pair of vertices u, v in the subgraph, there is an undirected path from u to v and a directed path from v to u. " - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected components summary:\n", - "Class : ConnectedComponentsModel\n", - "\n", - "Graph\n", - "-----\n", - "num_edges : 1234877\n", - "num_vertices : 262111\n", - "\n", - "Results\n", - "-------\n", - "graph : SGraph. See m['graph']\n", - "component size : SFrame. See m['component_size']\n", - "number of connected components : 1\n", - "vertex component id : SFrame. See m['componentid']\n", - "\n", - "Metrics\n", - "-------\n", - "training time (secs) : 0.9353\n", - "\n", - "Queryable Fields\n", - "----------------\n", - "graph : A new SGraph with the color id as a vertex property\n", - "component_id : An SFrame with each vertex's component id\n", - "component_size : An SFrame with the size of each component\n", - "training_time : Total training time of the model\n", - "\n", - "None\n" - ] - } - ], - "source": [ - "cc = gl.connected_components.create(graph, verbose=False)\n", - "cc_out = cc['component_id']\n", - "print \"Connected components summary:\\n\", cc.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idcomponent_id
51057
71057
81057
101057
271057
291057
331057
471057
501057
521057
\n", - "[262111 rows x 2 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tcomponent_id\tint\n", - "\n", - "Rows: 262111\n", - "\n", - "Data:\n", - "+------+--------------+\n", - "| __id | component_id |\n", - "+------+--------------+\n", - "| 5 | 1057 |\n", - "| 7 | 1057 |\n", - "| 8 | 1057 |\n", - "| 10 | 1057 |\n", - "| 27 | 1057 |\n", - "| 29 | 1057 |\n", - "| 33 | 1057 |\n", - "| 47 | 1057 |\n", - "| 50 | 1057 |\n", - "| 52 | 1057 |\n", - "+------+--------------+\n", - "[262111 rows x 2 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 128, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cc_out" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
component_idCount
1057262111
\n", - "[1 rows x 2 columns]
\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\tcomponent_id\tint\n", - "\tCount\tint\n", - "\n", - "Rows: 1\n", - "\n", - "Data:\n", - "+--------------+--------+\n", - "| component_id | Count |\n", - "+--------------+--------+\n", - "| 1057 | 262111 |\n", - "+--------------+--------+\n", - "[1 rows x 2 columns]" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cc_size = cc['component_size'].sort('Count', ascending=False)\n", - "cc_size" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Count equals the number of vertices.**\n", - "\n", - "** There is actually just one component in this graph (no islands).**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# What are the co-purchased products of Product_13's co-purchased products?" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sgraph','View', {\"edges_labels\": null, \"selected_variable\": {\"name\": [\"subgraph\"], \"view_file\": \"sgraph\", \"view_component\": \"View\", \"view_params\": {\"elabel_hover\": false, \"vertex_positions\": null, \"h_offset\": 0.0, \"node_size\": 100, \"ecolor\": [0.37, 0.33, 0.33], \"elabel\": null, \"arrows\": false, \"ewidth\": 0.7, \"vlabel\": \"__id\", \"highlight_color\": [[0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498], [0.69, 0.0, 0.498]], \"vcolor\": [0.522, 0.741, 0.0], \"vlabel_hover\": true, \"highlight\": {\"27520\": [0.69, 0.0, 0.498], \"2\": [0.69, 0.0, 0.498], \"15531\": [0.69, 0.0, 0.498], \"8\": [0.69, 0.0, 0.498], \"2954\": [0.69, 0.0, 0.498], \"140\": [0.69, 0.0, 0.498], \"141\": [0.69, 0.0, 0.498], \"14\": [0.69, 0.0, 0.498], \"21\": [0.69, 0.0, 0.498], \"31510\": [0.69, 0.0, 0.498], \"23\": [0.69, 0.0, 0.498], \"27\": [0.69, 0.0, 0.498], \"15132\": [0.69, 0.0, 0.498], \"33947\": [0.69, 0.0, 0.498], \"18982\": [0.69, 0.0, 0.498], \"5415\": [0.69, 0.0, 0.498], \"35371\": [0.69, 0.0, 0.498], \"556\": [0.69, 0.0, 0.498], \"3502\": [0.69, 0.0, 0.498], \"12464\": [0.69, 0.0, 0.498], \"183\": [0.69, 0.0, 0.498], \"451\": [0.69, 0.0, 0.498], \"198\": [0.69, 0.0, 0.498], \"199\": [0.69, 0.0, 0.498], \"65482\": [0.69, 0.0, 0.498], \"79\": [0.69, 0.0, 0.498], \"1489\": [0.69, 0.0, 0.498], \"32082\": [0.69, 0.0, 0.498], \"473\": [0.69, 0.0, 0.498], \"2658\": [0.69, 0.0, 0.498], \"357\": [0.69, 0.0, 0.498], \"232\": [0.69, 0.0, 0.498], \"77301\": [0.69, 0.0, 0.498], \"632\": [0.69, 0.0, 0.498], \"254\": [0.69, 0.0, 0.498]}, \"v_offset\": 0.03}, \"view_components\": [\"View\"], \"type\": \"SGraph\", \"descriptives_links\": {\"edges\": \"edges\", \"vertices\": \"vertices\"}, \"descriptives\": {\"edges\": 735, \"vertices\": 673}}, \"positions\": null, \"error_type\": 0, \"vertices\": [5, 7, 8, 115, 313, 454, 480, 504, 7624, 7782, 21047, 30224, 36746, 60956, 72841, 79340, 81922, 93579, 103753, 108764, 125295, 162397, 170384, 174005, 200020, 209075, 223155, 225581, 228028, 246075, 246703, 27, 1838, 7975, 20009, 43535, 50011, 2954, 40963, 75216, 15531, 33947, 1035, 13630, 42919, 48145, 53940, 56108, 172975, 1706, 1140, 47569, 138054, 16543, 30832, 116145, 182128, 222193, 354, 21701, 21704, 939, 2472, 4880, 9306, 24562, 58502, 134342, 55410, 196, 5988, 21336, 60604, 64221, 186189, 18481, 36570, 161476, 5900, 18865, 23, 30, 193, 1921, 8715, 18406, 19656, 23214, 27518, 33826, 46389, 64815, 70997, 71574, 93238, 96156, 97828, 108259, 122457, 164301, 181197, 192716, 220944, 224981, 227358, 250930, 13429, 18575, 21505, 23003, 26605, 2718, 2720, 15532, 33950, 21, 1164, 1246, 12465, 22632, 38303, 66237, 98254, 202, 451, 473, 1490, 2793, 9423, 19903, 27520, 28337, 29665, 30803, 45101, 193187, 158, 54064, 2852, 3502, 18982, 45867, 631, 21702, 46103, 1239, 2744, 3242, 7471, 50737, 65216, 92474, 56035, 76813, 55154, 41350, 113052, 129259, 147218, 201982, 37, 40, 228, 450, 2600, 3926, 4147, 6383, 7992, 15194, 25364, 28309, 28331, 29952, 41077, 41139, 44336, 64613, 66774, 92962, 94309, 95421, 98260, 115894, 117057, 129715, 135658, 136886, 147520, 171139, 184406, 203652, 209546, 211520, 212446, 215024, 222095, 231390, 250339, 251921, 445, 930, 2220, 5392, 6505, 10873, 16239, 35363, 3362, 183, 3022, 5452, 54611, 78, 322, 47494, 51922, 18616, 27769, 35526, 54063, 81414, 84270, 1979, 10382, 31523, 37798, 9724, 18306, 55415, 68330, 632, 0, 259, 18463, 102996, 2745, 3794, 31472, 47257, 49365, 52184, 23074, 103, 21365, 2436, 23396, 66234, 129258, 59385, 77300, 15873, 176, 302, 315, 683, 1079, 1436, 3459, 12464, 20549, 28990, 29169, 32969, 33731, 42212, 46032, 54409, 57681, 63452, 67792, 69353, 71359, 72781, 81059, 95054, 102458, 110351, 146011, 158781, 180716, 195900, 206245, 210429, 212463, 222899, 224196, 243746, 248941, 2078, 3723, 23004, 23655, 26047, 2957, 57419, 13, 837, 2662, 20095, 47615, 70282, 19871, 107106, 54061, 203, 1491, 2851, 132311, 3243, 18219, 634, 2, 254, 348, 357, 21703, 80327, 6856, 65453, 92475, 2657, 120497, 1039, 11323, 16321, 16791, 19571, 32081, 178742, 44049, 15134, 6, 97, 290, 719, 1162, 2129, 7622, 9003, 9975, 11993, 12846, 15120, 23711, 29368, 30267, 38596, 40238, 49095, 69999, 76526, 85154, 88632, 92153, 107431, 115184, 147269, 162679, 170820, 174027, 191902, 197924, 210697, 220497, 232125, 236039, 240991, 251009, 252884, 258431, 260857, 4003, 10458, 14134, 30106, 206959, 40962, 151540, 33948, 455, 481, 1141, 1707, 9711, 9714, 16588, 31741, 35371, 190837, 269, 1204, 47567, 47568, 45955, 2250, 138055, 109512, 854, 200, 30416, 39882, 151811, 556, 2470, 4604, 51389, 31510, 55409, 55411, 2297, 18884, 25219, 22488, 42157, 116428, 26158, 160105, 28, 13207, 18864, 80, 98, 182, 226, 1939, 2570, 6665, 13423, 14158, 16812, 17360, 21387, 25053, 31505, 32082, 35873, 54441, 57742, 83373, 84410, 113149, 117385, 123801, 125553, 126903, 144007, 149035, 156226, 156352, 183574, 185596, 188656, 191914, 206129, 213569, 215392, 216369, 222854, 223278, 226310, 226323, 229023, 230371, 239448, 249100, 249215, 14, 2658, 5415, 11765, 13405, 4493, 104613, 108015, 193416, 17049, 303, 1999, 3464, 5455, 23520, 51652, 6503, 32128, 32710, 142827, 22446, 23014, 25233, 55414, 633, 255, 256, 189691, 600, 1514, 5406, 19174, 26197, 65445, 21085, 21580, 32789, 140, 198, 16320, 64674, 32084, 47637, 147280, 148182, 178743, 15133, 20, 42, 164, 210, 668, 687, 784, 5316, 8310, 20578, 24688, 34859, 35249, 35290, 39506, 44840, 57297, 67704, 68749, 103821, 110880, 118019, 153999, 173450, 196751, 201928, 221727, 229652, 240134, 261241, 261986, 262023, 2333, 3549, 25867, 26321, 40311, 45704, 63713, 2719, 6683, 70617, 253733, 46387, 101247, 1255, 10954, 13904, 17758, 77301, 141, 142, 232, 5453, 32976, 56122, 75448, 27768, 35527, 54062, 58937, 93567, 27519, 90685, 1, 88636, 49787, 102997, 1697, 4185, 5757, 92476, 250011, 5739, 4206, 6603, 147219, 65482, 79, 15875, 17, 22, 99, 112, 479, 597, 685, 819, 23045, 28197, 31502, 39574, 40729, 42656, 43649, 45371, 46643, 56632, 60838, 61514, 64436, 70602, 92606, 98780, 106157, 106351, 113979, 122829, 125752, 136713, 142315, 184132, 187851, 199114, 203464, 207722, 211192, 220059, 230222, 231143, 242199, 256491, 13404, 1165, 34231, 253731, 14847, 15533, 67469, 30489, 33949, 2721, 9712, 53606, 72136, 201, 1489, 54345, 27770, 59530, 86723, 852, 10381, 245, 288, 233108, 6937, 421, 1238, 3320, 15132, 18312, 90063, 92473, 199, 201650, 32083, 135589, 11334], \"vertices_labels\": [5, 7, 8, 115, 313, 454, 480, 504, 7624, 7782, 21047, 30224, 36746, 60956, 72841, 79340, 81922, 93579, 103753, 108764, 125295, 162397, 170384, 174005, 200020, 209075, 223155, 225581, 228028, 246075, 246703, 27, 1838, 7975, 20009, 43535, 50011, 2954, 40963, 75216, 15531, 33947, 1035, 13630, 42919, 48145, 53940, 56108, 172975, 1706, 1140, 47569, 138054, 16543, 30832, 116145, 182128, 222193, 354, 21701, 21704, 939, 2472, 4880, 9306, 24562, 58502, 134342, 55410, 196, 5988, 21336, 60604, 64221, 186189, 18481, 36570, 161476, 5900, 18865, 23, 30, 193, 1921, 8715, 18406, 19656, 23214, 27518, 33826, 46389, 64815, 70997, 71574, 93238, 96156, 97828, 108259, 122457, 164301, 181197, 192716, 220944, 224981, 227358, 250930, 13429, 18575, 21505, 23003, 26605, 2718, 2720, 15532, 33950, 21, 1164, 1246, 12465, 22632, 38303, 66237, 98254, 202, 451, 473, 1490, 2793, 9423, 19903, 27520, 28337, 29665, 30803, 45101, 193187, 158, 54064, 2852, 3502, 18982, 45867, 631, 21702, 46103, 1239, 2744, 3242, 7471, 50737, 65216, 92474, 56035, 76813, 55154, 41350, 113052, 129259, 147218, 201982, 37, 40, 228, 450, 2600, 3926, 4147, 6383, 7992, 15194, 25364, 28309, 28331, 29952, 41077, 41139, 44336, 64613, 66774, 92962, 94309, 95421, 98260, 115894, 117057, 129715, 135658, 136886, 147520, 171139, 184406, 203652, 209546, 211520, 212446, 215024, 222095, 231390, 250339, 251921, 445, 930, 2220, 5392, 6505, 10873, 16239, 35363, 3362, 183, 3022, 5452, 54611, 78, 322, 47494, 51922, 18616, 27769, 35526, 54063, 81414, 84270, 1979, 10382, 31523, 37798, 9724, 18306, 55415, 68330, 632, 0, 259, 18463, 102996, 2745, 3794, 31472, 47257, 49365, 52184, 23074, 103, 21365, 2436, 23396, 66234, 129258, 59385, 77300, 15873, 176, 302, 315, 683, 1079, 1436, 3459, 12464, 20549, 28990, 29169, 32969, 33731, 42212, 46032, 54409, 57681, 63452, 67792, 69353, 71359, 72781, 81059, 95054, 102458, 110351, 146011, 158781, 180716, 195900, 206245, 210429, 212463, 222899, 224196, 243746, 248941, 2078, 3723, 23004, 23655, 26047, 2957, 57419, 13, 837, 2662, 20095, 47615, 70282, 19871, 107106, 54061, 203, 1491, 2851, 132311, 3243, 18219, 634, 2, 254, 348, 357, 21703, 80327, 6856, 65453, 92475, 2657, 120497, 1039, 11323, 16321, 16791, 19571, 32081, 178742, 44049, 15134, 6, 97, 290, 719, 1162, 2129, 7622, 9003, 9975, 11993, 12846, 15120, 23711, 29368, 30267, 38596, 40238, 49095, 69999, 76526, 85154, 88632, 92153, 107431, 115184, 147269, 162679, 170820, 174027, 191902, 197924, 210697, 220497, 232125, 236039, 240991, 251009, 252884, 258431, 260857, 4003, 10458, 14134, 30106, 206959, 40962, 151540, 33948, 455, 481, 1141, 1707, 9711, 9714, 16588, 31741, 35371, 190837, 269, 1204, 47567, 47568, 45955, 2250, 138055, 109512, 854, 200, 30416, 39882, 151811, 556, 2470, 4604, 51389, 31510, 55409, 55411, 2297, 18884, 25219, 22488, 42157, 116428, 26158, 160105, 28, 13207, 18864, 80, 98, 182, 226, 1939, 2570, 6665, 13423, 14158, 16812, 17360, 21387, 25053, 31505, 32082, 35873, 54441, 57742, 83373, 84410, 113149, 117385, 123801, 125553, 126903, 144007, 149035, 156226, 156352, 183574, 185596, 188656, 191914, 206129, 213569, 215392, 216369, 222854, 223278, 226310, 226323, 229023, 230371, 239448, 249100, 249215, 14, 2658, 5415, 11765, 13405, 4493, 104613, 108015, 193416, 17049, 303, 1999, 3464, 5455, 23520, 51652, 6503, 32128, 32710, 142827, 22446, 23014, 25233, 55414, 633, 255, 256, 189691, 600, 1514, 5406, 19174, 26197, 65445, 21085, 21580, 32789, 140, 198, 16320, 64674, 32084, 47637, 147280, 148182, 178743, 15133, 20, 42, 164, 210, 668, 687, 784, 5316, 8310, 20578, 24688, 34859, 35249, 35290, 39506, 44840, 57297, 67704, 68749, 103821, 110880, 118019, 153999, 173450, 196751, 201928, 221727, 229652, 240134, 261241, 261986, 262023, 2333, 3549, 25867, 26321, 40311, 45704, 63713, 2719, 6683, 70617, 253733, 46387, 101247, 1255, 10954, 13904, 17758, 77301, 141, 142, 232, 5453, 32976, 56122, 75448, 27768, 35527, 54062, 58937, 93567, 27519, 90685, 1, 88636, 49787, 102997, 1697, 4185, 5757, 92476, 250011, 5739, 4206, 6603, 147219, 65482, 79, 15875, 17, 22, 99, 112, 479, 597, 685, 819, 23045, 28197, 31502, 39574, 40729, 42656, 43649, 45371, 46643, 56632, 60838, 61514, 64436, 70602, 92606, 98780, 106157, 106351, 113979, 122829, 125752, 136713, 142315, 184132, 187851, 199114, 203464, 207722, 211192, 220059, 230222, 231143, 242199, 256491, 13404, 1165, 34231, 253731, 14847, 15533, 67469, 30489, 33949, 2721, 9712, 53606, 72136, 201, 1489, 54345, 27770, 59530, 86723, 852, 10381, 245, 288, 233108, 6937, 421, 1238, 3320, 15132, 18312, 90063, 92473, 199, 201650, 32083, 135589, 11334], \"edges\": [[162397, 8], [170384, 8], [174005, 8], [200020, 8], [209075, 8], [223155, 8], [225581, 8], [228028, 8], [246075, 8], [246703, 8], [72841, 8], [79340, 8], [81922, 8], [93579, 8], [103753, 8], [108764, 8], [5, 8], [7, 8], [115, 8], [313, 8], [454, 8], [480, 8], [504, 8], [7624, 8], [7782, 8], [21047, 8], [30224, 8], [36746, 8], [125295, 8], [60956, 8], [1838, 27], [7975, 27], [20009, 27], [43535, 27], [50011, 27], [75216, 2954], [40963, 2954], [172975, 21], [8, 21], [27, 21], [1035, 21], [13630, 21], [42919, 21], [48145, 21], [53940, 21], [56108, 21], [60956, 21], [8, 23], [1706, 23], [15531, 23], [1140, 451], [47569, 451], [138054, 3502], [16543, 18982], [30832, 18982], [222193, 183], [116145, 183], [182128, 183], [354, 357], [21701, 357], [21704, 357], [134342, 556], [939, 556], [2472, 556], [4880, 556], [9306, 556], [24562, 556], [58502, 556], [55410, 35371], [196, 14], [5988, 14], [64221, 5415], [186189, 5415], [21336, 5415], [60604, 5415], [161476, 32082], [18481, 32082], [36570, 32082], [5900, 79], [18865, 15132], [220944, 8], [224981, 8], [227358, 8], [250930, 8], [164301, 8], [181197, 8], [64815, 8], [70997, 8], [71574, 8], [93238, 8], [96156, 8], [97828, 8], [108259, 8], [23, 8], [30, 8], [193, 8], [1921, 8], [8715, 8], [18406, 8], [19656, 8], [23214, 8], [27518, 8], [33826, 8], [46389, 8], [122457, 8], [192716, 8], [13429, 27], [18575, 27], [21505, 27], [23003, 27], [26605, 27], [2718, 2954], [2720, 2954], [15532, 15531], [33950, 33947], [66237, 21], [98254, 21], [1164, 21], [1246, 21], [12465, 21], [22632, 21], [27518, 21], [38303, 21], [21, 23], [202, 23], [451, 23], [473, 23], [1490, 23], [2793, 23], [9423, 23], [19903, 23], [27520, 23], [28337, 23], [29665, 23], [30803, 23], [45101, 23], [193187, 23], [158, 451], [54064, 451], [2852, 473], [19903, 18982], [45867, 27520], [631, 632], [21702, 357], [46103, 357], [12465, 12464], [3242, 556], [7471, 556], [50737, 556], [65216, 556], [1239, 556], [2744, 556], [92474, 31510], [56035, 35371], [76813, 35371], [13429, 14], [55154, 140], [201982, 32082], [113052, 32082], [129259, 32082], [147218, 32082], [41350, 32082], [92962, 8], [94309, 8], [95421, 8], [98260, 8], [115894, 8], [117057, 8], [37, 8], [40, 8], [228, 8], [450, 8], [2600, 8], [3926, 8], [4147, 8], [6383, 8], [7992, 8], [15194, 8], [25364, 8], [28309, 8], [28331, 8], [29952, 8], [41077, 8], [41139, 8], [44336, 8], [129715, 8], [135658, 8], [136886, 8], [147520, 8], [171139, 8], [184406, 8], [203652, 8], [209546, 8], [211520, 8], [212446, 8], [215024, 8], [222095, 8], [231390, 8], [250339, 8], [251921, 8], [64613, 8], [66774, 8], [445, 27], [930, 27], [2220, 27], [5392, 27], [6505, 27], [10873, 27], [16239, 27], [35363, 27], [3362, 2954], [183, 21], [445, 21], [2600, 21], [3022, 21], [5452, 21], [54611, 21], [37, 23], [78, 23], [183, 23], [322, 23], [2600, 23], [47494, 23], [51922, 23], [84270, 451], [18616, 451], [27769, 451], [35526, 451], [54063, 451], [81414, 451], [1979, 3502], [10382, 3502], [31523, 18982], [37798, 27520], [9724, 183], [18306, 183], [68330, 183], [55415, 183], [0, 2], [259, 254], [18463, 357], [102996, 357], [2745, 556], [3794, 556], [31472, 556], [47257, 556], [49365, 556], [52184, 31510], [23074, 35371], [103, 14], [21365, 14], [21365, 2658], [2436, 5415], [23396, 5415], [66234, 5415], [129258, 32082], [77300, 77301], [59385, 77301], [259, 232], [15873, 15132], [195900, 8], [206245, 8], [210429, 8], [212463, 8], [222899, 8], [224196, 8], [243746, 8], [248941, 8], [67792, 8], [69353, 8], [71359, 8], [72781, 8], [81059, 8], [95054, 8], [102458, 8], [110351, 8], [146011, 8], [158781, 8], [180716, 8], [176, 8], [302, 8], [315, 8], [683, 8], [1079, 8], [1436, 8], [3459, 8], [12464, 8], [20549, 8], [28990, 8], [29169, 8], [32969, 8], [33731, 8], [42212, 8], [46032, 8], [54409, 8], [57681, 8], [63452, 8], [2078, 27], [3723, 27], [23004, 27], [23655, 27], [26047, 27], [2957, 2954], [57419, 33947], [70282, 21], [13, 21], [837, 21], [2662, 21], [12464, 21], [20095, 21], [47615, 21], [107106, 23], [13, 23], [19871, 23], [20095, 23], [54061, 451], [203, 473], [1491, 473], [2851, 473], [132311, 473], [3243, 3502], [18219, 27520], [19871, 183], [634, 632], [348, 254], [21703, 357], [80327, 12464], [3243, 556], [6856, 556], [65453, 556], [92475, 31510], [2, 14], [2657, 14], [13, 140], [348, 198], [120497, 198], [1039, 2658], [2657, 2658], [11323, 5415], [16321, 5415], [16791, 5415], [19571, 5415], [32081, 32082], [178742, 32082], [44049, 65482], [203, 141], [13, 141], [348, 232], [254, 232], [15134, 15132], [97, 8], [290, 8], [719, 8], [1162, 8], [2129, 8], [7622, 8], [9003, 8], [9975, 8], [11993, 8], [12846, 8], [15120, 8], [23711, 8], [29368, 8], [30267, 8], [38596, 8], [40238, 8], [240991, 8], [251009, 8], [252884, 8], [258431, 8], [260857, 8], [107431, 8], [115184, 8], [170820, 8], [174027, 8], [191902, 8], [49095, 8], [197924, 8], [210697, 8], [220497, 8], [232125, 8], [236039, 8], [69999, 8], [76526, 8], [85154, 8], [88632, 8], [92153, 8], [147269, 8], [162679, 8], [6, 8], [206959, 27], [4003, 27], [10458, 27], [14134, 27], [30106, 27], [151540, 2954], [40962, 2954], [33948, 33947], [455, 21], [481, 21], [1141, 21], [1707, 21], [9711, 21], [9714, 21], [16588, 21], [31741, 21], [35371, 21], [190837, 21], [269, 23], [455, 23], [1204, 23], [7622, 23], [35371, 23], [47567, 451], [47568, 451], [1204, 473], [45955, 473], [2250, 3502], [138055, 3502], [109512, 27520], [854, 183], [200, 632], [151811, 357], [30416, 357], [39882, 357], [9711, 12464], [9714, 12464], [2470, 556], [4604, 556], [51389, 556], [55409, 35371], [55411, 35371], [2297, 14], [18884, 14], [25219, 14], [25219, 2658], [116428, 5415], [10458, 5415], [22488, 5415], [42157, 5415], [160105, 32082], [26158, 32082], [28, 79], [1204, 1489], [18864, 15132], [13207, 15132], [206129, 8], [213569, 8], [215392, 8], [216369, 8], [222854, 8], [223278, 8], [226310, 8], [226323, 8], [229023, 8], [230371, 8], [239448, 8], [249100, 8], [249215, 8], [83373, 8], [84410, 8], [113149, 8], [117385, 8], [123801, 8], [144007, 8], [149035, 8], [156226, 8], [156352, 8], [183574, 8], [185596, 8], [80, 8], [98, 8], [182, 8], [226, 8], [1939, 8], [2570, 8], [6665, 8], [13423, 8], [14158, 8], [16812, 8], [17360, 8], [21387, 8], [25053, 8], [31505, 8], [32082, 8], [35873, 8], [54441, 8], [57742, 8], [125553, 8], [126903, 8], [188656, 8], [191914, 8], [14, 27], [2658, 27], [5415, 27], [11765, 27], [13405, 27], [104613, 2954], [108015, 2954], [4493, 2954], [193416, 2954], [17049, 15531], [14, 21], [303, 21], [1999, 21], [3464, 21], [5415, 21], [5455, 21], [23520, 21], [51652, 21], [303, 23], [6503, 23], [32128, 23], [32710, 23], [142827, 3502], [108015, 18982], [22446, 18982], [23014, 18982], [25233, 27520], [55414, 27520], [182, 183], [633, 632], [255, 254], [256, 254], [189691, 357], [5455, 12464], [600, 556], [1514, 556], [5406, 556], [19174, 556], [26197, 556], [65445, 556], [21085, 31510], [2658, 14], [21580, 14], [32789, 14], [198, 140], [140, 198], [255, 198], [64674, 5415], [16320, 5415], [32084, 32082], [47637, 32082], [147280, 32082], [148182, 32082], [178743, 32082], [140, 141], [198, 141], [255, 232], [256, 232], [198, 232], [140, 199], [256, 199], [198, 199], [255, 199], [15133, 15132], [67704, 8], [68749, 8], [103821, 8], [110880, 8], [118019, 8], [196751, 8], [201928, 8], [221727, 8], [229652, 8], [240134, 8], [261241, 8], [153999, 8], [173450, 8], [261986, 8], [262023, 8], [20, 8], [42, 8], [164, 8], [210, 8], [668, 8], [687, 8], [784, 8], [5316, 8], [8310, 8], [20578, 8], [24688, 8], [34859, 8], [35249, 8], [35290, 8], [39506, 8], [44840, 8], [57297, 8], [2333, 27], [3549, 27], [25867, 27], [26321, 27], [40311, 27], [45704, 27], [63713, 27], [70617, 2954], [253733, 2954], [2719, 2954], [6683, 2954], [101247, 15531], [46387, 15531], [77301, 21], [1255, 21], [10954, 21], [13904, 21], [17758, 21], [1255, 23], [5453, 23], [10954, 23], [32976, 23], [40311, 23], [45704, 23], [46387, 23], [56122, 23], [75448, 23], [20, 23], [141, 23], [142, 23], [232, 23], [35527, 451], [54062, 451], [58937, 451], [93567, 451], [27768, 451], [27519, 27520], [90685, 183], [1, 2], [88636, 254], [102997, 357], [49787, 357], [1697, 556], [4185, 556], [5757, 556], [92476, 31510], [250011, 35371], [141, 140], [232, 140], [141, 198], [232, 198], [5739, 2658], [4206, 5415], [6603, 5415], [147219, 32082], [15875, 15132], [64436, 8], [70602, 8], [92606, 8], [98780, 8], [106157, 8], [106351, 8], [113979, 8], [199114, 8], [203464, 8], [207722, 8], [211192, 8], [220059, 8], [230222, 8], [231143, 8], [242199, 8], [17, 8], [22, 8], [99, 8], [112, 8], [479, 8], [597, 8], [685, 8], [819, 8], [23045, 8], [28197, 8], [31502, 8], [39574, 8], [40729, 8], [42656, 8], [43649, 8], [45371, 8], [46643, 8], [136713, 8], [142315, 8], [184132, 8], [256491, 8], [122829, 8], [125752, 8], [187851, 8], [56632, 8], [60838, 8], [61514, 8], [13404, 27], [1165, 2954], [34231, 2954], [253731, 2954], [67469, 15531], [14847, 15531], [15533, 15531], [30489, 33947], [33949, 33947], [72136, 21], [2721, 21], [9712, 21], [53606, 21], [22, 23], [201, 23], [1489, 23], [2721, 23], [42656, 23], [54345, 23], [86723, 451], [27770, 451], [59530, 451], [852, 473], [1489, 473], [10381, 3502], [253731, 18982], [112, 183], [245, 254], [288, 357], [233108, 357], [6937, 12464], [9712, 12464], [421, 556], [1238, 556], [3320, 556], [15132, 556], [18312, 556], [90063, 31510], [92473, 31510], [199, 140], [199, 198], [245, 198], [201650, 5415], [135589, 32082], [32083, 32082], [199, 141], [199, 232], [245, 232], [11334, 15132]], \"ipython\": true, \"error_msg\": \"\"}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "productX = graph.get_edges(dst_ids= 13)\n", - "\n", - "subgraph = gl.SGraph()\n", - "\n", - "for f in productX['__src_id']:\n", - " subgraph = subgraph.add_edges(graph.get_edges(src_ids=None, dst_ids=[f]),\n", - " src_field='__src_id', dst_field='__dst_id')\n", - " \n", - "subgraph.show(highlight=list(productX['__src_id']), vlabel='__id', vlabel_hover=True, \n", - " arrows=False, ewidth=0.7, node_size=100)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Distribution of Distances from the Most Influential Product (ID: 33)" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "sp = gl.shortest_path.create(graph, source_vid=33, verbose=False)\n", - "sp_graph = sp['graph']" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "application/javascript": [ - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css\"\n", - "}));\n", - "$(\"head\").append($(\"\").attr({\n", - " rel: \"stylesheet\",\n", - " type: \"text/css\",\n", - " href: \"//dato.com/files/canvas/1.7.1/css/canvas.css\"\n", - "}));\n", - "\n", - " (function(){\n", - "\n", - " var e = null;\n", - " if (typeof element == 'undefined') {\n", - " var scripts = document.getElementsByTagName('script');\n", - " var thisScriptTag = scripts[scripts.length-1];\n", - " var parentDiv = thisScriptTag.parentNode;\n", - " e = document.createElement('div');\n", - " parentDiv.appendChild(e);\n", - " } else {\n", - " e = element[0];\n", - " }\n", - "\n", - " if (typeof requirejs !== 'undefined') {\n", - " // disable load timeout; ipython_app.js is large and can take a while to load.\n", - " requirejs.config({waitSeconds: 0});\n", - " }\n", - "\n", - " require(['//dato.com/files/canvas/1.7.1/js/ipython_app.js'], function(IPythonApp){\n", - " var app = new IPythonApp();\n", - " app.attachView('sarray','Numeric', {\"ipython\": true, \"sketch\": {\"std\": 3.906466084311058e+27, \"complete\": true, \"min\": 0.0, \"max\": 1e+30, \"quantile\": [0.0, 15.0, 16.0, 17.0, 17.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 20.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 29.0, 29.0, 29.0, 29.0, 30.0, 30.0, 30.0, 31.0, 31.0, 32.0, 33.0, 34.0, 36.0, 1e+30], \"median\": 24.0, \"numeric\": true, \"num_unique\": 71, \"num_undefined\": 0, \"var\": 1.5260477267872571e+55, \"progress\": 1.0, \"size\": 262111, \"frequent_items\": {\"0.0\": {\"frequency\": 1, \"value\": 0.0}, \"1.0\": {\"frequency\": 5, \"value\": 1.0}, \"2.0\": {\"frequency\": 6, \"value\": 2.0}, \"3.0\": {\"frequency\": 10, \"value\": 3.0}, \"4.0\": {\"frequency\": 19, \"value\": 4.0}, \"5.0\": {\"frequency\": 22, \"value\": 5.0}, \"6.0\": {\"frequency\": 27, \"value\": 6.0}, \"7.0\": {\"frequency\": 37, \"value\": 7.0}, \"8.0\": {\"frequency\": 56, \"value\": 8.0}, \"9.0\": {\"frequency\": 79, \"value\": 9.0}, \"10.0\": {\"frequency\": 123, \"value\": 10.0}, \"11.0\": {\"frequency\": 161, \"value\": 11.0}, \"12.0\": {\"frequency\": 281, \"value\": 12.0}, \"13.0\": {\"frequency\": 498, \"value\": 13.0}, \"14.0\": {\"frequency\": 995, \"value\": 14.0}, \"15.0\": {\"frequency\": 1812, \"value\": 15.0}, \"16.0\": {\"frequency\": 3085, \"value\": 16.0}, \"17.0\": {\"frequency\": 4626, \"value\": 17.0}, \"18.0\": {\"frequency\": 6990, \"value\": 18.0}, \"19.0\": {\"frequency\": 10294, \"value\": 19.0}, \"20.0\": {\"frequency\": 14566, \"value\": 20.0}, \"21.0\": {\"frequency\": 19601, \"value\": 21.0}, \"22.0\": {\"frequency\": 24017, \"value\": 22.0}, \"23.0\": {\"frequency\": 27318, \"value\": 23.0}, \"24.0\": {\"frequency\": 28170, \"value\": 24.0}, \"25.0\": {\"frequency\": 26579, \"value\": 25.0}, \"26.0\": {\"frequency\": 23323, \"value\": 26.0}, \"27.0\": {\"frequency\": 18867, \"value\": 27.0}, \"28.0\": {\"frequency\": 14703, \"value\": 28.0}, \"29.0\": {\"frequency\": 11017, \"value\": 29.0}, \"30.0\": {\"frequency\": 7730, \"value\": 30.0}, \"31.0\": {\"frequency\": 5335, \"value\": 31.0}, \"32.0\": {\"frequency\": 3561, \"value\": 32.0}, \"33.0\": {\"frequency\": 2421, \"value\": 33.0}, \"34.0\": {\"frequency\": 1729, \"value\": 34.0}, \"35.0\": {\"frequency\": 1144, \"value\": 35.0}, \"36.0\": {\"frequency\": 777, \"value\": 36.0}, \"37.0\": {\"frequency\": 503, \"value\": 37.0}, \"38.0\": {\"frequency\": 418, \"value\": 38.0}, \"39.0\": {\"frequency\": 272, \"value\": 39.0}, \"40.0\": {\"frequency\": 218, \"value\": 40.0}, \"41.0\": {\"frequency\": 167, \"value\": 41.0}, \"42.0\": {\"frequency\": 96, \"value\": 42.0}, \"43.0\": {\"frequency\": 86, \"value\": 43.0}, \"44.0\": {\"frequency\": 61, \"value\": 44.0}, \"45.0\": {\"frequency\": 43, \"value\": 45.0}, \"46.0\": {\"frequency\": 23, \"value\": 46.0}, \"47.0\": {\"frequency\": 29, \"value\": 47.0}, \"48.0\": {\"frequency\": 23, \"value\": 48.0}, \"49.0\": {\"frequency\": 21, \"value\": 49.0}, \"50.0\": {\"frequency\": 16, \"value\": 50.0}, \"51.0\": {\"frequency\": 12, \"value\": 51.0}, \"52.0\": {\"frequency\": 5, \"value\": 52.0}, \"53.0\": {\"frequency\": 6, \"value\": 53.0}, \"54.0\": {\"frequency\": 3, \"value\": 54.0}, \"55.0\": {\"frequency\": 5, \"value\": 55.0}, \"56.0\": {\"frequency\": 8, \"value\": 56.0}, \"57.0\": {\"frequency\": 12, \"value\": 57.0}, \"58.0\": {\"frequency\": 12, \"value\": 58.0}, \"59.0\": {\"frequency\": 10, \"value\": 59.0}, \"60.0\": {\"frequency\": 16, \"value\": 60.0}, \"61.0\": {\"frequency\": 17, \"value\": 61.0}, \"62.0\": {\"frequency\": 14, \"value\": 62.0}, \"63.0\": {\"frequency\": 7, \"value\": 63.0}, \"64.0\": {\"frequency\": 6, \"value\": 64.0}, \"65.0\": {\"frequency\": 3, \"value\": 65.0}, \"66.0\": {\"frequency\": 6, \"value\": 66.0}, \"67.0\": {\"frequency\": 2, \"value\": 67.0}, \"68.0\": {\"frequency\": 1, \"value\": 68.0}, \"69.0\": {\"frequency\": 1, \"value\": 69.0}, \"1e+30\": {\"frequency\": 4, \"value\": 1e+30}}, \"mean\": 1.526071015714727e+25}, \"selected_variable\": {\"name\": [\"\"], \"dtype\": \"float\", \"view_component\": \"Numeric\", \"view_file\": \"sarray\", \"descriptives\": {\"rows\": 262111}, \"type\": \"SArray\", \"view_components\": [\"Numeric\", \"Categorical\"]}, \"histogram\": {\"progress\": 1.0, \"histogram\": {\"max\": 1.0039792753807577e+30, \"bins\": [261232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4], \"min\": 0.0}, \"min\": 0.0, \"complete\": 1, \"max\": 1e+30}}, e);\n", - " });\n", - " })();\n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "mostInfluential_sf = sp_graph.get_vertices(ids=graph.vertices['__id'])\n", - "mostInfluential_sf['distance'].show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** 99% of all the products are within 36 'hops' from the most influential product.**" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mean_dists = {}\n", - "\n", - "most_influential_10 = pagerank_out.topk('pagerank', k=10)['__id']\n", - "\n", - "for product in most_influential_10:\n", - "\n", - " # get single-source shortest paths\n", - " sp2 = gl.shortest_path.create(graph, source_vid=product, verbose=False)\n", - " sp2_graph = sp2.get('graph')\n", - " sp2_out = sp2_graph.get_vertices(ids=graph.vertices['__id'])\n", - "\n", - " # Compute some statistics about the distribution of distances\n", - " mean_dists[product] = sp2_out['distance'].mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{8: 1.526071015714727e+25,\n", - " 33: 1.526071015714727e+25,\n", - " 56: 1.526071015714727e+25,\n", - " 93: 1.526071015714727e+25,\n", - " 94: 9.999961848224596e+29,\n", - " 95: 1.526071015714727e+25,\n", - " 151: 1.526071015714727e+25,\n", - " 2353: 1.526071015714727e+25,\n", - " 2501: 1.526071015714727e+25,\n", - " 4429: 1.526071015714727e+25}" - ] - }, - "execution_count": 178, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mean_dists" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Triangle Counting\n", - "\n", - " Triangles in a graph are complete subgraphs with only three vertices. The number of triangles to which an product belongs is a measure of the connectivity of its 'social network'." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PROGRESS: Initializing vertex ids.\n", - "PROGRESS: Removing duplicate (bidirectional) edges.\n", - "PROGRESS: Counting triangles...\n", - "PROGRESS: Finished in 5.99601 secs.\n", - "PROGRESS: Total triangles in the graph : 717719\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idtriangle_count
579
738
8166
1034
2725
2948
33241
479
506
5231
\n", - "[262111 rows x 2 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\ttriangle_count\tint\n", - "\n", - "Rows: 262111\n", - "\n", - "Data:\n", - "+------+----------------+\n", - "| __id | triangle_count |\n", - "+------+----------------+\n", - "| 5 | 79 |\n", - "| 7 | 38 |\n", - "| 8 | 166 |\n", - "| 10 | 34 |\n", - "| 27 | 25 |\n", - "| 29 | 48 |\n", - "| 33 | 241 |\n", - "| 47 | 9 |\n", - "| 50 | 6 |\n", - "| 52 | 31 |\n", - "+------+----------------+\n", - "[262111 rows x 2 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "triangle_counting_model = gl.triangle_counting.create(graph)\n", - "triangle_counting_graph = triangle_counting_model['graph']\n", - "triangle_counting_graph.vertices" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Importance and Connectivity of Products in One Table" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
__idpagerankdeltatriangle_count
2620991.72869426481.38073115812e-0522
2620940.1842792558921.51843367713e-073
2620361.287935694579.27235263513e-0514
2620310.4763480211440.0002034426398
2620170.1876114468144.75773301034e-084
2620150.2659331177164.9584102515e-066
2620130.1945984180364.0723901969e-063
2619500.6990306237250.0001993755244334
2619310.2640542127184.1403055337e-064
2619130.2511845355374.74309107973e-061
\n", - "[262111 rows x 4 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\t__id\tint\n", - "\tpagerank\tfloat\n", - "\tdelta\tfloat\n", - "\ttriangle_count\tint\n", - "\n", - "Rows: 262111\n", - "\n", - "Data:\n", - "+--------+----------------+-------------------+----------------+\n", - "| __id | pagerank | delta | triangle_count |\n", - "+--------+----------------+-------------------+----------------+\n", - "| 262099 | 1.7286942648 | 1.38073115812e-05 | 22 |\n", - "| 262094 | 0.184279255892 | 1.51843367713e-07 | 3 |\n", - "| 262036 | 1.28793569457 | 9.27235263513e-05 | 14 |\n", - "| 262031 | 0.476348021144 | 0.000203442639 | 8 |\n", - "| 262017 | 0.187611446814 | 4.75773301034e-08 | 4 |\n", - "| 262015 | 0.265933117716 | 4.9584102515e-06 | 6 |\n", - "| 262013 | 0.194598418036 | 4.0723901969e-06 | 3 |\n", - "| 261950 | 0.699030623725 | 0.000199375524433 | 4 |\n", - "| 261931 | 0.264054212718 | 4.1403055337e-06 | 4 |\n", - "| 261913 | 0.251184535537 | 4.74309107973e-06 | 1 |\n", - "+--------+----------------+-------------------+----------------+\n", - "[262111 rows x 4 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Joined the computed statistics in a new graph\n", - "v = pagerank_graph.vertices.join(triangle_counting_graph.vertices)\n", - "joined_graph = gl.SGraph(v, graph.edges)\n", - "joined_graph.vertices" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "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.11" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/Load Amazon Data.ipynb b/Load Amazon Data.ipynb deleted file mode 100644 index d75c4c1..0000000 --- a/Load Amazon Data.ipynb +++ /dev/null @@ -1,196 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import graphlab as gl" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO] \u001b[1;32m1452712253 : INFO: (initialize_globals_from_environment:282): Setting configuration variable GRAPHLAB_FILEIO_ALTERNATIVE_SSL_CERT_FILE to /Users/marvinbertin/anaconda/envs/dato-env/lib/python2.7/site-packages/certifi/cacert.pem\n", - "\u001b[0m\u001b[1;32m1452712253 : INFO: (initialize_globals_from_environment:282): Setting configuration variable GRAPHLAB_FILEIO_ALTERNATIVE_SSL_CERT_DIR to \n", - "\u001b[0mThis non-commercial license of GraphLab Create is assigned to marvin.bertin@gmail.com and will expire on September 15, 2016. For commercial licensing options, visit https://dato.com/buy/.\n", - "\n", - "[INFO] Start server at: ipc:///tmp/graphlab_server-4341 - Server binary: /Users/marvinbertin/anaconda/envs/dato-env/lib/python2.7/site-packages/graphlab/unity_server - Server log: /tmp/graphlab_server_1452712253.log\n", - "[INFO] GraphLab Server Version: 1.7.1\n" - ] - } - ], - "source": [ - "data = gl.load_sframe(\"data/sf_all/\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
UIDRatingMID
175325915279
51285225279
55716735279
34984435279
227619815279
164864625279
75341815279
216423525279
229896425279
36984825279
\n", - "[100480507 rows x 3 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\tUID\tint\n", - "\tRating\tint\n", - "\tMID\tint\n", - "\n", - "Rows: 100480507\n", - "\n", - "Data:\n", - "+---------+--------+------+\n", - "| UID | Rating | MID |\n", - "+---------+--------+------+\n", - "| 1753259 | 1 | 5279 |\n", - "| 512852 | 2 | 5279 |\n", - "| 557167 | 3 | 5279 |\n", - "| 349844 | 3 | 5279 |\n", - "| 2276198 | 1 | 5279 |\n", - "| 1648646 | 2 | 5279 |\n", - "| 753418 | 1 | 5279 |\n", - "| 2164235 | 2 | 5279 |\n", - "| 2298964 | 2 | 5279 |\n", - "| 369848 | 2 | 5279 |\n", - "+---------+--------+------+\n", - "[100480507 rows x 3 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Canvas is accessible via web browser at the URL: http://localhost:50837/index.html\n", - "Opening Canvas in default web browser.\n" - ] - } - ], - "source": [ - "data.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "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.11" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/Load Netflix data.ipynb b/Load Netflix data.ipynb deleted file mode 100644 index 78a7ddb..0000000 --- a/Load Netflix data.ipynb +++ /dev/null @@ -1,607 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import graphlab as gl\n", - "import numpy as np\n", - "from scipy.sparse import *\n", - "from scipy import *" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "PROGRESS: Finished parsing file /Volumes/EXTRADRIVE/data/netflix_sample.csv\n", - "PROGRESS: Parsing completed. Parsed 100 lines in 1.71772 secs.\n", - "------------------------------------------------------\n", - "Inferred types from first line of file as \n", - "column_type_hints=[int,int,int,int]\n", - "If parsing fails due to incorrect types, you can correct\n", - "the inferred type list above and pass it to read_csv in\n", - "the column_type_hints argument\n", - "------------------------------------------------------\n", - "PROGRESS: Read 2329258 lines. Lines per second: 1.05647e+06\n", - "PROGRESS: Finished parsing file /Volumes/EXTRADRIVE/data/netflix_sample.csv\n", - "PROGRESS: Parsing completed. Parsed 3749377 lines in 2.43001 secs.\n" - ] - } - ], - "source": [ - "data = gl.SFrame.read_csv(\"/Volumes/EXTRADRIVE/data/netflix_sample.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
X1UIDRatingMID
036984825279
1262375825279
2229340015279
3154231035279
4121617025279
5232691725279
6122113425279
7135723025279
8160295525279
9254410255279
\n", - "[3749377 rows x 4 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\tX1\tint\n", - "\tUID\tint\n", - "\tRating\tint\n", - "\tMID\tint\n", - "\n", - "Rows: 3749377\n", - "\n", - "Data:\n", - "+----+---------+--------+------+\n", - "| X1 | UID | Rating | MID |\n", - "+----+---------+--------+------+\n", - "| 0 | 369848 | 2 | 5279 |\n", - "| 1 | 2623758 | 2 | 5279 |\n", - "| 2 | 2293400 | 1 | 5279 |\n", - "| 3 | 1542310 | 3 | 5279 |\n", - "| 4 | 1216170 | 2 | 5279 |\n", - "| 5 | 2326917 | 2 | 5279 |\n", - "| 6 | 1221134 | 2 | 5279 |\n", - "| 7 | 1357230 | 2 | 5279 |\n", - "| 8 | 1602955 | 2 | 5279 |\n", - "| 9 | 2544102 | 5 | 5279 |\n", - "+----+---------+--------+------+\n", - "[3749377 rows x 4 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "17770" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numUsers = len(data[\"UID\"].unique())\n", - "numUsers" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "17695" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numMovies = len(data[\"MID\"].unique())\n", - "numMovies" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "users = data[\"UID\"].unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "movies = data[\"MID\"].unique()" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "usersDict = gl.SArray([{ID: idx for idx, ID in enumerate(users)}])\n", - "moviesDict = gl.SArray([{ID: idx for idx, ID in enumerate(movies)}])" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "data[\"rowIdx\"] = data.apply(lambda x: usersDict[0].get(x[\"UID\"]))\n", - "data[\"columnIdx\"] = data.apply(lambda x: moviesDict[0].get(x[\"MID\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
X1UIDRatingMIDrowIdxcolumnIdx
036984825279130168671
1262375825279133098671
2229340015279101848671
315423103527929498671
412161702527990478671
5232691725279131138671
612211342527948338671
713572302527954678671
816029552527962178671
925441025527961018671
\n", - "[3749377 rows x 6 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.\n", - "
" - ], - "text/plain": [ - "Columns:\n", - "\tX1\tint\n", - "\tUID\tint\n", - "\tRating\tint\n", - "\tMID\tint\n", - "\trowIdx\tint\n", - "\tcolumnIdx\tint\n", - "\n", - "Rows: 3749377\n", - "\n", - "Data:\n", - "+----+---------+--------+------+--------+-----------+\n", - "| X1 | UID | Rating | MID | rowIdx | columnIdx |\n", - "+----+---------+--------+------+--------+-----------+\n", - "| 0 | 369848 | 2 | 5279 | 13016 | 8671 |\n", - "| 1 | 2623758 | 2 | 5279 | 13309 | 8671 |\n", - "| 2 | 2293400 | 1 | 5279 | 10184 | 8671 |\n", - "| 3 | 1542310 | 3 | 5279 | 2949 | 8671 |\n", - "| 4 | 1216170 | 2 | 5279 | 9047 | 8671 |\n", - "| 5 | 2326917 | 2 | 5279 | 13113 | 8671 |\n", - "| 6 | 1221134 | 2 | 5279 | 4833 | 8671 |\n", - "| 7 | 1357230 | 2 | 5279 | 5467 | 8671 |\n", - "| 8 | 1602955 | 2 | 5279 | 6217 | 8671 |\n", - "| 9 | 2544102 | 5 | 5279 | 6101 | 8671 |\n", - "+----+---------+--------+------+--------+-----------+\n", - "[3749377 rows x 6 columns]\n", - "Note: Only the head of the SFrame is printed.\n", - "You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns." - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "row = data[\"rowIdx\"]\n", - "col = data[\"columnIdx\"]\n", - "ratings = data[\"Rating\"]\n", - "UM = csr_matrix( (ratings,(row,col)), shape=(numUsers,numMovies) )" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(17770, 17695)" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM.get_shape()" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM[2949, 8671]" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "13505909" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM_sum = UM.sum()\n", - "UM_sum" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3.6021741745361964" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM_mean = UM_sum / float(UM.nnz)\n", - "UM_mean" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "12.835028109760003" - ] - }, - "execution_count": 136, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM_std = sum((UM.toarray() - UM_mean)**2) / float(numMovies*numUsers)\n", - "UM_std" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183],\n", - " [-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183],\n", - " [-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183],\n", - " ..., \n", - " [-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183],\n", - " [-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183],\n", - " [-0.28065183, -0.28065183, -0.28065183, ..., -0.28065183,\n", - " -0.28065183, -0.28065183]])" - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "UM_norm = (UM.toarray() - UM_mean) / UM_std\n", - "UM_norm" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "UM_norm = csr_matrix(UM_norm)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "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.11" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/MovieRatingNorm.scala b/MovieRatingNorm.scala deleted file mode 100644 index 97b3150..0000000 --- a/MovieRatingNorm.scala +++ /dev/null @@ -1,43 +0,0 @@ -val sampleFile = "file:///netflix_data.csv" - -val ratings = sc.textFile(new File(sampleFile).toString) - .mapPartitionsWithIndex { (idx, iter) => if (idx == 0) iter.drop(1) else iter } - .map { line => - val fields = line.split(",") - // format: (Index,UID, Rating, MID) - // Rating(userId, MID, Rating) - Array(fields(1).toInt, fields(3).toInt,fields(2).toInt).toNDArray - - -val users = ratings.map(s => s(0)).distinct.zipWithIndex.toArray.toMap -val movies = ratings.map(s => s(1)).distinct.zipWithIndex.toArray.toMap - -val numRatings = ratings.count.toInt -val numUsers = ratings.map(s => s(0)).distinct.count.toInt -val numMovies = ratings.map(s => s(1)).distinct.count.toInt - -val ratingsarr = ratings.map(s => s(2)).toArray.toNDArray -val moviesids = ratings.map(s => s(1)).toArray -val userids = ratings.map(s => s(0)).toArray - -val moviemaparr = moviesids.map(s => movies.getOrElse(s,0)) -val usermaparr = userids.map(s => users.getOrElse(s,0)) - -val meanrating = org.nd4j.linalg.factory.Nd4j.mean(ratingsarr)(0) -val stdrating = org.nd4j.linalg.factory.Nd4j.std(ratingsarr)(0) - -val adjratingarr = (ratingsarr - meanrating) / stdrating - -val arr = Array(0).toNDArray -val V = arr.reshape(numUsers,numMovies) - -for(i <- 0 until numRatings){ - val row = usermaparr(i).asInstanceOf[Number].intValue() - val column = moviemaparr(i).asInstanceOf[Number].intValue() - V(row,column) = adjratingarr(i) -} -// UserUser -val UU = V dot V.transpose - -// ItemItem -val MM = V.transpose dot V \ No newline at end of file diff --git a/RunSparkNotebookAWS.txt b/RunSparkNotebookAWS.txt deleted file mode 100644 index e26e4f0..0000000 --- a/RunSparkNotebookAWS.txt +++ /dev/null @@ -1,11 +0,0 @@ -ssh -i ~/.ssh/gu-recco.pem ec2-user@ec2-54-201-96-171.us-west-2.compute.amazonaws.com - -sudo su - -docker exec -i -t 492e8191b0f3 bash - -spark-notebook-0.6.2-scala-2.11.7-spark-1.6.0-hadoop-2.6.0/bin/spark-notebook -Dhttp.port=22 - -^Commands to launch spark notebook on server - -then you can login @ http://ec2-54-201-96-171.us-west-2.compute.amazonaws.com:32781/ \ No newline at end of file diff --git a/UnstackSparseMatrix.scala b/UnstackSparseMatrix.scala deleted file mode 100644 index eb42fab..0000000 --- a/UnstackSparseMatrix.scala +++ /dev/null @@ -1,40 +0,0 @@ - -object Cells { - // Line format: (0,{0:5.3,1:4.5,4:3.4}) - val text = sc.textFile("data/ItemItemMatrixSample.txt") - - /* ... new cell ... */ - - text.take(3) - - /* ... new cell ... */ - - def trimString(string: String): String = string.substring(1, string.length - 1) - - /* ... new cell ... */ - - def trimFront(string: String): String = string.substring(1, string.length) - - /* ... new cell ... */ - - def parser(idx: Int, dict: String): Array[List[String]] = { - trimString(dict) - .split(",") - .filter(x => x(0).toString.toInt < idx) - .map { x => - val edgeScore = x.split(":") - List(idx.toString, edgeScore(0), edgeScore(1))} - } - - /* ... new cell ... */ - - text.map { x => - val xTrim = trimString(x) - (xTrim.head, trimFront(xTrim.tail)) - }.flatMap(x => parser(x._1.toString.toInt, x._2)) - .map(_.mkString(",")) - .take(10) - //.coalesce(4) - //.saveAsTextFile("data/ItemItemEdges") -} - \ No newline at end of file diff --git a/exportEdges.scala b/exportEdges.scala deleted file mode 100644 index 7e86270..0000000 --- a/exportEdges.scala +++ /dev/null @@ -1,15 +0,0 @@ -// symmetric matrix only need to loop over triangle matrix -val ItemCombinations = sc.parallelize( - for { - i <- 0 until numMovie - j <- 0 to i -} yield (i, j)) - -val ItemEdges = ItemCombinations - .filter(x => IM.apply(x._1, x._2) != 0) // may be different with sparse Matrix - .map(x => List(x._1, x._2, IM.apply(x._1, x._2))) //(itemNode_i, itemNode_j, edgeWeight) - -// save weighted edges to file -ItemEdges.map(x => x.mkString(",")) - .coalesce(1) - .saveAsTextFile("data/ItemItemEdges") \ No newline at end of file