Friday, January 1, 2010

ฉบับที่ 5 (มกราคม 2010)

Opening

สวัสดีปีใหม่ 2553 ครับ ผมคิดว่าเพื่อนๆ ทุกคนคงมีความสุขและได้พักผ่อนในวันหยุดปีใหม่กันอย่างเต็มที่นะครับ ยังไงก็อย่าหยุดเพลินนะครับ สำหรับ Thai Bioinformatics e-Magazine ของเราก็ผ่านเข้าสู่ฉบับที่ 5 แล้วครับ ถ้าเทียบกับคนทำงาน ก็ต้องบอกว่าเพิ่งจะพ้นช่วงทดลองงานครับ ตอนนี้เข้ามาเป็นพนักงานเต็มตัวแล้วครับ ก่อนอื่นผมต้องขอขอบคุณเพื่อนๆ ที่ติดตาม Thai Bioinformatics e-Magazine มาตลอด 4 เดือน และขอขอบคุณทุกกำลังใจที่ส่งมาให้ด้วยนะครับ ผมอยากจะให้เพื่อนๆ ติดตามต่อไป และเราคงจะได้สร้างชุมชนของเราให้ใหญ่ขึ้น เข้มแข็งขึ้น และเป็นรูปธรรมมากขึ้นในอนาคตครับ

สำหรับเนื้อหาในฉบับนี้ ก็เริ่มต้นกันด้วย Highlight เช่นเคยครับ โดยปีนี้ผมได้นำเสนอบทความที่เป็นเรื่องราวเกี่ยวกับ bioinformatics มากขึ้น โดยที่ผมจะพยายามใช้คอลัมน์นี้เป็นสื่อให้ผู้อ่านได้รู้ว่า bioinformatics เป็นอย่างไร มีสาขาวิชาอะไรหรืองานวิจัยอะไรที่เกี่ยวข้องกับ bioinformatics บ้าง ดังนั้น ฉบับปฐมฤกษ์ของปี พ.ศ. 2553 นี้ ผมเลยอยากนำเสนอบทความน่าสนใจเรื่อง "Bioinformatics: ศาสตร์แขนงใหม่ที่คนไทยต้องรู้จัก" เพื่อให้เป็นจุดตั้งต้นของบทความ series ทาง bioinformatics ครับ ในส่วนของ Python Programming ก็เริ่มสนุกแล้วครับ เรากำลังจะได้เริ่มเขียนโปรแกรมที่สามารถนำไปใช้งานได้จริงๆ กับพี่เต่า (ประพัฒน์ สุริยผล) ครับ ใครที่ร้างราไปจากการเขียนโปรแกรมก็ลุกขึ้นมาปัดฝุ่นกันหน่อยครับ ใครเริ่มลืมๆ เกี่ยวกับคำสั่งต่างๆ ก็กลับไปทวนได้ครับ และสำหรับมือใหม่หัดเขียนโปรแกรม ผมก็อยากบอกว่าตอนนี้ก็ยังไม่สายเกินไปนะครับที่จะเริ่มเรียนรู้วิธีการเขียนโปรแกรมด้วยภาษา python (กลับไปดูเนื้อหาเก่าได้ที่ Python Programming ตอนที่ 2 และตอนที่ 3 ครับ) และสุดท้ายในส่วนของ Focus on Bioinfo Researches ของน้องอ้อ (ภัสสร วรรณพินิจ) ก็ไม่น้อยหน้าครับ ผมต้องขอออกตัวแทนเลยครับว่างานน้องเขายุ่งจริงๆ แต่ก็ยังสละเวลามาเขียนบทความน่าสนใจให้พวกเราได้อ่านกัน ก็ต้องขอขอบคุณมากๆ ครับ และครั้งนี้เรามีงานวิจัยผลงานของคนไทยด้วยครับ จะเป็นงานอะไร งานของใคร ต้องไปติดตามกันเอาเองครับ

สุดท้ายนี้ ผมก็ใคร่ขอความกรุณาจากเพื่อนๆ ที่เป็นนักอ่าน หรือผู้ที่บังเอิญผ่านมาเจอเวบของเรา ถ้าท่านคิดว่างานดีๆ แบบนี้มีประโยชน์ต่อสังคม ก็ขอให้ช่วยกันประชาสัมพันธ์เวบให้ผู้สนใจทั่วไปด้วยนะครับ และถ้าท่านผู้ใดมีความเห็น คำถาม คำติ คำชม ก็สามารถ post ไว้ในกระทู้ได้ครับ ทุกความเห็นของท่านจะเป็นแรงผลักดันให้เราก้าวไปข้างหน้าอย่างมั่นคงครับ

ประเวช อรรจวัฒนวงศ์

Highlight

Bioinformatics: ศาสตร์แขนงใหม่ที่คนไทยต้องรู้จัก
ประเวช อรรจวัฒนวงศ์

สวัสดีปีใหม่ครับ สำหรับคอลัมน์ Highlight ในปีนี้ ผมอยากจะจัดให้เป็น series ของ bioinformatics แบบจริงๆ เสียที หลังจากที่เราได้พยายามตั้งไข่กันมาหลายเดือน ดังนั้น Highlight ในปีนี้ ผมจะพาท่านผู้อ่านมาทำความรู้จักกับศาสตร์ที่เราเรียกกันว่า bioinformatics กันครับ เพื่อที่จะได้เข้าใจในเบื้องต้นว่า สิ่งที่เราเคยเข้าใจเกี่ยวกับ bioinformatics นั้นเป็นไปอย่างที่เราคิดไว้หรือไม่ และในเนื้อหาของ e-Magazine ฉบับต่อๆ ไปก็จะแนะนำสาขาย่อยต่างๆ ของ bioinformatics รวมไปถึง ศาสตร์ใหม่ๆ อย่างเช่น genomics, proteomics, functional genomics, metabolomics ด้วย และเพื่อไม่ให้เป็นการเสียเวลา เราไปทำความรู้จักกับ bioinformatics กันเลยครับ

