100% found this document useful (3 votes)
2K views

Ebooks File Python For Bioinformatics, Second Edition Sebastian Bassi All Chapters

Sebastian

Uploaded by

vilimaqrar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
2K views

Ebooks File Python For Bioinformatics, Second Edition Sebastian Bassi All Chapters

Sebastian

Uploaded by

vilimaqrar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Python for Bioinformatics, Second Edition


Sebastian Bassi

https://textbookfull.com/product/python-for-
bioinformatics-second-edition-sebastian-bassi/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Mastering Python for Bioinformatics Ken Youens Clark

https://textbookfull.com/product/mastering-python-for-bioinformatics-
ken-youens-clark/

textbookfull.com

Biota Grow 2C gather 2C cook Loucas

https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-loucas/

textbookfull.com

Bioinformatics Algorithms Design and Implementation in


Python 1st Edition Miguel Rocha

https://textbookfull.com/product/bioinformatics-algorithms-design-and-
implementation-in-python-1st-edition-miguel-rocha/

textbookfull.com

The Science of Nutrition, 5e Janice L. Thompson

https://textbookfull.com/product/the-science-of-nutrition-5e-janice-l-
thompson/

textbookfull.com
Trusted By The Highlander A Scottish Time Travel Romance
Highlander Forever Book 8 1st Edition Rebecca Preston

https://textbookfull.com/product/trusted-by-the-highlander-a-scottish-
time-travel-romance-highlander-forever-book-8-1st-edition-rebecca-
preston/
textbookfull.com

Mastercam 2018 Lathe Training Tutorial 1st Edition Mariana


Lendel

https://textbookfull.com/product/mastercam-2018-lathe-training-
tutorial-1st-edition-mariana-lendel/

textbookfull.com

Women vs feminism why we all need liberating from the


gender wars First Edition Williams

https://textbookfull.com/product/women-vs-feminism-why-we-all-need-
liberating-from-the-gender-wars-first-edition-williams/

textbookfull.com

Elementary linear algebra : Metric version Eighth Edition


Ron Larson

https://textbookfull.com/product/elementary-linear-algebra-metric-
version-eighth-edition-ron-larson/

textbookfull.com

Victorian Children’s Literature: Experiencing Abjection,


Empathy, and the Power of Love 1st Edition Ruth Y. Jenkins
(Auth.)
https://textbookfull.com/product/victorian-childrens-literature-
experiencing-abjection-empathy-and-the-power-of-love-1st-edition-ruth-
y-jenkins-auth/
textbookfull.com
Made Up How the Beauty Industry Manipulates Consumers
Preys on Women s Insecurities and Promotes Unattainable
Beauty Standards Martha Laham
https://textbookfull.com/product/made-up-how-the-beauty-industry-
manipulates-consumers-preys-on-women-s-insecurities-and-promotes-
unattainable-beauty-standards-martha-laham/
textbookfull.com
PYTHON FOR
BIOINFORMATICS
SECOND EDITION
CHAPMAN & HALL/CRC
Mathematical and Computational Biology Series

Aims and scope:


This series aims to capture new developments and summarize what is known
over the entire spectrum of mathematical and computational biology and
medicine. It seeks to encourage the integration of mathematical, statistical,
and computational methods into biology by publishing a broad range of
textbooks, reference works, and handbooks. The titles included in the
series are meant to appeal to students, researchers, and professionals in the
mathematical, statistical and computational sciences, fundamental biology
and bioengineering, as well as interdisciplinary researchers involved in the
field. The inclusion of concrete examples and applications, and programming
techniques and examples, is highly encouraged.

Series Editors

N. F. Britton
Department of Mathematical Sciences
University of Bath

Xihong Lin
Department of Biostatistics
Harvard University

Nicola Mulder
University of Cape Town
South Africa

Maria Victoria Schneider


European Bioinformatics Institute

Mona Singh
Department of Computer Science
Princeton University

Anna Tramontano
Department of Physics
University of Rome La Sapienza

Proposals for the series should be submitted to one of the series editors above or directly to:
CRC Press, Taylor & Francis Group
3 Park Square, Milton Park
Abingdon, Oxfordshire OX14 4RN
UK
Published Titles
An Introduction to Systems Biology: Statistical Methods for QTL Mapping
Design Principles of Biological Circuits Zehua Chen
Uri Alon An Introduction to Physical Oncology:
Glycome Informatics: Methods and How Mechanistic Mathematical
Applications Modeling Can Improve Cancer Therapy
Kiyoko F. Aoki-Kinoshita Outcomes
Computational Systems Biology of Vittorio Cristini, Eugene J. Koay,
Cancer and Zhihui Wang
Emmanuel Barillot, Laurence Calzone, Normal Mode Analysis: Theory and
Philippe Hupé, Jean-Philippe Vert, and Applications to Biological and Chemical
Andrei Zinovyev Systems
Python for Bioinformatics, Second Edition Qiang Cui and Ivet Bahar
Sebastian Bassi Kinetic Modelling in Systems Biology
Quantitative Biology: From Molecular to Oleg Demin and Igor Goryanin
Cellular Systems Data Analysis Tools for DNA Microarrays
Sebastian Bassi Sorin Draghici
Methods in Medical Informatics: Statistics and Data Analysis for
Fundamentals of Healthcare Microarrays Using R and Bioconductor,
Programming in Perl, Python, and Ruby Second Edition
Jules J. Berman Sorin Drăghici
Chromatin: Structure, Dynamics, Computational Neuroscience:
Regulation A Comprehensive Approach
Ralf Blossey Jianfeng Feng
Computational Biology: A Statistical Biological Sequence Analysis Using
Mechanics Perspective the SeqAn C++ Library
Ralf Blossey Andreas Gogol-Döring and Knut Reinert
Game-Theoretical Models in Biology Gene Expression Studies Using
Mark Broom and Jan Rychtář Affymetrix Microarrays
Computational and Visualization Hinrich Göhlmann and Willem Talloen
Techniques for Structural Bioinformatics Handbook of Hidden Markov Models
Using Chimera in Bioinformatics
Forbes J. Burkowski Martin Gollery
Structural Bioinformatics: An Algorithmic Meta-analysis and Combining
Approach Information in Genetics and Genomics
Forbes J. Burkowski Rudy Guerra and Darlene R. Goldstein
Spatial Ecology Differential Equations and Mathematical
Stephen Cantrell, Chris Cosner, and Biology, Second Edition
Shigui Ruan D.S. Jones, M.J. Plank, and B.D. Sleeman
Cell Mechanics: From Single Scale- Knowledge Discovery in Proteomics
Based Models to Multiscale Modeling Igor Jurisica and Dennis Wigle
Arnaud Chauvière, Luigi Preziosi, Introduction to Proteins: Structure,
and Claude Verdier Function, and Motion
Bayesian Phylogenetics: Methods, Amit Kessel and Nir Ben-Tal
Algorithms, and Applications
Ming-Hui Chen, Lynn Kuo, and Paul O. Lewis
Published Titles (continued)
RNA-seq Data Analysis: A Practical Introduction to Bio-Ontologies
Approach Peter N. Robinson and Sebastian Bauer
Eija Korpelainen, Jarno Tuimala, Dynamics of Biological Systems
Panu Somervuo, Mikael Huss, and Garry Wong Michael Small
Introduction to Mathematical Oncology Genome Annotation
Yang Kuang, John D. Nagy, and Jung Soh, Paul M.K. Gordon, and
Steffen E. Eikenberry Christoph W. Sensen
Biological Computation Niche Modeling: Predictions from
Ehud Lamm and Ron Unger Statistical Distributions
Optimal Control Applied to Biological David Stockwell
Models Algorithms for Next-Generation
Suzanne Lenhart and John T. Workman Sequencing
Clustering in Bioinformatics and Drug Wing-Kin Sung
Discovery Algorithms in Bioinformatics: A Practical
John D. MacCuish and Norah E. MacCuish Introduction
Spatiotemporal Patterns in Ecology Wing-Kin Sung
and Epidemiology: Theory, Models, Introduction to Bioinformatics
and Simulation Anna Tramontano
Horst Malchow, Sergei V. Petrovskii, and
The Ten Most Wanted Solutions in
Ezio Venturino
Protein Bioinformatics
Stochastic Dynamics for Systems Anna Tramontano
Biology
Combinatorial Pattern Matching
Christian Mazza and Michel Benaïm
Algorithms in Computational Biology
Statistical Modeling and Machine Using Perl and R
Learning for Molecular Biology Gabriel Valiente
Alan M. Moses
Managing Your Biological Data with
Engineering Genetic Circuits Python
Chris J. Myers Allegra Via, Kristian Rother, and
Pattern Discovery in Bioinformatics: Anna Tramontano
Theory & Algorithms Cancer Systems Biology
Laxmi Parida Edwin Wang
Exactly Solvable Models of Biological Stochastic Modelling for Systems
Invasion Biology, Second Edition
Sergei V. Petrovskii and Bai-Lian Li Darren J. Wilkinson
Computational Hydrodynamics of Big Data Analysis for Bioinformatics and
Capsules and Biological Cells Biomedical Discoveries
C. Pozrikidis Shui Qing Ye
Modeling and Simulation of Capsules Bioinformatics: A Practical Approach
and Biological Cells Shui Qing Ye
C. Pozrikidis
Introduction to Computational
Cancer Modelling and Simulation Proteomics
Luigi Preziosi Golan Yona
PYTHON FOR
BIOINFORMATICS
SECOND EDITION

