Skip to content

Instantly share code, notes, and snippets.

@thejevans
Last active March 30, 2022 19:24
Show Gist options
  • Save thejevans/91965248023ab84ba1eb32e9aa799b7a to your computer and use it in GitHub Desktop.
Save thejevans/91965248023ab84ba1eb32e9aa799b7a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "67b4c76d-3766-48e3-9db5-1f316743938b",
"metadata": {},
"source": [
"# Part B\n",
"\n",
"## 0. List the names of all your group members. (deduction of up to 2 points if missing)\n",
"\n",
"John Evans, \n",
"\n",
"## 1. Comparing partitions (20 points)\n",
"\n",
"In this problem, you will compare two community detection methods on Zachary’s karate club\n",
"network. NetworkX has a function that returns this network: `G=nx.karate_club_graph()`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "bf285a05-bd89-4ac0-bf17-0ab4cfec950a",
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"import numpy as np\n",
"import sklearn.metrics.cluster\n",
"\n",
"G = nx.karate_club_graph()"
]
},
{
"cell_type": "markdown",
"id": "a45bfc5c-c426-4707-b5f9-40b418f1626b",
"metadata": {},
"source": [
"## 1. (a)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "163754d6-a5f2-47a5-9f2e-09c7aba12f98",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2: 0.3476602762317048\n",
"3: 0.3423192968647514\n",
"4: 0.3580611307884035\n",
"5: 0.3849721706864564\n",
"6: 0.37578006409175235\n",
"7: 0.3594760218136841\n",
"8: 0.3470699574595678\n",
"9: 0.33324900208017094\n",
"10: 0.31344052772624204\n",
"11: 0.3122598901819681\n",
"12: 0.30368621277712193\n",
"13: 0.29429733325837226\n",
"14: 0.28271584115739956\n",
"15: 0.27116245947414774\n",
"16: 0.2544648713479881\n",
"17: 0.23975375274076566\n",
"18: 0.2268979217031164\n",
"19: 0.22299057363992417\n",
"20: 0.20056783043796028\n",
"21: 0.18696238826108952\n",
"22: 0.1609134011731414\n",
"23: 0.1428102921609415\n",
"24: 0.11768894885778003\n",
"25: 0.11088622776934465\n",
"26: 0.10076647738985402\n",
"27: 0.08837915331421826\n",
"28: 0.0562395757200952\n",
"29: 0.04398343359382321\n",
"30: 0.011515901126290735\n",
"31: -0.0035044320758606464\n",
"32: -0.03105264144225183\n",
"33: -0.04655085174565694\n",
"34: -0.05110473941642772\n",
"\n",
"\n",
"0: {0, 1, 3, 7, 11, 12, 13, 17, 19, 21}\n",
"1: {2, 24, 25, 27, 28, 31}\n",
"2: {4, 5, 6, 10, 16}\n",
"3: {32, 33, 8, 14, 15, 18, 20, 22, 23, 26, 29, 30}\n",
"4: {9}\n"
]
}
],
"source": [
"p_gn_comms = []\n",
"for communities in nx.community.girvan_newman(G):\n",
" print(f'{len(communities)}: ', end='')\n",
" print(nx.algorithms.community.modularity(\n",
" G, communities))\n",
" if len(communities) == 5:\n",
" p_gn_comm = communities\n",
" \n",
"print('\\n')\n",
"for i, comm in enumerate(p_gn_comm):\n",
" print(f'{i}: {comm}')"
]
},
{
"cell_type": "markdown",
"id": "b1133103-2a37-4c5a-8cd5-3a2a61865adc",
"metadata": {},
"source": [
"## 1. (b)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9dfe5f91-b96e-45d2-ac33-25064a079163",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3: 0.41096493693896297\n",
"\n",
"\n",
"0: {8, 14, 15, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}\n",
"1: {1, 2, 3, 7, 9, 12, 13, 17, 21}\n",
"2: {0, 4, 5, 6, 10, 11, 16, 19}\n"
]
}
],
"source": [
"p_g_comm = nx.community.greedy_modularity_communities(G)\n",
"print(f'{len(p_g_comm)}: ', end='')\n",
"print(nx.algorithms.community.modularity(\n",
" G, p_g_comm))\n",
"\n",
"print('\\n')\n",
"for i, comm in enumerate(p_g_comm):\n",
" print(f'{i}: {set(comm)}')"
]
},
{
"cell_type": "markdown",
"id": "a2eeb4c6-0389-4c6c-b21c-be626adf90d8",
"metadata": {},
"source": [
"Which partition has higher modularity, $P_{GN}$ or $P_G$?\n",
"\n",
"Is this what you expected?\n",
"\n",
"Why or why not?\n",
"\n",
"## 1. (c)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "d93d426d-5e9f-4ee8-aa0e-5b983ce3dfe4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6343789928866898"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p_gn_labels = np.empty(nx.number_of_nodes(G), dtype=int)\n",
"p_g_labels = np.empty(nx.number_of_nodes(G), dtype=int)\n",
"\n",
"for i, comm in enumerate(p_gn_comm):\n",
" for node in comm:\n",
" p_gn_labels[node - 1] = i\n",
" \n",
"for i, comm in enumerate(p_g_comm):\n",
" for node in comm:\n",
" p_g_labels[node - 1] = i\n",
"\n",
"sklearn.metrics.cluster.normalized_mutual_info_score(p_gn_labels, p_g_labels)"
]
},
{
"cell_type": "markdown",
"id": "69dbe999-9267-4512-94d3-657f6eb46a69",
"metadata": {},
"source": [
"Describe in\n",
"words the similarities and differences between the two partitions.\n",
"\n",
"## 2. Applying the Louvain Algorithm for Modularity maximization (20 points)\n",
"\n",
"The Louvain Algorithm is a popular fast algorithm heuristic for community detection based on\n",
"modularity maximization. For this problem you should install and import the community module\n",
"from the python-louvain package (see https://python-louvain.readthedocs.io/en/latest/ and https://\n",
"github.com/taynaud/python-louvain).\n",
"\n",
"Create ER networks with N=1000 nodes and L=5000, 10000, 15,000, 20,000, 25,000, and 30,000\n",
"links. For each value of L, create 10 different networks. Apply the Louvain algorithm to each\n",
"network, recording the time it takes to complete the calculation for each network"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "daca38ec-a677-4d55-9ed7-b762ede9a844",
"metadata": {},
"outputs": [],
"source": [
"import community as community_louvain\n",
"import matplotlib.pyplot as plt\n",
"import time\n",
"\n",
"import matplotlib_inline.backend_inline\n",
"matplotlib_inline.backend_inline.set_matplotlib_formats('retina')\n",
"\n",
"N = 1000\n",
"Ls = [5000, 10000, 15000, 20000, 25000, 30000] * 10"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "8c99e8ea-992b-409e-bc62-f23d7cd34002",
"metadata": {},
"outputs": [],
"source": [
"Gs = [nx.gnm_random_graph(N, L) for L in Ls]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6b1576f1-1077-4bd8-bcdf-c38546a4ffee",
"metadata": {},
"outputs": [],
"source": [
"ts = []\n",
"parts = []\n",
"for i, G in enumerate(Gs):\n",
" t_0 = time.perf_counter_ns()\n",
" parts.append(community_louvain.best_partition(G))\n",
" ts.append(time.perf_counter_ns() - t_0)"
]
},
{
"cell_type": "markdown",
"id": "b7ea26df-5193-493f-86e5-5436f92c2530",
"metadata": {},
"source": [
"## 2. (a)\n",
"\n",
"Plot the average modularity as a function of average degree for the networks you generated.\n",
"Include error bars that represent the standard deviation of the modularity for each value of\n",
"average degree."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "77aa6888-393e-43d8-bd0d-881340a6a415",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 248,
"width": 385
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"mods = np.array(\n",
" [community_louvain.modularity(part, G) for part, G in zip(parts, Gs)])\n",
" \n",
"x = np.arange(5, 35, 5)\n",
"stds = []\n",
"mus = []\n",
"for i in range(6):\n",
" vals = mods[np.arange(0, 60, 6) + i]\n",
" stds.append(np.std(vals))\n",
" mus.append(np.average(vals))\n",
"\n",
"plt.errorbar(x, mus, yerr=stds, linestyle='', marker='.')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "7a5c55ab-2e86-488e-aa76-7db5cba5dbda",
"metadata": {},
"source": [
"## 2. (b)\n",
"\n",
"Plot the average number of communities as a function of the average degree."
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "6e947ec1-80db-41cd-8238-06860aae4640",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 248,
"width": 369
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"lens = [0] * 6\n",
"for i, part in enumerate(parts):\n",
" lens[i % 6] += len(set(part.values()))\n",
"avg_lens = [l / 6 for l in lens]\n",
"\n",
"plt.scatter(x, avg_lens)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "f4d1a24d-09a0-4381-835c-3ef2119e9856",
"metadata": {},
"source": [
"What conclusion does the trend suggest?\n",
"\n",
"## 2. (c)\n",
"\n",
"Plot the average calculation time as a function of L for the networks you generated. Include\n",
"error bars that represent the standard deviation of the calculation time for each value of L."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "0a63ceb2-5228-4434-b0a1-f2a168e27fbd",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"image/png": {
"height": 258,
"width": 372
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"stds = []\n",
"mus = []\n",
"ts_arr = np.array(ts)\n",
"for i in range(6):\n",
" vals = ts_arr[np.arange(0, 60, 6) + i]\n",
" stds.append(np.std(vals))\n",
" mus.append(np.average(vals))\n",
"\n",
"plt.errorbar(Ls[:6], mus, yerr=stds, linestyle='', marker='.')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "d156b093-237d-4163-8da0-e43d027cef34",
"metadata": {},
"source": [
"What does this suggest about the time complexity of the algorithm?\n",
"\n",
"What other numerical investigations might you do to get a more complete estimate of the time complexity of the algorithm?\n",
"\n",
"## 3. Describe the contributions of group members and affirmation that everyone has their own working code. (Deduction of up to 5 points if missing)\n",
"First, describe the contributions of the\n",
"group members. This is something that is often done for journal articles. Example: All group\n",
"members discussed and worked on solutions for part A. Jay Lee and Sam Jones wrote the\n",
"preliminary code for B1&2. Tom Smith and Kay Cohn wrote the comments for B3. Mo Kahn\n",
"formatted the final submission. All group members reviewed the solutions before submission.\n",
"Second, affirm that each group member has saved a working, tested copy of the group’s\n",
"code in their own files and understands how it works - or - if there were any problems with this\n",
"step, please describe them. One goal of the problem set is for all group members to understand\n",
"how the code works and to ensure that they have working code they can access and manipulate\n",
"for their own purposes after the end of the course. Group members should try to help one another\n",
"if anyone runs into trouble on this step."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "28c46ad2-0379-4ed8-bc3a-e5c48114874b",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment