From f028915426c928864b36bc144056df12b0e7c7da Mon Sep 17 00:00:00 2001
From: southjohn64 <61773763+southjohn64@users.noreply.github.com>
Date: Tue, 16 Nov 2021 10:18:47 +0200
Subject: [PATCH] Created using Colaboratory
---
Copy_of_HW_4.ipynb | 1410 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1410 insertions(+)
create mode 100644 Copy_of_HW_4.ipynb
diff --git a/Copy_of_HW_4.ipynb b/Copy_of_HW_4.ipynb
new file mode 100644
index 0000000..6dfaf71
--- /dev/null
+++ b/Copy_of_HW_4.ipynb
@@ -0,0 +1,1410 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.7"
+ },
+ "colab": {
+ "name": "Copy of HW-4.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "include_colab_link": true
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "pOXV8fOLj-7Y"
+ },
+ "source": [
+ "!pip install turicreate"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "4eZPBuMDkGiN"
+ },
+ "source": [
+ "import json\n",
+ "import os\n",
+ "import networkx as nx\n",
+ "import turicreate as tc\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ],
+ "execution_count": 60,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3wyT54-KkH2K"
+ },
+ "source": [
+ "!mkdir ./datasets/\n",
+ "!rm -rf ./datasets/reddit/"
+ ],
+ "execution_count": 3,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "wXV4CqgFkK1O"
+ },
+ "source": [
+ "!mkdir ./datasets/reddit\n",
+ "!wget http://dynamics.cs.washington.edu/nobackup/reddit/Dexter.tar.gz -O ./datasets/reddit/Dexter.tar.gz\n",
+ "#!unzip ./datasets/reddit/*.gz -d ./datasets/reddit/\n",
+ "!tar -xf \"/content/datasets/reddit/Dexter.tar.gz\" -C \"./datasets/reddit/\"\n",
+ "!ls ./datasets/reddit/"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "qBOVT9Z2kNql",
+ "outputId": "aed728a3-8adc-4e4e-8429-e613218e6db3"
+ },
+ "source": [
+ "sg = tc.load_sgraph('/content/datasets/reddit/Dexter.2009-10-23.2009-11-20.sgraph')\n",
+ "sg"
+ ],
+ "execution_count": 51,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "SGraph({'num_edges': 16, 'num_vertices': 8})\n",
+ "Vertex Fields:['__id', 'mindate', 'maxdate']\n",
+ "Edge Fields:['__src_id', '__dst_id', 'maxdate', 'weight', 'mindate']"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 51
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "yCmgortah1Iz"
+ },
+ "source": [
+ "# Homework Assignment 4\n",
+ "### The Art of Analyzing Big Data - The Data Scientist’s Toolbox "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "7A2wSKHih1I3"
+ },
+ "source": [
+ "## Reddit Networks\n",
+ "Using the [Reddit networks dataset](http://dynamics.cs.washington.edu/nobackup/reddit/) select the subreddit of your favorite TV show. Using the data of the selected subreddit, \n",
+ "answer the following questions:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1yz7w-sXh1I5"
+ },
+ "source": [
+ "**Task 1:** Calculate and visualize the degree distribution of the vertices in the network (15pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "PJe9yE6xh1I7",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 207
+ },
+ "outputId": "1567458b-a3e4-4357-c9d4-96af04c2fb3c"
+ },
+ "source": [
+ "from turicreate import degree_counting\n",
+ "deg = degree_counting.create(sg)\n",
+ "deg_graph = deg['graph'] # a new SGraph with degree data attached to each vertex\n",
+ "in_degree = deg_graph.vertices[['__id', 'in_degree']]\n",
+ "out_degree = deg_graph.vertices[['__id', 'out_degree']]\n",
+ "deg_graph.vertices[['__id', 'total_degree']]"
+ ],
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ " \n",
+ " __id | \n",
+ " total_degree | \n",
+ "
\n",
+ " \n",
+ " ContentWithOurDecay | \n",
+ " 8 | \n",
+ "
\n",
+ " \n",
+ " chroniq | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " aenea | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " Bbaily | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " DoeL | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " Surcam | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " chime | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " apmihal | \n",
+ " 2 | \n",
+ "
\n",
+ "
\n",
+ "[8 rows x 2 columns]
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Columns:\n",
+ "\t__id\tstr\n",
+ "\ttotal_degree\tint\n",
+ "\n",
+ "Rows: 8\n",
+ "\n",
+ "Data:\n",
+ "+---------------------+--------------+\n",
+ "| __id | total_degree |\n",
+ "+---------------------+--------------+\n",
+ "| ContentWithOurDecay | 8 |\n",
+ "| chroniq | 6 |\n",
+ "| aenea | 4 |\n",
+ "| Bbaily | 6 |\n",
+ "| DoeL | 2 |\n",
+ "| Surcam | 2 |\n",
+ "| chime | 2 |\n",
+ "| apmihal | 2 |\n",
+ "+---------------------+--------------+\n",
+ "[8 rows x 2 columns]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "u4FKPZhhkx83"
+ },
+ "source": [
+ "graph_deg_df = deg_graph.vertices[['__id', 'total_degree']].to_dataframe()\n"
+ ],
+ "execution_count": 5,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 354
+ },
+ "id": "7R5nwl4IkzRq",
+ "outputId": "98ffb6e3-eddd-42b2-9110-b30e2c311acc"
+ },
+ "source": [
+ "sns.set(rc={'figure.figsize':(15.7,5.27)})\n",
+ "\n",
+ "ax = sns.scatterplot(data=graph_deg_df , x=\"__id\", y=\"total_degree\")\n",
+ "ax.set(xlabel='vertex name (__id)');"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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P/7Y6pJxGWd72qlTJ91333167rnn9J///Oeq1tmrVy999913FlWIs77++mt16dLFvf0NHTq0qEtCIbnUPk/fvn21Z88eL1cEb/j000/197//XZKUlJSkgQMHXvE6vPleGmT1CkeOHCmHw6EFCxYoNDRUubm5WrBggc6cOaPg4OArXt+KFSt0++23Kzo6+qrq2rZtm1atWqX27dtLkho3bqwJEya4l69fv1516tTR+vXrVatWLTmdTv30008aPXq0qlevrpYtW0qS9u/fr88++0w9evTwaNy3335bycnJmjdvnsqWLauDBw/q6aeflt1uV+fOna/oMTidTknSM888o8cee8z9uAYPHqyjR4/qiSeeuKL1Xctyc3MVFFSwf//JkydbXA3gf2bOnKmoqCg5nU49+uijWr58eYHXxTZXPJztqSQtW7ZMzzzzjN5//33VqVOniCvDWYcOHdL48eO1cOFCRUREyBijbdu2XdE6rub9EcXHu+++W9QloJD07NmzqEu4Ipa+mvz5559asWKFVq9erdDQ0LwBgoLUo0cPOZ1OJSQk6Pvvv5ckNW3aVMOGDVNgYKBGjBihEiVK6M8//1RqaqpiYmKUkJCgH374QStXrtSPP/6o+fPn64knnlCXLl20cOFCffLJJ3I6nQoNDdW4ceN00003KSkpSYsXL1ZYWJh27NihMmXKaNasWQoKCtLMmTOVlZWlzp07q0GDBho2bJj27dunw4cPq1KlStqwYYNeeOEFJSUl6dFHH9Vvv/2m0NBQVa9eXUlJSVq1apVmzpypCRMmaN++fercubNq1KihmTNnSsr7JPHll19Wenq6nnzyST322GNyOBxKTExUUlKSypYtK0mKiIhQXFycJk6cqM6dO+dbt6R8l5OSkvTFF1+odOnS2r17t6ZNm3bec37rrbdq9OjRGjFihPr06SObzXbR50eS3nnnHS1evFg2m00hISH65JNPlJGRoSFDhig7O1sOh0PNmzdXXFycHA6HWrZsqaSkJF133XWSpEmTJqlSpUrq16+flf86BbJp0yZNnTpV2dnZkqS4uDhJF+6FlPcJYPv27ZWcnKyoqCiNHj1akyZN0tatWyVJnTt3Vt++fSXlfeJ+++23a/PmzTp06JDatWunYcOGuZc9+eSTatGihdLS0hQXF6f09HTdcMMNCggIUNOmTd1j4soNHTpU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221asWKFJCk5OVklS5ZUTEyMDh8+rNWrV2vUqFEKCQlRxYoV1adPHy1ZssR9/+uuu069evVSUFDQBb+vaIzRvHnzNGrUKJUrV06hoaF69tln3esIDw/XuHHjNGLECE2ePFkJCQkKDQ29aL316tVT8+bNFRgYqM6dO+cLXO3atVPlypUVEBCg9u3bq0aNGtqyZYt7edWqVfXAAw8oMDBQ7du318GDB/X888+rRIkSuueee1SiRAnt2bPnsjX/1YkTJ1S6dOkre+Iv4euvv1bv3r0VERGhcuXK6dlnnz3vNqVLl9aJEycsGxMA4PuCiroAAAD+qmPHjlq8eLG6dOmixYsXu2c1Dxw4oNzcXN1zzz3u27pcLkVERLgvX+7Q0SNHjujUqVPq1q2b+zpjjFwul/tyixYtNHHiRN14443uQ28vplKlSu6/S5YsKYfDodzcXAUFBWnRokX64IMPtH//fknSyZMndfToUfftK1asmO++f12f3W5Xdna2RzWfKywszD0jaoVDhw7le46vv/76826TnZ2tsLAwy8YEAPg+wiYAoNhp166dEhISlJqaquXLl+uzzz6TlBckS5QooeTkZAUFXfgtzGazXfJy+fLlVbJkSS1ZskSVK1e+4Dpef/11RUZGat++ffnC7pXYv3+/xowZo7///e+qW7eue+azIDyp+Vy1a9fWP/7xjwKNdSHh4eE6ePCg+/K5f5+1c+dO3XLLLZaNCQDwfRxGCwAodipUqKCGDRtq5MiRqlq1qiIjIyXlHSJ79913a8qUKcrKypLL5dKePXu0fv36i66rYsWKSktL05kzZyRJAQEBeuihhxQfH6+MjAxJUlpamr7//ntJ0oYNG5SUlKSpU6cqISFBEydOVFpa2hU/hlOnTslms6lChQqSpAULFmjHjh1XvB5Pav6r6OhonThxokB1X0i7du300UcfKTU1VcePH1diYuJ5t9mwYYOaNWtmyXgAAP9A2AQAFEsdO3bUjz/+eN6s4tSpU5WTk6P27durQYMGGjhwoNLT0y+6nsaNG+vmm2/WPffco0aNGkmSXnrpJdWoUUPdu3fXnXfeqT59+mjXrl3KysrS8OHD9corr6hy5cqqX7++HnzwQY0cOVLGmCuq/+abb9aTTz6phx9+WHfddZe2b9+uO++888qfiP9zsZovpESJEuratas+//zzAo93ru7du+uee+5R586d1bVrV7Vu3Trf8i1btigkJETR0dGWjAcA8A82c6XvngAAoNg7cuSIHnnkES1atOiCJ0qy0oABA/Tggw+qefPmhToOAMC3EDYBAAAAAJbjBEEAAPi5unXrXvD606dPX3DW8913373sWXgBALgcZjYBAAAAAJbjBEEAAAAAAMsRNgEAAAAAliNsAgAAAAAsR9gEAAAAAFiOsAkAAAAAsNz/AkHaD8DI2fbNAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "dL0vRMqQh1I-"
+ },
+ "source": [
+ "**Task 2:** Create a subgraph of the top-40 users according to a selected centrality algorithm. Draw the subgraph using circlular layout (15pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "cNRkbMHQh1I_",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 649
+ },
+ "outputId": "5277cb3b-407b-46ea-9c20-8a18c9d80765"
+ },
+ "source": [
+ "pr = tc.pagerank.create(sg)\n",
+ "sg.vertices['pagerank'] = pr['graph'].vertices['pagerank'] #pr['graph'] is a graph in which each vertex has pagerank value\n",
+ "sg.vertices\n",
+ "sg.vertices.sort(\"pagerank\", ascending=False)[:40]\n"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Counting out degree
"
+ ],
+ "text/plain": [
+ "Counting out degree"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Done counting out degree
"
+ ],
+ "text/plain": [
+ "Done counting out degree"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "+-----------+-----------------------+
"
+ ],
+ "text/plain": [
+ "+-----------+-----------------------+"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| Iteration | L1 change in pagerank |
"
+ ],
+ "text/plain": [
+ "| Iteration | L1 change in pagerank |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "+-----------+-----------------------+
"
+ ],
+ "text/plain": [
+ "+-----------+-----------------------+"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 1 | 5.24167 |
"
+ ],
+ "text/plain": [
+ "| 1 | 5.24167 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 2 | 3.13083 |
"
+ ],
+ "text/plain": [
+ "| 2 | 3.13083 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 3 | 2.25606 |
"
+ ],
+ "text/plain": [
+ "| 3 | 2.25606 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 4 | 1.72552 |
"
+ ],
+ "text/plain": [
+ "| 4 | 1.72552 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 5 | 1.40263 |
"
+ ],
+ "text/plain": [
+ "| 5 | 1.40263 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 6 | 1.17117 |
"
+ ],
+ "text/plain": [
+ "| 6 | 1.17117 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 7 | 0.985853 |
"
+ ],
+ "text/plain": [
+ "| 7 | 0.985853 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 8 | 0.834804 |
"
+ ],
+ "text/plain": [
+ "| 8 | 0.834804 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 9 | 0.708132 |
"
+ ],
+ "text/plain": [
+ "| 9 | 0.708132 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 10 | 0.601435 |
"
+ ],
+ "text/plain": [
+ "| 10 | 0.601435 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 11 | 0.511002 |
"
+ ],
+ "text/plain": [
+ "| 11 | 0.511002 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 12 | 0.434279 |
"
+ ],
+ "text/plain": [
+ "| 12 | 0.434279 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 13 | 0.369105 |
"
+ ],
+ "text/plain": [
+ "| 13 | 0.369105 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 14 | 0.313728 |
"
+ ],
+ "text/plain": [
+ "| 14 | 0.313728 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 15 | 0.266664 |
"
+ ],
+ "text/plain": [
+ "| 15 | 0.266664 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 16 | 0.226663 |
"
+ ],
+ "text/plain": [
+ "| 16 | 0.226663 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 17 | 0.192663 |
"
+ ],
+ "text/plain": [
+ "| 17 | 0.192663 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 18 | 0.163763 |
"
+ ],
+ "text/plain": [
+ "| 18 | 0.163763 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 19 | 0.139198 |
"
+ ],
+ "text/plain": [
+ "| 19 | 0.139198 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "| 20 | 0.118319 |
"
+ ],
+ "text/plain": [
+ "| 20 | 0.118319 |"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "+-----------+-----------------------+
"
+ ],
+ "text/plain": [
+ "+-----------+-----------------------+"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " __id | \n",
+ " mindate | \n",
+ " maxdate | \n",
+ " pagerank | \n",
+ "
\n",
+ " \n",
+ " chroniq | \n",
+ " 2009-10-23 05:56:41 | \n",
+ " 2013-09-23 16:09:20 | \n",
+ " 2.565090740523448 | \n",
+ "
\n",
+ " \n",
+ " aenea | \n",
+ " 2009-10-23 10:43:06 | \n",
+ " 2011-01-31 13:34:33 | \n",
+ " 2.4913315301242274 | \n",
+ "
\n",
+ " \n",
+ " ContentWithOurDecay | \n",
+ " 2009-10-23 06:26:33 | \n",
+ " 2015-03-01 17:30:59 | \n",
+ " 0.38014102452563364 | \n",
+ "
\n",
+ " \n",
+ " Bbaily | \n",
+ " 2009-10-23 16:27:38 | \n",
+ " 2013-06-13 21:28:03 | \n",
+ " 0.26760331552902794 | \n",
+ "
\n",
+ " \n",
+ " DoeL | \n",
+ " 2009-10-23 12:26:49 | \n",
+ " 2009-10-23 12:26:49 | \n",
+ " 0.2607190204341546 | \n",
+ "
\n",
+ " \n",
+ " chime | \n",
+ " 2009-11-12 00:56:01 | \n",
+ " 2012-11-21 05:54:21 | \n",
+ " 0.2038533155290279 | \n",
+ "
\n",
+ " \n",
+ " apmihal | \n",
+ " 2009-10-24 01:19:37 | \n",
+ " 2010-07-23 04:42:27 | \n",
+ " 0.2038533155290279 | \n",
+ "
\n",
+ " \n",
+ " Surcam | \n",
+ " 2009-10-27 14:28:49 | \n",
+ " 2009-10-27 14:43:13 | \n",
+ " 0.15 | \n",
+ "
\n",
+ "
\n",
+ "[8 rows x 4 columns]
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Columns:\n",
+ "\t__id\tstr\n",
+ "\tmindate\tdatetime\n",
+ "\tmaxdate\tdatetime\n",
+ "\tpagerank\tfloat\n",
+ "\n",
+ "Rows: 8\n",
+ "\n",
+ "Data:\n",
+ "+---------------------+---------------------+---------------------+\n",
+ "| __id | mindate | maxdate |\n",
+ "+---------------------+---------------------+---------------------+\n",
+ "| chroniq | 2009-10-23 05:56:41 | 2013-09-23 16:09:20 |\n",
+ "| aenea | 2009-10-23 10:43:06 | 2011-01-31 13:34:33 |\n",
+ "| ContentWithOurDecay | 2009-10-23 06:26:33 | 2015-03-01 17:30:59 |\n",
+ "| Bbaily | 2009-10-23 16:27:38 | 2013-06-13 21:28:03 |\n",
+ "| DoeL | 2009-10-23 12:26:49 | 2009-10-23 12:26:49 |\n",
+ "| chime | 2009-11-12 00:56:01 | 2012-11-21 05:54:21 |\n",
+ "| apmihal | 2009-10-24 01:19:37 | 2010-07-23 04:42:27 |\n",
+ "| Surcam | 2009-10-27 14:28:49 | 2009-10-27 14:43:13 |\n",
+ "+---------------------+---------------------+---------------------+\n",
+ "+---------------------+\n",
+ "| pagerank |\n",
+ "+---------------------+\n",
+ "| 2.565090740523448 |\n",
+ "| 2.4913315301242274 |\n",
+ "| 0.38014102452563364 |\n",
+ "| 0.26760331552902794 |\n",
+ "| 0.2607190204341546 |\n",
+ "| 0.2038533155290279 |\n",
+ "| 0.2038533155290279 |\n",
+ "| 0.15 |\n",
+ "+---------------------+\n",
+ "[8 rows x 4 columns]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "F4VpJrZplTcW",
+ "outputId": "d4d079ad-aea4-4c24-f823-b7882681a1ff"
+ },
+ "source": [
+ "def sgraph2nxgraph(sgraph, is_directed=True, add_vertices_attributes=True, add_edges_attributes=True):\n",
+ " if is_directed:\n",
+ " nx_g = nx.DiGraph()\n",
+ " else:\n",
+ " nx_g = nx.Graph()\n",
+ " if add_vertices_attributes:\n",
+ " vertices = [(r['__id'] , r) for r in sgraph.vertices]\n",
+ " else:\n",
+ " vertices = list(sgraph.get_vertices()['__id'])\n",
+ "\n",
+ " if add_edges_attributes:\n",
+ " edges = [(r['__src_id'], r['__dst_id'], r) for r in sgraph.edges]\n",
+ " else:\n",
+ " edges = [(e['__src_id'], e['__dst_id']) for e in sgraph.get_edges()]\n",
+ " nx_g.add_nodes_from(vertices)\n",
+ " nx_g.add_edges_from(edges)\n",
+ " return nx_g\n",
+ "\n",
+ "\n",
+ "ng = sgraph2nxgraph(sg)\n",
+ "print(\"Networkx: %s\" % nx.info(ng))"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Networkx: DiGraph with 8 nodes and 16 edges\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 591
+ },
+ "id": "fjHK9XgEmfLq",
+ "outputId": "80a5a127-994d-433e-f721-08e1a36e6ed3"
+ },
+ "source": [
+ "def get_top_40_users_by_selected_centrality(algo_name, network_graph):\n",
+ " if algo_name =='page_rank':\n",
+ " do_page_rank(network_graph)\n",
+ " if algo_name == 'closeness_centrality':\n",
+ " do_closeness_centrality(network_graph)\n",
+ "\n",
+ "get_top_40_users_by_selected_centrality('page_rank', ng)\n",
+ "\n",
+ "\n",
+ " "
+ ],
+ "execution_count": 30,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "zXpGJCTkmLQk"
+ },
+ "source": [
+ "**page rank**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "VtHLxXcRlWMp"
+ },
+ "source": [
+ "def do_page_rank(ng):\n",
+ " #d = nx.pagerank(ng)\n",
+ "\n",
+ " top40_pagerank = sorted(nx.pagerank(ng) ,key=len, reverse=True)[:40]\n",
+ " #[len(c) for c in top40_pagerank][:40]\n",
+ " h = ng.subgraph(top40_pagerank)\n",
+ " plt.figure(figsize=(10,10))\n",
+ " ax = plt.gca()\n",
+ " ax.set_title('page rank')\n",
+ " nx.draw_circular(h, with_labels=True)"
+ ],
+ "execution_count": 29,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Zi-tma3plmxd"
+ },
+ "source": [
+ "**closeness_centrality**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "mzvgDdJMllm8"
+ },
+ "source": [
+ "def do_closeness_centrality(ng):\n",
+ " #d = nx.closeness_centrality(ng) # can take some time to run\n",
+ " top40_closeness_centrality = sorted(nx.closeness_centrality(ng) ,key=len, reverse=True)[:40]\n",
+ " #[len(c) for c in top40_closeness_centrality][:40]\n",
+ " h = ng.subgraph(top40_closeness_centrality)\n",
+ " plt.figure(figsize=(10,10))\n",
+ " ax = plt.gca()\n",
+ " ax.set_title('closeness centrality')\n",
+ " nx.draw_circular(h, with_labels=True)\n"
+ ],
+ "execution_count": 31,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "QFNABWiwh1JC"
+ },
+ "source": [
+ "**Task 3:** Calculate the PageRank, triangles, and average shortest path of each vertex in the graph (15pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "OCPK34iAosrX",
+ "outputId": "05a14739-0ec9-45e3-ff62-6b39dc33799c"
+ },
+ "source": [
+ "dict(sorted(nx.pagerank(ng).items(), key=lambda item: item[1]))"
+ ],
+ "execution_count": 37,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'Bbaily': 0.06206216197944935,\n",
+ " 'ContentWithOurDecay': 0.0828947633011499,\n",
+ " 'DoeL': 0.033988252927105625,\n",
+ " 'Surcam': 0.022361251873504986,\n",
+ " 'aenea': 0.36057615050300873,\n",
+ " 'apmihal': 0.027394148216789108,\n",
+ " 'chime': 0.03242704456007323,\n",
+ " 'chroniq': 0.3782962266389188}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 37
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 292
+ },
+ "id": "gCNwALjpr6GA",
+ "outputId": "4a574498-87ed-40e7-c531-87ed7abdc67e"
+ },
+ "source": [
+ "triangle_counting_sg = tc.triangle_counting.create(sg)\n",
+ "#triangle_counting_sg_out = triangle_counting_sg['triangle_count']\n",
+ "sg.vertices['triangle_count'] = triangle_counting_sg['graph'].vertices['triangle_count']\n",
+ "sg.vertices.sort('triangle_count',ascending=False)"
+ ],
+ "execution_count": 52,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Initializing vertex ids.
"
+ ],
+ "text/plain": [
+ "Initializing vertex ids."
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Removing duplicate (bidirectional) edges.
"
+ ],
+ "text/plain": [
+ "Removing duplicate (bidirectional) edges."
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Counting triangles...
"
+ ],
+ "text/plain": [
+ "Counting triangles..."
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Finished in 0.083595 secs.
"
+ ],
+ "text/plain": [
+ "Finished in 0.083595 secs."
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/html": [
+ "Total triangles in the graph : 7
"
+ ],
+ "text/plain": [
+ "Total triangles in the graph : 7"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " __id | \n",
+ " mindate | \n",
+ " maxdate | \n",
+ " triangle_count | \n",
+ "
\n",
+ " \n",
+ " ContentWithOurDecay | \n",
+ " 2009-10-23 06:26:33 | \n",
+ " 2015-03-01 17:30:59 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " chroniq | \n",
+ " 2009-10-23 05:56:41 | \n",
+ " 2013-09-23 16:09:20 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " Bbaily | \n",
+ " 2009-10-23 16:27:38 | \n",
+ " 2013-06-13 21:28:03 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " aenea | \n",
+ " 2009-10-23 10:43:06 | \n",
+ " 2011-01-31 13:34:33 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " DoeL | \n",
+ " 2009-10-23 12:26:49 | \n",
+ " 2009-10-23 12:26:49 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " Surcam | \n",
+ " 2009-10-27 14:28:49 | \n",
+ " 2009-10-27 14:43:13 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " apmihal | \n",
+ " 2009-10-24 01:19:37 | \n",
+ " 2010-07-23 04:42:27 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " chime | \n",
+ " 2009-11-12 00:56:01 | \n",
+ " 2012-11-21 05:54:21 | \n",
+ " 0 | \n",
+ "
\n",
+ "
\n",
+ "[8 rows x 4 columns]
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Columns:\n",
+ "\t__id\tstr\n",
+ "\tmindate\tdatetime\n",
+ "\tmaxdate\tdatetime\n",
+ "\ttriangle_count\tint\n",
+ "\n",
+ "Rows: 8\n",
+ "\n",
+ "Data:\n",
+ "+---------------------+---------------------+---------------------+----------------+\n",
+ "| __id | mindate | maxdate | triangle_count |\n",
+ "+---------------------+---------------------+---------------------+----------------+\n",
+ "| ContentWithOurDecay | 2009-10-23 06:26:33 | 2015-03-01 17:30:59 | 5 |\n",
+ "| chroniq | 2009-10-23 05:56:41 | 2013-09-23 16:09:20 | 5 |\n",
+ "| Bbaily | 2009-10-23 16:27:38 | 2013-06-13 21:28:03 | 5 |\n",
+ "| aenea | 2009-10-23 10:43:06 | 2011-01-31 13:34:33 | 3 |\n",
+ "| DoeL | 2009-10-23 12:26:49 | 2009-10-23 12:26:49 | 1 |\n",
+ "| Surcam | 2009-10-27 14:28:49 | 2009-10-27 14:43:13 | 1 |\n",
+ "| apmihal | 2009-10-24 01:19:37 | 2010-07-23 04:42:27 | 1 |\n",
+ "| chime | 2009-11-12 00:56:01 | 2012-11-21 05:54:21 | 0 |\n",
+ "+---------------------+---------------------+---------------------+----------------+\n",
+ "[8 rows x 4 columns]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 52
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gWExwapoxkkK"
+ },
+ "source": [
+ "**avg shortest path**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 407
+ },
+ "id": "DFa2XeESuARt",
+ "outputId": "819779ca-283b-4c91-bea1-513247278bf9"
+ },
+ "source": [
+ "shortest_path_avg_dic = {}\n",
+ "shortest_path_dic = nx.shortest_path(ng)\n",
+ "\n",
+ "shortest_path_avg_dic = {}\n",
+ "shortest_path_avg_dic['node'] = []\n",
+ "shortest_path_avg_dic['avg_shortest_path'] = []\n",
+ "for key, value in shortest_path_dic.items():\n",
+ " vertex_dic = shortest_path_dic[key]\n",
+ " num_items = len(vertex_dic)\n",
+ " total_path_lenth = 0.0\n",
+ " for _, vertex_array in vertex_dic.items():\n",
+ " total_path_lenth += len(vertex_array)\n",
+ " avg = total_path_lenth / num_items\n",
+ " shortest_path_avg_dic['node'].append(key)\n",
+ " shortest_path_avg_dic['avg_shortest_path'].append(avg)\n",
+ "shortest_path_avg_dic\n",
+ "pd.DataFrame(shortest_path_avg_dic).plot(kind='scatter', x='node', y='avg_shortest_path',title='avg shortest path');\n"
+ ],
+ "execution_count": 72,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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mzNnzui3337T77//XmR5ly5dSnxsr169NGzYMA0ZMuSK28yfP991OzExUQ899JDCw8Ndy2JiYjR58uTSlAwAAAAA8GJuh9b4+HjNnDlT/v7+qlatmmu5xWLRp59+WuLj27dvX6rC/vOf/2jAgAGy2+2lehwAAAAAwHe4HVpffPFFvfzyy+revbsn65EkFRQUaO3atYqLiyuyfP369fryyy8VEhKicePGqW3bth6vBQAAAABQcdwOrYWFheV2peAtW7aoXr16uuWWW1zLBg0apEceeURVqlTRV199pUcffVQbNmxQrVq13N5vcHCAJygGo2AAACAASURBVMotMyEh1Su6BJQB+uj96KFvoI++gT76BvroG+ij9/PWHrodWkePHq0lS5bo0UcfLdUFmK7G6tWrdc899xRZFhIS4rrdtWtXhYWFKSkpSR07dnR7v1lZOXI6jTKrsyyFhFRXRsaZii4D14g+ej966Bvoo2+gj76BPvoG+uj9zNxDq9VS7ABjsaG1e/fuslgskiTDMJSZmak333xTgYGBRbbbvn37tVf6/6Smpuq7777TggULiixPS0tTaGioJGn//v06duyYbrzxxjI7LgAAAADAfIoNrc8//3yZHWj27NnatGmTMjMzNWLECAUGBmr9+vUaPXq0xo8fr1atWkmSPvjgA/Xs2VM1a9Ys8vgFCxZo3759slqtqlKliubPn19k9BUAAAAA4HsshmGYc76sBzA9GJ5GH70fPfQN9NE30EffQB99A330fmbuYUnTg90+OXX58uXav3+/JOmHH35Qjx49FBERod27d197lQAAAAAAXIbboTUuLk4NGjSQJP3zn//U8OHDNWbMGM2ZM8djxQEAAAAAKje3Q+uZM2dUvXp15eTk6JdfftGDDz6o++67T7/99psn6wMAAAAAVGJu/+RNWFiYvv/+e/36669q3769/Pz8lJOTIz8/P0/WBwAAAACoxNwOrZMmTdL48eNlt9u1cOFCSdK2bdtcV/0FAAAAAKCsuR1au3fvri+//LLIssjISEVGRrrur1u3TnfddVfZVQcAAAAAqNTcPqf1cqpUqaIqVaq47j/99NPXXBAAAAAAABdcU2j9X5XoJ18BAAAAAOWgTEOrxWIpy90BAAAAACq5Mg2tAAAAAACUJUIrAAAAAMC0yjS01qtXryx3BwAAAACo5Nz+yZsjR45cdrndbldISIisVqvWrVtXZoUBAAAAAOB2aO3Tp4/rQkuGYRS56JLValVERISeeeYZ1a5du+yrBAAAAABUSm5PD541a5buuusuffLJJ9qzZ48+/vhjRUdH65lnntFHH30kh8OhGTNmeLJWAAAAAEAl4/ZI66JFi7R582ZVrVpVktSoUSM988wzuvPOO/X5559r3rx56tu3r8cKBQAAAABUPm6PtDqdTh09erTIspSUFDmdTknSddddp8LCwrKtDgAAAABQqbk90vrQQw/poYce0j333KO6desqNTVV8fHxGjZsmCTp888/V5s2bTxWKAAAAACg8nE7tI4ePVrNmjXTxx9/rH379ikkJETPPfec7rjjDklS79691bt3b48VCgAAAACofNwOrSdOnNAdd9zhCqkAAAAAAHia2+e09uzZU6NHj9ZHH32ks2fPerImAAAAAAAklSK0btu2TT169NDKlSt1++236/HHH9fWrVvlcDg8WR8AAAAAoBJzO7QGBQVpyJAhWrlypdatW6fmzZvrxRdfVLdu3TxZHwAAAACgEnM7tF4sKytLmZmZys7OVo0aNcq6JgAAAAAAJJXiQky//vqr1q1bp/Xr1+vs2bPq16+fXn31VbVu3dqT9QEAAAAAKjG3Q+vgwYPVt29fzZw5U506dZLVelWDtAAAAAAAuM3t0PrVV1/p9OnT2rNnjz744AMZhuFad++993qkOAAAAABA5eZ2aP388881ceJENWrUSL/++qtuuukmJSUl6bbbbiO0AgAAAAA8wu05vi+99JLmzJmjNWvW6LrrrtOaNWs0c+ZMtWzZ0q3Hx8bGKiIiQs2aNdOBAwcuu82iRYvUpUsXRUdHKzo6WjNmzHCtO3v2rB577DH16dNHkZGR2rZtm7ulAwAAAAC8lNsjrSkpKerXr1+RZQMHDlTXrl01efLkEh/fq1cvDRs2TEOGDCl2u5iYmMvub9myZQoICNDmzZt16NAhDRkyRJs2bdL111/v7lMAPOp0boGyk7PlZzhVw99e0eXgKtBDAAAA83E7tAYHByszM1O1a9dW/fr1tXv3btWqVUtOp9Otx7dv3/6qi5SkjRs3at68eZKkxo0bq2XLlvr8888vCdJARUjYl6q4jYmy2axyOJwaHtVcnVvUreiyUAr0EAAAwJzcnh5833336bvvvpMkDR8+XMOGDVN0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WsRnn31GdHR0pItjam63m8zMTK0eLDIA9GwSEZF/i88//5y33nqLpqamSBdlQJl2pFUeLDt37qSxsRG3261GoYiYhp5NIiIi5qeRVhERERERETEtUy7EJCIiIiIiIgJKWkVERERERMTElLSKiIiIiIiIaSlpFREReQAUFxdTX18f6WKIiIjcc0paRURERERExLSUtIqIiIiIiIhpKWkVERGJoIKCAt5//31mz55NTk4OZWVl/PnnnwDs27ePadOm4XQ6KSkpwefzGcc1NzdTWFhITk4Or7/+Ojd/g11DQwMzZswgNzeX5cuX4/V6B7ReIiIi94qSVhERkQg7fPgwe/bs4fjx45w/f56mpiZaWlrYtm0bb7/9NqdOnSIpKYny8nIALl++zCuvvEJZWRmtra08/vjjfPnll0a8Y8eOsXv3bt555x1aWlrIycmhoqIiUtUTERG5K0paRUREIqy4uJjExETi4uKYOnUqbW1tHDhwgHnz5jFu3DiGDBlCeXk5X3/9Nd9//z0nT54kNTWVwsJCBg8ezAsvvMBjjz1mxPvoo49YsWIFKSkpWK1WSkpKaGtr02iriIj8KylpFRERibCEhATj5+joaLq6urh06RJJSUnG6zExMcTFxeHz+bh06RIjRoww9lksFkaOHGls//DDD1RVVeFwOHA4HDidTsLhcI/pxSIiIv8W1kgXQERERP5u+PDhPUZGu7q6uHLlComJiSQkJNDZ2WnsC4fDdHR0GNsjR46kpKSEoqKiAS2ziIjI/aCRVhERERNyuVw0NTXR1tZGIBBg+/btjB8/nuTkZKZMmUJ7eztHjx6lu7ubvXv38tNPPxnHLly4EI/HQ3t7OwB+v5/Dhw9HqioiIiJ3RSOtIiIiJpSfn8+aNWtYtWoVV69exW63s2PHDgDi4+PZuXMnmzZtorKykjlz5vDUU08Zx06bNo3ffvuN8vJyvF4vDz/8MPn5+cyYMSNS1REREbljlvDNa+SLiIiIiIiImISmB4uIiIiIiIhpKWkVERERERER01LSKiIiIiIiIqalpFVERERERERMS0mriIiIiIiImJaSVhERERERETEtJa0iIiIiIiJiWkpaRURERERExLSUtIqIiIiIiIhp/Q8cZMsykiaLZgAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "EQCElKdf-ltM",
+ "outputId": "41dc22f5-e30e-4303-c6e7-0268b8c7a329"
+ },
+ "source": [
+ "nx"
+ ],
+ "execution_count": 83,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "execution_count": 83
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "U6_x3mtlh1JG"
+ },
+ "source": [
+ "**Task 4:** Use Cytoscape and Gephi to visualize the network, where each vertex size is correlates to its degree (15pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "9Uc0HgFjx_PX",
+ "outputId": "59dad206-e59f-4dfa-f0eb-e9b63b908a6b"
+ },
+ "source": [
+ "dexter_graph = nx.Graph()\n",
+ "#l = [g1,g2,g3]\n",
+ "nodes = set()\n",
+ "edges = set()\n",
+ "#for g in l:\n",
+ "nodes |= ng.nodes()\n",
+ "edges |= ng.edges()\n",
+ "\n",
+ "dexter_graph.add_nodes_from(nodes)\n",
+ "dexter_graph.add_edges_from(edges)\n",
+ "\n",
+ "#let's add weights\n",
+ "for e in dexter_graph.edges():\n",
+ " dexter_graph[e[0]][e[1]]['weight'] = 0\n",
+ "\n",
+ "#for g in l:\n",
+ "for e in ng.edges():\n",
+ " dexter_graph[e[0]][e[1]]['weight'] += ng[e[0]][e[1]]['weight']\n",
+ " \n",
+ "print(nx.info(dexter_graph))\n",
+ " "
+ ],
+ "execution_count": 86,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Graph with 8 nodes and 13 edges\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "0QgVAODRh1JH"
+ },
+ "source": [
+ "nx.write_gexf(dexter_graph, \"./datasets/dexter.gexf\")\n",
+ "nx.write_gml(dexter_graph, \"./datasets/dexter.gml\")"
+ ],
+ "execution_count": 87,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_xLZjqPDh1JL"
+ },
+ "source": [
+ "**Task 5:** Write a function that for a given vertex creates a subgraph of the selected vertex and all the vertex's in/out friends (10pt).\n",
+ "Draw the subgraph (5pt). Calculate the number of verticies and edges in the subgraph (5pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "KvocVBDeh1JM"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Al5dMlGJh1JP"
+ },
+ "source": [
+ "**Task 6:** Find the top-10 most centeral players at [The Free Internet Chess Sever](http://dynamics.cs.washington.edu/nobackup/chess/fcis.tar.gz) (15 pt). Visualize part of the network (5pt).\n",
+ " \n",
+ "**Note:** The network has 429,747,476 edges"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "FIzUbrRch1JQ"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "bbFabMLTh1JS"
+ },
+ "source": [
+ "**Task 7:** Use Cytoscape to draw the Lord of the Rings Couples network (see Lecture 2).\n",
+ "Fill the network's vertices in a different color according to the gender.\n",
+ "Select each vertex shape to be according to the vertex race. (7pt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "SJjpZznsh1JT"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "yZkceWDCh1JV"
+ },
+ "source": [
+ "### Additional Questions for Practice"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "iDH4cYwFh1JW"
+ },
+ "source": [
+ "**Task 1:** Visualize the distribution of the network's strongly and weakly connected components."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3y8_gXHhh1JW"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "H4ndNxk9h1JZ"
+ },
+ "source": [
+ "**Task 2:** Using Cytoscape, visualize the network's maximal strongly connected component (or part of it)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "SsMG9zLDh1Ja"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fxQMNlC8h1Jc"
+ },
+ "source": [
+ "**Task 3:** Draw a subgraph of all the vertices that have at least one reciprocal link, i.e., all the vertices where there is at least one vertex _u_ so that both links (u,v) and (v,u) exists"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "olXHKSyTh1Jc"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "RTdqzReMh1Je"
+ },
+ "source": [
+ "**Task 4:** Split the network into communities, and find the second most central vertex in each community\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "fQMV_Adfh1Je"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6BYt52YRh1Jg"
+ },
+ "source": [
+ "**Task 5:** Find the top-10 most central players at [The Free Internet Chess Server](http://dynamics.cs.washington.edu/nobackup/chess/fcis.tar.gz).\n",
+ " Visualize part of the network.\n",
+ " \n",
+ "**Note:** The network has 429,747,476 edges"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Hx1az7w0h1Jg"
+ },
+ "source": [
+ ""
+ ],
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file