SEBASTIAN BASSI
MATLAB• is a trademark of The MathWorks, Inc. and is used with permission. The MathWorks does not warrant the
accuracy of the text or exercises in this book. This book’s use or discussion of MATLAB • software or related products
does not constitute endorsement or sponsorship by The MathWorks of a particular pedagogical approach or particular
use of the MATLAB• software.

CRC Press
Taylor & Francis Group
6000 Broken Sound Parkway NW, Suite 300
Boca Raton, FL 33487-2742

© 2018 by Taylor & Francis Group, LLC


CRC Press is an imprint of Taylor & Francis Group, an Informa business

No claim to original U.S. Government works

Printed on acid-free paper


Version Date: 20170626

International Standard Book Number-13: 978-1-1380-3526-3 (Hardback)

This book contains information obtained from authentic and highly regarded sources. Reasonable efforts have been
made to publish reliable data and information, but the author and publisher cannot assume responsibility for the validity
of all materials or the consequences of their use. The authors and publishers have attempted to trace the copyright
holders of all material reproduced in this publication and apologize to copyright holders if permission to publish in this
form has not been obtained. If any copyright material has not been acknowledged please write and let us know so we may
rectify in any future reprint.

Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or utilized
in any form by any electronic, mechanical, or other means, now known or hereafter invented, including photocopying,
microfilming, and recording, or in any information storage or retrieval system, without written permission from the
publishers.

For permission to photocopy or use material electronically from this work, please access www.copyright.com (http://
www.copyright.com/) or contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923,
978-750-8400. CCC is a not-for-profit organization that provides licenses and registration for a variety of users. For
organizations that have been granted a photocopy license by the CCC, a separate system of payment has been arranged.

Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation without intent to infringe.

Library of Congress Cataloging-in-Publication Data

Names: Bassi, Sebastian, author.


Title: Python for bioinformatics / Sebastian Bassi.
Description: Second edition. | Boca Raton : CRC Press, 2017. | Series:
Chapman & Hall/CRC mathematical and computational biology | Includes
bibliographical references and index.
Identifiers: LCCN 2017014460| ISBN 9781138035263 (pbk. : alk. paper) |
ISBN 9781138094376 (hardback : alk. paper) | ISBN 9781315268743 (ebook) |
ISBN 9781351976961 (ebook) | ISBN 9781351976954 (ebook) |
ISBN 9781351976947 (ebook)
Subjects: LCSH: Bioinformatics. | Python (Computer program language)
Classification: LCC QH324.2 .B387 2017 | DDC 570.285--dc23
LC record available at https://lccn.loc.gov/2017014460

Visit the Taylor & Francis Web site at


http://www.taylorandfrancis.com
and the CRC Press Web site at
http://www.crcpress.com
Contents

List of Figures xvii

List of Tables xxi

Preface to the First Edition xxiii

Preface to the Second Edition xxv

Acknowledgments xxix

Section I Programming

Chapter 1  Introduction 3
1.1 WHO SHOULD READ THIS BOOK 3
1.1.1 What the Reader Should Already Know 4
1.2 USING THIS BOOK 4
1.2.1 Typographical Conventions 4
1.2.2 Python Versions 5
1.2.3 Code Style 5
1.2.4 Get the Most from This Book without Reading It All 6
1.2.5 Online Resources Related to This Book 7
1.3 WHY LEARN TO PROGRAM? 7
1.4 BASIC PROGRAMMING CONCEPTS 8
1.4.1 What Is a Program? 8
1.5 WHY PYTHON? 10
1.5.1 Main Features of Python 10
1.5.2 Comparing Python with Other Languages 11
1.5.3 How Is It Used? 14
1.5.4 Who Uses Python? 15
1.5.5 Flavors of Python 15
1.5.6 Special Python Distributions 16
1.6 ADDITIONAL RESOURCES 17

vii
viii  Contents

Chapter 2  First Steps with Python 19


2.1 INSTALLING PYTHON 20
2.1.1 Learn Python by Using It 20
2.1.2 Install Python Locally 20
2.1.3 Using Python Online 21
2.1.4 Testing Python 22
2.1.5 First Use 22
2.2 INTERACTIVE MODE 23
2.2.1 Baby Steps 23
2.2.2 Basic Input and Output 23
2.2.3 More on the Interactive Mode 24
2.2.4 Mathematical Operations 26
2.2.5 Exit from the Python Shell 27
2.3 BATCH MODE 27
2.3.1 Comments 29
2.3.2 Indentation 30
2.4 CHOOSING AN EDITOR 32
2.4.1 Sublime Text 32
2.4.2 Atom 33
2.4.3 PyCharm 34
2.4.4 Spyder IDE 35
2.4.5 Final Words about Editors 36
2.5 OTHER TOOLS 36
2.6 ADDITIONAL RESOURCES 37
2.7 SELF-EVALUATION 37

Chapter 3  Basic Programming: Data Types 39


3.1 STRINGS 40
3.1.1 Strings Are Sequences of Unicode Characters 41
3.1.2 String Manipulation 42
3.1.3 Methods Associated with Strings 42
3.2 LISTS 44
3.2.1 Accessing List Elements 45
3.2.2 List with Multiple Repeated Items 45
3.2.3 List Comprehension 46
3.2.4 Modifying Lists 47
Contents  ix

3.2.5 Copying a List 49


3.3 TUPLES 49
3.3.1 Tuples Are Immutable Lists 49
3.4 COMMON PROPERTIES OF THE SEQUENCES 51
3.5 DICTIONARIES 54
3.5.1 Mapping: Calling Each Value by a Name 54
3.5.2 Operating with Dictionaries 56
3.6 SETS 59
3.6.1 Unordered Collection of Objects 59
3.6.2 Set Operations 60
3.6.3 Shared Operations with Other Data Types 62
3.6.4 Immutable Set: Frozenset 63
3.7 NAMING OBJECTS 63
3.8 ASSIGNING A VALUE TO A VARIABLE VERSUS BINDING A NAME
TO AN OBJECT 64
3.9 ADDITIONAL RESOURCES 67
3.10 SELF-EVALUATION 68

Chapter 4  Programming: Flow Control 69


4.1 IF-ELSE 69
4.1.1 Pass Statement 74
4.2 FOR LOOP 75
4.3 WHILE LOOP 77
4.4 BREAK: BREAKING THE LOOP 78
4.5 WRAPPING IT UP 80
4.5.1 Estimate the Net Charge of a Protein 80
4.5.2 Search for a Low-Degeneration Zone 81
4.6 ADDITIONAL RESOURCES 83
4.7 SELF-EVALUATION 83

Chapter 5  Handling Files 85


5.1 READING FILES 86
5.1.1 Example of File Handling 87
5.2 WRITING FILES 89
5.2.1 File Reading and Writing Examples 90
5.3 CSV FILES 90
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
x  Contents

5.4 PICKLE: STORING AND RETRIEVING THE CONTENTS OF VARI-


ABLES 94
5.5 JSON FILES 96
5.6 FILE HANDLING: OS, OS.PATH, SHUTIL, AND PATH.PY MODULE 98
5.6.1 path.py Module 100
5.6.2 Consolidate Multiple DNA Sequences into One FASTA File 102
5.7 ADDITIONAL RESOURCES 102
5.8 SELF-EVALUATION 103

Chapter 6  Code Modularizing 105


6.1 INTRODUCTION TO CODE MODULARIZING 105
6.2 FUNCTIONS 106
6.2.1 Standard Way to Make Python Code Modular 106
6.2.2 Function Parameter Options 110
6.2.3 Generators 113
6.3 MODULES AND PACKAGES 114
6.3.1 Using Modules 115
6.3.2 Packages 116
6.3.3 Installing Third-Party Modules 117
6.3.4 Virtualenv: Isolated Python Environments 119
6.3.5 Conda: Anaconda Virtual Environment 121
6.3.6 Creating Modules 124
6.3.7 Testing Modules 125
6.4 ADDITIONAL RESOURCES 127
6.5 SELF-EVALUATION 128

Chapter 7  Error Handling 129


7.1 INTRODUCTION TO ERROR HANDLING 129
7.1.1 Try and Except 131
7.1.2 Exception Types 134
7.1.3 Triggering Exceptions 135
7.2 CREATING CUSTOMIZED EXCEPTIONS 136
7.3 ADDITIONAL RESOURCES 137
7.4 SELF-EVALUATION 138

Chapter 8  Introduction to Object Orienting Programming (OOP) 139


8.1 OBJECT PARADIGM AND PYTHON 139
Contents  xi

8.2 EXPLORING THE JARGON 140


8.3 CREATING CLASSES 142
8.4 INHERITANCE 145
8.5 SPECIAL METHODS 149
8.5.1 Create a New Data Type Using a Built-in Data Type 154
8.6 MAKING OUR CODE PRIVATE 154
8.7 ADDITIONAL RESOURCES 155
8.8 SELF-EVALUATION 156

Chapter 9  Introduction to Biopython 157