คำว่า bioinformatics นั้น น่าจะเกิดขึ้นบนโลกใบนี้ตั้งแต่ปี ค.ศ. 1978 โดยนักชีววิทยาทฤษฎี (theoretical biologist) ชาวฮอล์แลนชื่อ พอลเลี่ยน ฮ๊อจเวก (Paulien Hogeweg) เธอจบปริญญาเอกจากมหาวิทยาลัยอูเทรก (Utrecht University) ประเทศเนเธอแลนด์ และมีผลงานวิจัยมากมายเกี่ยวกับการประยุกต์ใช้สารสนเทศในงานชีววิทยา ต่อมาเมื่อโลกแห่งวิทยาศาสตร์หมุนเข้าสู่ยุคของจีโนม (genomic era) นักวิจัยจำนวนมากมุ่งเป้าการศึกษาไปที่การค้นหาลำดับดีเอ็นเอของสิ่งมีชีวิตหลากหลายชนิด ไม่กี่ปีหลังจากนั้น เทคโนโลยีการถอดรหัสพันธุกรรมก็กลายเป็นเรื่องที่แสนจะง่ายดาย ทำให้เรามีข้อมูลลำดับดีเอ็นเอมากมายมหาศาล ทีนี้ก็จำเป็นที่จะต้องมีการจัดเก็บข้อมูลอย่างเป็นระบบ เพื่อให้สะดวกต่อการค้นหาและนำข้อมูลนั้นไปวิเคราะห์ต่อไป วิทยาการทางคอมพิวเตอร์จึงเริ่มเบนเข็มทิศเข้ามาทางงานวิจัยด้านชีววิทยามากขึ้น และด้วยเหตุนี้เองคำว่า bioinformatics ก็เริ่มกลายมาเป็นคำพูดที่แพร่หลาย จนปัจจุบัน bioinformatics ถูกบัญญัติไว้เป็นศัพท์คำหนึ่งในภาษาอังกฤษอย่างเป็นทางการ ส่วนในภาษาไทยผมคิดว่า น่าจะมีผู้บัญญัติไว้ว่า bioinformatics แปลได้เทียบเท่ากับคำว่า "ชีวสารสนเทศศาสตร์" ถึงแม้ว่าศาสตร์สาขานี้ไม่ใช่เรื่องใหม่อีกต่อไปแล้วในต่างประเทศ แต่ผมเชื่อว่ายังใหม่สำหรับคนไทย และตำรา bioinformatics ที่เขียนเป็นภาษาไทยก็มีน้อยเต็มที ดังนั้นนักเรียน นักศึกษา นักวิจัย รวมทั้งผู้สนใจทั่วไป จำเป็นต้องหาข้อมูลจากแหล่งความรู้และตำราต่างประเทศเป็นหลัก (และผมเชื่อว่าคงจะเป็นเช่นนี้ไปในอีกหลายปีข้างหน้า) จึงจำเป็นที่จะต้องสร้างความคุ้นเคยกับคำศัพท์ต่างๆ เหล่านี้ไว้ เพื่อเป็นประโยชน์ในการสืบค้นข้อมูลในอนาคต ผมจึงขอแปลคำศัพท์เป็นภาษาไทยเท่าที่จำเป็นเท่านั้น

Bioinformatics คืออะไร

ผมเชื่อว่าคนไทยจำนวนมาก รวมทั้งนักวิทยาศาสตร์ไทยอีกจำนวนไม่น้อย มองภาพ bioinformatics ยังไม่ชัดเท่าที่ควรนัก หลายคนคิดว่าถ้าเราเรียนคอมพิวเตอร์ครึ่งหนึ่งและเรียนชีววิทยาอีกครึ่งหนึ่ง แล้วเราจะเข้าใจ bioinformatics ได้ทันที สิ่งนี้ไม่มีความถูกต้องเลย ที่เป็นเช่นนั้นก็เพราะองค์ความรู้ทางด้านคอมพิวเตอร์ที่จะต้องนำมาใช้ทาง bioinformatics นั้นต่างออกไปจากเนื้อหาวิชาคอมพิวเตอร์ปกติที่มีการสอนในสถาบันต่างๆ หรือแม้แต่องค์ความรู้ทางชีววิทยาที่เกี่ยวข้องกับ bioinformatics เองก็แตกต่างจากเนื้อหาชีววิทยาทั่วไป ถึงตรงนี้หลายคนคงนึกสงสัยแล้วว่า วิชา bioinformatics นี่คืออะไรกันแน่ อันที่จริงแล้ว ปัจจุบันนี้ ยังไม่มีสถาบันใดหรือท่านผู้ใดให้ความหมายของคำว่า bioinformatics อย่างเป็นที่ยอมรับโดยสากล แต่คำจำกัดความที่แต่ละคนเสนอไว้ มีใจความคล้ายคลึงกัน ผมขอเรียบเรียงความหมายของ bioinformatics จากคำจำกัดความที่ผู้รู้ทั้งหลายได้กำหนดไว้ เพื่อให้ง่ายต่อการเข้าใจเสียใหม่นะครับ

bioinformatics เป็นวิชาใหม่ที่มีลักษณะเป็นสหสาขาวิชา (multidiscriplinary subject) ซึ่งถือกำเนิดขึ้นมาจากศาสตร์เก่าแก่ 2 สาขา นั่นคือ คณิตศาสตร์ (ผมรวมไปถึงสถิติและเทคโนโลยีทางด้านคอมพิวเตอร์และสารสนเทศ ซึ่งเป็นผลพวงมาจากความก้าวหน้าทางคณิตศาสตร์) และชีววิทยา โดยเฉพาะอย่างยิ่งอณูชีววิทยา (molecular biology) ที่ผลิตข้อมูลจำพวกลำดับดีเอ็นเอ และโปรตีนออกมามากมาย ทำให้ bioinformatics น่าจะหมายถึงการประยุกต์ใช้ความรู้ทางคอมพิวเตอร์มาใช้ในการจัดเก็บ สืบค้น กลั่นกรอง และวิเคราะห์ข้อมูลชนิดต่างๆ ทางชีววิทยา ซึ่งส่วนมากมักจะเป็นลำดับดีเอ็นเอ ลำดับโปรตีน หรือข้อมูลทางชีววิทยาที่เกิดจากเทคโนโลยี high throughput เช่น microarray data ให้เกิดเป็น information

