{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "B6SLM2WnoviN", "nbgrader": { "cell_type": "markdown", "checksum": "a46f42bc9b10554a85434134a4f5d417", "grade": false, "grade_id": "cell-3258a102d560141a", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "\n", "# Gene Mutation\n", "## Decoding relationships between genes\n", "\n", "\n", "## Overview\n", "Gene Mutation is a prevailing and computationally intensive research topic in Genetics. For this assignment, assume that you have been hired by a biotechnology company to work on a gene mutation research project, and your first task is to write a Python program to investigate a genealogical mutation sequencing.\n", "\n", "\n", "In this program, a gene is described by a string of letters, with a letter being chosen from the set ${A, C, G, T}$. A mutation is relatively rare but it can occur in which there is a small probability of either inserting a new character, deleting an existing character, or changing to a new character randomly. We can refer to these probabilities by $p_i, p_d$, and $p_c$, respectively.\n", "\n", "\n", "Now, suppose the starting point is a given string that undergoes a mutation process. This mutation created two other strings, the child strings of the first string. Each of these two new strings can undergo mutations by which they will change from their parent. In turn, the two-child strings, mutate and create 2 new substrings each, resulting in four grandchild strings from the original gene sequencing string. We can easily visualize the sequence of mutations if we were to draw a genealogy binary tree relating strings to their parent and grandparent strings.\n", "\n", "As a result of these mutations, we now have 7 strings but unfortunately, the order of the strings has been lost due to a glitch in the gene sequencing generation program. Therefore, your first task in the project is to recover the genealogy tree for the following set of 7 strings labelled with lowercase letters:\n", "``` python\n", "('a', 'AGTTATGTGTCAGAGCAAAAGATTCCTCATCTAGCGGTCGCAAGTCATTGCC'),\n", "('b', 'AAGTTATTTGCTCACAGGGAACGAATCCAGCTCTGCGGTCGAGGCCACATTGCC'),\n", "('c', 'AGTTATTTTCAGAGAAATGATTCCTTCTCACCGGTCGAGCCAGTGCC'),\n", "('d', 'AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC'),\n", "('e', 'ACAGCTTATATAGCTCATAGGGAGCGAAATCCAGCCCCGCGGTGCGAGGCCCCTTGTCGC'),\n", "('f', 'AAGTATATGGCACGAGGGAACAGTATCAGCTCTTCGGATAAAGGCCACAGTGCC'),\n", "('g', 'AGTTATGTGTCACAGGCAAAAGATCCTTCTCTGCGGTCGAACCCATTGCC')\n", "```\n", "\n", "\n", "Henceforth, the set of strings created with the gene-sequencing generation program will be referred to as `Set_Strings`.\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "R3pP2_nfoviV", "nbgrader": { "cell_type": "markdown", "checksum": "d5523b0920f3e7a3d04257989e7e3680", "grade": false, "grade_id": "cell-60d7379c25ef5472", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "\n", "## Longest Common Subsequence (LCS)\n", "\n", "Write Python code which, given any two arbitrary strings, outputs the length of the Longest Common Subsequence (LCS) for those two strings. Make sure to include a number of test cases that demonstrate that your code is correct." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "id": "lSZ6ey0IoviW", "nbgrader": { "cell_type": "code", "checksum": "ce99a7ecdf730683add061c1c36c204d", "grade": false, "grade_id": "cell-63d0dc281b5784e0", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "import numpy as np\n", "def longest_common_subsequence(x, y):\n", " \"\"\"\n", " Gives the length of the longest common substring between strings x and y\n", " \n", " Inputs:\n", " - x, y: strings\n", " \"\"\"\n", " \n", " # list for lengths of LCS\n", " # c[i,j] store the length of LCS between x[:i] and y[:j] \n", " c = np.zeros((len(x), len(y)))\n", " \n", " # if any string is empty, lcs length 0\n", " if(len(x) == 0 or len(y) == 0):\n", " return 0\n", " \n", " # for every letters in the string x,\n", " # check with every letter in string y\n", " for i in range(len(x)):\n", " for j in range(len(y)):\n", " # if the letters are same, lcs length increase by 1 \n", " # from the lcs length of x[:i-1] and y[:i-1]\n", " if x[i] == y[j]:\n", " if(i == 0 or j == 0):\n", " c[i,j] = 1\n", " else:\n", " c[i,j] = c[i-1, j-1] + 1\n", " \n", " # if not same, then the lcs length is the maximum\n", " # value between the upper value or left-side value of the table\n", " elif (c[i-1, j] >= c[i,j-1]):\n", " c[i,j] = c[i-1, j]\n", " else:\n", " c[i,j] = c[i, j-1]\n", " \n", " # the last cell, last row gives the lcs length for full x and y \n", " return int(c[-1,-1])\n", " \n", " # raise NotImplementedError()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "40\n" ] } ], "source": [ "a = 'AGTTATGTGTCAGAGCAAAAGATTCCTCATCTAGCGGTCGCAAGTCATTGCC'\n", "b = 'AAGTTATTTGCTCACAGGGAACGAATCCAGCTCTGCGGTCGAGGCCACATTGCC'\n", "\n", "print(longest_common_subsequence(a,b))\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "editable": false, "id": "9tTw_XdWovib", "nbgrader": { "cell_type": "code", "checksum": "2591791f0c3b520a96f6977e5da32368", "grade": true, "grade_id": "cell-329d830ec2e7ebb5", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "assert longest_common_subsequence('ABCBDAB', 'BDCABA')==4\n", "assert longest_common_subsequence('abc', '') == 0\n", "assert longest_common_subsequence('abc', 'a') == 1\n", "assert longest_common_subsequence('abc', 'ac') == 2" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "u5f58FA-ovii", "nbgrader": { "cell_type": "markdown", "checksum": "c53beb45d361de2cd1900b5864cd5d57", "grade": false, "grade_id": "cell-512b0f43ce6a1d6f", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Pair-wise LCS\n", "\n", "How many LCSs are there in Set_Strings? Generate the matrix of the lengths of the LCS for every pair of strings in Set_Strings. Make sure that your matrix obeys the following properties:\n", "1. The matrix should be cast as a two-dimensional numpy array. **Store this 2D numpy array to a variable named `C`**.\n", "\n", "2. Your 2D array `C` should have dimension (7,7) and `C[i,j]` should give the length of the LCS for the $i-$th and $j-$th strings. For example, `C[0,3]` gives the length of the LCS for string `a` and string `d`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "a = 'AGTTATGTGTCAGAGCAAAAGATTCCTCATCTAGCGGTCGCAAGTCATTGCC'\n", "b = 'AAGTTATTTGCTCACAGGGAACGAATCCAGCTCTGCGGTCGAGGCCACATTGCC'\n", "c = 'AGTTATTTTCAGAGAAATGATTCCTTCTCACCGGTCGAGCCAGTGCC'\n", "d = 'AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC'\n", "e = 'ACAGCTTATATAGCTCATAGGGAGCGAAATCCAGCCCCGCGGTGCGAGGCCCCTTGTCGC'\n", "f = 'AAGTATATGGCACGAGGGAACAGTATCAGCTCTTCGGATAAAGGCCACAGTGCC'\n", "g = 'AGTTATGTGTCACAGGCAAAAGATCCTTCTCTGCGGTCGAACCCATTGCC'\n", "\n", "set_string = [a,b,c,d,e,f,g]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[52 40 41 48 39 38 45]\n", " [40 54 38 38 47 44 43]\n", " [41 38 47 39 36 36 39]\n", " [48 38 39 55 38 37 42]\n", " [39 47 36 38 60 39 40]\n", " [38 44 36 37 39 54 40]\n", " [45 43 39 42 40 40 50]]\n" ] } ], "source": [ "# number if gene\n", "n_gene = len(set_string)\n", "\n", "# initialize the lcs_matrix with 0\n", "C = np.zeros((n_gene, n_gene), dtype = int)\n", "\n", "for i in range(n_gene):\n", " \n", " # if the two pairs are same, lcs is simply the length of the string\n", " C[i,i] = len(set_string[i])\n", " \n", " \n", " # (x,y) and (y,x) are same pair, so no need to calculate \n", " # every element. As the matrix will be symmetric we will calculate only the \n", " # upper diagonal (i.e. range(i+1, n_gene)) and complete the lower diagonal accordingly\n", " for j in range(i+1, n_gene):\n", " \n", " #calculate and store the lcs length\n", " C[i,j] = longest_common_subsequence(set_string[i],set_string[j])\n", " C[j,i] = C[i,j]\n", "\n", "print(C)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "id": "ZASMhbR-ovij", "nbgrader": { "cell_type": "code", "checksum": "337eeb3a5a408c7bc5e1cf3d22a76d23", "grade": false, "grade_id": "cell-c9ffd6de81af5096", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "48\n", "48\n" ] } ], "source": [ "# testing\n", "\n", "print(longest_common_subsequence(a,d))\n", "print(C[0,3])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "OQy4VHGDoviu", "nbgrader": { "cell_type": "markdown", "checksum": "3bbd6e8a5d852311240839a178188483", "grade": false, "grade_id": "cell-e598c2cb440302ad", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Genealogical Relationships\n", "\n", "Manually examine the matrix you obtained above, and infer the genealogical relationships between strings (i.e., explicitly identify the great-grandparent, grandparent, parent and child strings) using **at least** two strategies: one that is **local** and another that is **global**. A local strategy infers the location of a particular string in the tree based on a property (of your choice) of the node itself. A global strategy infers the whole tree based on a metric obtained by considering all the relationships involved in that tree at once. You may need to research what a good metric could be to describe global relationships (i.e., beyond what was discussed in class). \n", "\n", "After describing and implementing your strategies, draw the resulting genealogy binary tree(s) associated with Set_Strings resulting from each strategy. Comment on whether the results are expected to be the same or different and provide a concise explanation for these results. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Local Strategy 1\n", "\n", "For this strategy, our assumptions and thought processes are the following:\n", "\n", "- Every child-parent gene pair has the higher shared letters then any other pairs (i.e. grandparent-grandchild or uncle-niece or sibling)\n", "- As every leave nodes has one parent and no children, they will have one stronger connection and all other weak connection\n", "- As the root node has two child and no parent, it has two stronger connection\n", "- The other nodes have one parent and 2 children, so total three stronger connection\n", "\n", "$\\therefore$ If we take the average of the 3 best connection of each node, the average will be highest for the middle level nodes (here, the parent nodes) and it will be lowest for the leave nodes (here, the child nodes) and root node (the grandparent) will be in the middle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Implementation:\n", "\n", "1. Create the LCS length matrix, C for all the nodes \n", "2. As the lengths of the different pairs vary, more useful metric will be to use the ratio of the LCS length and the average length of the pairs. We can divide each LCS length by the average length of the corresponding pair to get the relative length.\n", "3. For a single node, we will sort the relative length of the LCS with all other nodes in descending order (i.e. sort a row in the matrix C).\n", "4. The first one should be 1, when we compare the node with itself. So we will take the next three relative length and take their average.\n", "5. If this average of string $i$ is higher then string $j$, then string $i$ is more likely to be a 'parent' and string $j$ is more likely to be a 'child':\n", " - The lowest 4 strings will be 4 children\n", " - The highest 2 strings will be 2 parents\n", " - The remaining one will be the grandparent (root node)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[52, 40, 41, 48, 39, 38, 45],\n", " [40, 54, 38, 38, 47, 44, 43],\n", " [41, 38, 47, 39, 36, 36, 39],\n", " [48, 38, 39, 55, 38, 37, 42],\n", " [39, 47, 36, 38, 60, 39, 40],\n", " [38, 44, 36, 37, 39, 54, 40],\n", " [45, 43, 39, 42, 40, 40, 50]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## lcs length matrix\n", "C" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "id": "68MT9k-Qoviw", "nbgrader": { "cell_type": "code", "checksum": "95ce8cd90fba7227085c13c6596dccbf", "grade": true, "grade_id": "cell-f821d1fa1b4c8508", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false }, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 0.75 0.83 0.9 0.7 0.72 0.88]\n", " [0.75 1. 0.75 0.7 0.82 0.81 0.83]\n", " [0.83 0.75 1. 0.76 0.67 0.71 0.8 ]\n", " [0.9 0.7 0.76 1. 0.66 0.68 0.8 ]\n", " [0.7 0.82 0.67 0.66 1. 0.68 0.73]\n", " [0.72 0.81 0.71 0.68 0.68 1. 0.77]\n", " [0.88 0.83 0.8 0.8 0.73 0.77 1. ]]\n" ] } ], "source": [ "## making the relative gene length matrix\n", "\n", "# initialize with 0\n", "relative_gene_matrix = np.zeros((n_gene, n_gene))\n", "\n", "\n", "for i in range(n_gene):\n", " \n", " # the diagonals are always 1 as both are the same pair\n", " relative_gene_matrix[i,i] = 1\n", " \n", " # only calculate the upper diagonal and complete the lower\n", " # diagonal accordingly\n", " for j in range(i+1, n_gene):\n", " \n", " # realative length = LCS length/ mean string length\n", " mean = np.mean((C[i,i], C[j,j]))\n", " relative_gene_matrix[i,j] = (C[i,j]/mean).round(2)\n", " relative_gene_matrix[j,i] = relative_gene_matrix[i,j]\n", "\n", "print(relative_gene_matrix)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# visualization\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "heatmap = sns.heatmap(relative_gene_matrix, annot = True, cmap = 'Reds')\n", "heatmap.xaxis.set_ticks_position('top')\n", "plt.title('Relative LCS Length')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## sorting every rows and take mean \n", " \n", "sorted_relative_len = [sorted(relative_gene_matrix[i], reverse = True) for i in range(n_gene)]\n", "\n", "heatmap = sns.heatmap(sorted_relative_len, annot = True, cmap = 'Reds')\n", "plt.xticks([])\n", "plt.title('Sorted Relative LCS Length')\n", "plt.show()\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "String 0: Best three avg: 0.87\n", "String 1: Best three avg: 0.82\n", "String 2: Best three avg: 0.8\n", "String 3: Best three avg: 0.82\n", "String 4: Best three avg: 0.75\n", "String 5: Best three avg: 0.77\n", "String 6: Best three avg: 0.84\n", "\n", "Strings sorted by their best-three-average: \n", "[0 6 1 3 2 5 4]\n" ] } ], "source": [ "# as the first pair is simply consists of the same node,\n", "# the best connections are the 2nd, 3rd and 4th connection \n", "# in the sorted row\n", "\n", "\n", "best_three_avg = np.zeros(n_gene)\n", "\n", "for i in range(n_gene):\n", " best_three_avg[i] = np.mean(sorted_relative_len[i][1:4])\n", " print('String {}: Best three avg: {}'.format(i, best_three_avg[i].round(2)))\n", "\n", "print(\"\\nStrings sorted by their best-three-average: \\n{}\".format(np.argsort(-1*best_three_avg)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Result**\n", "\n", "- The highest 2 Strings are the **parent** Strings:\n", " * String 0\n", " * String 6\n", "- The next one is the **grandparent** String:\n", " * String 1\n", "- The lowest 4 Strings are the **child** Strings:\n", " * String 3\n", " * String 2\n", " * String 5\n", " * String 4" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# !pip install binarytree\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " __1__\n", " / \\\n", " 0 6\n", " / \\ / \\\n", "3 2 5 4\n", "\n" ] } ], "source": [ "# printing the tree\n", "\n", "from binarytree import build\n", "# assuming that the sorted order represents \n", "# the level-order in the tree\n", "level_order_values = [1,0,6,3,2,5,4]\n", "tree = build(level_order_values)\n", "print(tree)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='graph1.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Local Strategy 2\n", "\n", "For this strategy, our assumptions and thought processes are the following:\n", "\n", "- Every child-parent gene pair has the higher shared letters then any other pairs (i.e. grandparent-grandchild or uncle-niece or sibling)\n", "- The direct ancestors/descendants (i.e. parent-child, grandparent-grandchild) connections are more stronger then any non-direct connection (i.e. uncle-niece, sibling, cousin, 2nd cousin etc.)\n", "- As the root node has a direct connection with every other nodes, overall connections should be highest for the root nodes.\n", "- The number of direct connection for every leave node is equal to the depth of the leave node as they don't have any downwards or same-level direct connection. Their only direct connections are the parents and grandparents up to the root node. So overall connection should be lowest for the leave nodes.\n", "- The direct connections for the other nodes are higher then the leave nodes and lower than the root nodes. If they lies in more upper level, they should have more direct descendants and thus relatively higher overall connection.\n", "- So considering all connection, the higher average value should indicate the lower depth of the node.\n", "\n", "$\\therefore$ If we take the average of all the connection of each node, the average should be highest for the root node (here, the grandparent) and it will be lowest for the leave nodes (here, the child nodes) and other node (the parents) will be in the middle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Implementation:\n", "\n", "1. Create the LCS length matrix, C for all the nodes \n", "2. As the lengths of the different pairs vary, more useful metric will be to use the ratio of the LCS length and the average length of the pairs. We can divide each LCS length by the average length of the corresponding pair to get the relative length.\n", "3. Every string has one relative LCS length equal to 1, so it's not necessary to remove it. So we will take the average of all the relative LCS length for each of the strings.\n", "4. If this total average of string $i$ is higher then string $j$, then the depth of the string $i$ is lower then the string $j$, which suggests:\n", " - The highest string will be the grandparent (root)\n", " - The lowest 4 strings will be 4 children\n", " - The remaining one will be the parents" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[52, 40, 41, 48, 39, 38, 45],\n", " [40, 54, 38, 38, 47, 44, 43],\n", " [41, 38, 47, 39, 36, 36, 39],\n", " [48, 38, 39, 55, 38, 37, 42],\n", " [39, 47, 36, 38, 60, 39, 40],\n", " [38, 44, 36, 37, 39, 54, 40],\n", " [45, 43, 39, 42, 40, 40, 50]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## lcs length matrix\n", "C" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "id": "68MT9k-Qoviw", "nbgrader": { "cell_type": "code", "checksum": "95ce8cd90fba7227085c13c6596dccbf", "grade": true, "grade_id": "cell-f821d1fa1b4c8508", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false }, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 0.75 0.83 0.9 0.7 0.72 0.88]\n", " [0.75 1. 0.75 0.7 0.82 0.81 0.83]\n", " [0.83 0.75 1. 0.76 0.67 0.71 0.8 ]\n", " [0.9 0.7 0.76 1. 0.66 0.68 0.8 ]\n", " [0.7 0.82 0.67 0.66 1. 0.68 0.73]\n", " [0.72 0.81 0.71 0.68 0.68 1. 0.77]\n", " [0.88 0.83 0.8 0.8 0.73 0.77 1. ]]\n" ] } ], "source": [ "## making the relative gene length matrix\n", "\n", "# initialize with 0\n", "relative_gene_matrix = np.zeros((n_gene, n_gene))\n", "\n", "\n", "for i in range(n_gene):\n", " \n", " # the diagonals are always 1 as both are the same pair\n", " relative_gene_matrix[i,i] = 1\n", " \n", " # only calculate the upper diagonal and complete the lower\n", " # diagonal accordingly\n", " for j in range(i+1, n_gene):\n", " \n", " # realative length = LCS length/ mean string length\n", " mean = np.mean((C[i,i], C[j,j]))\n", " relative_gene_matrix[i,j] = (C[i,j]/mean).round(2)\n", " relative_gene_matrix[j,i] = relative_gene_matrix[i,j]\n", "\n", "print(relative_gene_matrix)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# visualization\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "heatmap = sns.heatmap(relative_gene_matrix, annot = True, cmap = 'Reds')\n", "heatmap.xaxis.set_ticks_position('top') # show the ticks on top\n", "plt.title('Relative LCS Length')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "String 0 Average: 0.826\n", "String 1 Average: 0.809\n", "String 2 Average: 0.789\n", "String 3 Average: 0.786\n", "String 4 Average: 0.751\n", "String 5 Average: 0.767\n", "String 6 Average: 0.83\n", "\n", "Strings sorted by their average: \n", "[6 0 1 2 3 5 4]\n" ] } ], "source": [ "# the average of the all relative LCS length\n", "\n", "avg = np.zeros(n_gene)\n", "\n", "for i in range(n_gene):\n", " avg[i] = np.mean(sorted_relative_len[i])\n", " print('String {} Average: {}'.format(i, avg[i].round(3)))\n", "\n", "print(\"\\nStrings sorted by their average: \\n{}\".format(np.argsort(-1*avg)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Result**\n", "\n", "- The highest average string is the **grandparent** string:\n", " * String 6\n", "- The next 2 strings are the **parent** strings:\n", " * String 0\n", " * String 1\n", "- The lowest 4 Strings are the **children** strings:\n", " * String 2\n", " * String 3\n", " * String 5\n", " * String 4" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " __6__\n", " / \\\n", " 0 1\n", " / \\ / \\\n", "2 3 5 4\n", "\n" ] } ], "source": [ "from binarytree import build\n", "level_order_values = [6,0,1,2,3,5,4]\n", "tree = build(level_order_values)\n", "print(tree)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAgAElEQVR4Xu2dCdiWU/7HjyWKLI1dDcMwljC2yE5lyZJdIluWNCRbqGQpZaeyb8meNQzJniX7FkWYZjB2siUkf/2vzzHn9fR63+d97v0+9/39XddcNXnu+z7395zn+5zzW76/uWbPnj3byISAEBACHiAwlwjLg1nSEIWAELAIiLC0EISAEPAGARGWN1OlgQoBISDC0hoQAkLAGwREWN5MlQYqBISACEtrQAgIAW8QEGF5M1UaqBAQAiIsrQEhIAS8QUCE5c1UaaBCQAiIsLQGhIAQ8AYBEZY3U6WBCgEhIMLSGhACQsAbBERY3kyVBioEhIAIS2tACAgBbxAQYXkzVRqoEBACIiytASEgBLxBQITlzVRpoEJACIiwtAaEgBDwBgERljdTlc1Ap0+fbh588EEzYcIEM3HiRDN16lTzxRdfmB9//NE0a9bMtGrVyiy//PKmbdu2ZsMNNzQdO3Y0K6+8cjaD1VMLj4AIq/BTHO4Fx40bZ0aOHGluv/32wDfYaKONzP77728OP/zwwNfqAiFQDQERltbHHAg88sgjZsiQIWb8+PF1/96hQwez1VZbmfXXX9+sssoqZumllzYtWrQws2bNMtOmTTP//ve/zWuvvWaefPJJM3bsWMOuDGvdurXp16+fOeKII4SyEIgFARFWLDD6f5Nff/3V9O7d21x66aX2ZSClI4880hxwwAGmTZs2Nb8gTZhuuukmc/nll9tjJLb55pub4cOHm7XXXrvm++iDQqAhBERYWhdm8uTJ9gj3yiuvWDROPfVUM3DgQDPPPPNEQmf06NHm5JNPtn6vueee21x77bX2OTIhEBYBEVZY5Apy3dNPP2123XVX8+WXX5p27dqZyy67zKy33nqxvd3MmTPtTu3qq6+29zzvvPPMcccdF9v9daNyISDCKtd8z/G2L730kunUqZP59ttvzZ577mluueWWyLuqxuA899xzzQknnGD/87Bhw0yfPn1KjLxePSwCIqywyHl+Hc5yonnvvvuu2WeffazfKWm7+OKLrZ8Mu+uuu+zOTiYEgiAgwgqCVoE+y47qjjvusHlTRAbTstNPP92cdtppZvHFF7eRRSKJMiFQKwIirFqRKtDnrrnmGnPIIYeYRRdd1Lz66qvmL3/5S6pvt9tuu5kxY8aYbt26mZtvvjnVZ+thfiMgwvJ7/gKPnvQFMtM//PBD6wg/+OCDA98j6gXvvfeezef6+eefbd5W586do95S15cEARFWSSbavSZRur59+9rcqCeeeCKztyc5lZQHnP4PP/xwZuPQg/1CQITl13xFHu3f/vY362i/++67zc477xz5fmFv8NNPP9nkVCKUzz77rGnfvn3YW+m6EiEgwirRZLOT2WabbexxbMqUKZm/+bHHHmsuvPBCm+JAqoNMCDSFgAirKYQK9N8hhhEjRtij2ODBgzN/s+eee86mVqywwgq2HlEmBJpCQITVFEIF+u9rrbWWeeONN8xTTz1lNt1000hvxg5t3333rSvnoYYwjC277LLmk08+sTs+dn4yIVANARFWSdbHjBkzTMuWLW0mO9E5avvC2qhRo8xBBx1k0yFOOukks8kmm5g11lgj1O1IHsWfRnoDaQ4yISDC0hqwSZrrrLOOJRZ2WWHtoYceMttuu63BeY+wX9QcLo6nRAxJJqXoWiYERFhaA+aBBx4w22+/vdluu+3s38MYuzSOkuRwLbbYYubtt982J554ojnrrLPC3M5egwxNr169zGGHHWauuOKK0PfRheVAQEfCcsyzue2220zXrl3NXnvtZW699dZQb02SJwQ1adKkuusXXnhhQ43gfvvtF+qeHAXxhSnrPRR8pbtIhFWSKY+DsNgBsZsiU/7ss8829913n61D/Oqrr+xuK4yJsMKgVt5rRFglmfs4joQULuMgxw92ww032GYU5HURISTHa4kllgiMpo6EgSEr9QUirJJMfxxOd9QdIK1VV121rjnFXHPNZaWPEQJccMEFA6M5YMAAM3ToUDndAyNXzgtEWCWZ9zjSGthRLbnkkhaxDz74wLb6IneKEh92XmFMaQ1hUCvvNSKsEs19HImjCP117969DrWo6Q3LLLOM+fTTT5U4WqJ1GOVVRVhR0PPs2rhKc55//nnb0ossdXxYYXxXQKfSHM8WUA6GK8LKwSSkNQQVP6eFtJ6TFAIirKSQzel98ygvw06LNvcyIdAUAiKsphAq2H+XgF/BJrRkryPCKtmESyK5ZBNesNcVYRVsQmt5nZEjR1otdzWhqAUtfSZPCIiw8jQbKY5Fbb5SBFuPig0BEVZsUPp1IzVS9Wu+NNrfEBBhlXgl0Kp+6623Nt98841a1Zd4Hfj06iIsn2YrgbFSA0h5zJdffmnWX399c9lll9k/4zLUTY844gjbA9HZUUcdZYYPHx7XI3SfEiEgwirRZDf2qkjE0Mz0l19+sR9B+XPgwIFWTjmKjR492ja8mDp1qpVkPuaYY8z5559vb9m/f3+rNCoTAkEQEGEFQaugn91hhx1sB+YVV1yxrnsNPQOPPPJIc8ABB5g2bdrU/OZIzVBviGzMhAkT7HU0bWVHharD7bffbkUEMVQa+vXrV/O99UEhIMIq+RpALgY9dUjp5ZdfNq+//rrd+YwfP74OmQ4dOpitttrKHhVRZ4DMWrRoYWbNmmVw3tOiC/ka6gshvunTp9trW7dubZtUQHyVdu2115oePXrYf6LtWO/evUs+C3r9WhEQYdWKVAE/50T9eLV//vOfZscdd6x7y3HjxhnytdgRBTV6De6///7m8MMPb/TSiy66yODLwngOXXhkQqApBERYTSFU0P+Ok3299dazulb4qwYNGtTgm7JbojsOx7uJEydafxS6WGhhNWvWzLRq1cpKJrdt29bWA3bs2NGsvPLKNaF25plnWl8WhoQzuWEyIVANARFWSdeHSxylZRe7qazMKY7yfI6TOP9lQqAxBERYJVwb5557rjnhhBPMn/70J+u3itpbMCqETqdr/vnnt9rwm222WdRb6vqCIiDCKujENvZaONNxoGO0+3IRu6xhoLYRXxb9DiEtmr7KhEB9BERYJVoTP/zwg/VbTZkyxRx33HEGqZk8GX0T8WXhE6PDNNpdMiFQiYAIq0TrgZyq66+/3h65SEHIo7mcMJz4kBYyzDIh4BAQYZVkLVxyySU2H6p58+bWb7X66qvn8s1nzpxpdeIhVKKOkBbdpWVCAAREWCVYBy+88EKdBDFJmwceeGCu35pkVEjrlVdesWkSkBalPTIhIMIqwRrAb8WXv1evXubSSy/14o3ff/99S1rvvPNOpL6HXrysBlkzAiKsmqHy84OQFHV9lNW8+OKLXr3E5MmTLWl9/PHHZt999zU33nijV+PXYONHQIQVP6a5uWNlzR5kFadsTFovSQ9ESOu7774zPXv2tOQrKy8CIqyCzv2kSZNsCgN6VDjc//GPf3j7po899pgVGqSBRh7TMbwF1sOBi7A8nLRahkzqAuJ8pDKMGjWqlkty/Zl7773X+rIw9LpQmJCVDwERVgHnnF3IBRdcYFMXSGEglaEIdvPNN1tfFkZ50fHHH1+E19I7BEBAhBUALB8+SrnN3nvvbYf6xBNPWPG8ItmVV15pfVkYcs7VJGyK9N56l98QEGEVaCUgpIffiqYSRd6BsHtkF4ndcMMNpnv37gWaRb1KNQREWAVaH0jFkGSJdAw1eUU29LvwZWFjxowxu+yyS5FfV+/2PwREWAVZCojwnXHGGVYqBr8V0jFFNyRy2EliKDx06tSp6K9c+vcTYRVgCSBv3KVLF/smyB5vt912BXir2l6BdA18WS1btrSk1b59+9ou1Ke8RECE5eW0/T7oTz/91PqtyAanocQpp5zi+RsFHz768fiyaI4Baa2xxhrBb6IrvEBAhOXFNDU+SJqg3n333QZZlvvuu8/ztwk//N122836slZaaSVLWlmrqIZ/E11ZDQERlsfrwzVxWHLJJa3fKkj/QI9fu9GhU8IDWdH/kD8XX3zxIr5mqd9JhOXp9D/66KN1TuY777zTsMMou33//fe27vDZZ581m266qSWtoiTNln1u3fuLsDxcCRQC47f617/+ZU488URz1llnefgWyQwZnx6k9cYbb9jgA0EIWXEQEGF5OJeUp1CmQjMJCoNlcyIAkUNa//nPf8wee+wRqhmsMM0nAiKsfM5Lo6MaPny4Ofroo20YH7+VGjU0DNVrr71mSYumryisIrUj8x8BEZZHc4hvZuONN7YjVklK0xOHWgWkRZdq9Owvuuiipi/SJ3KNgAgr19Pz++B++eUX67d6/fXXTe/evc2IESM8GXm2w6SrtesmfdJJJxkiqzJ/ERBheTJ3hx56qLn66qttM4nnnnvOk1HnY5hEUfFlYZQvDRgwIB8D0ygCIyDCCgxZ+hdcddVV5rDDDrOdY/BbkWckC4bAddddV9ctaNiwYaZPnz7BbqBP5wIBEVYupqHxQUycONGsu+66Vh74iiuusMQlC4eA683I1exWDz744HA30lWZISDCSgj6N99800A2U6dONZ9//rl1/M4zzzymVatW5s9//rNZbbXVzAYbbGAWXHDBqiPYaKON7BGQLxdfMlk0BM4++2yDLwsbPXq06dq1a7Qb6upUERBhxQj3gw8+aHN+xo4daz755JOa7kwuFVpOiNDVl4Th2IJzfc0117R9Beedd96a7qkPVUfASfHwKeovqcOU+YGACCuGecI/gl+E3B9nyy23nG2rtcoqq1gVgQUWWMAQ6fvqq6/Me++9Z6N9tLByhn/qiCOOMGg8URN400031SlpTpgwoS6dIYbh6hbGmGOOOcbOWbNmzWwJzxZbbCFcPEBAhBVhksiL4njx5JNP2rusuOKKBqkT6vrYFTVl06dPt7/wt9xyi0HTCmMXxZcJjSdq4y688EKbKCqLHwEXeeWYDmmRNiLLNwIirJDzc95555m+ffvaq1dYYQUbKo/ixH311VfNOeecY/0qzmhrhXSMLDkEunXrZjHHrwhpsSOW5RcBEVaIuXEql1zK7gfywqEeh0FQ+K4++OADw7ESnxjOeVlyCOy00052p0sgBNJq3bp1cg/TnSMhIMIKCN9BBx1U15j0xhtvrOuTF/A2VT9O/RsNUFEa4LjCnySMypJBYNasWbaEZ/z48aZdu3aWtBZZZJGaH4Y/8qWXXjLvvPOO+eijjwxH/dmzZ9t6z2WWWcasvPLKNjWFe8uiISDCCoDfsccea31KLVq0sD6njh07Brg6+Ef32Wcf69/CCf/UU09JRTM4hDVf8fXXX1vSgniI3EJa1XbNzAdzQ0dqSKoWIwrMbo5jKB2OZMEREGHViNk111xjDjnkEPtp6tPSWnDuuNKhQweDaJ8sOQT++9//WtKaMmWKJRbIqL5xdDz//PPtbswZcszky7Vt29b6wtidzTXXXHan9eGHHxpy8ogIv/3223XX4OCntyLkJasdARFWDViRhkDbd5I/L730UtOrV68arornIzRF5SiBxlNZm0zEg2Rtd3nrrbcsaUE0kAm6Yxj///jjjzd01saQXybIstdee9njXi3GvfFJInXDmsIQGaRVmRpn1IKgOj/XhBJJneRFVS7gmi6M6UOVigP8+iuSFROwjdzmxRdftKTFjwWpD6g98Oe0adOsO4AGrpBXlEALP3yDBw82KKRyH8quokSZk0UkP3fXDquJuXjmmWfMJptsYrf4tILPqhsLx1GOpTj9R44cmZ8VVNCRPP7445a0SPZ1Rn4dPkyit3EYUtfk3Ln5pEUbu2hZ4wiIsJpYHU6OmAx06tCyMo6ERJswiJPcL1myCLjEUp5y2mmn2Z1VEoaw4FFHHWVv3b9/fzNkyJAkHlOIe4qwqkwj6QW00MLwOSy//PKZTvp+++1nSKWQLyv5acB3xY8Vhiy1I5Sknlz5vAsuuMDuvGR/RECEVWVVXHnllaZnz56NRozSXlDOl/X3v/99jrrFtMdR9OdNnjzZlunMnDnTDB061PTr1y+VV66MRD/yyCOJp82k8lIxP0SEVQVQIkBEdaLqUOFMxU9BZIkoEykKYW3RRRc13377re0Ik5U/LezYfbnONWQleXfUqFGpDpu2bZRoETWkVZlsTgREWFVWBDk1hLOjROZQYCAiRJE0xdIsQv4M2+3G5WVJyymZrzKaY/iumHt2WgsttFAyD6pyV0qxiFTq6K8jYc2LjxA2OyIWLNGcMAbRbbbZZlbniqRB162ZWkTUL8OY03Liz0GDBoW5ha6pggCBDQIc7KzYYWVhDz30kE1MRpKIH0zKs2S/IaAdViMrAfUEEgLXWmstqxwaxjhK4kDlF5O2XJMmTbLZzSxIas3CGEmHPXr0sF+mtI8rYcbr0zXXX3+9xZV5Rzs/S3M76TR9aFm+b63PFmE1gpTbDUUpiSGqB0lRc4iiA1FH/COQFaoMYXxQ1DB26dIlN4GAWheaD5/beuutDc7uqD7LON71/vvvNzvuuKNZddVVDRnyMu2wqq4BF5Fja87fwxiE9cILLxiKpok2zpgxwzpTUSClE06Ycgw3Lko6UHGQxYMAktbLLrus7UyEC6Aprf14nlr9LqTRIDNEHaIkhkRYVVcLxa1U7SOdW1noGmSh4jRlJwUxVR4JP/vss9A7LO636667Wh34MWPGBBmOPlsFAfLb+IFhV+PUX8MAxi6a+6DvH/bY755Lzerll1+eampFmHdO8xodCRtBm6McMsdRtuR33HGH9Vnx60h6BH4RyjuaN28+R+V+kAnnuHL44Ydb5Qh2abJ4EKCb9sUXX2yrGahqCGNIZVdqw0clLJdMKuXZ32dDhNXIyuT4hgAbGusIvIUx7oEDF2E3fnlJb6C8g9ILSjDCGEW3yJvIGRsGvcavwc/42GOPRZIOYr75oWvfvr19UFTCQpYGyZqVVlrJvPvuu/G+sKd3E2FVmTh2V6QjkBNDB5ww5pz37lqSUUkiDesj4ZjKEZVjC8cXWTwIuHQG5jtsjpwbCYXycRAWckakNsw333w2616mtIaqa8ApJEQ5JvAAfnVxkCMLwy95WLL64Ycf6q4lT6x+H0Mt6PAIkHMHpl9++aVZbLHFwt+IXKGYCItBsFaYdzoohV03kV4mZxdrh1VlQvA7sSPaeOONDb0BszbXq3DLLbc0yJ/I4kPAlTyhgRVEz72hEcRJWIyFqGUc44oPrezuJMKqgv2vv/5qdzHU7uUhtEyKBUmnOIcp+ZHFhwDNIhDT+/jjj23jiCgWJ2FxHMSHypGQv5fdRFhNrADXeIJQNZnQWZmLQHEsIC1Cx4N4ZwIFDLrfEMmtVfK4sRHERVhO3ojSHDqGy+TDanINoIpAR2cM0qA2MAsjUZTcHgm8JYM+6SbktdEJZ++99470EAgLx/0rr7wS6Yfl6aeftuuNgA+BH5kIq6Y1gNICjvesfFkkD5JEuNRSS9nCXNItZPEiQJIvqqLsqEkbCWOIPKL7/9xzz9nLIa177rnH5vKFMeSYGY9y7n5HT0fCGlYSviyy1anpIg+KLidpGUcUEk8ZA4XPBx54YFqPLtVzXPrJ2muvbSh8D2Mc4fAxVhq1o0sssUSY29l6UdqKad5FWIEXEEmFrnFqGpK5DJAGnTyT3CD9ygaessAXEGChoSrqHKh0ZGlO3ogxUOdI/alMR8JAa+Cyyy4zaFlhNA448sgjA10f5MMcL/Cr8GtPsiiEKUsWAUqeKH1CTx1ZoCyNYym7+ai1jVm+QxLP1pEwIKr4svBpYfx55plnBrxD0x+HnGjnRaU+HYWRGpGIW9O4Rf0EyhobbrihTR+gC7RrQBL1vmGupysSP1p33XWXLXaX/YaACCvESiAPimJZDL0sSCxs6U79xzvnL/++/fbbG6SQs5DpDQFLIS7ZfffdLUkwvyNGjMjknfgRJBpMTSJy2rLfERBhhVwNpBhwPKRHIEYUj1ZQYSNCaIkj8oe/Cuvbt69tRiBLFwFSEeiYgzHHOM3TNHLByAnDcLjvsMMOaT4+988SYUWYImq8aAFV+UvMAmMLj7O8mqLozz//bPO6OO6xiyLLGmvXrp1tYU5WuywbBOjAzByQf8cOJ82jIakzPFNBlobnXoQVw3eiU6dOtsFEfWvdurXNxSHCQ9U9bc/JWMY3Ub+FE7lVHDWzanwQAwyFuoVr9cUPD6kKKJEmbfvss49NXCVCiT9t/vnnT/qR3t1fhBVxylyzinnmmcegX0RRMsoMTz31VJPlFBw9IDt0sqZPn25eeumluuNIxGHp8ogIkEpAkTlaZlQZIMaYZDmU6+pNcIU15I6FEV+jcJeLsCJOKT3s8D815KTFv8X/Pv/8c4O2EaSGKgA971ZbbTW768LwfZEmcfTRRxuym2X5QIAfIJI3mcN11lnH0JmZP+M0dtusIZpfEFxB56xStTTOZxXhXiKsCLNI2gGNAjCy4MM63F04HU0msqVl+UEAsuKohloHRpUD+VFxGD903As1EFRFkUTGhylrHAERVoTV4dqKs6DRqopihLD5UrBoqUeT5QcBpI5JKr3yyivtoPAxUeMX1t945513mmHDhhmKm7E999zTkJQcVTgwP4glNxIRVkhsUYBEN4k/EfcjuhPFXG4XuVdEDmX5QwA1BzT5XcCEYApkg4+L+ee435ARTSbyh/MeX5hLhcGpDlGRJCyrDQERVm04/eFT5Eixw4qrPyCKktSy8WuOIsNf//rXkCPTZUkjgC+LetL6kV7cA/gnUQlFYgalUOpBp06dOseQ8F/i1GfOITCSVWW1ISDCqg2nP3yKHKv333/f3HvvvdYxG4ftv//+tn8hMif8ksvyiwBJviT3ouIBQaFXRW5dQwZ5UQmBM53aQP7kSEjNYlaSRflFtvrIRFghZo5fWBL7cJDiMI/LODKQMKq2TnEhmtx9NtlkE/PMM8/YfpN77LGHfRA7Y3ZO7Kww0iBwG9CRp6E8LtfZufIeyY24GHcWYYWYRyR0yb9KQqfItRYbO3as6dy5c4jR6ZKkEaBHIAnBpKVATqSrhDGOlaSyUOAO+cmaRkCE1TRGc3zCtYqnbKO+byLgrRr8+BlnnGEGDhxoQ+lRI49xjEf3+CMCzn/ZvXt3e4SPYs61oF1WbSiKsGrDqe5TW2+9tU3yQ6+I0HbcRiIh0iJYHD3y4h6f7mfsjggZZNIT0CyLYtSh9unTR8oMNYIowqoRKD7mOtfgZKVYuXnz5gGurv2jXbp0sRnPOGZZzLL8IICaBsd2aj85DroOOVFG6HZZt912m02TkDWOgAgrwOqgm8qtt96aeOcaFm7Xrl3VLSXA3KT10bPOOssqdBDRve6662J5LGVZlGdJ/6ppOEVYTWNkPzF58mQbwsY+/PBDgxJDkkZSIv0HccZyBJHlAwEUSYkMk0S6yy67xDYopzDKDyLdxmUNIyDCqnFl0GkZVYWePXsa2m4lbdSY4SdDJPCSSy5J+nG6fw0IUC+6+uqrm4UXXtjW/8VpbpcFIbo2YXHevyj3EmHVMJP4q1z7chQh11xzzRquivaR1157zSoDUMFPJ5ewofNoo9DVlQgMHTrUDBgwwLZaI6UlbiPyTONeBB1xCcj+iIAIq4ZVQZoB6QYkCBJ+Tss233xzq6s1atSo0IW2aY21DM8hURjNMpqjEhiJ21w9KX0onTpE3M/w/X4irCZmkHILdlcohSKshqhbWoY6AEdQVC9JpZBlh4DzYSKwx1pIyqghpThau6yGERZhNbHyXM0X3XEakkFOauFyX6r8KYieOXOmVTOlaFaWDQIuobdHjx5WyC8pw19Jv8u4y76SGm/a9xVhNYE4JRiUYmRVVU/NIl8QQun4UGTZIICcNR11yI+jgDlJc7ss9N1JpZH9joAIq8pqoOyCfBv0tXGCZ2Hjx4+3nZ+RLUHhVJY+AsjIINqHwB7VB0kb0Wii0ig8oAIhE2HVtAacCijtyw877LCarkniQ3xZ+NJQx7jzzjsn8QjdswoCgwYNsnI/abbeQrGDWlUp0M45MdphNbJQUUugx2CbNm1s2/IszRXbIvTG0VSWLgJrr722mThxolWCRRE2DdMuq2GURViNrD7ICtKibfhJJ52Uxhpt9Bkff/xxXWY9f3c5YZkOqiQPh6ggrCWWWMJ2P0rT0NFCYwvVDtQ7ZMaIsBpYBWQaUw7TokULW+RMZnPWRg4Y6gBnn322OeGEE7IeTmmej/rr6aefbl0CuAbSNPTeqXTA4U/+l0yE1eAacFLFlMfQ1ikP5nS4yLIn216WDgLOf0hzXPT70zYXpdYu6zfktcOqtwKdmiT/TAKf06ZKe6E29LzlllvO+tPSTmDNw7tnMQbX1XuppZayO+0sjLrVXr16GVRuX3755SyGkKtnirDqTQeNAUgWpfXSyJEjczVZ/fv3tz61gw8+2HabliWLwCmnnGIGDx5sexJyPMvK3C7rxhtvNPvuu29Ww8jFc0VYFdNAyQWyLrNmzbI+A3wHeTKy3du2bWvoZ0dBND42WXIIICdESc6DDz5ottlmm+Qe1MSd8Z1BmhTDk7xaZhNhVcw+v6b8qlLYSoFrHq1Tp062RCjr3LA8YhPnmDh+kbhJRJbIbNa2yiqrmHfeecdqyKMlX1YTYVXMPIsTX0XWv6jVFiPKDRxXN9tsMyvZLEsGgZNPPtkMGTIkN3pk2mX9Ns8irP+td5eot+mmm1pJl7zaL7/8Yguip0+fbluNkSMkix8BhPoQ7Hv44YcNu9o8mGsBd/3115v99tsvD0NKfQwirP9Bjm8IH5EPpRDk5uAEPu644wwdiGXxIoAEMsqfyGAjh50Xc3JD/EjxY1VGE2EZYxtLUBWPfAuklXdD553Ow1mG2/OOUZTxoYxBswlkXpAuzpOxRqdMmWLKussSYRljnLInio9UyftgOIRxDKtpQfyz5Y5eBDfQQcuTXXXVVTbrPksFkSzxKD1hoeRJc40H4jsAABdfSURBVNQll1zSOtzj6DOXxoQ6YcGddtrJ3HvvvWk8shTPcGVZeZbzcbss2oxRlVEmKz1h7brrrla2hXoxUhp8MXSZKMjFaFxAM05ZdAROPPFEgzoGfQKHDx8e/YYJ3IGk4UMPPdRqdFGcXSYrNWGRhEdyKB1p2F0tvvjiXs09FfyoUpI/RhheFh0Bl1WOcOIWW2wR/YYJ3cFFMcvWoKTUhOXkh/P8a1ptvTvNLpIKccTKoiHgghnLL7+8ee+996LdLOGry7rLKi1hvf/++3XHKL7sfOl9NKdMmedkV19w7du3r00TOfroo82FF16Y+2G7VBx6JNIrsQxWWsJyvgqKSSkq9dWcXhOJhIS6ZeERcORPBQGVBHk3mpNwSiiT5FApCev777+3Rc4zZswwHAMQ6/PVUKREmZLoJsXbiy66qK+vkum4n376aUtSyAkhK+SLlW2XVUrCQrUT2WME2RBm893QGec9SHIk2VEWHAGqBi644AJz7LHHmvPPPz/4DTK6Agkk5IZQlqBRSdGtlISFU5WWWWn0mEtjAVFOxNGWchLyiGTBEVhxxRVtegg7LaoIfDIngwN5URhfZCsdYbnoygYbbGCef/75wswtKRnTpk2z78S7yWpHAJ8VKQw0MOWI7Zu5XRbHw0mTJvk2/EDjLR1hIYJGU9Si5a8Q2SLRsXfv3mbEiBGBFkHZP+xUZvOk4R90TnC8Q1Y44nv06BH0cm8+XyrCGjNmjNltt928/SWttqpQSG3Xrp1p1aqVdb7LakeAKgHSXHwOwJDaAFEVfZdVKsJyap04VXGuFs023nhj8+yzz5ZelTLIvJLRvtVWW9lIK4qePpvr8IPbA0d8Ea00hOX8FIT9KcNBF71o5kQIt912WzNu3LiivV4i79OnTx97hKbXI9Fjn82p0VK2gxZ9Ea00hNW1a1dz2223mQEDBpgzzjijiHNpvvvuO6tG+n//93/m7bffNtTFyaoj4FqnEV0lyuq7uV0WMjQklRbNvCMs5IufeOIJ29WGLTwNApALxhZaaCGz7LLL2i8qelFEfkgGxBmJUxL76KOP7GeKapRoIDsycOBAM2jQoKK+Zizv9dhjj5mOHTvasqyi1GIy96wBX8Qog06kF4RFqJlfDPKNgkrWtmnTxsqwICmbdX+5oJMT5vNO38u3jO0w7xr1GiKqiDaiMDp06NCot8vN9Yj70R28iLusXBPWZ599ZnWqKptYogZJjzjKaYiIILS28MIL28XCkYjOyJzfcT4/9NBDc/xyciwk9I+0cJHNSY8UJTE2qbnix4wdNxruRFiLYm6XxXeFRhpFstwSFvkklEt8++23Fm+2uUQ+6GoTxMhc5l44JLFFFlnEll4UNYrCO7JbwFcHQY8ePToIXKX5rNuJFvXoRKMKxP1oXIHYX1Esl4TlusIAMnlTKBI4H1RY4Kmz4j533XWXvUWvXr0MUbUiGmVHlB9h+O8QKmTHyTEBnSfUSmfOnGnmm28+s9hii9mCX8o72LUiF023mKIb2v3Mf1GDMCh3HHDAAaapXRZCAPwPa9mypf1fni13hLXLLrvUdV2+/PLLTc+ePWPFzzWk5KY777yzlUcuonHEITARxiAtdrQomhbVXNNcMEJ1tojmqjpcl/AffvjB3HfffXVBKyLJ7gTj3p8TCEEIF7TacccdzQILLJAbeHJFWI6siOLRDSbo8a9WVDkmclwiwlg00rr99tvtkZDyI2c77LCD2XLLLc26665rEyRpuEEeGrusL774wtbPsQsj+sqC/vXXX+2l+Aj79+/vHXFNnTrVfPLJJ3NEjyEoagUxfJvkqhU9K5y29jSpIHWD+SdoRSPeSoOMKn3AkFqlzTvvvHb+6dSTh6Lw3BCWOwZCViQ9Rj0CNkVeHBGRl4G0inA8/Pzzz23jBIge41cSTFmwQTSyOB5wnCDQ4QppadRBciVO6jwax12Ilqx1dkw///xzg8PkCMzO4aeffrIEXfTUD9Y4Ley++eabOjwgLoJWVEVA2PX7GOAuIGhFmRLEDqbOcM+ceuqptvlFVpYLwnLKiYBAnlVSO6v6IDvRNv7d53KGxx9/3PoriJAuuOCCdocFeUU1SAsfz9dff20jqwQuIPm8GEcd/le/CzL+O8i1cudAOgz1gpWGf4ei8bjdDnnAh0awpGtg7KZ5TxJJUVUNYuy++W7QVo4dOXbmmWdaPbksLHPCInWB3QBn6SR8Vk2B6nxanN050/uW8nDHHXeYPffc075m586drSM5zpZf7EBxUDtfH3LSaG9laewiCaC4ZE+CBHvssYc95hE4aGxHyU6D3Rg7+DvvvNOmNGAQF/fDTeC7zZo1y84PrgEMMiY1KOq65nvK7orvC8aau+mmm0yzZs1ShSxzwnJHQbabLKIsbPfdd7fRQ9+OhjRQxQeHJd1WHekVp8RJiZMjyTTni6Mcyb/kGWH45JCG6d69e6hhQL40m+B4iLFL5UezefPmoe6X9UXshFkPnFIo0SJxlO9VnMb3hDQJFEGoIrnnnnusQkhalilhOT1yXpaQe9J+q8ZA5azvzuXvvvtu4G1zWpNV+RzwYjeBk5R8Nbq9JG0cDzlu0scRH0eaQoFvvvmmdf6SW8SvOu8bx7EXzPDPQcjsTsgSxzlN8q1PRv1ohw4dDEX+pKjwo0KOWRLGznavvfayksz4yChxYk2kYZkSlutcQwgdPZ8sDWlZfDS+VO1DVhTs4lR3O4408CNaxC83iYn1fUdJPf/ll182O+20k438tW/f3vpUcBjHaTia2TlwZCSiSJWAT+kOrqkuuHDkTTpAwnGaIzi4devWzZJ8GpYpYVFWgzM0TUd7Y6A6BzwTjfM6z+Zae/FLCmkQek7T2Fm9+OKLqZA7KQroVTEnpL3gm0nqfdml4AvDX8faJJjhUiHSxDfoszjWou9GkIGdb9xk3th4ICuijZTE0cCD43nSlhlhQVJsJ5vKxE0agMr7s4Vmu5vnvnQ0SqBhApZV81Q3d4yBRZvk8YmI8YQJEwwJjOx60jB2c6RJ8GXk2Xk23Cqok8yePdvccsstZu+99051uARAeCZt5lBPCRqFDDrYzAgLTSryYKK0iXe/ujhNcfzxS4PjNKw5MbfBgwebk08+OextEr3OKQxk3TiV6BN1atRkckRLwlzrLXaSHNXSKhshF40jN3loeW/7hUuABFHWvauXTWIuqt3TSRqlsSYzIyyX1R7lV8GVn5DJzZma5EnkQkh0DGMUCnMez2v2O1tvEv1wDkPSlF5kZaSAsDvGUHCNGjav/x6Vu7gsWm+xs3L5gFQAcBrImxF4IUiA0fyVmtAsrHLXT4WFG1MSY8mMsJwEStjooPM5EVbl15CwPs5ZvsQuByUoYC5amNcKfnY07GzyIoFMyJzGHuxsSUyM03hHMq1JUCRRMQsj8ZIETDLDOX7nzdxum9SgSy65JNPhuWLypNNrMiMskvtIFiV3JEjpiJuVRx991O4y+vbta/9p7NixNo8Kh3BYwiKxkKMlSaSV5QyZroSKhzvfSl6y8tkdE50inM58xGXci4Yh5BJx7M+q+JaUEZzv5BwhR4M6aZ7M9aLkh5qctCyN7yJRVdQ/KO9JyjIjLPI2KLIlMjP33HNHfj+iFPg8omTLMx7GxXgYV94MCWj8K0RWw0rAkJJAagLGLoZkXcp5whg/NpAKeJHUGVfWM5nahMlPOeUUm6WdpZHdjdQ0xExmd17M6XmlmV7S1Ls7dYiHH37Y/uAkYYUgrBkzZtik06WXXtoAVtgvYJ4Jyx1XicKQ3BrGnEoB1+JngHCIvkU5TjihuLiaOPz4449Wm58fjCz9Mg5f55/hh4zeAS1atAgDfezXQOYEh+Jq/krwhA7SrDOCHGGM0w4JvUkWlWdGWFGPhJWAEp2gzILFFaWOLs9HQnZC5Ah16dKlTi8s6KKiVg6iIhrKsYsFRoZ/2CM0z3cJiyg8MA9RzTW7xcmNszsPRjMTUl0oSwkb0In7Pfihuf/++w21pJSWRTFSOHA3YFEIy61RgmDcMwnLjLCiOt0dGBwZSKRk8rbffnurqMkOi8YTQS3PTneinzhZozhY2Yli4IPOFc7sqMXMVAace+65tqcff49qLpWBOeU4FtYIylBj6BQaqH1kJxlmXbg1lqcUB3Kv2GlHzYPD34TkjsMpCmFRPkXSapJNaTMjrDjSGiq1y9l54BzlS+3IK+hiz3NaA+QCyUSNmrFA+SK7qFfUXanLpyNvjSNKVHPducPOoXs+u0nSXNhBsnMmkELNYBgjoMOuAac7vqM8GFntHFEJXDkZnTDjcv06OdqTkhCFsEi7AWeO9Pw9CcuMsKImjjone31QOBLyJQxjeU4cjYuwXI9GhNzIpUIriX8L6/eLm7DIJWKXTAZ32LIYIouobPLj5ZqjopYZ1l1AeRC+wyhrK8x6rHYNgQ6y2/G7kmUexlynaHbZHOnxcUYhLMbDuBiPU60NM65q12RGWFFLc/DBkLBY33C8hw0/57k0J44jYSVWkBR+C34RWbBhHa1xHwlJYcDxzvE1bDqDywnifREcRIgwLFlxD9IbIHQc7vUlhOP+QtZ6v6hRdkgdeRjcKGiouby3KISVRtAqM8JiYlT8XOvyNDb9IKrTvf7T8OvgtI2ySON2urvdAr/WYQyiI+HzoosussXSlPRAyvi0wviv3BiijivMu1S7hnQSorzTpk2zqSVBzZXTNHQd0ULUS4IaLhnysMhl5O9JWKaEJXmZ2qc0jrSG559/3nC8oSsOX0COS/xo4C8KeySMO62BXC4aJVB+FFWVgV0khIq0L7vusG3dGA/jYjyMKw9GGo9r4RamRIsaXki9IQsbiEE5hARWduus1yQsU8KSgF+wKY2aOOoS+9xTidRSbR/2OJhE4igdfejkE1d9ovPZRVFeQB4YVwM7NBz5eTC3O44rnSSOI6Hr0sNJIEqqTDV8MyUsBiaJ5NqXf9TSHJzZRAeJ4KCjz64j7M6KUbvSnDijZ4TYKTXhKIdYXxzGbpLIKF+oMEZSLPWqlJ6E7fUY5rnVriGNhIgxktH46KJaHIRFaRyVJtRfcnpKwjInLDWhqH1ay1D87ORSwpZY4cPiy4ySBMdBMq9JkI1SC+galaQhn1LranjhhRfskT6uyKULYlHoHdbX5yK8uB6Sks/OnLCYILX5qm2ZlkFehuROKv6pJ8SXEtTYRXL8Q07Z2ZAhQ2wOW1hjd0YdIZFaIpB5MRI0cauQjoBfMkujJA6yi1I6Vsv4c0FYlUdDNVKtPm1OUiTKEaeWhdHUZ5IS8EPxlfSSKJEmp+TBWqIUKayPzmHgInJvvfVWnQZYU/ik8d+dVDb+LJpOZGk0pcBvRXUC40rKckNYvKBa1Tc9zWWQSHaa8VQeZN0r0EkAIxbJMSxPxi4SUsbQcsfPloXhb2RXi9HHkiYeSVmuCKuStPh7WD9GNbCcP4LP5FVZtKnJrmxCgQ5RXLIuTT3X/fekm1AQbifsTvMJWkhlaWh90YyCsh52t3kzl7jLkZCjYRbGs/ER4is855xzEh1C7giLt3WRQ/6OqiVf0Kg9C8kL4T5U3GO+NU2tvwpcm6+0HcHuKJikDhN5T+wcSG/IUiHBKUfghGbnEDUvLIlvMpn3RHzRSIMsnKBlEs9q6J48k4gg+Xwc58NWJ9Q63lwSFoPHEU/lPsWdGJm5aPY4ne1aX5AMZ+7lBPrJeqaDMffy2ZCWZhtOVCwtFQEKnHFgUy/GMSCpSBDz4mpFqf4nlyoL49koELBewDivRrWC68RNZyGkZ9KwSlka/FfkXyVtuSUsXpyUB6Q9KvNMCFcTjWCHwYKC2V21OlE0aqSQ3OALxRYZ1nfGrgqnYNwNE5KepMbuX/RW9eRhESLnKBZWaSHs3LjgBqkD5GHl3ZxcEPWODzzwgEHDK0kbP3686dy5s1WapRQK5ZQ0LNeE5QAgdIu0L7K5bH2DGI1Rycehq2/SPdOCjCuuz1b+urKAKD+JUuhbf1wchQjl01wUC1u2EeZ9XcIm1+LXIt0hDXOF5jwrzgTWpMfeo0cP20EdBQ6CBfhokzAavxAMoeSJmkNqD9MyLwirEgxUHlCiJOOYxo18odAFwihdwfeBuBkZ0/zKUJFedMMpzJH5gw8+sJnrHNuQyolq7GwHDBhgi2zZlXKsRv0gTasMknC050uZpPHlc+6CJII+SY6dezupY/6O9A/zF6c5OSHuyVwwJ2mad4SVJjg+PYsaN0iKVAAMRyzBCzLHg3QloskF9WmQlfMdIQvMkYzdahaGMCAa5hjqpuiYJ2Hc26mm5rmZblPv7vTe+Rw+X9wgUZtCEAXEPYNPGEtSt73a+4mwmpp9z/47zk/8CahHOkMtE8E+KunJjqbAmGMDW3oicRy5SY9g54oj1Ymv4SPEP0HWedbmBAwZB0mz9EKkzVUchgrrMcccU5dZD368t8+Gf5OgFXOLsTNm9xXUMY7LgV3UuHHj7H1wqxCEQOE3CxNhZYF6Cs8k85kjHA7YoEZeDUdMfH95MvxntChD4I/sc3YSUY++w4cPt2280G/CYU29JoRYBENTjHejnpKdM0aUnKAVAQ0XtOLfMCLyLmiF/5CglYvSt2zZ0u5swTyswmkcmIqw4kAxx/cg0srCw3lMKgS1duwo2F3NN998VnCNolXKV4i8QlZhex6mAQN+S3KN2EFgHFPxpVAawhewFiOKDKHjr3JBHHYMHAnxfxbNICsXtAqqNoEv2AWtIK2sTYSV9Qzo+aEQ4KjC0aQy5QCyYeeAzhdEVrlzgJjIqeLzkJ4zPs/RKehRKdSgc3ARR0SO/kj4oOnfUNAK/ydSOgSt8hZZF2HlYBFpCOERwBmMLhcJk/jjajEy19EW69atW2RndC3P02fiQ0CEFR+WulPGCHDcIXhQLd2FwAPHHJmfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKicD/AwoJHD88pibiAAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('graph2.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Discussion and Limitation:**\n", "\n", "One major limitation of both of the local strategy is that they just told us the levels of each nodes, i.e. either if it is a grandparent, parent or child.\n", "\n", "But it doesn't tell us which nodes are connected with which nodes and how to build the whole tree. So in both cases in order to build the tree, we just assume that the output order (sorted by their 3-best-avg or total average) of the parents and the children are in level_order. But there is no implication from the strategy itself saying that the connected nodes are originally a parent-child node. For example, we cannot be sure that string 2 and string 3 is the children of string 0, not the string 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, both strategy gives different outcome, it means the assumptions of at least one of the strategy is not fulfilled in our tree. For further inspection, we can take help from the heatmap of the relative LCS length:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "heatmap = sns.heatmap(relative_gene_matrix, annot = True, cmap = 'Reds')\n", "heatmap.xaxis.set_ticks_position('top') # show the ticks on top\n", "plt.title('Relative LCS Length')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In **local strategy 1**, from the assumption that the child-parent edge are the strongest, we predicted that the grandparent, parent and children should have 2, 3, and 1 strong connections respectively.\n", "\n", "In the heat map, we can see that,\n", "- string 0 and 1 have 3 strong connection, thus possibly the parent\n", "- string 4 and 5 have 1 stronger connection, with string 1, so possibly they are the children of string 1\n", "\n", "But,\n", "- string 2 and 3 has 1 very strong connection with string 0, but also have a smaller strong connection with string 6\n", "- string 6 has 4 relatively string connection, 2 most strong ones are with string 0 and string 1 and other 2 weak ones are with string 2 and 3\n", "\n", "So we can induce that,\n", "- string 2 and 3 are children of string 0, but also have a smaller strong connection with their grandparent string 6\n", "- string 6 is the grandparent, parent of string 0 and 1, but also have a smaller strong connection with its grandchild string 2 and 3\n", "\n", "So, we can conclude that,\n", "- Our assumptions were correct that the parent-child pairs are stronger as 6-2 and 6-3 pairs were relatively weaker then any parent-child pair.\n", "- But our implementation was not correct. We assumed that the average of the best 3 connections will reflect the number of strong connection of each node. But the 3rd relatively weaker connection of the grandparent (6-2 connection: 0.8) was significantly closer to the all three relatively stronger child-parent connection of one of the parent string 1 (0.82, 0.81 and 0.83).\n", "- So that's why our strategy gave misleading answer and misclassified the root string 6 as a parent and the parent string 1 as the root node." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Global Strategy 1\n", "\n", "For this strategy, our assumptions and thought processes are the following:\n", "\n", "- Every child-parent gene pair has the higher shared letters then any other pairs (i.e. grandparent-grandchild or uncle-niece or sibling) thus stronger then all other pairs.\n", "- There exist no non-parental pair, which is stronger then any parental pair in the whole tree.\n", "- Due to random mutation, it might be possible that two different string can have a very strong similarity due to random chance. We are assuming that no such case exists in our gene string.\n", "- So if we take the strongest pairs, they will always be parent-child pair.\n", "- As every edge connects a node with its parent only except the root node. So if there is $n$ node in a gene tree, there will be exactly $n-1$ distinct edges.\n", "\n", "$\\therefore$ If we continue to add the stronger pairs as the edge of our graph until the number of edge reached $n-1$, where $n $ is the number of gene, we will end up having our desired geneological tree." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Implementation:\n", "\n", "1. Create the LCS length matrix, C for all the nodes \n", "2. As the lengths of the different pairs vary, more useful metric will be to use the ratio of the LCS length and the average length of the pairs. We can divide each LCS length by the average length of the corresponding pair to get the relative length.\n", "3. Make an empty graph.\n", "4. As the diagonal of the relative length matrix has 1, representing same string twice, we can ignore them (i.e. make them 0). Also the matrix is symmetric, so we can work with only the upper triangular of the matrix (i.e. make every element below the diagonal 0).\n", "5. Then find the most strong remaining pair (maximum number in the remaining matrix) and add the pair of string as an edge of the graph.\n", "6. Change the value of the maximum relative length to -1.\n", "7. Repeat step 5 and 6 until the number of distinct edge of the graph reached $n-1$\n", "\n", "8. Draw the Graph:\n", " - The leave nodes will be the children \n", " - The nodes connecting by two children will be the parents, they will have 3 total edge (2 to two child and 1 to the grandparent)\n", " - The nodes connecting by the two parents will the grandparent" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# relative_gene_matrix calculated as before\n", "\n", "heatmap = sns.heatmap(relative_gene_matrix, annot = True, cmap = 'Reds')\n", "heatmap.xaxis.set_ticks_position('top') # show the ticks on top\n", "plt.title('Relative LCS Length')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# make an empty graph\n", "\n", "import networkx as nx\n", "\n", "G = nx.Graph()\n", "\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# work with only the upper triangular matrix and make the diagonals and \n", "# entries below the diagonal to 0\n", "upper_triangle = np.triu(relative_gene_matrix, 1)\n", "\n", "\n", "# continue adding edges until # of edge = n_gene - 1\n", "while(G.number_of_edges() < n_gene - 1):\n", " # finding the index of the maximum relative LCS length \n", " # (i.e. the strongest pair)\n", " most_common = np.unravel_index(np.argmax(upper_triangle, axis=None), upper_triangle.shape)\n", " \n", " # add an edge between the strongly connected pair\n", " G.add_edge(most_common[0], most_common[1])\n", " \n", " # make the new value for the pair -1, so that we can \n", " # find the next stronger pair\n", " upper_triangle[most_common] = -1\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Draw the graph\n", "nx.draw(G, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Result**\n", "\n", "- The leave nodes are the **children** strings:\n", " * String 4\n", " * String 5\n", " \n", " * String 2\n", " * String 3\n", "- The 2 nodes connected by the children are the **parent** strings:\n", " * String 0 connected by string 2 and string 3\n", " * String 1 connected by string 4 and string 5\n", "- The node connected by the parents is the **grandparent** string:\n", " * String 6 connected by string 0 and string 1" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " __6__\n", " / \\\n", " 0 1\n", " / \\ / \\\n", "2 3 4 5\n", "\n" ] } ], "source": [ "level_order_values = [6,0,1,2,3,4,5]\n", "tree = build(level_order_values)\n", "print(tree)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKiYAIq5TTrpcWAn4iIMLyc940aiFQSgREWKWcdr20EPATARGWn/OmUQuBUiIgwirltOulhYCfCIiw/Jw3jVoIlBIBEVYpp10vLQT8RECE5ee8adRCoJQIiLBKOe16aSHgJwIiLD/nTaMWAqVEQIRVymnXSwsBPxEQYfk5bxq1ECglAiKsUk67XloI+ImACMvPedOohUApERBhlXLa9dJCwE8ERFh+zptGLQRKicD/AwoJHD88pibiAAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image('graph2.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Discussion:**\n", "\n", "As expected, the global strategy tree was similar as the tree we found in local strategy 2 and also in the heat map analysis after the local strategies. \n", "\n", "The previous two strategy was local strategy as we didn't consider all the connection between all the nodes to build the tree. Instead we used the property of a single node (i.e. their average connection with other nodes or the average of their best-three connection) to build the tree.\n", "\n", "But in this strategy, we used the overall best connections of the whole matrix and use them to build the edges of our graph.\n", "\n", "The major advantage is that, we can found the exact pair-child nodes and thus build the correct tree.\n", "\n", "So, among these three strategies, the global one has higher probability of giving the correct genealogy tree. As we see in earlier discussion, local strategy 1 can give wrong result if the best 3 average don't represent the number of strong connection. Local strategy should give the correct levels as long as the parent-child pair are the strongest but it cannot tell us which child is related to which parent." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "LFgwCZXwovi2", "nbgrader": { "cell_type": "markdown", "checksum": "3672867029597deac185e46992812007", "grade": false, "grade_id": "cell-d35ea5d12d941894", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Genealogy Binary Tree\n", "\n", "Write an algorithm in Python for the general case, which takes as input $N$ sequencing strings and outputs a genealogy binary tree associated with the $N$ strings that best exposes the relationships between them. You should test your algorithm by providing at least two simple test cases that demonstrate that your algorithmic implementation is correct. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Global Strategy**\n", "\n", "We will implement the global strategy as it is better than other two strategies. But we will add some improvement to consider some of the special cases. Let's see the major initial assumptions again:\n", "\n", "1. Every child-parent gene pair has the higher shared letters then any other pairs (i.e. grandparent-grandchild or uncle-niece or sibling) for a single string, thus stronger then all other pairs.\n", "2. There exist no non-parental pair, which is stronger then any parental pair in the whole tree.\n", "3. Due to random mutation, it might be possible that two different non-parental string can have a very strong similarity due to random chance. We are assuming that no such case exists in our gene string." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**1st improvement:**\n", "\n", "This will consider the case, which will not satisfy the 2nd assumption.\n", "\n", "Suppose, \n", "- 2 is a strongly connected child of 1 and 1 is a strongly connected child of 0. As both (0-1 and 0-2 parent-child pair) are strong, (0-2 grandparent-grandchild) has a relatively strong connection.\n", "- 4 is weakly connected with its parent 3. So though (4-3 parent-child pair) is the strongest pair for string 4, this connection is weaker then (0-2 grandparent-grandchild) connection.\n", "\n", "So, it breaks assumption 2 but holds assumption 1. So, when we will add the strongest edges one by one, we will add (0-2) before (4-3) and as the number of edge will become n-1, the tree will stop adding edge, thus return a wrong tree.\n", "\n", "To resolve the problem,\n", "- We will first add the strongest connection for EACH of the string.\n", "- Then if still the number of edge is below n-1, we will continue adding the remaining strongest edge.\n", "\n", "So, in this particular example, first considering all the strongest edge for each string, we will add (4-3) before (0-2) as the stronger edge for 0 and 2 are (0-1) and (2-1). So, even before adding (0-2) the number of edge will be n-1 and it will stop adding edges\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**2nd Improvement:**\n", "\n", "This will consider some of those case, which will break the 3rd and consequently the 1st assumption and give necessary warning.\n", "\n", "If there exists a (or some) non-parental edge(s) which are more strong then parental node(s), then our strategy will connect them first. And as long as the number of edge will reach (n-1), it will stop adding any edge and return the graph. \n", "\n", "Then it is possible that we will miss one or more parental edge and get an unconnected graph. In an unconnected graph, even if we can identify which one is the potential non-parent edge, we cannot add the parts of the graph as we don't know which are the missing parental edge.\n", "\n", "So, we will further check if all the strings of the tree are connected in a single tree. If not, we will show an warning stating that 'There exists some non-parent edge which are stronger then some parent edge'. Then we will continue adding edges until we have a full connected graph to ensure that we don't miss any parent edge. Having all nodes also allow for better understanding of potential non-parent node.\n", "\n", "To understand the importance of this approach, consider the following tree:\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " __0__\n", " / \\\n", " 1 2\n", " / \\ / \\\n", "3 4 5 6\n", "\n" ] } ], "source": [ "values = [0,1,2,3,4,5,6]\n", "tree = build(values)\n", "print(tree)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If due to random mutation, (0-3) pair become strongly connected then (0-1) and (0-2), then one possible case is the following:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "colab": {}, "colab_type": "code", "deletable": false, "id": "1Z6j_0xgovi2", "nbgrader": { "cell_type": "code", "checksum": "f064d5a4d1e2fced3c27465b3ca885ac", "grade": true, "grade_id": "cell-cc46da731bc31efb", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "G = nx.Graph()\n", "\n", "# adding the strong nodes for each string\n", "G.add_edge(0,3)\n", "G.add_edge(1,4)\n", "G.add_edge(2,0)\n", "G.add_edge(3,0)\n", "G.add_edge(4,1)\n", "G.add_edge(5,2)\n", "G.add_edge(6,2)\n", "\n", "# n_edge = 5\n", "# n_node = 7\n", "\n", "# we will add one remaining stronger edge\n", "# As (0-3) is very strong and (2-0) is very strong, one possible case\n", "G.add_edge(2,3)\n", "\n", "nx.draw(G, with_labels =True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, as (2-3-0) form a triangle, which cannot be possible in a genealogy tree, any of these 3 edges are potential non-parent edge. As we don't know how and with which whom, string 1 and 4 are related, it's not possible to apply the properties of a genealogy binary tree to determine the non-parent edge. " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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58N72N8agD85O5B9fHi9YRj6+uuva+wBffz48RozoPv06aPmzZs34i8BX6na3zovL08hISFWlwMgyDk3kDMypGHD6gzjZZL+U1KepKslLZYUf/4FYWHS2rUXnJtbWVmp3NzcGgHctGlTDR06tLoDvvHGG9WkSRMf/aXgbexvDcBfnBvI48ZJK1ZcMEz9P5KmSPq7pH6S8s+9fu35F7lc0tixOrt0qbZs2VIdwGlpaWrXrl2NAO7SpQtLZwJYcnKyXn75Za1bt87qUgAEOWcGckGBFBlZc/LWOYMkTT73czFnmjRRT7dbra6/vnoIOj5dFeoLAAAGNUlEQVQ+XldffbUvKoZFqva3TklJUUxMjNXlAAhizty+afHiOl+ukJQp6S5J3SWVShoj6c+Sak+zatqsmXY8/rjczz7ruzphuWbNmmnatGmaN28e+1sD8ClnfpmZnV1nd/ydpDJJyyWtk7RN0lZJdc2xbXb2rNz79vmyStjE1KlT9f7776uoqMjqUgAEMWcGsof/Y63qgmdI6iipraT/JynF03OOHfN2ZbChjh07auTIkXrnnXesLgVAEHNmIHvYaCNCUidJlz0FKyLCSwXB7qZPn6758+fLiVMuAPiHMwM5JkbycPzgJEmvSiqQdEzSy5J+XteFbrcUHe2rCmEz8fHxat68uT7//HOrSwEQpJhlXUuZpN9Kek9SqKS7Jb107s81hIZKeXl+2+Ma1mN/awC+5MxAljyuQ74s59YhKznZ+3XBttjfGoAvOXPIWjIPimjontFut3k/HKVly5a699579de//tXqUgAEIecGclycuSd1WFj97qvay7rWtplwhoSEBL3xxhs6e/as1aUACDLODWTJPCCiKpQvtb2ly1WvgyUQnG666SbdeOONfI8MwOucHciSGa5r15rfCYeGXjiM7Xabr48da15HGDveww8/rHnz5lldBoAg49xJXXUpLDS31czJMTf9iIgwlzZNnMhsalQrKytT165d2d8agFcRyEADPP/88zp69KgWLlxodSkAggSBDDRAfn6+brrpJh08eFDhHnZ+A4D64DtkoAE6duyon/70p+xvDcBr6JCBBkpNTdW0adO0c+dOuS41Sx8ALoEOGWgg9rcG4E0EMtBALpdL06dPZwkUAK9gyBpohKr9rbOzs9WpUyerywEQwOiQgUao2t960aJFVpcCIMDRIQONtGPHDg0fPlyHDh1SSEiI1eUACFB0yEAjsb81AG8gkAEvYH9rAI1FIANecNddd+nAgQPKzs62uhQAAYpABrygefPmmjZtmubPn291KQACFJO6AC9hf2sAjUGHDHhJ1f7WS5YssboUAAGIDhnwotTUVD344IPasWMH+1sDqBc6ZMCL4uPj1axZM/a3BlBvBDLgRVX7WzO5C0B9MWQNeBn7WwNoCDpkwMtatmypX//61+xvDaBe6JABH2B/awD1RSADPnLHHXdoxr/+q8YWFUnZ2VJRkRQeLsXESJMmSe3aWV0iABshkAFfyMjQkUceUduMDLVo0UIqLf3xPbdbMgxp1CgpMVGKi7OuTgC2QSAD3rZggTRrloySErku9j8vl8sM5zlzpIQE/9UHwJaaWV0AEFTOhbFOn9YltwUxDOn0afN6iVAGHI4OGfCWjAxp2DAzZM8zTNJG/fiv32sl7a59b1iYtHatFBvr4yIB2BXLngBvSUqSSkrqfOs1SSfP/VwQxpJ5X1KS72oDYHsEMuANBQXSqlXmMHRDGIaUkiIVFnq3LgABg0AGvGHx4ou+nSipraTBkr70dJHLdcnnAAheBDLgDdnZNZc2nedPkvZLOiJpmqQ7JX1d14UlJVJOjq8qBGBzBDLgDUVFHt/qL6mlpBaSfiOzS07xdPGxY96uDECAIJABbwgPv+xLXZI8ftMcEeGNagAEIAIZ8IaYGCk09IKXj0v6TFKppHJJf5OUKmlkXc9wu6XoaB8WCcDOWIcMeENBgRQZecH3yIWSRkvaJamppJ6S/iBpRF3PCA2V8vLY4xpwKDpkwBvatzf3pnbV3J+rnaQMSSdkdssb5SGMXS5p9GjCGHAwOmTAWzzs1HVZ2KkLcDw6ZMBb4uLMgyLCwup3X1iYeR9hDDgah0sA3lR1QMSsWea6Yk57AnCZGLIGfCEz09ybOiXFDN7z97iuOg959GjzPGQ6YwAikAHfKiw0t8PMyTE3/YiIMJc2TZzIBC4ANRDIAADYAJO6AACwAQIZAAAbIJABALABAhkAABsgkAEAsAECGQAAGyCQAQCwAQIZAAAbIJABALABAhkAABsgkAEAsAECGQAAGyCQAQCwAQIZAAAbIJABALABAhkAABsgkAEAsAECGQAAGyCQAQCwAQIZAAAbIJABALABAhkAABsgkAEAsAECGQAAGyCQAQCwAQIZAAAbIJABALABAhkAABsgkAEAsAECGQAAG/g/JOnCncujVmcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# now let's continue adding edge, until we get a connecting graph\n", "\n", "G.add_edge(1,0)\n", "nx.draw(G, with_labels = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, as we have the full tree, we can try removing one of the edges from the triangle and check if it still remains a valid tree.\n", "\n", "- Removing (0-3):\n", " - 3, 5, 6 all are leave nodes and have one parent 2, but no string can have more than 2 child\n", " - So, not valid\n", "- Removing (0-2):\n", " - parent of 5 and 6 is 2\n", " - parent of 4 is 1\n", " - parent of 1 is 0\n", " - parent of 2 and 0 is 3 (root)\n", " - So valid tree\n", " - Notice that there is now many different tree possible:\n", " \n", " $(5,6) > 2 > 3 > 0 > 1 > 4$ (root 4)\n", " \n", " $(5,6) > 2 > 3 > 0 < 1 < 4$(root 0)\n", " \n", " $(5,6) > 2 > 3 > 0 > 1 < 4$ (root 1)\n", " \n", "- Removing (2-3):\n", " - parent of 5 and 6 is 2\n", " - parent of 4 is 1\n", " - parent of 3 and 2 is 0\n", " - parent of 0 is 1 (root)\n", " \n", "So, due to the abnormal random mutation (which caused non-parent edge to be stronger), there is many valid genealogy tree depending on how we define a valid genealogy tree (i.e. 'no non-parental stronger edges' or 'root will be chosen to minimize max_depth' etc.).\n", "\n", "Thus having a connecting tree allow the user to further investigate the tree better **if the tree has stronger non-parent edges.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Implement Python Code**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "## as we will use relative LCS length\n", "## let's make a function directly for that\n", "\n", "def relative_lcs_len(x,y):\n", " \"\"\"\n", " Returns the relative LCS length \n", " \n", " Input:\n", " x,y :p pair of string\n", " \n", " Output:\n", " relative_len: relative LCS length\n", " \"\"\"\n", " \n", " # lcs_length\n", " lcs_len = longest_common_subsequence(x,y)\n", " \n", " # divide by the average length\n", " relative_len = lcs_len/ ( (len(x)+len(y))/2 )\n", " \n", " return np.round(relative_len, 2)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "\n", "def genealogy_tree(set_string, connected_tree = True):\n", " \"\"\"\n", " Returns a genealogy tree from the given set of gene string\n", " \n", " Input:\n", " Set string: A list of N gene string\n", " connected_tree: Boolean: if 'True', the tree will continue adding edge\n", " until all the strings are connected. If 'False', return the tree when the edge \n", " number equals (N-1). Default is True.\n", " \n", " \n", " Output:\n", " Tree: An undirected graph represents the genealogy tree of the given string\n", " \n", " Prints:\n", " - The heatmap showing the relative LCS length for all possible pairs\n", " - Draw the genealogy tree\n", " \"\"\"\n", " \n", " # number if gene\n", " n_gene = len(set_string)\n", "\n", "\n", " \n", " ## making the relative gene length matrix\n", "\n", " # initialize with 0\n", " relative_gene_matrix = np.zeros((n_gene, n_gene))\n", "\n", "\n", " for i in range(n_gene):\n", "\n", " # the diagonals are always 1 as both are the same pair\n", " relative_gene_matrix[i,i] = 1\n", "\n", " # only calculate the upper diagonal and complete the lower\n", " # diagonal accordingly\n", " for j in range(i+1, n_gene):\n", "\n", " # realative length = LCS length/ mean string length\n", " relative_gene_matrix[i,j] = relative_lcs_len(set_string[i], set_string[j])\n", " relative_gene_matrix[j,i] = relative_gene_matrix[i,j]\n", "\n", " \n", " \n", " ### Visualize the relative LCS lenth\n", " heatmap = sns.heatmap(relative_gene_matrix, annot = True, cmap = 'Reds')\n", " heatmap.xaxis.set_ticks_position('top')\n", " plt.title('Relative LCS Length')\n", " plt.show()\n", "\n", "\n", " \n", " ### Make an empty graph\n", " G = nx.Graph()\n", "\n", " \n", " ### FInding the best connection for each string\n", " \n", " connection = relative_gene_matrix\n", " np.fill_diagonal(connection, 0) # change the diagonal to 0\n", "\n", " \n", " # go through each of the string\n", " for i in range(n_gene):\n", " # finding the index of the maximum relative LCS length \n", " # for each string (strongest connection for each string)\n", " most_common = np.unravel_index(np.argmax(connection[i], axis=None), connection[i].shape)\n", " \n", " # add an edge between the string and its strongest pair\n", " G.add_edge(i, most_common[0])\n", " \n", " # make the new value for the pair -1, so that we don't\n", " # take this pair anymore\n", " connection[i][most_common[0]] = -1\n", "\n", " \n", " #### Finding any other missing child-parent connection if \n", " ### the number of edge is less than (n-1)\n", " \n", "\n", " # taking only the upper triangle\n", " upper_triangle = np.triu(connection, 1)\n", "\n", " # continue adding edges until # of edge = n_gene - 1\n", " while(G.number_of_edges() < n_gene - 1):\n", " # finding the index of the maximum relative LCS length \n", " # (i.e. the strongest pair)\n", " most_common = np.unravel_index(np.argmax(upper_triangle, axis=None), upper_triangle.shape)\n", "\n", " # add an edge between the strongly connected pair\n", " G.add_edge(most_common[0], most_common[1])\n", "\n", " # make the new value for the pair -1, so that we can \n", " # find the next stronger pair\n", " upper_triangle[most_common] = -1\n", "\n", " \n", " \n", " if(connected_tree):\n", " \n", " #### If still all the strings are not connected, \n", " ### continue adding the strongest edges until all are connected\n", " \n", " # warning is true before entering the while loop\n", " warning = True\n", " \n", " # continue until the connceted components has all the string\n", " while ( sorted(nx.connected_components(G), key=len, reverse=True)[0] != set(range(n_gene)) ):\n", " \n", " # show the warning only for the first time of the while loop\n", " if(warning == True):\n", " print(\"WARNING: The set of string has non-parental connection which are stronger then parental connection.\")\n", " warning = False\n", " \n", " # finding the index of the maximum relative LCS length \n", " # (i.e. the strongest pair) in the remaining matrix\n", " most_common = np.unravel_index(np.argmax(upper_triangle, axis=None), upper_triangle.shape)\n", "\n", " # add an edge between the strongly connected pair\n", " G.add_edge(most_common[0], most_common[1])\n", "\n", " print(most_common, upper_triangle[most_common])\n", " # make the new value for the pair -1, so that we can \n", " # find the next stronger pair\n", " upper_triangle[most_common] = -1\n", " \n", " \n", " ### Draw the genealogy tree\n", " \n", " nx.draw(G, with_labels=True)\n", " plt.show()\n", "\n", " # return the tree\n", " return G\n" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tree = genealogy_tree(set_string)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Testing with different Gene strings:**" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "import random\n", "\n", "def mutate_gene(gene, iteration=5):\n", " '''\n", " Returns a gene string after 'iteration' number of random mutation\n", " '''\n", " \n", " # convert to list\n", " gene_list = list(gene)\n", " \n", " for i in range(iteration):\n", " # choose random mutation site\n", " mutation_site = random.randint(0, len(gene_list) - 1)\n", " # randomly insert one of the 4 dna base\n", " gene_list[mutation_site] = random.choice(list('ATCG'))\n", " \n", " return ''.join(gene_list)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Test 1**" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC',\n", " 'AGTTTATGTGTCTGAAGTAAAAGATTAGTAATCTACGCTTCGCAAGGTCTATTCC',\n", " 'AGTTTATGTGTCAGAAGAAAAAGATAACTAATCTACGCGTAGCAAGGTCTATTCC',\n", " 'AGTTTATGTGTCAGAAGAAAAAGATAACTAATCTACGCGTAGCAGGGTCTATGCC',\n", " 'AGTTTATCTGGCAGCATAAAAAGATAACTAATCTACGCGTAGCAAGGTCTATTCC',\n", " 'AGATTATGTGTCTGAAGTAAAGGATTAGTAATCTACGCTTAGCAAGGACTATTCC',\n", " 'AGTTTATGTGTCTGAGGGAAAAGATTAGTAATCTACGCTTCGCAAGGTCTATTGC',\n", " 'AGATCATATGACTGAAGTAAAGGATCAGTAATCTACGCTTAGCAAGGACTATTCC',\n", " 'AGATTATGTGTCTGAAGTAAAGGATTAGTAATCTACGCTTAGTAAGGACTATACC']" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_gene_string = ['AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC']\n", "\n", "# 0 is the parent of 1 and 2\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[0]))\n", "\n", "# 2 is the parent of 3 and 4\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[2]))\n", "\n", "# 1 is the parent of 5 and 6\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[1]))\n", "\n", "# 5 is the parent of 7 and 8 \n", "for i in range(2):\n", " new_gene_string.append(mutate_gene(new_gene_string[5]))\n", "\n", "new_gene_string" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tree1 = genealogy_tree(new_gene_string)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Test 2**" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC',\n", " 'CGTTTATGTGTCAGAAGCAAAAGATTACTAATCTATTCGTCGCAAGGTCTATTCC',\n", " 'AGTTGATGTGTCACTAGCCTAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC',\n", " 'CGGTTATGTGTCCGAAGCACAAGATTACTAATCTATTCGTCGCAAGGTCTATTCC',\n", " 'CGTTTATGTGTCAGAAGCAAAAGATTACTAATCTCATCGTCGCAAGCGCTATTCC',\n", " 'AGTTGATGTGTCACTAGCCTAAGATTACTAATCTACGCGTCGCAAGGGCTTTTCC',\n", " 'AGTTGCTGTGTCACTAGCCTAAGATTACTTTTCTACGCGTCGCAAGGTCTATCCC',\n", " 'AGTTGATATGCCACTAGCCTAAGATTACTAATCTATGCGTCGCAAGGGCTCTTCC',\n", " 'CGTTGATGAGTCAGAAGGAAAAGATTACTGATCTAATCGTCGCAAGCGCTATTCC',\n", " 'CGGTTATGTGTCCGAAGCAAAAGACTACTAATCTATTCGTCACAAGTTCTAATCC',\n", " 'CGGTTATGTGTCCGCAGCACAAGATTACTAACCTCTTCGTCGCAAGGTATATACC']" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_gene_string = ['AGTTTATGTGTCAGAAGCAAAAGATTACTAATCTACGCGTCGCAAGGTCTATTCC']\n", "\n", "# 0 is the parent of 1 and 2\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[0]))\n", "\n", "# 1 is the parent of 3 and 4\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[1]))\n", "\n", "# 2 is the parent of 5 and 6\n", "for i in range(2): \n", " new_gene_string.append(mutate_gene(new_gene_string[2]))\n", "\n", "# 5 is the parent of 7\n", "for i in range(1):\n", " new_gene_string.append(mutate_gene(new_gene_string[5]))\n", "\n", "# 4 is the parent of 8\n", "for i in range(1):\n", " new_gene_string.append(mutate_gene(new_gene_string[4]))\n", "\n", "# 3 is the parent of 9 and 10\n", "for i in range(2):\n", " new_gene_string.append(mutate_gene(new_gene_string[3]))\n", " \n", "new_gene_string" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING: The set of string has non-parental connection which are stronger then parental connection.\n", "(2, 6) 0.93\n", "(5, 7) 0.93\n", "(0, 2) 0.91\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\mahmu\\Anaconda3\\lib\\site-packages\\networkx\\drawing\\nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", " if cb.is_numlike(alpha):\n" ] }, { "data": { "image/png": "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qRM33HADM2fOtLuUkKcWsoiI1Gjr1q1ce+21FBYW0rRpU7vLCVlqIYuISI26dOnC9ddfz6xZs+wuJaSphSwiIrXKz8/n+uuvp7CwkCZNmthdTkhSC1lERGoVHx/PtddeS3p6ut2lhCy1kEVExCt5eXkMHDiQwsJCGjdubHc5IUctZBER8UpCQgJXX301r776qt2lhCS1kEVExGubNm1i0KBBFBYWEhUVZXc5IUUtZBER8VqPHj3o3bs3r732mt2lhBy1kEVEpE6++uorbrnlFgoLC3E4HHaXEzLUQhYRkTr51a9+RVJSEq+//rrdpYQUtZBFRKTOcnJyuO2229i5cyeRP/8MGRmQmwslJRAdDYmJMHYstGpld6lBQ4EsIiLn5MGrr2bC0aN0KCgwDxw79stJhwNcLhg0CKZMgeRke4oMIgpkERGpu/R0yidOhGPHqFfTdYZhhvP06ZCW5q/qglJ9uwsQEZEgk54OkydTr2qL2BOXC0pLYfJk83uFskdqIYuIiPeysyElxQzZKrYC44AvgVbAC8DQ6vdGRcHatZCU5IdCg49GWYuIiPemTQOn84xDZcCtwC3AT8BrwF3A9ur3Op3m/eKWWsgiIuKdoiKIiztz8BawGegDHAaMU8duAHoD/139GZGRsGePRl+7oRayiIh4JyPD7WF3rToXZlCfxTA8PifcKZBFRMQ7ublntY4BOgOxmO+NTwIrgbVA6VlXYnZb5+VZWGTwUiCLiIh3SkrcHm4ALAXeA1oDM4DhwMWenlNcbEFxwU/TnkRExDvR0R5PJWK2ik+7Chjt6eKYGN/VFELUQhYREe8kJpqDstzIBY5hdlNPB74Hxri70OGAhASLCgxuCmQREfHOmDEeT70FtMF8l7wa+ABo5O5Cl6vG54QzBbKIiHgnNtZcm9owzjr1AlAMHAFWAJe5u98wYPBgTXnyQPOQRUTEex5W6vKKVuqqkVrIIiLiveRkc6OIqKi63RcVZd6nMPZIo6xFRKRuTm8QMXmyOa+4po5W7fbkNXVZi4jIucnJMdemzsoyg7fqGten90MePNjcD1kt41opkEVE5PwcPGguh5mXZy76ERNjTm0aM0YDuOpAgSwiIhIANKhLREQkACiQRUREAoACWUREJAAokEVERAKAAllERCQAKJBFREQCgAJZREQkACiQRUREAoACWUREJAAokEVERAKAAllERCQAKJBFREQCgAJZREQkACiQRUREAoACWUREJAAokEVERAKAAllERCQAKJBFREQCgAJZREQkACiQRUREAoACWUREJAAokEVERAKAAllERCQAKJBFREQCgAJZREQkACiQRUREAoACWUREJAAokEVERAKAAllERCQAKJBFREQCgAJZREQkAPx/ELaSFfC7BMkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tree2 = genealogy_tree(new_gene_string)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "B9jyf-i4ovi6", "nbgrader": { "cell_type": "markdown", "checksum": "5c7e64a3a5f38d6a4bd4da3e44ca7fce", "grade": false, "grade_id": "cell-bb5384e631da649b", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Computational Critique\n", "\n", "Strengths or weaknesses of our suggested algorithm and possible improvements." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "id": "DnHsXrZwovi7", "nbgrader": { "cell_type": "markdown", "checksum": "df3b02b781216c548993e1ba6b382b39", "grade": true, "grade_id": "cell-7970c4575d5f3848", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false } }, "source": [ "**Strength**\n", "\n", "**1.**\n", "\n", "I used greedy strategy in our main algorithm. The greedy strategy is that we will choose the current best strong edge from the matrix, add the edge and change the value of that strong edge to find the next best edge.\n", "\n", "It is an optimizing problem as we want to maximize the LCS connection between the edges of our genealogy tree.\n", "\n", "It has the optimal substructure, as if we have a optimal tree with N string and then want to another string, we can simply find the string which has the maximum relative LCS length (i.e. strongest edge) with the new string and add that new edge to the previous optimal tree to build our new optimal genealogy tree.\n", "\n", "In this algorithm, we are not using the 'overlapping subproblem' as we are just choosing the strongest edge without considering any property of the optimal tree for the subproblems (i.e. the optimal tree for smaller number of gene string). This is why it is a greedy algorithm and not dynamic programming.\n", "\n", "Now, our greedy approach will give us optimal result as long as the set of string holds our assumption that no non-parental string is stronger then the parental string for a specific node. We discussed in task 5 how our approach is right as we will add all the parental edges (as we are adding the stronger ones) until we reach the maximum number of edge (n-1). There is (n-1) parental string and as from our assumptions all of them are stronger then other edges, we will always choose only the parental nodes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**2.**\n", "\n", "I used the relative_LCS_len function in our algorithm, which is based on the longest common sequence function. In longest common sequence function, we used dynamic programming to efficiently calculate the length of the LCS for two different pair of string. \n", "\n", "LCS length is an optimizing problem as we want to maximize the length of the common subsequence between the pair (suppose the pair is x and y).\n", "\n", "It has the optimal substructure. If we know the length of the LCS for $x[:i]$ and $y[:j]$, then just by checking the $x[i]$ and $y[j]$, we can find the LCS length for $x[i+1]$ and $y[j+1]$ as if they are equal the length will increase by 1, if not the length will be maximum between LCS of $(x[i],y[i+1])$ and $(x[i+1], y[i])$.\n", "\n", "As we saw in the last paragraph, we can use recursive function to find the maximum LCS length using a bottom-up approach, where we will use the maximum LCS length of the smaller subproblems. So it also has the 'overlapping subproblem', that's why we can use a table to memoize the optimal value of subproblem and use them to build up the optimal value for the full problem (i.e. longest LCS length).\n", "\n", "Use of DP, make the program more efficient and fast as we are just filling up the table, where in naive approach, we need to check all possible subsequence of x and y." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. I used relative LCS length instead of absolute LCS length. As we have strings with different length, comparing the absolute value will mislead us, so better metric will be to compare how much percentage of their average length is common between them.\n", "\n", "4. While building relative_gene_matrix, we know the diagonals will be simply 1 as the string is pairing with itself and also the matrix is symmetric. So, I didn't calculate the diagonals and also not for the lower triangular to avoid unnecessary computation.\n", "\n", "5. The output of the function is a graph, where it clearly identifies the parental edges and draw the graph before ending the function. This allows us to directly visualize the genealogy tree and find its all connected edges. As the graph is labeled, it clearly shows which strings are connected with which strings.\n", "\n", "6. It also prints the relative LCS length matrix as a matrix to show the strength of all possible edges, it also allow us to further investigate the edges if we found any problem in our tree (i.e. non-parent edges are stronger than parental edges)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Limitation**\n", "\n", "1. One major limitation is our algorithm doesn't output the levels (i.e. parent, child, generation 1, 2 etc.) of each string, it just outputs the graph. So a visual inspection is needed to classify which one is parent, grandparent and the child node.\n", "\n", "2. Similarly the graph is not a binary tree nor a directed graph, rather it is an undirected graph. So it is not always intuitive and visually explicit that which node is the root of the tree and which are the parents. The level of each nodes (strings) are also not visually explicit. One good strategy is to start from the leave nodes and finding their parents and go to the higher levels. But it can be a bit hard for someone who don't know or use this strategy to find the root, child and parents of the tree.\n", "\n", "3. As we discussed in task 5, the correctness of the algorithm lies on the assumption that no random mutation can cause a stronger non-parental edges then a parental edges. As mutation is random, there is a chance that it could be happen, which will make our greedy strategy (strongest edge = parental edge) not optimized. That could lead a wrong genealogy tree. Although this algorithm can give a warning and continue adding the edges to make a connected graph, it cannot detect the exact non-parental strong edge and can return an invalid genealogy tree (i.e. one parent has 3 children etc.)\n", "\n", "4. When the assumption fails, in order to make a connected graph, we will continue adding edges and in worst possible case, we may need to add all the edges remaining. This will make our graph worse and also decrease the efficiency of the program." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Improvement**\n", "\n", "1. One major area to improve is to make the output more efficient. Instead of just returning an undirected graph, it will be better, if we can make a binary tree and add the strings based on their strongest edges and return the root of the node. Having a binary tree data structure as an output will allow us to invest the tree further more easily. For example, we can then easily find the nodes at each level, the height of the tree, the directed edges of the tree etc.\n", "\n", "2. It will be useful, if we can still make a genealogy tree, when our first assumption is not satisfied. If we can identify which edge(s) are the potential non-parent edges (i.e. form a triangle in the tree), we can try to delete one of them at a time and find the max_depth of the remaining tree. Then we can finalize the tree by removing the edge which ensure the lowest height of the tree." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "Tt1w7mTXovi7", "nbgrader": { "cell_type": "markdown", "checksum": "0f91394da1434eefa1f4366a02dd703e", "grade": false, "grade_id": "cell-99b74e2bf6d4f715", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Complexity Analysis\n", "\n", "Computational complexity of our solution to produce genealogy binary trees. \n", "\n", "Let denote $M$ to be the length of a gene, and $N$ the number of genes." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "id": "EjdUJD5bovi8", "nbgrader": { "cell_type": "markdown", "checksum": "3c77f529d443c6d7503ab53c7746d29f", "grade": true, "grade_id": "cell-4c388fb7ced4f3bf", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false } }, "source": [ "**Time Complexity**\n", "\n", "Let's consider the complexity of each part of our algorithm one by one.\n", "\n", "1. creating the relative gene matrix:\n", "\n", "Here, we use the relative_lcs_len function which used the function longest_common_sequence. In the longest_common_sequence function, we used dynamic programming and recursively find the LCS length. We made a $m \\times n$ matrix and fill the value of each element of the table and return the last row last column value. As to store one element, we just checked if $x[i] == y[j]$, which is $O(1)$, the filling out of the full table has the complexity $O(mn)$, where m and n are the length of the string.\n", "\n", "Here given, that the length of a gene is $M$. So complexity of longest_common_sequence, $O(M^2)$.\n", "\n", "relative_lcs_len used longest_common_sequence once, so it also has complexity $O(M^2)$.\n", "\n", "While creating the relative gene matrix, we need to fill in the $N\\times N$ matrix, where $N$ is the number of genes in the string. To fill a single element we used relative_lcs_len of $O(M^2)$.\n", "\n", "So, total complexity, $O(N^2 M^2)$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Adding edges to the graph\n", "\n", "To find the strongest edge, we used np.argmax() function. It go through the every column and every edge to find the maximum number and return its index, so its complexity is $O(N^2)$. Then np.unravel convert the flatten index in the shape of the matrix in constant time, O(1).\n", "\n", "Now now we need to check how many times we want np.argmax to work or how many edges we want to add in the graph.\n", "\n", "Firstly, we add stronger edge of each of the string, means N edge total.\n", "\n", "Then, we take the upper triangle matrix and find the remaining stronger edges until the distinct edge number equals N-1. In worst case, we can assume among the edge added first time (N-2) was in the lower triangle, thus we are taking these (N-2) again and then take one last one. So in worst case it will be O(n) choice again.\n", "\n", "3rd, **only if we don't have a connected graph yet and connected_graph = True,** we will add more edges. In worst case we will add all the remaining edges of the matrix, thus $O(N^2)$ edge.\n", "\n", "Together, we can say, at the worst possible case, the number of edge need to add will be $O(N^2)$\n", "\n", "As adding each edge takes $O(N^2)$\n", "\n", "Total complexity $O(N^4)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Adding both of them together, complexity = $O(N^2 M^2 + N^4)$\n", "\n", "Now $N$ is the number of string and $M$ is the number of letters in gene. So, when $M > N \\Rightarrow M^2 > N^2$, our complexity will be $O(N^2 M^2)$. \n", "\n", "But if $M < N \\Rightarrow M^2 < N^2$, our complexity in the worst possible case will be $O(N^4)$. If we surely know that $M < N\\Rightarrow M^2 < N$, we can make the argument 'connected_graph' = False, then the complexity for adding the edge will be $O(N^3)$, thus the total complexity will be $O(N^3).$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Space Complexity:**\n", "\n", "We are using a $NxN$ matrix to store the relative LCS length.\n", "\n", "Then for finding each LCS length, we are using a $MxM$ matrix. But we don't need all the lcs to be counted at the same time. So we can reuse the $MxM$ table to calculate LCS of another pair after storing one lcs length in the $NxN$ table. \n", "\n", "So, our space complexity is $O(M^2 + N^2)$\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "editable": false, "id": "Y4PJ-A-Zovi9", "nbgrader": { "cell_type": "markdown", "checksum": "f62fcac6f8558d22f52a613376af012a", "grade": false, "grade_id": "cell-573aae17ca2dc9ad", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Mutation Probabilities\n", "\n", "How would you estimate the probabilities of insertions, deletions, and mutations, $p_i$, $p_d$, and $p_c$, respectively? (Hint: It is obvious that you don’t have enough data to obtain meaningful estimates for large datasets, but this small dataset has enough information for you to intuitively formulate estimates for $p_i$, $p_d$, and $p_c$.) Make sure you include a working Python estimation that would take your algorithmic strategy into practice. If you obtain estimates for these probabilities, please critically assess the results you obtained. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assumptions:\n", "\n", "1. If the len(parent) > len(child), the extra letters are deleted from parent, thus n(deletion) = len(parent) - len(child) \n", "2. If the len(parent) < len(child), the extra letters are inserted to the parent, thus n(insertion) = len(child) - len(parent)\n", "3. All other change in parent and child are caused by changed mutation" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "def mutation_rate(x,y):\n", " \"\"\"\n", " Returns the 3 mutation rate (insertion, deletion and changing) \n", " for a single pair of gene\n", " \n", " Inputs: \n", " x = parent gene\n", " y = child gene\n", " \n", " Outputs:\n", " List: prob = a 3 element array containing the probability of \n", " insertion, deletion and changing mutation respectively\n", " \"\"\"\n", " \n", " # length of the LCS\n", " lcs_len = longest_common_subsequence(x,y)\n", " \n", " if(len(x) >= len(y)):\n", " insert = 0\n", " delete = len(x) - len(y)\n", " # find the elements which are exactly matched\n", " match = sum(np.array(list(x[:len(y)])) == np.array(list(y)))\n", " changing = len(y) - match\n", " \n", " else: \n", " delete = 0\n", " insert = len(y) - len(x)\n", " # find the elements which are exactly matched\n", " match = sum(np.array(list(x)) == np.array(list(y[:len(x)])))\n", " changing = len(x) - match\n", " \n", " prob = [insert/len(x), delete/len(x), changing/len(x)]\n", " \n", " return prob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Improvement 1**\n", "\n", "In last cell, we are assuming all the remaining changes are by mutation, but by insert or delete letter from the inside of the gene, we can shift it forward or backwards, thus insertion/deletion can be more efficient then only mutation.\n", "\n", "So, our assumptions now:\n", "\n", "1. We delete the necessary letters from the parent string to create the LCS: n(deletion) = len(parent) - len(lcs)\n", "2. Then we insert new letters into LCS to create the child string: n(insertion) = len(parent) - len(lcs)\n", "3. We compare the total number of mutation in this method and the last method and take the minimum one." ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "def mutation_rate_2(x,y):\n", " \"\"\"\n", " Returns the 3 mutation rate (insertion, deletion and changing) \n", " for a single pair of gene\n", " \n", " Inputs: \n", " x = parent gene\n", " y = child gene\n", " \n", " Outputs:\n", " List: prob = a 3 element array containing the probability of \n", " insertion, deletion and changing mutation respectively\n", " \"\"\"\n", " \n", " # length of the LCS\n", " lcs_len = longest_common_subsequence(x,y)\n", " \n", " \n", " ## Method 1\n", " \n", " if(len(x) >= len(y)):\n", " insert1 = 0\n", " delete1 = len(x) - len(y)\n", " # find the elements which are exactly matched\n", " match = sum(np.array(list(x[:len(y)])) == np.array(list(y)))\n", " changing1 = len(y) - match\n", " \n", " else: \n", " delete1 = 0\n", " insert1 = len(y) - len(x)\n", " # find the elements which are exactly matched\n", " match = sum(np.array(list(x)) == np.array(list(y[:len(x)])))\n", " changing1 = len(x) - match\n", " \n", " ## Method 2\n", " \n", " delete2 = len(x) - lcs_len\n", " insert2 = len(y) - lcs_len\n", " \n", " if(delete1 + insert1 + changing1 <= delete2 + insert2):\n", " delete = delete1\n", " insert = insert1\n", " changing = changing1\n", " else:\n", " delete = delete2\n", " insert = insert2\n", " changing = 0\n", " \n", " prob = [insert/len(x), delete/len(x), changing/len(x)]\n", " \n", " return prob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Improvement 2:**\n", "\n", "In method 2, we are ignoring the changed mutation completely. But an optimal way to mutate a string to another will contain insert/delete/changed all together. So, we will use the idea of 'edit_distance': the minimum number of operation needed for changing one string to another. \n", "\n", "We will use dynamic programming, where we will have a mxn table A (where, m = len(x), n = len(y)), where $A_{i,j}$ entry will give the edit_distance to change $x[:i]$ to $y[:j]$" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "def edit_distance(x,y):\n", " \"\"\"\n", " Returns the edit_distance_table A, where A_{i,j} entry \n", " will give the edit_distance to change x[:i] to y[:j]\n", " \"\"\"\n", " \n", " # intitialize an empty table \n", " A = np.zeros((len(x)+1, len(y)+1))\n", " \n", " # first row represents edit_distance of x[:0] and y[:j],\n", " # so we will just insert the letters of y in an empty string\n", " A[0] = np.array(range(len(y)+1))\n", " \n", " \n", " # first column represents edit_distance of x[:0] and y[:j],\n", " # so we will just insert the letters of y in an empty string\n", " A[:,0] = np.array(range(len(x)+1))\n", " \n", " # go through the every element of x and y \n", " for i in range(1, len(x)+1): \n", " for j in range(1, len(y) + 1): \n", " \n", " # If last letters are same, edit distance will stay the same \n", " if x[i-1] == y[j-1]: \n", " A[i][j] = A[i-1][j-1] \n", " \n", " # If last letters are different, consider all three possibilities\n", " # and take the minimal cost\n", " else: \n", " A[i][j] = 1 + min(A[i][j-1], # Insertion mutation \n", " A[i-1][j], # Deletion mutation\n", " A[i-1][j-1]) # Changed mutation\n", " \n", " return A" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0. 1. 2. ... 52. 53. 54.]\n", " [ 1. 0. 1. ... 51. 52. 53.]\n", " [ 2. 1. 1. ... 50. 51. 52.]\n", " ...\n", " [50. 49. 48. ... 17. 18. 19.]\n", " [51. 50. 49. ... 18. 17. 18.]\n", " [52. 51. 50. ... 19. 18. 17.]]\n" ] } ], "source": [ "print(edit_distance(a,b))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will use the edit_distance table to understand the minimum number of mutation.\n", "\n", "1. We will start from the last character of both string.\n", "2. If the letters are same, we will ignore and go back one letter behind for both of them\n", "3. Otherwise, we will check which entry has a value less then 1: \n", " - If the 'NW' has 1 less value, it is 'changed mutation'\n", " - If the 'N' has 1 less value, it is 'deletion mutation'\n", " - If the 'W' has 1 less value, it is 'insertion mutation'" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "def mutation_rate_3(x,y):\n", " \"\"\"\n", " Returns the 3 mutation rate (insertion, deletion and changing) \n", " for a single pair of gene\n", " \n", " Inputs: \n", " x = parent gene\n", " y = child gene\n", " \n", " Outputs:\n", " List: prob = a 3 element array containing the probability of \n", " insertion, deletion and changing mutation respectively\n", " \"\"\"\n", " \n", " i = len(x)\n", " j = len(y)\n", " insert = 0 \n", " delete = 0 \n", " changing = 0 \n", " \n", " A = edit_distance(x,y)\n", " \n", " while i > 0 and j > 0:\n", " # If the letters are same, we will ignore and go back one letter behind for both of them\n", " if x[i - 1] == y[j - 1]:\n", " i -= 1\n", " j -= 1\n", " \n", " else: \n", " decreased_value = A[i][j] - 1\n", " # If the 'NW' has 1 less value, it is 'changed mutation'\n", " if decreased_value == A[i - 1][j - 1]: \n", " changing += 1\n", " i -= 1\n", " j -= 1\n", " \n", " # If the 'W' has 1 less value, it is 'insertion mutation'\n", " elif decreased_value == A[i][j - 1]: \n", " insert += 1\n", " j -= 1\n", " \n", " # Otherwise, if the 'N' has 1 less value, it is 'deletion mutation'\n", " else: \n", " delete += 1\n", " i -= 1\n", " \n", " prob = [insert/len(x), delete/len(x), changing/len(x)]\n", " \n", " return prob" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.057692307692307696, 0.038461538461538464, 0.21153846153846154]" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# testing\n", "mutation_rate_3(a,b)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "def total_mutation_rate(set_string, edge_list):\n", " \"\"\"\n", " Returns the total mutation rate of a geneology tree\n", " \n", " Input:\n", " set_string = list of all the genes\n", " edge_list = list of edges (x,y), where x=parent and y=child \n", " \n", " Output:\n", " \n", " \"\"\"\n", " prob = np.zeros(3)\n", " \n", " for edge in edge_list:\n", " x, y = set_string[edge[0]], set_string[edge[1]]\n", " \n", " prob += np.array(mutation_rate_3(x,y))\n", " \n", " return prob/len(edge_list)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "def edgelist(tree):\n", " '''\n", " Returns a directed edge_list from a binarytree\n", " '''\n", " \n", " edges = []\n", " \n", " for node in tree.levelorder:\n", " \n", " if node.left:\n", " edges.append((node.value, node.left.value))\n", " if node.right:\n", " edges.append((node.value, node.right.value))\n", " \n", " return edges" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " __6__\n", " / \\\n", " 0 1\n", " / \\ / \\\n", "2 3 4 5\n", "\n" ] } ], "source": [ "# our set_string\n", "gene_tree_values = [6,0,1,2,3,4,5]\n", "tree = build(gene_tree_values)\n", "print(tree)\n" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(6, 0), (6, 1), (0, 2), (0, 3), (1, 4), (1, 5)]" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "edge_list = edgelist(tree)\n", "edge_list" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Mutation Probabilities: \n", "Insertion: 7.01%, \n", "Deletion: 4.130000000000001%, \n", "Changed: 10.59%\n" ] } ], "source": [ "prob = total_mutation_rate(set_string, edge_list).round(4)\n", "\n", "# printing the total mutation rate\n", "print('\\nMutation Probabilities: \\nInsertion: {}%, \\nDeletion: {}%, \\nChanged: {}%'\n", " .format(prob[0]*100, prob[1]*100, prob[2]*100))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "deletable": false, "id": "iWHSiQXvovi-", "nbgrader": { "cell_type": "markdown", "checksum": "292eef12ce17b22d973c4fc8bf162b58", "grade": true, "grade_id": "cell-5e57033866b2d7e6", "locked": false, "points": 0, "schema_version": 3, "solution": true, "task": false } }, "source": [ "**HC Appendix:**\n", "\n", "#strategize: In Task 5, I analyzed the advantages, limitations, strength and weakness of each of the strategy, then chose the optimal strategy to implement in python. Again discussed it's limitations, improvements, thought process and assumptions behind the strategy and finally discussed possible future improvements.\n", "\n", "#designthinking: I used iterative process and build my new works upon my previous work. From the local strategy 1, I build up 2, then the heatmap analysis gave the basis of global strategy. Then I also tried to improve over the assumptions and detailed the future improvements.\n", "\n", "#communicationdesign: I used heatmap, binarytree, networkx graph, hand-drawn graph efficiently with appropriate color and labeling to ensure that it supports my codes, discussion and algorithms.\n", "\n", "#breakitdown: I broke the problems in tractable subproblems and complete and discussed one by one the subproblems. In Task 5, I explained my assumptions, thought process and work on each one of them to build up new work." ] } ], "metadata": { "colab": { "name": "CS110 Assignment 4", "provenance": [] }, "gist": { "data": { "description": "Downloads/Mahmudunnobe_CS110_gene_mutation/CS110_Assignment_4.ipynb", "public": false }, "id": "" }, "kernelspec": { "display_name": "Python 3.6.8 ('base')", "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.8" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "vscode": { "interpreter": { "hash": "5c9af5bf861f622e259cbb5c3fcf8912a684acabc7d57c0ec1c076ab03a2eda7" } } }, "nbformat": 4, "nbformat_minor": 1 }