9.1 WHAT IS BIOPYTHON? 158
9.1.1 Project Organization 158
9.2 INSTALLING BIOPYTHON 159
9.3 BIOPYTHON COMPONENTS 162
9.3.1 Alphabet 162
9.3.2 Seq 163
9.3.3 MutableSeq 165
9.3.4 SeqRecord 166
9.3.5 Align 167
9.3.6 AlignIO 169
9.3.7 ClustalW 171
9.3.8 SeqIO 173
9.3.9 AlignIO 176
9.3.10 BLAST 177
9.3.11 Biological Related Data 187
9.3.12 Entrez 190
9.3.13 PDB 194
9.3.14 PROSITE 196
9.3.15 Restriction 197
9.3.16 SeqUtils 200
9.3.17 Sequencing 202
9.3.18 SwissProt 205
9.4 CONCLUSION 207
9.5 ADDITIONAL RESOURCES 207
9.6 SELF-EVALUATION 209
xii  Contents

Section II Advanced Topics

Chapter 10  Web Applications 213


10.1 INTRODUCTION TO PYTHON ON THE WEB 213
10.2 CGI IN PYTHON 214
10.2.1 Configuring a Web Server for CGI 215
10.2.2 Testing the Server with Our Script 215
10.2.3 Web Program to Calculate the Net Charge of a Protein
(CGI version) 219
10.3 WSGI 221
10.3.1 Bottle: A Python Web Framework for WSGI 222
10.3.2 Installing Bottle 223
10.3.3 Minimal Bottle Application 223
10.3.4 Bottle Components 224
10.3.5 Web Program to Calculate the Net Charge of a Protein
(Bottle Version) 229
10.3.6 Installing a WSGI Program in Apache 232
10.4 ALTERNATIVE OPTIONS FOR MAKING PYTHON-BASED DYNAMIC
WEB SITES 232
10.5 SOME WORDS ABOUT SCRIPT SECURITY 232
10.6 WHERE TO HOST PYTHON PROGRAMS 234
10.7 ADDITIONAL RESOURCES 235
10.8 SELF-EVALUATION 236

Chapter 11  XML 237


11.1 INTRODUCTION TO XML 237
11.2 STRUCTURE OF AN XML DOCUMENT 241
11.3 METHODS TO ACCESS DATA INSIDE AN XML DOCUMENT 246
11.3.1 SAX: cElementTree Iterparse 246
11.4 SUMMARY 251
11.5 ADDITIONAL RESOURCES 252
11.6 SELF-EVALUATION 252

Chapter 12  Python and Databases 255


12.1 INTRODUCTION TO DATABASES 256
12.1.1 Database Management: RDBMS 257
12.1.2 Components of a Relational Database 258
Contents  xiii

12.1.3 Database Data Types 260


12.2 CONNECTING TO A DATABASE 261
12.3 CREATING A MYSQL DATABASE 262
12.3.1 Creating Tables 263
12.3.2 Loading a Table 264
12.4 PLANNING AHEAD 266
12.4.1 PythonU: Sample Database 266
12.5 SELECT: QUERYING A DATABASE 269
12.5.1 Building a Query 271
12.5.2 Updating a Database 273
12.5.3 Deleting a Record from a Database 273
12.6 ACCESSING A DATABASE FROM PYTHON 274
12.6.1 PyMySQL Module 274
12.6.2 Establishing the Connection 274
12.6.3 Executing the Query from Python 275
12.7 SQLITE 276
12.8 NOSQL DATABASES: MONGODB 278
12.8.1 Using MongoDB with PyMongo 278
12.9 ADDITIONAL RESOURCES 282
12.10 SELF-EVALUATION 284

Chapter 13  Regular Expressions 285


13.1 INTRODUCTION TO REGULAR EXPRESSIONS (REGEX) 285
13.1.1 REGEX Syntax 286
13.2 THE RE MODULE 287
13.2.1 Compiling a Pattern 290
13.2.2 REGEX Examples 292
13.2.3 Pattern Replace 294
13.3 REGEX IN BIOINFORMATICS 294
13.3.1 Cleaning Up a Sequence 296
13.4 ADDITIONAL RESOURCES 297
13.5 SELF-EVALUATION 298

Chapter 14  Graphics in Python 299


14.1 INTRODUCTION TO BOKEH 299
14.2 INSTALLING BOKEH 299
14.3 USING BOKEH 301
xiv  Contents

14.3.1 A Simple X-Y Plot 303


14.3.2 Two Data Series Plot 304
14.3.3 A Scatter Plot 306
14.3.4 A Heatmap 308
14.3.5 A Chord Diagram 309

Section III Python Recipes with Commented Source Code

Chapter 15  Sequence Manipulation in Batch 315


15.1 PROBLEM DESCRIPTION 315
15.2 PROBLEM ONE: CREATE A FASTA FILE WITH RANDOM SE-
QUENCES 315
15.2.1 Commented Source Code 315
15.3 PROBLEM TWO: FILTER NOT EMPTY SEQUENCES FROM A
FASTA FILE 316
15.3.1 Commented Source Code 317
15.4 PROBLEM THREE: MODIFY EVERY RECORD OF A FASTA FILE 319
15.4.1 Commented Source Code 320

Chapter 16  Web Application for Filtering Vector Contamination 321


16.1 PROBLEM DESCRIPTION 321
16.1.1 Commented Source Code 322
16.2 ADDITIONAL RESOURCES 326

Chapter 17  Searching for PCR Primers Using Primer3 329


17.1 PROBLEM DESCRIPTION 329
17.2 PRIMER DESIGN FLANKING A VARIABLE LENGTH REGION 330
17.2.1 Commented Source Code 331
17.3 PRIMER DESIGN FLANKING A VARIABLE LENGTH REGION,
WITH BIOPYTHON 332
17.4 ADDITIONAL RESOURCES 333

Chapter 18  Calculating Melting Temperature from a Set of Primers 335


18.1 PROBLEM DESCRIPTION 335
18.1.1 Commented Source Code 336
18.2 ADDITIONAL RESOURCES 336

Chapter 19  Filtering Out Specific Fields from a GenBank File 339


19.1 EXTRACTING SELECTED PROTEIN SEQUENCES 339
Contents  xv

19.1.1 Commented Source Code 339


19.2 EXTRACTING THE UPSTREAM REGION OF SELECTED PRO-
TEINS 340
19.2.1 Commented Source Code 340
19.3 ADDITIONAL RESOURCES 341

Chapter 20  Inferring Splicing Sites 343


20.1 PROBLEM DESCRIPTION 343
20.1.1 Infer Splicing Sites with Commented Source Code 345
20.1.2 Sample Run of Estimate Intron Program 347

Chapter 21  Web Server for Multiple Alignment 349


21.1 PROBLEM DESCRIPTION 349
21.1.1 Web Interface: Front-End. HTML Code 349
21.1.2 Web Interface: Server-Side Script. Commented Source Code 351
21.2 ADDITIONAL RESOURCES 353

Chapter 22  Drawing Marker Positions Using Data Stored in a Database 355


22.1 PROBLEM DESCRIPTION 355
22.1.1 Preliminary Work on the Data 355
22.1.2 MongoDB Version with Commented Source Code 358

Section IV Appendices

Appendix A  Collaborative Development: Version Control with GitHub 365


A.1 INTRODUCTION TO VERSION CONTROL 366
A.2 VERSION YOUR CODE 367
A.3 SHARE YOUR CODE 375
A.4 CONTRIBUTE TO OTHER PROJECTS 381
A.5 CONCLUSION 382
A.6 METHODS 384
A.7 ADDITIONAL RESOURCES 384

Appendix B  Install a Bottle App in PythonAnywhere 385


B.1 PYTHONANYWHERE 385
B.1.1 What Is PythonAnywhere 385
B.1.2 Installing a Web App in PythonAnywhere 385
xvi  Contents

Appendix C  Scientific Python Cheat Sheet 393


C.1 PURE PYTHON 394
C.2 VIRTUALENV 400
C.3 CONDA 402
C.4 IPYTHON 403
C.5 NUMPY 405
C.6 MATPLOTLIB 410
C.7 SCIPY 412
C.8 PANDAS 413

Index 417
List of Figures

2.1 Anaconda install in macOS. 21


2.2 Anaconda Python interactive terminal. 23
2.3 PyCharm Edu welcome screen. 35

3.1 Intersection. 60
3.2 Union. 61
3.3 Difference. 61
3.4 Symmetric difference. 62
3.5 Case 1. 65
3.6 Case 2. 66

5.1 Excel formatted spreadsheet called sampledata.xlsx. 93

8.1 IUPAC nucleic acid notation table. 147

9.1 Anatomy of a BLAST result. 181

10.1 Our first CGI. 216


10.2 CGI accessed from local disk instead from a web server. 217
10.3 greeting.html: A very simple form. 217
10.4 Output of CGI program that processes greeting.html. 218
10.5 Form protcharge.html ready to be submitted. 220
10.6 Net charge CGI result. 222
10.7 Hello World program made in Bottle, as seen in a browser. 224
10.8 Form for the web app to calculate the net charge of a protein. 229

11.1 Screenshot of XML viewer. 244


11.2 Codebeautify, a web based XML viewer. 245

12.1 Screenshot of PhpMyAdmin. 258