จากความหมายที่ผมให้ไว้นี้ มันจำเพาะกว่าการนำคอมพิวเตอร์มาใช้ในงานชีววิทยา นักวิจัยหลายคนใช้คอมพิวเตอร์ในการจัดทำรายงานความก้าวหน้าของโครงการมีการเก็บภาพถ่ายจากกล้องจุลทรรศน์ไว้ในคอมพิวเตอร์ แบบนี้ไม่ถือว่าเป็น bioinformatics เพราะการเก็บข้อมูลเหล่านี้ ไม่ได้อยู่ในรูปแบบเป็นฐานข้อมูลที่ถูกต้องและสืบค้นได้ง่าย แม้แต่เครื่องมือวิทยาศาสตร์สมัยใหม่ที่มีราคาแพงเป็นหลักแสน หลักล้านบาท ก็มักจะมีการควบคุมการทำงานด้วยระบบคอมพิวเตอร์ และมีโปรแกรมสำหรับควบคุมการทำงานติดตั้งมาด้วย เช่น real-time PCR, DNA sequencer, HPLC เป็นต้น ก็ไม่นับเป็น bioinformatics เพราะนั่นเป็นเพียงแค่ interface ของเครื่องจักรที่ควบคุมให้ทำงานด้วยโปรแกรมคอมพิวเตอร์เท่านั้น ไม่มีการจัดเก็บข้อมูลและวิเคราะห์ข้อมูลใดๆ เกิดขึ้นเลย

ถ้าท่านผู้อ่านลองนึกภาพย้อนกลับไปเมื่อสัก 20 ปีก่อน ในช่วงเวลาที่ยังไม่มีผู้เชี่ยวชาญด้าน bioinformatics เลย แต่กระแสงานวิจัยทางด้าน bioinformatics จัดเป็นงานวิจัยระดับแนวหน้า (frontier researches) ในสมัยนั้น นักชีววิทยาจำนวนหนึ่งเริ่มขยับตัวเองเข้าสู่งานวิจัยแนวใหม่ ซึ่งพวกเขาก็ยังคงเป็นนักชีววิทยามากกว่านักวิจัยทาง bioinformatics ส่วนคนอีกกลุ่มหนึ่งที่สนใจงานด้านนี้ ก็เริ่มย้ายตัวเองออกจากความเป็นนักคอมพิวเตอร์เพื่อเข้ามาเป็นนัก bioinformatics แต่เขาพวกนั้นยังคงมีความเป็นนักคอมพิวเตอร์อยู่มาก เมื่อคน 2 กลุ่มเริ่มหันเข้ามาสู่ bioinformatics ด้วยพื้นฐานที่แตกต่างกัน ก็ทำให้ bioinformatics มีขอบเขตกว้าง และมีการบัญญัติศัพท์ใหม่ๆ ขึ้นมากมาย เพื่ออธิบายลักษณะงานวิจัยที่พวกเขาได้ทำอยู่

นักวิจัยที่มีพื้นฐานมาจากด้านคอมพิวเตอร์ จะมองชีววิทยาเป็นโจทย์แบบหนึ่ง และพยายามใช้เทคนิค แนวความคิด ทฤษฎีทางสถิติ คอมพิวเตอร์ คณิตศาสตร์ประยุกต์ เข้ามาแก้ปัญหาชีววิทยา นักวิจัยกลุ่มนี้จะเรียกศาสตร์สาขานี้ว่า computational biology (หรือบางคนเรียกว่า ชีววิทยาเชิงคำนวณ) ส่วนนักวิจัยกลุ่มที่มีพื้นฐานมาจากด้านชีววิทยา มักจะมองคอมพิวเตอร์เป็นเครื่องมือวิจัยอย่างหนึ่ง ที่จะถูกนำมาใช้ในการวิเคราะห์ข้อมูลทางชีววิทยา และสุดท้ายก็จะใช้ความรู้ทางชีววิทยาแปรผลนั้นอีกครั้งหนึ่ง คนกลุ่มนี้มักจะเรียกศาสตร์ที่ตัวเองศึกษาว่า bioinformatics

วันหนึ่งข้างหน้า นักวิจัยรุ่นใหม่ที่จะเกิดมาเป็น bioinformatician ก็ไม่ได้มาจากฝั่งชีววิทยาหรือคอมพิวเตอร์อีกต่อไป แต่นักวิจัยกลุ่มนี้จะถูกฝึกปรือขึ้นมาเป็น bioinformatician ด้วยองค์ความรู้ที่ถูกกลั่นกรองและตกผลึกมาจาก bioinformaticians รุ่นก่อนๆ ... เอาเป็นว่า ไม่ว่าจะเป็น computational biology หรือ bioinformatics เรากำลังหมายถึงศาสตร์ชนิดเดียวกัน ที่มีความหลากหลายในรูปแบบของโจทย์วิจัย และแนวทางแก้ปัญหา ผมจะขอใช้คำว่า bioinformatics แทนศาสตร์ทั้งหมดเหล่านี้ในส่วนต่อๆ ไปของเนื้อหานะครับ

Bioinformaticians เขาทำวิจัยอะไรกันบ้าง

