Sets and Dictionaries Phylogenetic Trees Copyright Software Carpentry
- Slides: 75
Sets and Dictionaries Phylogenetic Trees Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http: //software-carpentry. org/license. html for more information.
Some organisms are more alike than others Sets and Dictionaries Phylogenetic Trees
Some organisms are more alike than others Sets and Dictionaries Phylogenetic Trees
Some organisms are more alike than others Sets and Dictionaries Phylogenetic Trees
Some organisms are more alike than others Sets and Dictionaries Phylogenetic Trees
Some organisms are more alike than others Sets and Dictionaries Phylogenetic Trees
Some organisms are more alike than others ? Sets and Dictionaries Phylogenetic Trees
Nothing in biology makes sense except in the light of evolution. — Theodosius Dobzhansky The closer their DNA, the more recently they had a common ancestor Reconstruct their evolutionary tree using a hierarchical clustering algorithm Sets and Dictionaries Phylogenetic Trees
Calculate the common ancestor of the two closest Sets and Dictionaries Phylogenetic Trees
Then of the next closest Sets and Dictionaries Phylogenetic Trees
And the next Sets and Dictionaries Phylogenetic Trees
Combine organisms with common ancestors Sets and Dictionaries Phylogenetic Trees
And common ancestors with each other Sets and Dictionaries Phylogenetic Trees
To construct a complete tree Sets and Dictionaries Phylogenetic Trees
Redraw Sets and Dictionaries Phylogenetic Trees
Redraw using height to show number of differences Sets and Dictionaries Phylogenetic Trees
Turn this into an algorithm Sets and Dictionaries Phylogenetic Trees
Turn this into an algorithm U = {all organisms} while U ≠ {}: a, b = two closest entries in U p = common parent of {a, b} U = U - {a, b} U = U + {p} Sets and Dictionaries Phylogenetic Trees
Turn this into an algorithm U = {all organisms} while U ≠ {}: a, b = two closest entries in U p = common parent of {a, b} U = U - {a, b} U = U + {p} Ungrouped set shrinks by one element each time Sets and Dictionaries Phylogenetic Trees
Turn this into an algorithm U = {all organisms} while U ≠ {}: a, b = two closest entries in U p = common parent of {a, b} U = U - {a, b} U = U + {p} Ungrouped set shrinks by one element each time Keep track of pairings on the side to draw tree later Sets and Dictionaries Phylogenetic Trees
What does "closest" mean? Sets and Dictionaries Phylogenetic Trees
What does "closest" mean? Simplest algorithm is unweighted pair-group method using arithmetic averages (UPGMA) Sets and Dictionaries Phylogenetic Trees
What does "closest" mean? Simplest algorithm is unweighted pair-group method using arithmetic averages (UPGMA) human vampire werewolf mermaid human vampire 13 werewolf 5 6 mermaid 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) Height is 1/2 value of entry H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) Height is 1/2 value of entry Replace score for X with (HX + WX - HW)/2 H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) Height is 1/2 value of entry Replace score for X with (HX + WX - HW)/2 H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) Height is 1/2 value of entry Replace score for X with (HX + WX - HW)/2 H V W M HW H V M HW V 13 W 5 6 M 12 15 Sets and Dictionaries 29 V 7 M 18 15 Phylogenetic Trees
Closest entries are human (H) and werewolf (W) Replace with HW (common ancestor) Height is 1/2 value of entry Replace score for X with (HX + WX - HW)/2 H V W M HW H V V HW 13 W 5 6 M 12 15 Sets and Dictionaries 29 M HW V 7 M 18 2. 5 H W 15 Phylogenetic Trees
Repeat HW V M HWV M HW HWV V M M HW 7 18 15 Sets and Dictionaries 13 V H 3. 5 W Phylogenetic Trees
Repeat HW V M HWV M HW HWV V M M HW 7 18 13 V 15 And again HWV 13 Sets and Dictionaries W HWVM M HWV M H 3. 5 HWV M 6. 5 HW M V H W Phylogenetic Trees
Final tree 10 9 HWVM 8 7 6 6. 5 5 HWV 4 3 2 2. 5 1 0 Sets and Dictionaries HW 3. 5 M V H 2. 5 W Phylogenetic Trees
Final tree 10 9 HWVM 8 7 3. 0 6 6. 5 Implied 5 HWV 1. 0 4 3 2 2. 5 1 0 Sets and Dictionaries HW 3. 5 M V H 2. 5 W Phylogenetic Trees
How to translate this into software? Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary It's really just a lookup table… Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary It's really just a lookup table… …so we should think about using a dictionary Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary It's really just a lookup table… …so we should think about using a dictionary Key: (organism, organism) Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary It's really just a lookup table… …so we should think about using a dictionary Key: (organism, organism) – In alphabetical order to ensure uniqueness Sets and Dictionaries Phylogenetic Trees
How to translate this into software? We drew it as a triangular matrix… …but the order of the rows and columns is arbitrary It's really just a lookup table… …so we should think about using a dictionary Key: (organism, organism) – In alphabetical order to ensure uniqueness Value: distance Sets and Dictionaries Phylogenetic Trees
H V W M H V 13 W 5 6 M 12 15 Sets and Dictionaries 29 Phylogenetic Trees
H V W M H V 13 W 5 6 M 12 15 29 { } Sets and Dictionaries ('human', ('mermaid', ('vampire', 'mermaid') 'vampire') 'werewolf') Phylogenetic Trees : : : 1 1 1 2
Write out the algorithm Sets and Dictionaries Phylogenetic Trees
Write out the algorithm while len(scores) > 0: min_pair = find_min_pair(species, scores) parent, height = create_new_parent(scores, min_pai print parent, height old_score = remove_entries(species, scores, min_pa update(species, scores, min_pair, parent, old_scor Sets and Dictionaries Phylogenetic Trees
Write out the algorithm while len(scores) > 0: min_pair = find_min_pair(species, scores) parent, height = create_new_parent(scores, min_pai print parent, height old_score = remove_entries(species, scores, min_pa update(species, scores, min_pair, parent, old_scor Assumes scores are in a dictionary scores Sets and Dictionaries Phylogenetic Trees
Write out the algorithm while len(scores) > 0: min_pair = find_min_pair(species, scores) parent, height = create_new_parent(scores, min_pai print parent, height old_score = remove_entries(species, scores, min_pa update(species, scores, min_pair, parent, old_scor Assumes scores are in a dictionary scores And species names are in a list species Sets and Dictionaries Phylogenetic Trees
Write out the algorithm while len(scores) > 0: min_pair = find_min_pair(species, scores) parent, height = create_new_parent(scores, min_pai print parent, height old_score = remove_entries(species, scores, min_pa update(species, scores, min_pair, parent, old_scor Assumes scores are in a dictionary scores And species names are in a list species And yes, we revised this a couple of times… Sets and Dictionaries Phylogenetic Trees
def find_min_pair(species, scores): '''Find minimum-value pair of species in scores. '' min_pair, min_val = None, None for pair in combos(species): assert pair in scores, 'Pair (%s, %s) not in scores' % pair if (min_val is None) or (scores[pair] < min_val) min_pair, min_val = pair, scores[pair] assert min_val is not None, 'No minimum value found in scores' return min_pair Sets and Dictionaries Phylogenetic Trees
def find_min_pair(species, scores): '''Find minimum-value pair of species in scores. '' min_pair, min_val = None, None for pair in combos(species): assert pair in scores, 'Pair (%s, %s) not in scores' % pair if (min_val is None) or (scores[pair] < min_val) min_pair, min_val = pair, scores[pair] assert min_val is not None, 'No minimum value found in scores' return min_pair Sets and Dictionaries Phylogenetic Trees
def find_min_pair(species, scores): '''Find minimum-value pair of species in scores. '' min_pair, min_val = None, None for pair in combos(species): assert pair in scores, 'Pair (%s, %s) not in scores' % pair if (min_val is None) or (scores[pair] < min_val) min_pair, min_val = pair, scores[pair] assert min_val is not None, 'No minimum value found in scores' return min_pair Sets and Dictionaries Phylogenetic Trees
def combos(species): '''Generate all combinations of species. ''' result = [] for i in range(len(species)): for j in range(i+1, len(species)): result. append((species[i], species[j])) return result Sets and Dictionaries Phylogenetic Trees
def combos(species): '''Generate all combinations of species. ''' result = [] for i in range(len(species)): for j in range(i+1, len(species)): result. append((species[i], species[j])) return result Sets and Dictionaries Phylogenetic Trees
def combos(species): '''Generate all combinations of species. ''' result = [] for i in range(len(species)): for j in range(i+1, len(species)): result. append((species[i], species[j])) return result def combos(): def find_min_pair(): if __name__ == '__main__': . . . main program. . . Sets and Dictionaries Phylogenetic Trees
def create_new_parent(scores, pair): '''Create record for new parent. ''' parent = '[%s %s]' % pair height = scores[pair] / 2. return parent, height Sets and Dictionaries Phylogenetic Trees
def create_new_parent(scores, pair): '''Create record for new parent. ''' parent = '[%s %s]' % pair height = scores[pair] / 2. return parent, height Sets and Dictionaries Phylogenetic Trees
def create_new_parent(scores, pair): '''Create record for new parent. ''' parent = '[%s %s]' % pair height = scores[pair] / 2. return parent, height def combos(): def find_min_pair(): def create_new_parent(): if __name__ == '__main__': . . . main program. . . Sets and Dictionaries Phylogenetic Trees
def remove_entries(species, scores, pair): '''Remove species that have been combined. ''' left, right = pair species. remove(left) species. remove(right) old_score = scores[pair] del scores[pair] return old_score Sets and Dictionaries Phylogenetic Trees
def remove_entries(species, scores, pair): '''Remove species that have been combined. ''' left, right = pair species. remove(left) species. remove(right) old_score = scores[pair] del scores[pair] return old_score Sets and Dictionaries Phylogenetic Trees
def remove_entries(species, scores, pair): '''Remove species that have been combined. ''' left, right = pair species. remove(left) species. remove(right) old_score = scores[pair] del scores[pair] return old_score def combos(): def find_min_pair(): def create_new_parent(): def remove_entries(): if __name__ == '__main__': . . . main program. . . Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries Phylogenetic Trees
def update(species, scores, pair, parent_sco '''Replace two species from the scores table. ''' left, right = pair for other in species: l_score = tidy_up(scores, left, other) r_score = tidy_up(scores, right, other) new_pair = make_pair(parent, other) new_score = (l_score + r_score - parent_score)/2 def combos(): scores[new_pair] = new_score species. append(parent) species. sort() Sets and Dictionaries def find_min_pair(): def create_new_parent(): def remove_entries(): def update(): if __name__ == '__main__': . . . main program. . . Phylogenetic Trees
def tidy_up(scores, old, other): '''Clean out references to old species. ''' pair = make_pair(old, other) score = scores[pair] del scores[pair] return score Sets and Dictionaries Phylogenetic Trees
def tidy_up(scores, old, other): '''Clean out references to old species. ''' pair = make_pair(old, other) score = scores[pair] del scores[pair] return score Sets and Dictionaries Phylogenetic Trees
def tidy_up(scores, old, other): '''Clean out references to old species. ''' pair = make_pair(old, other) score = scores[pair] del scores[pair] return score def make_pair(left, right): '''Make an ordered pair of species. ''' if left < right: return (left, right) else: return (right, left) Sets and Dictionaries Phylogenetic Trees
def tidy_up(scores, old, other): '''Clean out references to old species. ''' pair = make_pair(old, other) score = scores[pair] del scores[pair] return score def make_pair(left, right): def combos(): '''Make an ordered pair of species. ''' def find_min_pair(): def def def create_new_parent(): remove_entries(): make_pair(): tidy_up(): update(): if left < right: return (left, right) else: return (right, left) if __name__ == '__main__': . . . main program. . . Sets and Dictionaries Phylogenetic Trees
$ python phylogen. py [human werewolf] 2. 5 [[human werewolf] vampire] 3. 5 [[[human werewolf] vampire] mermaid] 6. 5 Exercise 1: write unit tests Exercise 2: reconstruct entire tree Exercise 3: why does update sort? Sets and Dictionaries Phylogenetic Trees
created by Elango Cheran November 2010 Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http: //software-carpentry. org/license. html for more information.
- Unrooted unscaled tree
- Carolus linnaeus
- Examples of clades
- Are dictionaries mutable
- Data dictionary example in system analysis and design
- Types of dictionary
- Types of dictionaries
- Kirrkirr
- Database of latin dictionaries
- Phylogenetic tree amoeba sisters
- Sister taxon
- Difference between phylogenetic tree and cladogram
- Does a catfish have opposable thumbs
- Orthologs and paralogs in phylogenetic tree
- Species tree
- What is a sister group in phylogeny
- Chordates phylogenetic tree
- Section 18-2 modern evolutionary classification
- Building vocabulary: phylogenies
- Phylogenetic tree template
- Phylogenetic tree grade 11
- Phylogenetic tree activity
- Taxon phylogenetic tree
- Tetrapod phylogenetic tree
- Cladogram of kingdoms
- Ap biology phylogenetic tree
- Extant species phylogenetic tree
- Monophyletic vs polyphyletic vs paraphyletic
- Phylogenetic tree grade 11
- Gorilla
- Upgma tree generator
- Hemichordata
- Acoleomate
- Phylogenetic classification ppt
- Phylogenetic tree of life
- Kpcofgs
- Archaea
- Primate tree
- Phylogram vs cladogram
- Phylogenetic tree
- Chapter 26 phylogeny and the tree of life
- Carpentry tools examples
- Image sets
- What is the most effective way to prepare hair for braiding
- Columbus custom carpentry
- Lengthening joints in wood
- A carpentry hammer with a slightly rounded
- Big carpentry
- Driving tools in carpentry
- Types of joints wood
- Sets and propositions in discrete mathematics
- Floor and ceiling discrete math
- Chromosome sets (=n) in mitosis and meiosis
- Anaphase meaning
- Arithmetic sequence sigma notation
- Recursive and recursively enumerable sets
- Subset text
- Maps
- Maps and sets support bidirectional iterators.
- Subspaces and spanning sets
- Idempotent law
- Venn diagram finite math
- A pilot sets out from an airport and heads in the direction
- Collection of well-defined objects
- Chapter 6 biomes section 1 what is a biome
- Application software and system software difference
- Generic software and custom software
- Difference between student software and industrial software
- Software metrics and software metrology
- Shape with 2 sets of parallel sides
- Lexical sets
- Weak entity set example
- Lingo sets
- Which ics functional area sets the incident
- Information sets in game theory
- Lexical sets