12.2 Creating a new database using phpMyAdmin. 262
12.3 Creating a new table using phpMyAdmin. 264

xvii
xviii  LIST OF FIGURES

12.4 View of the Student table. 266


12.5 An intentionally faulty “Grades” table. 267
12.6 A better “Grades” table. 267
12.7 Courses table: A lookup table. 268
12.8 Modified “Grades” table. 268
12.9 Screenshot of SQLite manager. 277
12.10 View from a MongoDB cloud provider. 281

14.1 A circle with Bokeh. 302


14.2 Four circles with Bokeh. 303
14.3 A simple plot with Bokeh. 305
14.4 A two data series plot with Bokeh. 306
14.5 Scatter plot graphics. 308
14.6 A heatmap out of a microarray experiment. 310
14.7 A chord diagram. 312

16.1 HTML form for sequence filtering. 327


16.2 HTML form for sequence filtering. 328

21.1 Muscle Web interface. 350

22.1 Product of Listing 22.2, using the demo dataset (NODBDEMO). 356

A.1 The git add/commit process. 369


A.2 Working with a local repository. 370
A.3 Working with both a local and remote repository as a single user. 379
A.4 Contributing to open source projects. 383

B.1 “Consoles” tab. 386


B.2 The “Web” tab. 386
B.3 Upgrading domain type option. 387
B.4 Select a web framework screen, select Bottle. 388
B.5 Select a Python and Bottle version. 389
B.6 Form to enter the path of the web app. 390
B.7 The sample web app is ready to use. 390
B.8 The “File” tab. 391
B.9 Form to create a new directory in PythonAnywhere. 391
B.10 View and upload files into your account. 391
LIST OF FIGURES  xix

B.11 Front-end of the program to calculate charge of a protein using


Bottle and hosted in PythonAnywhere. 392
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
List of Tables

2.1 Arithmetic-Style Operators 26

3.1 Common List Operations 48


3.2 Methods Associated with Dictionaries 58

9.1 Sequence and Alignment Formats 175


9.2 Blast programs 178
9.3 eUtils 191

10.1 Frameworks for Web Development 233

12.1 Students in Python University 259


12.2 Table with primary key 260
12.3 MySQL Data Types 261

13.1 REGEX Special Sequences 287

A.1 Resources 367

xxi
Preface to the First Edition

This book is a result of the experience accumulated during several years of working
for an agricultural biotechnology company. As a genomic database curator, I gave
support to staff scientists with a broad range of bioinformatics needs. Some of them
just wanted to automate the same procedure they were already doing by hand, while
others would come to me with biological problems to ask if there were bioinformat-
ics solutions. Most cases had one thing in common: Programming knowledge was
necessary for finding a solution to the problem. The main purpose of this book is to
help those scientists who want to solve their biological problems by helping them
to understand the basics of programming. To this end, I have attempted to avoid
taking for granted any programming-related concepts. The chosen language for this
task is Python.
Python is an easy-to-learn computer language that is gaining traction among
scientists. This is likely because it is easy to use, yet powerful enough to accomplish
most programming goals. With Python the reader can start doing real programming
very quickly. Journals such as Computing in Science and Engineering, Briefings
in Bioinformatics, and PLOS Computational Biology have published introductory
articles about Python. Scientists are using Python for molecular visualization, ge-
nomic annotation, data manipulation, and countless other applications.
In the particular case of the life sciences, the development of Python has been
very important; the best exponent is the Biopython package. For this reason, Section
II is devoted to Biopython. Anyhow, I don’t claim that Biopython is the solution to
every biology problem in the world. Sometimes a simple custom-made solution may
better fit the problem at hand. There are other packages like BioNEB and CoreBio
that the reader may want to try.
The book begins from the very basic, with Section I (“Programming”), teaching
the reader the principles of programming. From the very beginning, I place a special
emphasis on practice, since I believe that programming is something that is best
learned by doing. That is why there are code fragments spread over the book. The
reader is expected to experiment with them, and attempt to internalize them. There
are also some spare comparisons with other languages; they are included only when
doing so enlightens the current topic. I believe that most language comparisons do
more harm than good when teaching a new language. They introduce information
that is incomprehensible and irrelevant for most readers.
In an attempt to keep the interest of the reader, most examples are somehow
related to biology. In spite of that, these examples can be followed even if the reader
doesn’t have any specific knowledge in that field.
To reinforce the practical nature of this book, and also to use as reference

xxiii
xxiv  Preface to the First Edition

material, Section IV is called “Python Recipes with Commented Source Code.”


These programs can be used as is, but are intended to be used as a basis for other
projects. Readers may find that some examples are very simple; they do their job
without too many bells and whistles. This is intentional. The main reason for this
is to illustrate a particular aspect of the application without distracting the reader
with unnecessary features, as well as to avoid discouraging the reader with complex
programs. There will always be time to add features and customizations once the
basics have been learned.
The title of Section III (“Advanced Topics”) may seem intimidating, but in
this case, advanced doesn’t necessarily mean difficult. Eventually, everyone will
use the chapters in this section [especially relational database management system
—RDBMS— and XML]. An important part of the bioinformatics work is building
and querying databases, which is why I consider knowing a RDBMS like MySQL
to be a relevant part of the bioinformatics skill set. Integrating data from different
sources is one of tasks most frequently performed in bioinformatics. The tool of
choice for this task is XML. This standard is becoming a widely used platform for
data interchange between applications. Python has several XML parsers and we
explain most of them in this book.
Appendix B, “Selected Papers,” provides introductory level papers on Python.
Although there is some overlapping of subjects, this was done to show several points
of view of the same subject.
Researchers are not the only ones for whom this book will be beneficial. It has
also been structured to be used as a university textbook. Students can use it for
programming classes, especially in the new bioinformatics majors.
Random documents with unrelated
content Scribd suggests to you:
XX.

Eräs uutinen.

"Olen tuumannut kysyä", sanoi Grange hieman arkaillen,


"haluaisitteko te ratsastella kanssani sen ajan, jonka vielä viivyn
täällä?"

"Minäkö?" kysyi Muriel luoden katseensa häneen.

He olivat parhaillaan paluumatkalla kirkosta ja kumpikin oli


kulkenut ajatuksissaan kotvan aikaa.

"Daisylta on urheilu tällä haavaa kielletty", selitti Orange, "mutta


ajattelin, että te mahdollisesti…"

"Sangen kernaasti", vastasi Muriel. "En ole ratsastanut sitten kun


Simlassa. Yksin ratsastaminen ei juuri ole hauskaa."

Muriel tunsi yhä paremmin viihtyvänsä Blake Grangen seurassa.


Daisy oli vielä jokseenkin heikko terveydeltään, siksi jäivät Blake ja
Muriel usein kahdenkesken ja pian heistä tulikin hyvät ystävät.
Muriel ihaili suuresti kapteeni Grangea ja huomasi ilokseen
tämänkin viihtyvän hänen seurassaan. Tämä ystävyys levitti kuin
päivänpaistetta hänen harmaaseen yksitoikkoiseen elämäänsä.
Surun ja muistojen raskas taakkakin alkoi tuntua kevyemmältä. Olipa
hetkiä jolloin hän saattoi kokonaan unohtaa menneisyyden kauhut.

Grange ja Muriel ratsastivat nyt joka päivä yhdessä ja nämä


ratsastusmatkat olivat tytön ainaisena ilon aiheena. Kevät teki
tuloaan ja tämäkin siten osaltaan vaikutti häneen elähyttävästi ja
virkistävästi. Toisinaan näytti hän jo varsin iloiselta ja onnelliselta,
eikä tohtori Ratcliffe enää tyytymättömänä rypistänyt tuuheita
kulmakarvojaan hänet tavatessaan.

Sekä Muriel että Grange olivat liittyneet Olgan hockeyklubiin. Blake


Grange, jolla oli erinomaisen kaunis ja koulutettu ääni, lauloi usein
Daisylle, jolloin Muriel aina häntä säesti.

Täten viettivät he kolmen kesken sangen rattoisaa elämää. Päivät


vierivät nopeaan. Jos Grange joskus puhui poislähdöstään, keskeytti
Daisy hänet heti. Hänellähän oli lomaa aina syyskuuhun asti ja
sinnehän oli vielä niin pitkälti.

Mutta sattuipa sitten jotakin, joka särki tämän pienen joukon


hiljaisen onnen.

Eräänä maaliskuun iltapäivänä, kun Grange ja Muriel ratsastivat


tohtori Ratcliffen asunnon ohi, juoksi Olga heitä vastaan ilosta
säteilevänä ja huudahti:

"Oletteko ja kuulleet tuon suuren uutisen? Hurraa! Hurraa?"

Ratsastajat pysähtyivät.
"Isä sai kirjeen noin tunti sitten", kertoi Olga ihastuneena. "Nick
tulee kotiin! Nick tulee kotiin! Etkö olekin iloinen, Muriel? En ole ollut
näin onnellinen vielä milloinkaan."

Muriel ei vastannut. Jostakin syystä oli hänen hevosensa käynyt


rauhattomaksi ja hän koetti kaikin tavoin sitä tyynnyttää.

Hetken epäröityään kysyi Grange:

"Miksi hän tulee kotiin? Onko hän saanut lomaa sairautensa