งานวิจัยในยุกบุกเบิกของ bioinformatics น่าจะเป็นการจัดการข้อมูลทางชีววิทยา ซึ่งสมัยนั้นก็มีแต่ลำดับดีเอ็นเอ และลำดับโปรตีนเป็นหลัก มีการสร้างฐานข้อมูลต่างๆ มากมายเพื่อรองรับปริมาณข้อมูลที่นักชีววิทยาสร้างขึ้น นอกจากงานด้านการบริหารข้อมูลแล้วการวิเคราะห์ลำดับดีเอ็นเอ ลำดับอาร์เอ็นเอ และลำดับโปรตีน ก็เป็นงานวิจัยสำคัญในยุกนั้น มีการนำเสนอวิธีการเปรียบเทียบลำดับดีเอ็นเอด้วยวิธีการที่เรียกว่า alignment นอกจากนี้ยังมีการคาดเดาแบบแผน (pattern) ของดีเอ็นเอที่จำเพาะเจาะจงซึ่งซ่อนอยู่ใน sequence เช่น promoter หรือ motif ต่างๆ อีกด้วย งานวิจัยแบบนี้เราเรียกว่า sequence analysis ความสำคัญของ sequence analysis ได้ขยายตัวเพิ่มขึ้นตามปริมาณของลำดับดีเอ็นเอที่เพิ่มมากขึ้นทุกวัน ปัจจุบัน งานวิจัยประเภทนี้ไม่ใช่เรื่องใหม่อีกต่อไป แต่กลับกลายมาเป็นเรื่องจำเป็นที่นักชีววิทยาหลายสาขาต้องเรียนรู้เพื่อใช้ในการวิเคราะห์ข้อมูลเบื้องต้น

Bioinformaticians บางกลุ่มสนใจงานด้าน molecular phylogenetics ซึ่งเป็นการศึกษาความสัมพันธ์ทางวิวัฒนาการของสิ่งมีชีวิตโดยอาศัยข้อมูลจากการทดลองทางอณูชีววิทยา ไม่ว่าจะเป็น fingerprint patterns ลำดับดีเอ็นเอ หรือลำดับโปรตีน เพื่อมาอธิบายว่าสิ่งมีชีวิตที่พวกเขาศึกษานั้นมีความเกี่ยวข้องกันอย่างไร การหาคำตอบเหล่านี้ จำเป็นต้องใช้ความรู้ทางวิวัฒนาการและคณิตศาสตร์มาคำนวณหาอัตราการกลายพันธุ์ (mutation rate) และอัตราการวิวัฒนาการ (evolutionary rate) ของนิวคลีโอไทด์ในลำดับดีเอ็นเอ เพื่อสร้างเป็น evolutionary models แบบต่างๆ แล้วพวกเขาจึงใช้ model เหล่านั้น มาสร้างเป็นแผนภาพการวิวัฒนาการของสิ่งมีชีวิตที่เราเรียกกันว่า phylogenetic tree นั่นเอง

เราทราบกันดีว่าการศึกษาโครงสร้างของโปรตีนสักชนิดหนึ่ง เป็นงานที่ต้องอาศัยเวลานานและความชำนาญสูง แต่นักวิจัยจำนวนมากไม่อาจรอให้โครงสร้างของโปรตีนทั้งหมดถูกสร้างขึ้นจาก X-ray crystallography หรือ NMR ดังนั้น bioinformaticians บางกลุ่มจึงเริ่มศึกษาการทำนายโครงสร้างสามมิติของโปรตีน โดยอาศัยความรู้ทางเคมี และแน่นอนทีสุด การทำนายโครงสร้างของโปรตีนซึ่งเป็นสารชีวโมเลกุลขนาดใหญ ไม่ได้เกิดจากการคำนวณเพียงครั้งเดียวหรือสองครั้ง แต่นั่นเกิดจากการคำนวณนับครั้งไม่ถ้วนด้วยคอมพิวเตอร์ที่มีประสิทธิภาพสูง นักวิจัยกลุ่มนี้ พยายามค้นหาแนวทางต่างๆ มาใช้ในการทำนายโครงสร้างของโปรตีน อาร์เอ็นเอ หรือแม้แต่ดีเอ็นเอเองก็ตาม เราเรียกงานวิจัยแนวนี้ว่า structural bioinformatics

เมื่อโลกของชีววิทยาผ่านเข้าสู่ยุกจีโนม (genomic era) ไปจนกระทั่งยุกของโปรตีโอม (proteomic era) ความต้องการใช้โปรแกรมคอมพิวเตอร์เพื่อวิเคราะห์ผลการทดลองจากห้องปฏิบัติการมีมากขึ้น ประกอบกับความสามารถของเทคโนโลยีทางวิทยาศาสตร์ที่สามารถผลิตข้อมูลจำนวนมหาศาลได้ในเวลารวดเร็วหรือที่เราเรียกกันว่า high throughput technology ยิ่งทำให้ bioinformaticians พยายามค้นหาวิธีการใหม่ แนวคิดใหม่ เพื่อสร้างเป็นโปรแกรมคอมพิวเตอร์ออกมาสนองตอบความต้องการของนักชีววิทยา หนึ่งในบรรดา high throughput technology ที่มาแรงมากๆ ก็คือ microarray ซึ่งจัดได้ว่าเป็นการเปิดมิติใหม่ของการศึกษา proteomics และ transcriptomics เลยทีเดียว ทำให้การศึกษา bioinformaticians อีกกลุ่มหนึ่งที่มีความเชี่ยวชาญทางด้านสถิติวิเคราะห์ หันมาสนใจวิธีการวิเคราะห์ข้อมูล และในที่สุดก็เกิดเป็นสาขาหนึ่งของงานวิจัยทาง bioinformatics ที่เรียกว่า microarray analysis

