Taewan Ryu : Benchmarking of BioPerl, Perl, BioJava, Java, BioPython, and Python for Primitive Bioinformatics Tasks 6 and Choosing a Suitable Language Benchmarking of BioPerl, Perl, BioJava, Java, BioPython, and Python for Primitive Bioinformatics Tasks and Choosing a Suitable Language Taewan Ryu Dept of Computer Science, California State University, Fullerton, CA 92834, USA ABSTRACT Recently many different programming languages have emerged for the development of bioinformatics applications. In addition to the traditional languages, languages from open source projects such as BioPerl, BioPython, and BioJava have become popular because they provide special tools for biological data processing and are easy to use. However, it is not well-studied which of these programming languages will be most suitable for a given bioinformatics task and which factors should be considered in choosing a language for a project. Like many other application projects, bioinformatics projects also require various types of tasks. Accordingly, it will be a challenge to characterize all the aspects of a project in order to choose a language. However, most projects require some common and primitive tasks such as file I/O, text processing, and basic computation for counting, translation, statistics, etc. This paper presents the benchmarking results of six popular languages, Perl, BioPerl, Python, BioPython, Java, and BioJava, for several common and simple bioinformatics tasks. The experimental results of each language are compared through quantitative evaluation metrics such as execution time, memory usage, and size of the source code. Other qualitative factors, including writeability, readability, portability, scalability, and maintainability, that affect the success of a project are also discussed. The results of this research can be useful for developers in choosing an appropriate language for the development of bioinformatics applications. Keywords: A programming language comparison, BioPerl, BioJava, BioPython. 1. INTRODUCTION effort. BioPerl is basically a collection of Perl modules for many of the typical tasks of bioinformatics programming. It is one of Bioinformatics is the application of mathematical and the active open source software projects supported by the Open computational techniques to the area of molecular biology to Bioinformatics Foundation [20]. With a basic understanding of solve problems arising from the management and analysis of Perl, including how to use Perl references, modules, objects and biological data, eventually to understand biological processes [2, methods, a developer can take advantage of BioPerl to 9, 31]. Common tasks in bioinformatics include the creation, implement sophisticated tasks by using only a few lines of code, search, retrieval, and analysis of biological data, mapping, significantly saving time and effort in developing applications manipulating, and analyzing DNA and protein sequences, compared to using the standard Perl. alignment of those sequences to compare them, 3-D modeling of Java is a general-purpose, object-oriented and compiler- protein structures, etc. [1], [9], [14], [21], [26]. To perform these based programming language that derives much of its syntax tasks, many different programming languages can be used. Out from C and C++. Similar to BioPerl, BioJava is also an open of all the different programming languages, Perl [29], Python source project that provides Java-based library for processing [11], and Java [27] have received the most attention from biological data and other various mundane bioinformatics tasks developers of bioinformatics applications mainly because those [4], [5]. languages are platform independent and support flexible and Python is a general-purpose high-level programming powerful features such as string manipulation, text processing, language with a design focusing on code readability [11]. file handling, etc. Python provides a large and comprehensive standard library Perl is a high-level, general-purpose, and interpreter-based supporting multiple paradigms that are primarily object-oriented, programming language that was originally developed by Larry imperative, and functional. The language has an open, Wall in 1987, as a Unix scripting language to make report community-based development model managed by the non- processing easier [24]. Since then, it has undergone many profit Python Software Foundation. BioPython is another open revisions and has become widely popular among programmers source project based on the Python programming language and for system administration, web application, and text and file is also supported by the Open Bioinformatics Foundation [7]. processing for many other applications. Particularly, for For our convenience in this paper, the open source projects, bioinformatics application development, as developers write BioPerl, BioJava, and BioPython will be referred to as similar code to implement common bioinformatics tasks [20], Bio*languages and their base languages, Perl, Java, and Python they have formed a community for bioinformatics application as native languages. developers using Perl and started an open source project called For a given project, choosing a right language is important BioPerl [6, 12]. This community allows for the sharing of since the selected programming language can, in part, affect the reusable code that reduces the amount of development time and success of the project. With a wide range of open source projects and traditional programming languages available, application developers may have difficulty in choosing the right * Corresponding author. E-mail : [email protected] programming language for a project, leading them to ask: what Manuscript received Feb. 12, 2009 ; accepted Jun. 3, 2009 International Journal of Contents, Vol.5, No.2, Jun 2009 Taewan Ryu : Benchmarking of BioPerl, Perl, BioJava, Java, BioPython, and Python for Primitive Bioinformatics 7 Tasks and Choosing a Suitable Language factors do we need to consider when choosing a language? are Perl 5.8.0, BioPerl 1.2.2, Java 1.4.2_01, BioJava 1.3pre1, Some important factors to be considered may include the Python 2.2.3, and BioPython 1.21. available project period, available computer resources, ease of collaboration with other team members especially for a large 2.1. Performing Disk I/O with GenBank and project, efficiency and maintainability of programs, and so on. FASTA files Furthermore, when it comes to implementation of The main operations in this task are to extract the sequence data bioinformatics tasks, one can be easily tempted to use and the annotations from a GenBank file and write them into a Bio*languages, mainly for quick implementation without file in FASTA format. This reading and writing are mainly disk realizing whether or not the implemented codes will comply input/output (I/O) operations with some text parsing. The with the intended project goals. following source codes present the major statements of However, while a comparison of languages C, C++, C#, Java, implementation in each language. The complete version of the Perl, and Python has been done [13], [23], the pros and cons of source codes and the related information is available on the web: each language, especially a comparison between the http://tryu.ecs.fullerton.edu/biolanguagebenchmarking.zip. Bio*languages and their native languages based on these factors in implementing various bioinformatics tasks were not well (1) Bioperl studied in the past. @seq_object_array = Therefore, the main objective of this paper is to provide read_all_sequences($infilename,'genbank'); developers with the valuable information needed in selecting an write_sequence(">$outfilename", 'fasta', @seq_object_array); appropriate language for their projects by evaluating each of the six popular languages including the Bio*languages discussed (2) Biojava above. The quantitative evaluation metrics, execution time, SequenceIterator iter = memory usage, and size of the source code for each language (SequenceIterator)SeqIOTools.fileToBiojava(4, are measured in several common and basic bioinformatics tasks br); including: (1) performing disk input/output (I/O) with GenBank SeqIOTools.writeFasta(new and FASTA files, (2) finding a sequence in a GenBank file with FileOutputStream("out_biojavaNC_002950.fa"), a LOCUS name [3], (3) computing the reverse complement of a iter); DNA sequence, (4) counting the residues in a sequence, and (5) (3) Biopython translating a DNA sequence to proteins [2], [19]. The paper feature_parser = GenBank.FeatureParser() presents benchmarking results of the six languages for each of gb_iteratorFeature = GenBank.Iterator(gb_handle, these tasks. For some bioinformatics applications, many other feature_parser) complex tasks than these may need to be implemented. However, ...... this research was not intended to cover all aspects of fasta = Fasta.Record() bioinformatics applications but rather to focus on the language- while 1: related issues in implementing simple tasks. Therefore, we cur_feature = gb_iteratorFeature.next() if cur_feature is None: intentionally avoided sophisticated tasks, especially those break involving other systems or special hardware such as database titleStr = cur_feature.name + " " + management systems [10], visualization, and specialized cur_feature.description computations [30], in order to simplify the experiment without fasta.title = titleStr being biased by external systems or hardware. Although these fasta.sequence = cur_feature.seq.data tasks, among
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages10 Page
-
File Size-