vuoksi?"

Olga nyökäytti päätään.

"Hän ei voinut jäädä sinne kesäkuumaksi. Haava ei ole vielä


parantunut. Hän ei mielellään tulisi, mutta hänen on pakko niin
tehdä. Hän saapuu tänne huhtikuun loppupuolella. Minun mielestäni
olisi hänen pitänyt saada Viktoria-ristin. Kapteeni Grange,
minkätähden ei hänelle ole sitä annettu?"

Grange ei osannut vastata tähän kysymykseen. Hän kehotti Olgaa


kysymään
Nick'ilta itseltään.

Yht'äkkiä antoi Muriel ratsulleen lähtömerkin ja Grange seurasi


häntä sangen huolestuneena.

Nuoren tytön kasvoilla huomasi hän saman jäykistyneen,


hajamielisen ilmeen kuin heidän puhuessaan ensi kertaa Wara-
linnotuksesta.

Hetken vaitiolon jälkeen alkoi Muriel puhua jostakin vähäpätöisestä


asiasta, ääni kuulosti aivan rauhalliselta. Blake huomasi, että vaikka
isku olikin osunut häntä arkaan kohtaan, ei hän ainakaan tahtonut
sitä näyttää.

Hiljalleen ratsastaen saapuivat he siten kotiin ja erosivat portilla.


XXI.

Blaken lupaus.

Kuultuaan uutisen Blakelta tuli Daisy iloiseksi.

"Tiesin hänet niin viisaaksi, että tulisi", sanoi hän.

Kun hänen serkkunsa kysyi, mitä tuo lause tarkotti, ei hän


tahtonut sitä selittää.

"Olen luvannut Murielille, että en milloinkaan puhu siitä. Hän on


niin herkkä tuohon asiaan nähden."

Iltapäivällä, Daisyn mentyä lastenkamariin, meni Grange Murielin


luo arkihuoneeseen. Kasvoillaan harvinaisen päättävä ilme asettui
hän Murielin viereen akkunan luo. Ulkona oli aivan tyyntä ja tähdet
kimaltelivat kirkkaasti taivaan laella.

Hetken perästä katsahti Muriel Grangeen.

"Menemmekö puutarhaan?" ehdotti Blake. "Täällä tuntuu niin


painostavalta."
Hän toi tytölle päällysnutun ja he menivät ulos. Keväisessä ilmassa
oli orvokin tuoksua.

Muriel pysähtyi veräjällä ja laski kätensä veräjäpylväälle.

"En tiennyt, että olin niin kiintynyt tähän paikkaan", sanoi hän.
"Eikö olekin ihmeellistä? Olen tosiaankin ollut onnellinen täällä,
vaikka en ole sitä ennen ymmärtänyt."

"Tänä iltana ette varmaankaan ole onnellinen", sanoi Blake.

Muriel ei väittänyt vastaan.

"Olen niin väsynyt", sanoi hän vain.

"Syy ei ole ainoastaan se", väitti Blake varmalla äänellä,


"Muistatteko, että kerran lupasitte pitää minua ystävänänne, miss
Roscoe?"

Muriel katsoi häneen ja Blake huomasi hänen olevan aivan


kalpean.

"Muistan", vastasi tyttö.

"Pitäkää siis lupauksenne. Kertokaa minulle, mikä saattaa teidät


onnettomaksi?"

"Ettekö sitä ymmärrä?" kysyi tyttö vitkaan.

"En. Tiedän, että Olga Ratcliffen uutinen sen vaikutti, mutta en


tiedä miksi. Selittäkää siis minulle."

"Kyllä koetan. En ole koskaan voinut puhua siitä kenellekään, en


edes Daisylle, sillä Daisy on hänen ystävänsä. Mutta teidän laitanne
on toisin. Luulen, että te ette pidä hänestä, vai miten?"

Grange epäröi hieman.

"Niin pitkälle en tahdo mennä", sanoi hän vihdoin. "Me tulemme


mainiosti toimeen toistemme kanssa, mutta emme milloinkaan ole
olleet läheisiä ystäviä. Minun mielestäni on hän niin tunteeton."

"Tunteeton!" sanoi Muriel väristen. "Hän on paljon pahempi. Hän


on julma, hirvittävän julma. Mutta siinäkään ei ole vielä kylliksi. Hän
on niin pelottava, niin yliluonnollisen voimakas."

Grange astui askeleen lähemmä kuullessaan Murieliu pelästyneen


äänensävyn.

"Luulen, että liioittelette hänen julmuuttaan ja voimaansa", sanoi


hän. "Minä puolestani pidän häntä vain omituisena ihmisenä.
Muistan jonkun sanoneen, että hänellä on käärmeenlumoojan silmät,
ja minusta se onkin sangen kuvaavaa häneen nähden. Mutta
vakuutan teille, ettei hänessä ole mitään yliluonnollista sekä ettei
hänellä ole sen suurempaa valtaa teidän suhteenne, kuin minkä itse
hänelle suotte."

Muriel huoahti:

"Tiesin, että te ette minua ymmärtäisi", sanoi hän. "Antaisin mitä


tahansa päästäkseni häntä tapaamasta, kun hän tulee tänne. Mutta
en tiedä, miten se olisi mahdollista. Hän varmaankin tulee minua
tapaamaan enkä minä voi sitä estää."

Grange seisoi aivan hiljaa ja tuijotti eteensä.

Murielista tuntui kuin helpotukselta puhua yhä edelleen.


"Jospa minä kuitenkin pääsisin pois täältä! En tiedä mihin menisin.
Enkä voisi nyt juuri jättää Daisyakaan."

"Miksi luulette Ratcliffen tulevan teitä tapaamaan? Onko hän


luvannut tulla?"

"Ei, mutta… minä tunnen sen. Hän on niin säälimätön. Hän


muistuttaa minusta kotkaa, joka syöksee saaliinsa kimppuun. Teidän
mielestänne minä kai luulottelen itselleni kaikenlaisia asioita, ja voipa
niin ollakin. Mutta kerran sanoi hän minulle, että minä kuulun hänelle
ja ettei hän milloinkaan minua päästäisi. Sen sanoi hän siellä
vuorilla, enkä ole koskaan voinut sitä unohtaa."

Grangesta tuntui, kuin olisi Muriel nyyhkinyt. Tytön epätoivo viilsi


hänen sydäntään.

"Älkää olko niin epätoivoinen", sanoi hän. "Miten hän on


voinutkaan teidät noin pelottaa."

"Kaikki on minun syyni", nyyhkytti Muriel. "Jospa minä olisin


vahvempi ja jos minulla olisi vielä isäni. Mutta olen näin yksinäinen ja
avuton."

"Pieni raukka!" sanoi Grange hellästi. "Te tarvitsette jonkun, joka


pitää teistä huolta."

Muriel koetti rauhottua. Oli harvinaista nyt enää, että


mielenliikutus sai hänet näin kokonaan valtoihinsa.

"En minä aina ajattele tällä tavoin", sanoi hän. "Pelästyin kovin,
kun kuulin Nick'in tulevan kotiin. Mutta kai minä vähitellen totun
siihen ajatukseen. Älkää enää muistelko sanojani. Ehkäpä viisastun
vuosien kuluessa."
Muriel yritti nauraa, mutta ei voinut.

Grange otti hänen kätensä omaansa ja katseli häntä ihmeissään.

"Muriel, minun on niin vaikea puhua. Minä voin vain iskeä suoraan
asiaan. Te tarvitsette jonkun, joka teitä suojelee! Ettekö soisi minun
rupeavan sellaiseksi? Tahdotteko, antautua minun hoivaani?"

Ääni kuulosti jännittyneeltä. Grange pelkäsi pelottavansa Murielia,


loukkaavansa häntä, niin, hän miltei pelkäsi sitä vaikutintakin, joka
pakotti hänet näin puhumaan.

Muriel kääntyi äkkiä häneen päin.

"Mieluummin teidän hoivaanne, kuin kenenkään muun", sanoi hän


vakavasti.

Grangen epäily katosi ja hän veti tytön hiljaa luokseen.

"Tule siis turviini, Muriel", sanoi hän hellästi. "Minä lupaan olla
turvanasi, niin että ei kenkään saa sinua pelottaa."

Muriel nojautui turvallisena kuin lapsi hänen olkaansa vasten. Hän


oli niin peräti väsynyt yksinäisyyteensä.

"Tiedän olevani hyvässä turvassa luonasi", sanoi hän.

"Niin toivon", vastasi Grange vakavasti ja epäröityään hetkisen


kumartui hän suutelemaan tyttöä otsalle.

Muriel säpsähti ja vetäytyi pois. Eräs hetki muistui elävästi hänen


mieleensä. Hän näki toiset kasvot lähellään, kalpeat ja laihtuneet,
näki silmäparin, jotka paloivat kuin tulikekäleet, jotka eivät
milloinkaan uneen ummistuneet ja kuuli omituisen rauhattoman
äänen puhuvan katkonaisia sanoja, jotka kuuluivat kuin rukoukselta.
Mutta sanoja ei hän saattanut erottaa.

Sama hirveä pelko valtasi hänet taasen kuin silloinkin, sama raju
pakenemisen halu heräsi hänessä ja hän painautui nyyhkien Grangen
rintaa vasten.