อีกสาขาหนึ่งของ bioinformatics ที่กำลังมาแรงในปัจจุบัน คือ system biology นักวิจัยกลุ่มที่ทำงานด้านนี้ สนใจศึกษาการทำงานของสารชีวโมเลกุล (โดยส่วนมากก็มักจะเป็นโปรตีนหรือยีนต่างๆ) อย่างเป็นระบบ เราอาจเรียกว่า system biology เป็นการจำลองสรีรวิทยาในระดับเซลล์ (cellular physiology) เข้ามาไว้ในคอมพิวเตอร์นั่นเอง นักวิจัยกลุ่มนี้จะใช้ความรู้ทาง kinetics เข้ามาช่วยในการสร้าง model ของระบบที่เขาสนใจศึกษา เช่น การ model metabolic pathway ในการย่อยสลายไขมัน เป็นต้น

นอกจากนี้ ยังมีงานวิจัยรูปแบบอื่นๆ อีกมากมายที่เป็นงานวิจัยระดับแนวหน้าของ bioinformatics ที่เมืองไทยยังขาดแคลนแหล่งความรู้และนักวิจัยในสาขานั้นๆ อยู่ อาทิเช่น mathematical modelling, metabolomics, interactomics, functional genomics หรือแม้แต่ metagenomics และอีกมากมายหลายสาขาที่มีความเกี่ยวข้องกับ bioinformatics ซึ่งผมจะพยายามนำมาเสนอให้ท่านผู้อ่านได้ทำความรู้จักกันในครั้งต่อๆ ไปครับ

Python Programming

Condition Statement and Function
ประพัฒน์ สุริยผล

ครั้งนี้ เราจะเขียนโปรแกรมต่อจากครั้งที่แล้ว เราต้องการให้โปรแกรมของเราทำงานได้ซับซ้อนขึ้น สามารถคำนวณได้ทั้งพื้นที่สี่เหลี่ยมและสามเหลี่ยม โดยถามผู้ใช้ว่าต้องการคำนวณพื้นที่อะไร ก่อนที่จะคำนวณ

เราพอจะคิดขั้นตอนการทำงานได้คร่าวๆ ดังนี้ ถามผู้ใช้ว่าต้องการคำนวณพื้นที่ของอะไร ถ้าผู้ใช้กด R แสดงว่าต้องการคำนวณสี่เหลี่ยม ถ้าผู้ใช้กด T แสดงว่าต้องการคำนวณสามเหลี่ยม

จากกระบวนการคิดข้างต้นเราพอจะนำมาเขียนเป็น python code ได้ดังนี้

choice = raw_input("Which type of area you would like to calculate (R/T)? -> ")
if choice == "R":
____calculateRectangle
if choice == "T":
____calculateTriangle

สังเกตรูปแบบการใช้งานคำสั่ง if คำสั่ง if จะตามด้วยเงื่อนไขที่ต้องการใช้ในการเปรียบเทียบ สัญลักษณ์ที่ใช้ในการเปรียบเทียบส่วนใหญ่จะเป็นดังนี้

== หมายถึง เท่ากับ (สังเกตว่า python ใช้เครื่องหมายเท่ากับสองตัวติดกัน เพื่อให้แตกต่างจากการใช้เครื่องหมายเท่ากับอันเดียว ที่หมายถึงการกำหนดค่า)

!= หมายถึง ไม่เท่ากับ

> หมายถึง มากกว่า

< หมายถึง น้อยกว่า

<= หมายถึง น้อยกว่าหรือเท่ากับ

>= หมายถึง มากกว่าหรือเท่ากับ

หลังจากพิจารณา code ที่เขียนไว้ด้านบนแล้ว นึกได้ว่า อาจจะไม่สะดวกกับผู้ใช้ที่จะต้องกด R หรือ T ตัวใหญ่ เพื่อใช้งานโปรแกรม บางครั้ง ผู้ใช้อาจจะกด r หรือ t ตัวเล็ก ก็ได้ ซึ่งถ้าหากเราไม่แก้ไขโปรแกรม การที่ผู้ใช้กดปุ่ม r หรือ t ตัวเล็ก จะไม่ตรงเงื่อนไขใดๆ เลย โปรแกรมก็จะไม่ทำงานตามที่ผู้ใช้ต้องการ เราจึงแก้ไข code เป็นดังนี้

choice = raw_input("Which type of area you would like to calculate (R/T)? -> ")
if choice == "R" or choice == "r":
____calculateRectangle
if choice == "T" or choice == "t":
____calculateTriangle

จะเห็นว่าเราสามารถเพิ่มเงื่อนไขได้ โดยตัวเชื่อมที่สามารถใช้ส่วนใหญ่ คือ
(1) and หมายถึง เงื่่อนไขทั้งสองข้างของ and ต้องเป็นจริง ผลลัพธ์ของเงื่อนไขจึงจะออกมาเป็นจริง
(2) or หมายถึง เงื่อนไขข้างใดข้างหนึ่งของ or เป็นจริงก็จะทำให้ผลลัพธ์ของเงื่อนไขเป็นจริง

เมื่อเราได้ค่าดังนี้ เราก็นำส่วนที่เราเขียนเอาไว้มาแทนตรงตำแหน่งที่เราวางไว้ อย่างเช่น การคำนวณสี่เหลี่ยม

choice = raw_input("Which type of area you would like to calculate (R/T)? -> ")
if choice == "R" or choice == "r":
____print "Program to calculate Area of Rectangle"
____base = raw_input("Please enter base -> ")
____height = raw_input("Please enter height -> ")
____base_int = int(base)
____height_int = int(height)
____print "Rectangle area of base", base, "and height", height, "is", base_int*height_int
if choice == "T" or choice == "t":
____calculateTriangle

แบบฝึกหัด

1. แก้ไขโปรแกรม ให้ครบถ้วน โดยเพิ่มส่วนของการคำนวณสามเหลี่ยมเข้าไป แล้วลองรันโปรแกรมดูว่าทำงานได้อย่างที่ต้องการหรือเปล่า

2. เพิ่มส่วนของการคำนวณพื้นที่วงกลมเข้าไป สูตรพื้นที่วงกลมคือ 3.14159 * radius^2 โดยถ้าผู้ใช้กดปุ่ม C ตัวเล็กหรือตัวใหญ่ให้คำนวณพื้นที่วงกลมออกมา ข้อสังเกตคือการคำนวณพื้นที่วงกลม ต้องการแค่รัศมีอย่างเดียว