"Lupaa minulle, että et minua milloinkaan jätä", pyysi hän


kiihkeästi.

Grange oudostui hänen kiihkeyttään, mutta tytön mielenliikutus


herätti vastakaikua hänen sydämessään ja hän vastasi hellästi ja
vakavana.

"Vannon, että en sinua koskaan heitä. Voit luottaa minuun. Kukaan


ei saa riistää sinua minulta."

Murielista tuntui, kuin olisi hän pitkien, raskasten taistelujen


jälkeen avoimella merellä vihdoin päässyt turvalliseen satamaan —
satamaan, joka aina oli ollut hänen toiveittensa päämääränä.
XXII.

Serkut.

Jim Ratcliffe oli parhaillaan Daisyn luona arkihuoneessa, kun he


tulivat sisälle. Hän katsahti terävästi kumpaankin, mutta ei puhunut
mitään ja lähti heti sen jälkeen kotiinsa.

Grange saattoi häntä eteiseen. Murielin valtasi äkkiä omituinen


ujous, hän kumartui Daisyn puoleen sanoen hyvää yötä.

Daisy katsoi häneen ihmeissään.

"Oletko väsynyt, ystäväni?"

"Hiukan", myönsi Muriel.

Eteisessä tapasi hän Blaken.

"Mitä nyt?" sanoi hän hymyillen. "Joko aiot makuulle?"

Muriel nyökäytti päätään. Hänen poskensa kuumottivat. Hetkiseksi


laski hän kätensä Blaken käteen.
"Kerro se Daisylle", kuiskasi hän ja kiiruhti samassa ylös portaita.

Grange katseli kauan hänen peräänsä. Kun hän sitten meni Daisyn
luo, oli hymy kadonnut hänen huuliltaan.

Daisy katsahti häneen iloisesti naurahtaen.

"Mikä salaisuus Murielilla ja sinulla on keskenänne?" kysyi hän.


"Minusta tuntuu, kuin olisi teillä sellainen."

Grange sulki hitaasti oven. Hänen kasvoillaan oli omituinen ilme,


melkeinpä pelokas. Hän istuutui Daisyn viereen.

"Olet oikeassa, Daisy", sanoi hän. "Tätä asiaa emme voi sinulta
salata."

Daisyn kasvojen ilme muuttui samassa. Hän hypähti kiivaasti ylös.

"Blake!" huudahti hän kummastuksen, tyytymättömyyden ja


moitteen sekaisella äänellä.

Blake väisti hänen katsettaan.

"Etkö onnittele minua, Daisy", sanoi hän hiljaa.

Daisy oli sangen kalpea. Hän nojautui uuninreunustaan.

"Mutta, Blake", sanoi hän sitten, "se ei ole oikein. Hän kuului
Nick'ille jo kauan ennen, kuin sinä häntä ajattelitkaan. En olisi
uskonut, että sinä käyttäytyisit tällä tavoin ja asettuisit Nick'in tielle,
juuri kun häntä odotetaan kotiin saapuvaksi. Miten se on
mahdollista? Se ei suinkaan vielä ole päätetty asia, vai miten,
Blake?"
Grange ei enää karttanut hänen katsettaan. Hän oli varman ja
samalla suuttuneen näköinen.

"En ole tehnyt mitään sellaista, jota minun tulisi hävetä", sanoi
hän lyhyesti. "Olen kosinut häntä ja hän on suostunut. Mitä Nick
Ratcliffeen tulee, niin on hän mielestäni käyttänyt väärin asemaansa
Murieliin nähden. Muriel vihaa ja inhoaa häntä. Nick on varmaan
hänet pelottanut. Hänellä ei ole mitään sananvaltaa Murielin
suhteen."

"Unohdat, että hän on pelastanut tytön elämän", sanoi Daisy.

"Täytyykö hänen sen johdosta olla Nick'in oma? Sitä minä en


käsitä."

Blaken ääni kuulosti loukkaantuneelta. Kun Daisy kuuli sen,


kääntyi hän
Blaken puoleen ja laski hyväillen kätensä hänen käsivarrelleen.

"Ystäväni", sanoi hän, "älä ole minulle vihainen."

Blake lauhtui heti.

"Kerrohan minulle", jatkoi Daisy, "mistä johtui, että kosit häntä niin
odottamatta? Rakastatko häntä paljonkin?"

Blake katsahti Daisyyn.

"En samalla tavoin, kuin me molemmat kerran rakastimme


toisiamme. Tämä on jotakin aivan toista", vastasi hän vitkaan.

"Ah, sitä en tarkoittanut", sanoi Daisy kevyesti. "Mehän olimme


sellaisia kiihkoilevia lapsia ja kiihkeyshän kuuluukin vain ensi
nuoruudelle."

"Niinkö?" kysyi Blake luoden häneen pitkän, kaihoisan katseen.

"Entä Muriel?" sanoi Daisy taasen tavallisella äänellään.


"Rakastaako hän sinua? Olenpa ollut sokea, koska en ole sitä
huomannut. En tiedä, miten saatan katsoa Nick'ia suoraan silmiin
tämän jälkeen."

Grange rypisti otsaansa.

"Minua hermostuttaa tuo alituinen Nick'in mainitseminen", sanoi


hän ärtyneesti.

"Minun kuulteni et saa sanoa ainoatakaan pahaa sanaa Nickistä",


puuskahti Daisy. "Sitä minä en suvaitse. Hän ei tosin ole niin kaunis
kuin sinä, mutta hän on paras ihminen, jonka tunnen."

"Sepä oli paljon sanottu!"

"Ei rahtuakaan liikaa. Ja Nick rakastaa Murielia koko sydämestään.


Et taida tietää, että he olisivat jo aikoja sitten naimisissa, ellei Muriel
Simlassa olisi kuullut hänestä jonkunlaisia pahoja juoruja ja siksi
purkanut kihlaustaan. En tiedä, miten hän voi suostuttaa Nick'in
antamaan hänelle vapautensa takaisin, mutta sen tiedän, että se
mursi Nick'in sydämen. Hän tuli luokseni heti sen jälkeen ja pyysi
minun ottamaan Murielin mukaani kotiin ja pitämään huolta
hänestä."

"On aivan selvää, ettei Muriel ole häntä koskaan rakastanut",


vastasi
Blake. "Hän suorastaan inhoaa Nick'ia."
Daisy huoahti kärsimättömästi.

"Sinä et hitustakaan ymmärrä naissydämiä, Blake. Siinä suhteessa


olet ja tulet aina olemaan lapsi. Muriel on herttainen tyttö etkä sinä
ole kyllin hyvä hänelle."

"Olet aivan oikeassa", vastasi Blake heti. "En ollut kyllin hyvä
sinullekaan, mutta olipa sentään aika, jolloin sinulle kelpasin."

Daisy kohautti olkapäitään.

"Älkäämme puhuko siitä ajasta."

Blake ei vastannut, mutta katseli häntä herkeämättä. Katse oli kuin


nöyrän, uskollisen orjan.

Daisy kohensi hiilusta.

Äkkiä heittäytyi Blake polvilleen hänen viereensä.

"Daisy", kuiskasi hän, "sano minulle, ettet ole minuun suuttunut!


Koskeeko se sinuun, että menen naimisiin? Se… se ei merkitse
samaa kuin…"

Hän keskeytti samassa, sillä Daisy loittoni hänestä kasvoillaan


ilme, kuin olisi Blake koskettanut avoimeen haavaan. Hän katseli
Blakea leimuavin katsein.

"Miten naurettavaa Blake!" sanoi hän terävästi. "Tiedäthän, että


kaikki tuo on ohitse aikoja sitten. Kas niin", jatkoi hän sitten
lempeämmin, "älähän nyt ole tyhmä."

Hän laski kätensä Blaken olalle ja töyttäsi häntä.


Blake nousi heti ylös, mutta ei näyttänyt lainkaan
loukkaantuneelta.
Silmissä oli yhä sama, ihaileva katse.

Hetken perästä sanoi Daisy kevyesti huoaten:

"Niin, tästä ei enää kannata puhua, vaikka toivonkin, että olisit


valinnut itsellesi jonkun toisen tytön. Sinun täytyy siis kirjottaa
kenraali Bassetille. Hän on Murielin holhooja, mutta hänen
vaimollaan on oikeastaan määräämisvalta. Ehkä hän on
tyytyväisempi sinuun kuin Nick'iin. En tiedä, miksi hän vihaa Nick'ia.
Hän se varmaankin aiheutti kihlauksen purkautumisen. Saadaanpa
nähdä, eikö Muriel joskus vastaisuudessa kadu tekoaan."

"Etkö usko, että minä sovin hänelle?" sanoi Grange.

"Ei, sitä en suoraan sanoen usko. Mutta voinhan erehtyä. Hyvää


yötä.
Minun täytyy jo mennä pienokaiseni luo."

Blake tarttui hänen ojennettuun käteensä ja suuteli sitä. Näytti


siltä, kuin olisi hän aikonut sanoa jotakin. Daisy hymyili hieman
halveksien. He näyttivät ymmärtävän toisensa sanoitta.
XXIII.

Daisyn lapsi.

Ensi päivinä kihlauksensa jälkeen oli Muriel äärettömän onnellinen.


Hänestä tuntui, kuin olisi hän vihdoin päässyt häkistä, jossa oli
kauan vankina kitunut. Riemusta tulvehtien tunsi hän jälleen
olevansa vapaa ja nuori.

Blake oli juuri senlainen, jommoiseksi Muriel hänet tahtoikin.


Hänen vaatimaton ja hiljainen olentonsa oli aina Murielia
miellyttänyt. Blaken läheisyydessä tunsi hän olevansa hyvässä
turvassa, siksi olikin hän niin varma siitä, että juuri Blake oli hänen
oikea suojelijansa.

Maaliskuu kului rauhallisesti ja onnellisesti, kunnes Daisyn pieni


poikanen eräänä yönä äkkiä vaarallisesti sairastui. Pojan ayah herätti
Murielin, joka heti kiiruhti lastenkamariin. Daisy käveli edestakaisin
lapsi sylissään.

"Herätä Blake", änkytti hän tuskaisena. "Käske hänen noutaa


lääkäri."
Toimitettuaan käskyn perille kiiruhti Muriel takaisin Daisyn luo. Äiti
istui rahilla tuudittaen hiljaa pienoistaan sylissään.

"Joko Blake meni?" kysyi hän hiljaa.

Muriel polvistui hänen viereensä.

"Hän menee kohta", vastasi Muriel tuijottaen kauhuissaan lapsen


pieniä, vahankalpeita kasvoja. Samassa tuntui hänestä, kuin olisi
sydän tauonnut lyömästä. Hän huomasi, että lapsi oli kuollut.

"Kohenna tulta", kuiskasi Daisy. "Poju tuntuu niin kylmältä."

Muriel nousi hiljaa tulta kohentamaan. Hän tunsi, ettei enää voinut
katsoa Daisya, joka yhä tuuditti kuollutta lastaan sylissään, siksi
meni hän, yhä yöpuvussaan, ruokasaliin ja asettui akkunan luo
odottamaan lääkäriä.

Vihdoin kuului veräjä aukenevan. Nähdessään tohtori Ratcliffen ja


Grangen tulevan kuun kirkkaasti valaiseman puutarhan lävitse juoksi
hän avaamaan ovea.

"On jo myöhäistä", änkytti hän, "liian myöhäistä."

"Menkää heti ottamaan vaippa harteillenne", käski tohtori ja


melkein tietämättään totteli Muriel häntä.

Sitten meni hän jälleen lastenkamariin. Daisy istui yhä samassa


asennossa ja tohtori seisoi hänen vieressään kumartuneena lasta
tarkastamaan. Muriel näki Daisyn tuijottavan tohtorin kasvoja
kertoessaan, miten sairaus oli puhjennut.
Tohtori Ratcliffe kuunteli aivan rauhallisena katse kiintyneenä
poikasen kasvoihin. Kun Daisy lakkasi puhumasta, kosketti tohtori
hänen kättään.

"Antakaa poju minulle", pyysi hän. Muriel odotti vavisten


vastausta. Mutta Daisy ei sanonut sanaakaan vastaan, vaan täytti
heti tohtorin pyynnön.

"Varokaa, ettei hän taasen ala itkeä", sanoi hän vain


huolestuneena.

Tohtori Ratcliffe sanoi hetkisen hiljaa katsellen pientä, elotonta


ruumista. Sitten sanoi hän hyvin hiljaa ja lempeästi, mutta samalla
varmalla äänellä:

"Hän ei enää milloinkaan itke."

Samassa hypähti Daisy ylös.

"Kuollutko? Minun pojuni kuollut? Rakkaimpani! Minun silmien


valo!
Sanokaa, ettei se ole totta."

Hän katsoi hurjin katsein tohtoria. Koko ruumista puistatti.

"Kuolemaa ei ole olemassa", sanoi tohtori hiljaa.

Siinä kaikki, mitä hän sanoi, mutta nuo sanat tunkivat suoraan
Murielin sydämeen. Hän vapisi ne kuullessaan. Tuntui, kuin olisi Nick
ne sanat lausunut.

Sitten näki hän tohtorin asettavan pienokaisen vuoteelle, näki


tuskaisen ilmeen Daisyn kasvoilla, näki, miten äitiraukka horjui.
Samassa unohti hän kokonaan omat tunteensa ja juosten Daisyn
luo kietoi kätensä hänen kaulaansa.
XXIV.

Eräs sähkösanoma.

Intian laajalla tasangolla kävi kuumuus vähitellen sietämättömäksi.


Eräänä iltana istui muuan mies kuistillaan paidanhihat ylös
käärittyinä. Hän huokasi tuon tuostakin, kuin kuumuuden
rasittamana. Mies oli aivan nuori, hänen kasvonsa olivat
vaaleahipiäiset ja sileiksiajellut. Hänen olennossaan oli jotakin
intomielisen poikamaista, näytti siltä, kuin olisivat poikavuodet
livahtaneet liian nopeaan hänen ohitseen. Hänen silmänsä olivat
rasittuneet ja verestävät, mutta yhä jatkoi hän työtään kohottamatta
katsettaan paperista.

Eivät edes takaapäin lähenevät askeleet saaneet häntä irtaumaan


työstään.

"Odota hetkinen, ystäväni", sanoi hän. "Minulla on eräs tärkeä työ


vielä päättämättä."

Lampunvalo osui tulijan kasvoihin. Ne olivat keltaiset ja kurttuiset,


silmät kiiluivat omituisesti. Hänen yllään oli valkea liinapuku, toinen
hiha riippui tyhjänä. Hetkisen seisoi hän liikkumatta ovella. Sitten
astui hän lähemmä pöytää.

"Älä lainkaan välitä minusta. Tee vain työsi valmiiksi", sanoi tulija.

Sitten seisoi hän taasen hiljaa tarkastaen papereiden yli


kumartunutta miestä. Samassa kun käsi kohoutui paperilta, kysyi
hän:

"Joko olet lopettanut?"

Pöydän ääressä istuva mies suoristihe itseään. Sitten hypähti hän


äkkiä ylös.

"Missähän ajatukseni oikein ovat kun annan sinun seistä, Nick?


Istuhan!
Niin, tämänpäiväinen työni on jo lopussa."

"Sinusta kai vähitellen tulee rikas mies ja sitten asetut rauhaan


Daisyn ja poikasi luo. Oletpa sinä vasta onnen myyrä, Will", sanoi
Nick.

"Niinkö luulet?" kysyi Will kumartuen jälleen työnsä ääreen. Ääni


kuulosti epäröivältä.

Nick katsoi häneen ja löi sitten oikealla kädellään pöytään.

"Pois työ", komensi hän. "Sinä teet itsesi sairaaksi tuolla


ahkeroimisellasi. Heitähän työ nyt hetkiseksi mielestäsi ja polta
kanssani savuke tässä jutellessamme. Minä tuon Daisyn luoksesi ensi
talveksi. Saatpas nähdä."

Will kääntyi häneen päin.


"Jospa sen voisit tehdä."

"Voisin?" toisti Nick… "Lyömmekö vetoa siitä, että sen teen?"

Mutta Will pudisti päätään omituisesti hymyillen.

"Emme. Mutta poltahan nyt savukkeitasi, muuten alkavat ilkeät


hermokipusi jälleen. Olit sangen ystävällinen, kun tulit minua
tervehtimään, vaikka et oikeastaan terveytesi puolesta olisi saanut
sitä tehdä."

Nick nauroi kovaäänisesti.

"Ethän vain kuvittele, että tein sen sinun tähtesi?" sanoi hän. "En
voinut matkustaa yhtä mittaa rannikolle asti, ymmärrätkö? Siksi
poikkesin tänne."

"Omituisen lepopaikanpa valitsit", sanoi Will.

"Tuumin, että pari päivää sinun seurassasi saisi minut taasen


hyvälle tuulelle", vastasi Nick kevyesti pujottaen kätensä ystävänsä
kainaloon. "Vai kuulostaako sekin omituiselta."

Will nauroi.

"Voit ainakin sanoa Daisylle, että teen työtä kuin orja hänen ja
pojan hyväksi", sanoi hän. "Pahinta on, että poika on niin heikko,
kirjoittaa Daisy."

"Miten usein saat häneltä tietoja?" kysyi Nick.

"Viimeinen kirje tuli noin kolme viikkoa sitten. Silloin olivat he


kaikki terveitä, mutta hän kirjoitti vain lyhyesti, sillä Grange oli siellä.
Hän asuu siellä, näetkös."
"Miten kauan on Grange ollut siellä?"

"En tiedä. Jo kotvan aikaa, luulen. Hän ja Daisy ovat lapsuuden


ystäviä, kuten tiedät. Luulen heidän olleen rakastuneita toisiinsa, kun
olivat aivan nuoria. Mutta perhe oli heidän avioliittoaan vastaan siksi,
että he olivat serkkuja. Mutta hyviä ystäviä ovat he edelleen. Minun
mielestäni on Grange aina ollut kunnon mies."

"Minusta hän on liian lempeäluontoinen. Hän on aivan kuin kaunis


vene vailla peräsintä. Hieno käytöstapa, mutta lujuutta puuttuu."