3. เพื่อให้โปรแกรมดูดีขึ้น ให้พิมพ์บอกผู้ใช้ว่า Please type R, T or C to choose the type of area to calculate ถ้าหากว่าผู้ใช้ไม่ได้กดปุ่มดังกล่าว แต่ถ้าหากผู้ใช้กดปุ่มดังกล่าว และคำนวณผลได้ตามปกติ ก็ไม่ต้องพิมพ์ข้อความนี้บอกผู้ใช้ (hint:- ใช้เครื่องหมาย != ในเงื่อนไข)

Function

หลังจากนั่งเขียนโปรแกรมหาพื้นที่รูปร่างต่างๆ มาสองครั้ง อาจารย์จอมจู้จี้ยังอยากให้เพิ่มความสามารถของโปรแกรมขึ้นไปอีก ด้วยการหาพื้นที่สี่เหลี่ยมคางหมู (trapezoids)

สูตรการหาพื้นที่สี่เหลี่ยมคางหมูคือ 1/2 * ผลบวกของด้านคู่ขนาน * ความสูง

ด้านคู่ขนานใช้คำว่า parallel base

ตัวอักษรที่จะใช้เลือก ตอนแรกคิดว่าจะให้เป็น T แต่ว่า T ถูกใช้ไปแล้วกับรูปร่างสามเหลี่ยม จึงเป็น Z แทน

ทำไปทำมาโปรแกรมเริ่มจะยาว ตรงส่วน if condition ก็เริ่มจะอ่านไม่ง่ายแล้ว เพราะอยู่กระจัดกระจาย

น่าจะมีวิธีที่ทำให้โปรแกรมอ่านง่ายขึ้น ยังจำได้ถึง pseudocode ที่เคยกล่าวถึง

choice = raw_input("Which type of area you would like to calculate (R/T)? -> ")
if choice == "R":
____calculateRectangle
if choice == "T":
____calculateTriangle

ถ้าส่วนในการคำนวณพื้นที่ต่างๆ เขียนไว้แค่นั้นได้ก็คงจะดี ข่าวดีก็คือเราสามารถทำได้ ด้วยการกำหนด function แยกต่างหากออกไป ดังตัวอย่าง

def calculateRectangleArea():
____print "Program to calculate Area of Rectangle"
____base = raw_input("Please enter base -> ")
____height = raw_input("Please enter height -> ")
____base_int = int(base)
____height_int = int(height)
____print "Rectangle area of base", base, "and height", height, "is", base_int*height_int

choice = raw_input("Which type of area you would like to calculate (R/T)? -> ")
if choice == "R":
____calculateRectangleArea()
if choice == "T":
____calculateTriangleArea()

ให้สังเกตการสร้างฟังก์ชัน เราสามารถทำได้ด้วยการใช้ keyword def ตามด้วยชื่อฟังก์ชัน และ () คำสั่งของฟังก์ชันกำหนดอยู่ในบล็อคที่ย่อหน้าไว้ วิธีการเรียกใช้ฟังก์ชัน ทำได้โดยพิมพ์ชื่อฟังก์ชันตามด้วย ()

จุดสำคัญอีกสิ่งหนึ่งคือนิยามของฟังก์ชันจะต้องมาก่อนการเรียกใช้ ฟังก์ชัน เพราะฉะนั้น เราจะนำเอา
def calculateTriangleArea มาไว้ด้านล่างไม่ได้ ต้องเอาไว้ก่อนที่จะมีการเรียกใช้

ด้วยการแยกฟังก์ชันออกมา ทำให้เราเห็นโครงสร้างของ if condition ได้ง่ายขึ้น เราเพิ่มส่วนในการคำนวณพื้นที่สี่เหลี่ยมคางหมูได้ง่ายขึ้น

แบบฝึกหัด

แปลงส่วนที่คำนวณพื้นที่ทั้งหมด ให้แยกออกมาเป็นฟังก์ชัน เพื่อให้โปรแกรมอ่านง่ายและแก้ไขได้ง่ายขึ้น เมื่อเสร็จสิ้นในส่วนนี้ โปรแกรมควรจะสามารถคำนวณพื้นที่สี่เหลี่ยม, สามเหลี่ยม, วงกลม และสี่เหลี่ยมคางหมูได้

Focus on Bioinfo Researches

Bioinformatics Researches in Science and Nature
ภัสสร วรรณพินิจ

สวัสดีปีใหม่ 2553 ค่ะ พบกันอีกเช่นเคยนะคะใน "Focus on Bioinfo Researches" ซึ่งในครั้งนี้ดิฉันก็ขอหยิบยกเรื่องราวสนใจจากงานวิจัยต่างๆ ที่ได้รับการตีพิมพ์ในวารสาร Nature และ Science ตลอดช่วงเดือนสุดท้ายของปี 2552 มาเล่าสู่กันฟังนะคะ

มาเริ่มกันที่เรื่องของงานวิจัยเกี่ยวกับ structural bioinformatics ซึ่งเป็นสาขาที่ศึกษาโครงสร้างของโปรตีนเพื่อนำไปสู่ความเข้าใจในกระบวนการทำงานของโปรตีนชนิดต่างๆ ค่ะ เอาเป็นว่า เรามาเริ่มต้นกันที่วารสาร Science ก่อนนะคะ ในเดือนธันวาคมที่ผ่านมา วารสาร Science ตีพิมพ์งานวิจัยเรื่อง "Structure of monomeric yeast and mammalian Sec61 complexes interacting with the translating ribosome" ซึ่งเกี่ยวข้องกับการศึกษาโครงสร้างของ Sec61 complex ซึ่งทำหน้าที่เป็น protein-conduction channel (PCC) สำหรับ secretory protein และ membrance protein ในเซลล์พวกยูคาริโอต (eukaryotic cell) คณะวิจัยได้ศึกษาโครงสร้างของ ribosome-Sec61 complexes โดยใช้ cryo-electron microscopy technique แล้วจึงสร้าง molecular model ของโปรตีนชนิดนี้โดยใช้ homology docking เมื่อนำมาแปรผลรวมกับข้อมูลทางชีววิทยาของโปรตีนชนิดนี้แล้ว ก็จะทำให้ทราบว่าแต่ละ subunit ของ complex protein ชนิดนี้ทำงานเป็นอิสระต่อกันในกระบวนการ cotranslational protein translocation