Hän heittäytyi pitkälleen vanhalle leposohvalle Willin


makuuhuoneessa.

Will antoi hänelle savukkeen.

"Miten monta pitkää yötä olenkaan tuolla sohvalla viettänyt",


huoahti
Will.

"Viime syksynäkö?"

"Niin, se oli tosiaan helvetin kidutusta", vastasi hän


todenmukaisesti. "Tulin tänne sitten kun Daisy oli lähtenyt Simlasta.
Minun oli tehtävä työtä kaksin verroin, kun Daisyn täytyi oleskella
kotona. No niin, menihän se sentään ja menee vieläkin. Mutta Daisy
ei mitenkään voi oleskella täällä kuin neljä kuukautta vuodessa. Ja
poika…"

"Sinä et tule elämään täällä koko ikääsi", sanoi Nick. "Sinä olet
edistysihminen, ystäväni. Mutta katsoppas, tuolla kuistilla seisoo
palveliasi. Meneppäs kysymään, mitä asiaa hänellä on."
Will meni kuistille ja Nick näki palvelijan ojentavan hänelle jotakin
pienellä tarjottimella. Sitten katosi Will näkyvistä mennen luultavasti
pöydän ääreen, jolla lamppu oli. Oli aivan hiljaista, sakaalin ulvonta
vain kuului jostakin kaukaa.

Nick kuuli paperin rapinaa ja sitten oli kaikki taasen hiljaa. Lopulta
hermostui hän ja huusi:

"Mitä teet siellä, Will? Miksi et tule tänne juttelemaan?"

Kun ei vastausta kuulunut, meni Nick kuistille.

Pöydän ääressä oli Will polvillaan pää käsiin nojaten. Koko hänen
olentonsa ilmasi syvää toivottomuutta. Hän oli aivan hiljaa, olkapäät
vain nytkähtelivät. Toisessa kädessä piti hän rypistynyttä paperia.

Nick kumartui hänen puoleensa.

"Mikä sinua vaivaa, vanha ystäväni? Oletko saanut huonoja


uutisia?"

Will säpsähti ja tuskan parahdus tunkeusi hänen huuliltaan. Kasvot


olivat kalpeat ja surun uurtamat.

"Sain sähkösanoman. Minun… meidän pieni poikamme kuoli viime


yönä."

Nick ei vastannut kotvaan aikaan. Hän otti sähkösanoman Willin


kädestä ja pani sen taskuunsa sitä katsomatta. Sitten tarttui hän
Willin käsivarteen ja nosti hänet ylös.

"Tule sisälle", sanoi hän.


Will seurasi häntä horjuvin askelin ja vaipui istumaan tuolille.
Nick'in sekottaessa hänelle vahvan viskyseoksen huudahti Will
hurjasti:

"Hän on mennyttä minulta. Poika oli ainoa yhdysside välillämme.


Hän ei ole milloinkaan rahtuakaan välittänyt minusta. Olen aina
tietänyt, ettei hän olisi jäänyt luokseni, ellei meillä olisi ollut tuota
lasta. Ja nyt… nyt…"

"Hiljaa", sanoi Nick. "Juohan tämä, ole hyvä."

Will tyhjensi lasin ja kätki taasen kasvot käsiinsä.

"Sinä et tiedä", sanoi hän puoleksi tukahtuneella äänellä, "miltä


tuntuu tietoisuus siitä, että siltä ainoalta jota koko sielustaan
rakastaa, saa vain välinpitämättömyyttä osakseen."

Nick ei vastannut, mutta hänen huulensa vapisivat hieman.

"Elä antaudu epätoivoon ystäväni", sanoi hän. "Sinun luoksesi hän


varmaankin tulee apua etsimään."

"En sitä usko", vastasi Will syvään huoaten. "Hän ei tule enää
milloinkaan minun luokseni, sen tiedän."

"Älä ole noin lapsekas. Tietysti hän tulee. Jos sinä sitä toivot, niin
hän tulee."

Will pudisti päätään. Hetken perästä tarttui hän Nick'in käteen.

"Tiedätkö", sanoi hän hiljaa, "olen toisinaan ikävöinyt häntä niin


äärettömästi, että olen rukoillut Jumalaa tuomaan hänet luokseni."
Hän katsoi ystävänsä silmiin tehdessään tämän tunnustuksen.
Ehkä odotti hän näkevänsä ivallisen hymyn Nick'in kasvoilla, mutta
sitä ei tullutkaan.

Nick istuutui pöydän reunalle ja lyöden Williä olalle huudahti hän


tarmokkaasti:

"Ei se auta, että rukoilet vain toisinaan, ymmärrätkö? Täytyy


kestää, ei saa milloinkaan väsyä, vaikka mitä tapahtuisi. Jos into
laimenee, kadottaa tarmonsakin. Kun rukoilee lakkaamatta, niin,
vaikkapa ilman uskoakin, niin saa kun saakin vihdoin sen, jota
rukoilee. Sen täytyy tapahtua. Ihmiset sanovat, että Jumala ei joskus
kuule rukoustamme siksi, ettei sen täyttäminen olisi meille hyväksi.
Tuo on vain mitätöntä puhetta. Sen, jota toivoo koko sielustaan, sen
täytyy tapahtua siksi, että se on muodostunut meille ainoaksi
mahdollisuudeksemme. Siksi täytyy vain pysyä lujana, vaikkakin
pitäisi taistelua toivottomana. Emme saa antaa perään, ennenkuin
olemme saaneet, mitä haluamme."

Hän hypähti seisomaan ja osoittaen itseään jatkoi voitonvarmalla


äänellä:

"Minä kestän kaiken. Ja Jumala tietää, etten suo hänelle


hetkenkään rauhaa, ennenkuin hän on kuullut rukoukseni."

Hän meni toiseen päähän huonetta ja seisoi siellä hetkisen. Hänen


tullessaan takaisin, katsoi Will häneen niin ihmeissään, kuin olisivat
he nähneet toisensa ensi kerran.

"Niin, katso vain minua", sanoi Nick. "Minä en näytä sellaiselta,


jolla on tunteet. Se riippua minun ulkomuodostani, näetkös. Mutta
minkäpä sille mahtaa, että on aivan egyptiläisen muumion näköinen.
Onpa minua kerran epäilty itse paholaiseksikin."

Hän puhui puoleksi leikillisesti, puoleksi surullisesti, meni sitten


akkunan ääreen ja jäi siihen.
XXV.

Tulevaisuustuumia.

Mitään uupumistilaa ei voida verrata siihen, joka seuraa kiihkeätä


surun ja tuskan purkausta.

Daisy loikoi huoneessaan, jonka akkunat olivat säleuutimien


peitossa. Kun nyt jännitys oli ohi, tuntui hänestä itse suruakin
katkerammalta se, ettei hänellä enää ollut ketään, jota vaalia ja
hoitaa. Se lamaannutti hänet kokonaan.

Ensi päivinä lapsen kuoleman jälkeen ei hän nähnyt muuta kuin


tohtori Ratcliffen ja Murielin. Jim Ratcliffe oli suuresti huolissaan
hänen tilastaan.

Aluksi ei hän tietänyt, voisiko luottaa Murieliin, mutta siitä sai hän
piankin varmuuden. Unohtaen kokonaan itsensä tuo nuori tyttö
osoitti suurta uhrautuvaisuutta ja itsensä hillitsemistä.
Vapaaehtoisesti asettautui hän Daisyn vuoteen ääreen ja oli
tohtorille yhtä suureksi avuksi, kuin varsinainen sairaanhoitajatar.
Daisy ei puhunut paljon, mutta hän tunsi kuin lohtua Murielin
läsnäolosta ja siten heidän ystävyytensä yhä lujittuivat.

Muriel tapasi harvoin Blaken, vaikka tämä melkein aina oli


lähettyvillä. Blake käyskeli talon ympäristössä tai puutarhassa
lakkaamatta poltellen savukkeitaan. Joka kerran tavatessaan Murielin
kysyi hän, eikö hänelle olisi mitään tehtävää ja jottei hän tuntisi
itseään vallan tarpeettomaksi, keksi Muriel hänelle tehtäviä. Itse hän
ei moneen päivään astunut askeltakaan puutarhan ulkopuolelle.

Kolmisen viikkoa poikasen kuoleman jälkeen kuuli Daisy Blaken


askeleet akkunan alta.

"Kuka nyt pitää huolta Blakesta?" kysyi hän.

Muriel katsahti puutarhaan.

"Hän kyllä itse pitää huolen itsestään", sanoi hän.

Daisy huokasi raskaasti.

"Sinä et saa alituisesti olla minun luonani", sanoi hän. "Olen ollut
niin itsekäs. Mene hänen luokseen Muriel, sillä hän on varmaankin
ikävissään. On parempi teille kummallekin, että olette enemmän
toistenne seurassa. Minäkin koetan tulla ulos huomenna, jos tohtori
sen sallii. Tänäänhän on hockey-päivä, eikö olekin? Mene Blaken
kanssa hockey-kentälle."

Muriel katsoi parhaaksi tehdä kuten hän pyysi ja meni sentähden


Blaken luo. Heillä kummallakaan ei ollut halua hockeytä pelaamaan,
mutta he kävelivät sen sijaan puutarhassa.

You might also like