อีกงานหนึ่งที่น่าสนใจไม่แพ้กันคือ "Structure of the LKB1-STRAND-MO25 complex reveals an allosteric mechanism of kinase activation" ซึ่งเป็นการศึกษาโครงสร้างของ heterotrimeric LKB1-STRANDalpha-MO25alpha complex โดยใช้เทคนิค X-ray crystallography ร่วมกับข้อมูลทางชีวเคมีที่บ่งชี้ระดับการแสดงออกของ adenosine monophosphate-activated protein kinase (AMPK) ซึ่งการทำงานของ AMPK จะถูกควบคุมโดย protein kinase ที่ชื่อว่า LKB1 tumor suppressor ผลของการศึกษานี้ช่วยในการทำความเข้าใจกระบวนการควบคุมการทำงานของ LKB1 tumor suppressor โดย protein STRANDalpha และ STRANDalpha-MO25alpha complex นอกจากนี้ คณะวิจัยยังคาดว่าผลการศึกษานี้จะช่วยในการศึกษาการทำงานของ protein kinase ชนิดอื่นๆ รวมไปถึงความสัมพันธ์ของ LKB1 protein function กับพัฒนาการของมะเร็งในอีกหลายชนิดด้วยค่ะ

สำหรับวารสาร Nature ในเดือนธันวาคมที่ผ่านมานี้ มีการตีพิมพ์ผลการศึกษาเรื่อง "Encounter and extrusion of an intrahelical lesion by a DNA repair enzyme" ซึ่งเป็นงานที่เกี่ยวข้องกับโครงสร้างของ MutM (base-excision DNA repair enzyme) ในขณะที่มีการจับกับ damaged nucleobase, 8-oxoguanine (oxoG) การเปรียบเทียบโครงสร้างที่ได้นี้กับ sequence-matched structure ที่มีเบส G แทนที่ oxoG และการใช้ computer simulation ในการศึกษาพลังงานอิสระ (free energy) ของโครงสร้างเหล่านี้ ช่วยให้เราเข้าใจกระบวนการทำงานของ MutM emzyme ได้ดีขึ้น โดยเฉพาะในส่วนที่เกี่ยวข้องกับการตรวจหา genotoxic damage ใน DNA sequence นอกจากนี้ ยังมีงานวิจัยเรื่อง "Rational design of a structural and functional nitric oxide reductase" ซึ่งมีเนื้อหาเกี่ยวกับผลการออกแบบโครงสร้างของ nitric oxide reductase การออกแบบโครงสร้างโปรตีนชนิดนี้ ใช้วิธี in silico structure โดยคำนึงถึงทั้งทางด้านโครงสร้างโมเลกุลและหน้าที่ของโปรตีนในการตรวจสอบความถูกต้องของ in silico model นี้ คณะผู้วิจัยยังได้เปรียบเทียบ model กับ crysallographic structure และพบว่า minimized structure ของ designed protein สอดคล้องกับที่พบจาก crystallograhric structure

ต่อกันที่งานวิจัยทางด้าน genomics บ้างนะคะ สำหรับวารสาร Science ได้ตีพิมพ์ผลการศึกษาเรื่อง "Mapping human genetic diversity in Asia" เพื่อเข้าใจถึงความหลากหลายและความสัมพันธ์ทางพันธุกรรมของประชากรในแถบนี้ ในการศึกษา มีการใช้กระบวนการทางสถิติต่างๆ เช่น Bayesian statistic และ priniciple component analysis (PCA) ในการจำแนกประชาการกลุ่มต่างๆ จากข้อมูล SNPs การใช้เครื่องมือทางเทคโนโลยีสารสนเทศน์ศาตร์ในการจัดเก็บและวิเคราห์ข้อมูล รวมไปถึงการใช้ phylogeny ในการศึกษาความสัมพันธ์ของประชากรแต่ละกลุ่ม เป็นที่น่าภูมิใจอย่างหนึ่งที่งานวิจัยอันเกิดจากความร่วมมือนานาชาติชิ้นนี้ มีข้อมูล SNPs ของประชากรไทยและมีนักวิทยาศาตร์ไทยเข้าร่วมในโครงการนี้ด้วย และเป็นที่น่าสนใจว่าผลการวิจัยชิ้นนี้ บ่งชี้ถึงความสัมพันธ์ระหว่าง genetic ancestry, linguistic affiliation และภูมิศาสตร์ของประชากรในแถบ Eastern Asia

นอกจาก genomics แล้ว ในวารสาร Nature ยังมีงานวิจัยที่น่าสนใจเกี่ยวกับใช้ metagenome analysis ในการศึกษา noncoding RNAs (ncRNAs) structure ของ environmemtal bacteria งานวิจัยชิ้นนี้มุ่งเน้นศึกษา ncRNAs ขนาดใหญ่ ที่มีความคล้ายคลึงกับ ribozyme ทั้งในด้านขนาดและความซับซ้อน ซึ่งผลการวิจัยทำให้เกิดการพบโครงสร้างแบบใหม่ของ ncRNAs ซึ่งน่าจะนำไปสู่การค้นพบ function ใหม่ๆ ของ ncRNAs ในหัวข้อเรื่อง "Exceptional structured noncoding RNAs revealed by bacterial metagenome analysis"

และเมื่อพูดถึง genomics พี่ๆ เพื่อนๆ หลายคนก็คงจะนึงถึง proteomics เช่นกัน ในเดือนที่ผ่านมา Science ได้ตีพิมพ์งานวิจัยเรื่อง "Cell-specific information processing in segregating populations of Eph receptor ephrin–expressing cells" ซึ่งเป็นการศึกษา cell-specific signaling network ที่เกี่ยวข้องกับการจัดเรียงตัวของเซลล์ต่างๆ โดยใช้เทคนิค quantitative mass spectrometric analysis ในการสร้าาง proteomic profile ของประชากรเซลล์ผสมที่มีการแสดงออกของ Eph receptors หรือ transmembrane ephrin ligand นอกจากนี้ คณะผู้วิจัยยังได้ใช้ข้อมูลดังกล่าวในการเสนอ cell-specific network models ของ contact-initiated signals ที่เกิดจาก interaction ของเซลลล์ต่างๆ

นอกจากงานต่างๆ ข้างต้นที่สามารถจัดเข้าสาขาต่างๆ ทาง bioinformatics แล้ว ก็ยังมีงานวิจัยอื่นๆ ที่น่าสนใจในเดือนธันวาคมค่ะ ในเดือนนี้ Science ได้ตีพิมพ์การศึกษา self-assembly ของ filamentous molecular structure ผ่านทางการวิเคราะห์ kinetic equations ของโมเลกุลเหล่านี้ คณะผู้วิจัยคาดว่า ผลการศึกษาในครั้งนี้จะนำไปสู่ความเข้าใจในกระบวนการรวมตัวกันของ filamentous molecular subunits ในการสร้าง amyloid ไปจนถึงพัฒนาการของ mammalian prion disease งานนี้ถูกตีพิมพ์ลงในหัวข้อเรื่อง "An analytical solution to the kinetics of breakable filament assembly" นอกจากนี้นะคะ ส่วนตัวดิฉันรู้สึกภูมิใจมากค่ะ ที่ได้เห็นงานวิจัยของนักวิจัยไทย ได้รับการตีพิมพ์ลงในวารสาร Science ในชื่องานวิจัยว่า "Positively selected G6PD-Mahidol
mutation reduces Plasmodium vivax density in southeast Asians" คณะผู้วิจัยศึกษาความสัมพันธ์ระหว่าง Glucose-6-phosphate dehydrogenase (G6PD) deficiency allele โดยเฉพาะ G6PD-Mahidol4874 variant กับการเกิดโรคมาลาเรียโดยเชื้อ Plasmodium vivax และ Plasmodium falciparum ในประชากรไทย ผลจากการศึกษาโดยกระบวนการ genetic association study พบว่า G6PD-Mahidol4878 variant ส่งผลต่อให้เกิดการลดลงของเชื้อ P. vivax ในไทย แต่ไม่ส่งผลใดๆ ต่อเชื้อ P. falciparum สำหรับในวารสาร Nature มีการตีพิมพ์งานวิจัยที่ใช้ phylogenetic tree ในการสร้าง encyclopedia ของ bacteria และ archaea ให้ครอบคลุมความหลากหลายของสิ่งมีชีวิตทั้งสองชนิดนี้ ถ้าท่านผู้อ่านสนใจต้องไปติดตามอ่านในงานวิชัยเรื่อง "A phylogeny-driven genomic encyclopaedia of bacteria and archaea" ค่ะ

นอกจากงานวิจัยแล้วดิฉันยังมี บทความและข่าวที่น่าสนใจในแวดวง bioinformatics มาฝากกันด้วยค่ะ เริ่มกันที่ความเคลื่อนไหวเกี่ยวกับ human genome sequence กันก่อนนะคะ ถึงแม้ว่าโครงการ Human Genome Project จะสิ้นสุดลงแล้วและเราก็ได้ reference sequence ของมนุษย์แล้วก็ตาม การทำความเข้าใจในเรื่อง function ของ gene ต่างๆ และการระบุถึงบริเวณต่างๆ ใน human genome ที่แสดงถึงความหลากหลายของประชาการมนุษย์ในโลก ซึ่งจะช่วยให้ human genome sequence สามารถเป็นตัวแทนที่ถูกต้องประชากรกลุ่มต่างๆ อันจะเป็นตัวจักรสำคัญในการศึกษาทางด้าน human genetics โดยเฉพาะในส่วนที่เกี่ยวกับการค้นหายีนก่อโรคต่างๆ รายละเอียด ความคิดเห็นและความเคลื่อนไหวต่างๆ ที่เกี่ยวข้องกับเรื่องนี้ สามารถติดตามอ่านได้ที่ "Human genomics: The Genome Finishers"

มาถึงแวดวงทางด้าน protein srtructure กันบ้างนะคะ วารสาร Nature เสนอข่าวที่น่าตกใจมากเกี่ยวกับการ falsify ข้อมูล protein strucuture ของโปรตีนจำนวน 11 ชนิด ซึ่งจะก่อให้เกิดปัญหาเกี่ยวกับการนำข้อมูลพื้นฐานเหล่านี้ไปใช้ในงานอื่นๆ โดยเฉพาะงานที่เกี่ยวกับการออกแบบยารักษาโรค พี่ๆ และเพื่อนๆ ที่สนใจรายละเอียดในเรื่องนี้สามารถอ่านได้ที่ "Fraud rocks protein community" ค่ะ

สุดท้ายนี้ก็เช่นเคยนะคะ หากท่านผู้อ่านคนใด อยากให้ดิฉันหยิบงานวิจัยเกี่ยวกับหัวข้อใดเป็นพิเศษมาเล่าเพิ่มเติม หรือมีข้อแนะนำประการใดก็สามารถ post ไว้ในกระทู้ข้างล่างนี้นะคะ ทั้งนี้ก็เพื่อจะได้ปรับปรุงให้ดียิ่งขึ้นค่ะ