Saturday, October 30, 2010

Python Programing

Reverse complement สาย DNA ด้วย Python (ภาคจบ)


ประพัฒน์ สุริยผล


ภาพยนตร์ส่วนใหญ่มักจะจบกันที่ไตรภาค แต่ reverse complement ของเราผ่านไปแล้ว 3 ภาคยังจบไม่ลงสักที เราก็จะมาจบกันที่ครั้งนี้ครับ หวังว่าภาคจบนี้ เราคงได้เรียนรู้อะไรกันอีกพอสมควร


Reverse sequence revisited


ผมมีจังหวะแวะเข้าไปดู blog ของ THAI Bioinformatics e-magazine แล้วพบว่ามี comment มาจากคุณ Tanawut แนะนำให้ผมใช้ trick หนึ่งของ Python ซึ่งผมก็ลืมนึกถึงไปเลย จึงขออนุญาตเอามาลงในครั้งนี้ด้วยครับ


code สุดท้ายที่เราเขียนไว้สำหรับ reverse_sequence เป็นดังด้านล่าง

def reverse_sequence(dna):

____return ''.join(reversed(list(dna)))

แต่ code ที่คุณ Tanawut แนะนำมาจะเป็น


def reverse_sequence(dna):

____return dna[::-1]

สั้นลงไปอีก แต่อาจจะสับสนเล็กน้อย สำหรับคนที่ไม่คุ้นเคยกับ Python ตัวผมเองคิดว่า code นี้สั้นและเป็นสไตล์ Python แท้ๆ เลยครับ โดยใช้คุณสมบัติของ string ใน Python ที่สามารถมองเป็น list ได้ ต้องขอบคุณคุณ Tanawut มากครับ


Slicing


เรามาทำความเข้าใจเรื่อง slicing กันเล็กน้อย จากตัวอย่างครับ


>>> a = ['a', 'b', 'c', 'd']

>>> a

['a', 'b', 'c', 'd']

>>> a[0:2]

['a', 'b']

>>> a[:2]

['a', 'b']

>>> a[2:4]

['c', 'd']

>>>a[2:]

['c', 'd']


การ slicing คือการดึงข้อมูลของ list ในส่วนที่เราต้องการ จากตัวอย่าง เราสร้างตัวแปร a ให้เป็น list ของตัวอักษร เมื่อเราต้องการใช้ slicing ให้เรากำหนดตำแหน่งที่เราต้องการภายในวงเล็บแบบสี่เหลี่ยม [] โดยกำหนดตำแหน่งเริ่มต้น และตำแหน่งสุดท้าย


อย่างเช่น a[0:2] แปลว่า เราต้องการ slicing ที่ตำแหน่ง 0 (ตำแหน่งแรกสุด) ไปจนถึงก่อนตำแหน่งที่ 2 (ก็คือตัว 'c' เพราะเรานับจาก 0) สิ่งเราได้มาก็จะเป็น list ของ ['a', 'b']


ถ้าหากเราละไว้ ไม่ใส่ตัวเลขที่ตำแหน่งเริ่มต้น ค่าปกติก็จะเป็น 0 เพราะฉะนั้น คำสั่ง a[:2] จึงให้คำตอบเหมือนกัน a[0:2] อ่านว่า เราต้องการ slicing list ตั้งแต่ตำแหน่งเริ่มต้นถึงก่อนตำแหน่งที่ 2


ในทำนองเดียวกัน เราสามารถละตำแหน่งสุดท้ายได้ ซึ่งจะเป็นการบอกว่า เราต้องการ slicing ไปจนถึงตัวสุดท้ายของ list เพราะฉะนั้น ค่าของ a[2:4] และ a[2:] จึงเหมือนกัน


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


>>> a = ['a', 'b', 'c', 'd']

>>> b = a

>>> c = a[:]

>>> a

['a', 'b', 'c', 'd']

>>> b

['a', 'b', 'c', 'd']

>>> c

['a', 'b', 'c', 'd']

จากตัวอย่าง จะเห็นว่าตัวแปร a, b, c มีค่าเหมือนกันหมดถูกไหมครับ แต่เราสร้างตัวแปร b กับ c คนละแบบกัน


ตัวแปร b เรากำหนดให้เท่ากับตัวแปร a เลย แต่ตัวแปร c เราให้เป็น copy ของตัวแปร a


ให้ลองนึกว่า list ก็คือกล่องใบนึงนะครับ เรามีกล่องที่แปะชื่อเอาไว้ว่าชื่อ a ในกล่อง a มีลูกบอลอยู่ 4 ลูก เขียนไว้ว่า a, b, c และ d


พอเรากำหนดให้ b = a ก็เหมือนกับว่า เราเอาชื่อ b ไปแปะไว้ที่กล่องเดิมนั่นแหละครับ กล่องนั้นจึงมีชื่อทั้ง a และ b โดยที่ลูกบอลในกล่องก็เป็นชุดเดียวกัน


แต่ถ้าเรากำหนดให้ c = a[:] อันนี้ เหมือนกับว่า เราหากล่องมาอีกกล่องครับ ข้างในมีลูกบอล 4 ลูก เขียนว่า a, b, c และ d เช่นกัน และกล่องนี้แปะชื่อว่า c ถ้าดูที่ลูกบอลในกล่องจะพบว่าทั้งกล่อง a, b และ c เหมือนกันหมด


ความแตกต่างจะอยู่ตรงนี้ครับ ถ้าเราเปลี่ยนแปลงของในกล่อง a ของในกล่อง b ก็จะเปลี่ยนไปด้วย เพราะมันคือกล่องใบเดียวกัน นึกออกไหมครับ ในขณะที่ของในกล่อง c ไม่ถูกกระทบไปด้วย ดูตัวอย่างนะครับ


>>> a[0] = 'e'

>>> a

['e', 'b', 'c', 'd']

>>> b

['e', 'b', 'c', 'd']

>>> c

['a', 'b', 'c', 'd']

เรื่องนี้สำคัญนะครับ โปรแกรมทำงานผิดพลาดมีสาเหตุสำคัญจากการไม่เข้าใจเรื่องของ list ในลักษณะกล่องนี่ล่ะครับ ทำให้เราเปลี่ยนค่าไปโดยที่เราไม่ตั้งใจ


ทุกครั้งที่เราเปลี่ยนค่าในกล่อง ไม่ว่าจะเป็นตัวแปร a หรือ b จะส่งผลกระกบทั้งคู่ เพราะทั้งสองชื่อหมายถึงกล่องเดียวกัน เราสามารถแยกไม่ให้มีผลกระทบได้ ก็คือใช้วิธี copy กล่องแบบที่เราทำกับตัวแปร c ครับ เราจะมาลองกับตัวแปร b กันอีกทีครับ


>>> b = a[:]

>>> a[-1] = 'f'

>>> a

['e', 'b', 'c', 'f']

>>> b

['e', 'b', 'c', 'd']

>>> c

['a', 'b', 'c', 'd']

เราเริ่มต้นด้วยคำสั่ง b = a[:] เท่ากับว่าเราเอากล่องมาใหม่อีกหนึ่งใบ ข้างในมีลูกบอลเหมือนที่ a มีอยู่ในขณะนี้ และแกะชื่อ b ที่เดิมแปะอยู่กับกล่องเดียวกันกับ a มาแปะเอาไว้ที่กล่องใหม่นี้ เท่ากับว่าตอนนี้เรามี 3 กล่องที่ไม่เกี่ยวข้องกันแล้ว จากนั้น เราลองเปลี่ยนค่า item ตัวสุดท้ายของตัวแปร a โดยเรากำหนดค่า index เป็น -1 หมายถึง นับจากข้างหลังครับ -1 หมายถึงตัวสุดท้าย -2 หมายถึงตัวก่อนสุดท้าย ไล่ไปเรื่อย นึกออกไหมครับ หลายครั้งการใช้ index ในลักษณะนี้ก็จะทำให้เราสะดวกมากขึ้น เพราะเราไม่ต้องรู้ว่า list นี้ยาวเท่าไหร่ ตัวสุดท้ายอยู่ตำแหน่งอะไร


เรามาลองดูค่าสุดท้ายของตัวแปรแต่ละตัวกันครับ ตัวแปร a ก็จะเป็นตัวแปรที่มีการเปลี่ยนแปลงทั้งตัวแรกและตัวสุดท้าย ตัวแปร b มีแค่ตัวแรกที่เป็น 'e' เพราะว่าเรา copy จากตัวแปร a หลังจากที่เราเปลี่ยนตัวแรกไปแล้ว ส่วนตัวแปร c ไม่มีการเปลี่ยนแปลงใดๆ


เรามาถึง trick สุดท้ายของการทำ slicing ครับ คือนอกจากเรากำหนดว่าเราจะ slicing จากไหนถึงไหนได้แล้ว เรายังกำหนด step ในการอ่านค่า slicing ได้ด้วย งง อีกแล้วครับ ดูตัวอย่างดีกว่า


>>> c[0:2:1]

['a', 'b']

>>> c[2:0:-1]

['c', 'b']

>>> c[::-1]

['d', 'c', 'b', 'a']

>>> c[::2]

['a', 'c']

>>> c[::-2]

['d', 'b']

ผมเลือกใช้ตัวแปร c นะครับ เพราะค่าเรียงจาก a ไป d ดูตามง่ายกว่า


คำสั่งแรก c[0:2:1] จะให้ผลไม่ต่างจาก c[0:2] ที่เราเคยเรียกใช้กัน เพราะว่าค่าปกติของ step ก็คือ 1 อยู่แล้ว Python ก็จะ slicing จากตำแหน่งที่ 0 แล้วก็เพิ่มทีละ 1 ไปจนถึงก่อนตำแหน่งสุดท้ายที่กำหนด


มาดูที่คำสั่งถัดไป c[2:0:-1] ครั้งนี้ เรากำหนด step เป็น -1 (ตัวเลขสุดท้ายหลังโคลอน) โดยเริ่มต้น slicing ที่ตำแหน่งที่ 2 คือตัว 'c' ด้วย step ติดลบ ตำแหน่งถัดไปจึงเป็น 1 ก็คือตัว 'b' ตำแหน่งถัดไปคือ 0 แต่ว่า slicing จะดึงค่ามาจนถึงก่อนตำแหน่งสุดท้าย จึงไม่รวมตำแหน่งที่ 0 มา คำตอบที่ได้จึงเป็น ['c', 'b']


ถ้าหากเราละค่าตำแหน่ง เช่นเรียกใช้ c[::1] ก็จะไม่ต่างอะไรจาก c[:] เพราะค่า step 1 เป็นค่าปรกติอยู่แล้ว แต่ว่าถ้าเราใช้ c[::-1] เราก็จะได้ copy ของ list ที่ reverse เพราะจะวิ่งจากตัวสุดท้ายย้อนมาตัวหน้าสุด คุณสมบัติอันนี้ น่าสนใจมากครับ


เราสามารถกำหนด step ที่ไม่ใช้ 1 และ -1 ได้ ดังตัวอย่างครับ ผมให้เป็นหน้าที่ของท่านผู้อ่านที่จะลองไล่ดูนะครับว่า ถ้า step เป็น 2 และ -2 แล้วได้คำตอบดังตัวอย่างได้อย่างไร


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


>>> b = 'abcd'

>>> b[0:2]

'ab'

>>> b[:2]

'ab'

>>> b[2:4]

'cd'

>>> b[2:]

'cd'

เพราะฉะนั้น ถ้าเราต้องการ reverse ตัวแปร string เราทำอย่างไรครับ ก็เพียงแค่ใช้คำสั่งแบบที่คุณ Tanawut แนะนำครับ


reverse_string = b[::-1]

เรามาต่อกันที่ function complement ที่ครั้งที่แล้วเราปรับปรุงด้วยการใช้ dictionary ช่วย ซึ่งโปรแกรมครั้งที่แล้วมีจุดบอดอยู่สองสามแห่ง หนึ่งคือ key ของ dictionary ที่เราใช้เป็นเบสตัวเล็กทั้งหมด ถ้าหากเราได้ข้อมูลสาย DNA เป็นเบสตัวใหญ่ เช่น ATGC แทนที่จะเป็น atgc โปรแกรมของเราก็จะทำงานผิดพลาด อันที่สองคืออาจจะมีเบสแปลกๆ เข้ามาได้เช่น N ซึ่งโปรแกรมของเราไม่รองรับ สามคือถ้าหากเราต้องการคงสภาพตัวเล็กตัวใหญ่ไว้ เช่นถ้าเบสเข้ามาเป็น A เราก็ต้องได้ค่า complement เป็น T แต่ถ้าเข้ามาเป็น a ให้คืนค่าเป็น t เราก็ต้องมาปรับโปรแกรมกันพอสมควร จากของเดิม


def complement(dna):

____complementary_dict = {'a':'t', 't':'a', 'g':'c', 'c':'g'}

____result = ''

____for base in dna:

________result = result + complementary_dict[base]

____return result


เราต้องเพิ่ม complementary_dict เป็นดังนี้ครับ

complementary_dict = {'a':'t', 't':'a', 'g':'c',\

______________________'c':'g', 'A':'T', 'T':'A',\

______________________'G':'C', 'C':'G', 'n':'n',\

______________________'N':'N'}


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


ตอนนี้เรามาลองดูว่า นอกจาก dictionary สำหรับใช้ในงานนี้แล้ว Python มีอะไรให้เราใช้อีกบ้าง เนื่องจากเราต้องการเปลี่ยนค่าใน string เมื่อไปดูคู่มือ Python พบว่า Python เตรียมคำสั่ง translate เราไว้ให้เราใช้แล้ว


>>> a = 'aabbccdd'

>>> import string

>>> table = string.maketrans('ab', 'ef')

>>> a.translate(table)

'eeffccdd'

การใช้งาน เริ่มต้นจากการเตรียมตารางสำหรับแปลงค่า วิธีง่ายที่สุดคือเรียกใช้คำสั่ง maketrans ใน module string โดยเรา import module string เข้ามา แล้วเรียกใช้ดังตัวอย่าง พารามิเตอร์ที่เราส่งไปให้คำสั่ง maketrans จะมีสองค่า ค่าแรกจะเป็นค่าเริ่มต้น ค่าที่สองจะเป็นค่าที่ต้องการเปลี่ยน ความยาวของทั้งสองค่าต้องเท่ากัน เพราะ maketrans จะจับคู่ไล่ไป ดังเช่นในตัวอย่าง เราต้องการจะเปลี่ยนจาก a เป็น e และ b เป็น f จึงส่งค่า 'ab' และ 'ef' ไป


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


ดังนั้น ถ้าเราต้องการนำคำสั่ง translate มาใช้กับ function complement ของเราบ้าง เราก็จะได้ดังนี้


import string

complement_table = string.maketrans('atgcATGC', 'tacgTACG')

def complement(dna):

____return dna.translate(complement_table)


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


function complement อันนี้ ต่างจากอันที่ใช้ dictionary คือมันจะไม่โวยวายถ้าได้ค่าเบสที่มันไม่รู้จัก เพราะคำสั่ง translate จะคืนค่าเดิมกลับมา เช่นในตารางเราไม่ได้ใส่เบส N เพราะว่าค่าที่คืนกลับมาเป็นค่าเดิม


สุดท้ายแล้ว โปรแกรม reverse complement ของเราจะหน้าตาเป็นแบบนี้ครับ


import string

COMPLEMENT_TABLE = string.maketrans('atgcATGC', 'tacgTACG')

def complement(dna):

____return dna.translate(COMPLEMENT_TABLE)


def reverse_sequence(dna):

____return dna[::-1]

dna = raw_input('Please enter DNA sequence -> ')

reversed_dna = reverse_sequence(dna)

reverse_complement_dna = complement(reversed_dna)

print reverse_complement_dna

ถ้าไปเปรียบเทียบกับครั้งแรกที่เราเขียน จะเห็นว่าโปรแกรมสั้นลงไปมาก และอ่านเข้าใจได้ง่ายขึ้นด้วย แต่ถ้าอยากให้สั้นกว่านี้อีก เราก็ตัดนิยาม function ทิ้ง แล้วเรียกใช้แบบ chain of function ได้ตามสะดวกครับ


import string

COMPLEMENT_TABLE = string.maketrans('atgcATGC', 'tacgTACG')

dna = raw_input('Please enter DNA sequence -> ')

print dna.translate(COMPLEMENT_TABLE)[::-1]

เหลือ 4 บรรทัดครับ และยังคงอ่านได้ไม่ยากนัก Python ก็ดีอย่างนี้นี่เอง แล้วพบกันใหม่ฉบับหน้าครับ

R Programing

แนะนำ R Statistical Programing

อภิชาต ศุรธณี และ กิติพร พลายมาศ


สวัสดีครับเพื่อนสมาชิกทุกท่าน เรื่องราวที่ท่านกำลังอ่านนี้ เป็นบท���วามในคอลัมน์ใหม่ ชื่อ R Programing ซึ่งจะไปอยู่ในส่วนของ SOFTWARE & PROGRAMING นั่นเองครับ สำหรับเรื่องราวในส่วนนี้ ผมอยากแนะนำให้เพื่อนสมาชิกได้รู้จักกับ “R-Programing” ��รือที่เรียกย่อๆ กันว่า “R” โดยผมจะเริ่มจากเรื่องง่ายๆ เบาๆ ไปก่อนนะครับ แล้วก็จะค่อยๆ นำเสนอเพื่อนๆ เกี่ยวกับการใช้โปรแกรมไปจนถึงการประยุกต์ในครั้งถัดๆ ไป


ในตอนแรกนี้ ผมจะเล่าประวัติความเป็นมาของ R ให้ฟังสักเล็กน้อยนะครับ และหลังจากนั้นผมจะแนะนำให้รู้จักกับ Bioconductor ซึ่งเป็นโครงการที่พัฒนาแพ็คเกจ (package) สำหรับวิเคราะห์งานทางด้าน bioinformatics และในตอนต่อๆ ไป ผมจะแนะนำวิธีการติดตั้งโปรแกรม R ลงบนเครื่องคอมพิวเตอร์เพื่อการใช้งาน รวมทั้งแนะนำการเขียนสคริป (script) ง่ายๆ สำหรับการคำนวณทางสถิติพื้นฐานต่างๆ ไปจนถึงระดับที่ซับซ้อนยิ่งขึ้น รวมถึงการใช้งานฟังก์ชันและแพ็คเกจต่างๆ ที่เกี่ยวข้องกับงานทางด้าน bioinformatics ให้ผู้อ่านได้ศึกษาและสามารถนำไปประยุกต์ใช้งานได้จริงกับงานวิจัยของตนเองครับ


สำหรับผู้ที่คุ้นเคยกับ commercial softwares อย่างเช่น “MatLab” หรือจะซอฟแวร์จำพวก open source ต่างๆ เช่น “GNU Octave” คงจะสามารถทำความคุ้นเคยกับ R-programming ได้ไม่ยากนัก เพราะต่างก็มีลักษณะการใช้งานที่คล้ายกัน แต่หากใครเป็นมือใหม่ก็ไม่ต้องตกใจไปนะครับ เพราะเราจะมาทำความรู้จักกับ R ไปพร้อมๆ กันแบบ step-by-step แล้วเราจะพบว่า R นั้นสามารถทำอะไรได้หลายๆ อย่าง เช่นเดียวกันกับ commercial software ราคาแพงๆ เลยทีเดียว


รู้จัก R-programing


R เป็นภาษาโปรแกรม (programing language) เพื่อใช้ในการคำนวณเชิงสถิติและแสดงผลภาพกราฟฟิกที่ได้รับการพัฒนาต่อมาจากภาษา S-programing (statistical programing) โดย R นั้นจะอยู่ภายใต้ลิขสิทธิ์ของ GNU general public license ซึ่งเป็นลิขสิทธิ์ประกันความเสรีในการแบ่งปันและแก้ไขซอฟแวร์ โดยเราสามารถดาวน์โหลด R ได้ฟรีที่ http://www.r-project.org/ โดย R สามารถทำงานได้ในหลายระบบปฏิบัติการ ทั้ง Windows Linux และ Mac OS


ในโปรแกรม R นั้นจะประกอบไปด้วยแพ็คเกจและฟังก์ชันทางการคำนวณพื้นฐานมาให้แล้วครับ (หรือที่เรียกว่า R-base) จุดที่น่าสนใจของ R นั้นก็คือ เราสามารถดาวน์โหลดแพ็คเกจพิเศษที่เกี่ยวกับงานที่เราสนใจเพิ่มเติมได้ เช่น แพ็คเกจเกี่ยวกับการวิเคราะห์ microarrays, sequence data, gene ontology annotation หรือแพ็คเกจอื่นๆ ทางวิทยาการคอมพิวเตอร์และสถิติต่างๆ เช่น network analysis, decision tree, support vector machines, principle component analysis ที่ได้รับการพัฒนาและเผยแพร่ไว้แล้วมากมายครับ ในรูปด้านบน จะเป็นตัวอย่างการวาดภาพ network สวยๆ ด้วยฟังก์ชั่น plot ใน R ครับ ในปัจจุบันนั้นมีแพ็คเกจที่ถูกพัฒนาและแจกจ่ายมากถึง 2,500 กว่าแพ็คเกจด้วยกัน เรียกได้ว่าถ้าเราสนใจจะหาแพ็คเกจที่เกี่ยวข้องกับหัวข้องานที่เราสนใจอยู่ ก็มีโอกาสหาดาวน์โหลดมาทดลองใช้งานกันได้สะดวกเลยครับ นอกจากนั้นหากใครที่ได้พัฒนาโปรแกรมของตนเองด้วยภาษา R จนเชี่ยวชาญแล้ว อยากจะแจกจ่ายตัวโปรแกรมของเราให้ผู้อื่นได้ทดลองใช้งานบ้าง ก็สามารถทำเป็นแพ็คเกจของเราเองได้ โดยจะต้องทำตามเงื่อนไขและรูปแบบมาตรฐานที่กำหนดไว้ แล้วส่งไปเผยแพร่ในเว็บไซต์ของ R ได้ครับ ด้วยเหตุนี้เราในฐานะผู้ใช้อาจจะต้องระมัดระวังในการเลือกใช้แพ็คเกจอันใดอันหนึ่ง เราอาจจะต้องดูว่าผู้พัฒนาแพ็คเกจนั้นๆ ได้มีแหล่งอ้างอิงแพ็คเกจของตนเองไปยังผลงานตีพิมพ์ชิ้นใดหรือไม่ และน่าเชื่อถือเพียงใด แต่โดยส่วนใหญ่แล้วแพ็คเกจใน R ที่ได้รับการตีพิมพ์เผยแพร่ในวารสารทางวิชาการจะมีความน่าเชื่อถือมากกว่าครับ และนอกจากนี้แต่ละแพ็คเกจจะต้องมีคู่มือ (manual) หรือวิธีใช้มาให้ด้วย ซึ่งผมถือว่าเป็นข้อเด่นอีกข้อของ R ที่พยายามรักษามาตรฐานและอำนวยความสะดวกให้กับผู้ใช้อย่างดีทีเดียว เพราะนี่ถือเป็นข้อบังคับที่ผู้พัฒนาที่ต้องการแจกจ่ายแพ็คเกจของตนต้องทำ ผู้พัฒนาบางรายที่ต้องการแจกแจงความสามารถของแต่ละคำสั่งในแพ็คเกจของตนเองอย่างละเอียดนั้น ก็สามารถทำ tutorial แนบมากับแพ็คเกจนั้นๆ ได้ด้วย นับว่าเป็นประโยชน์ต่อผู้ใช้เป็นอย่างมาก เพราะจะมีทั้งตัวอย่างตั้งแต่การเริ่มวิเคราะห์ไปจนถึงการประยุกต์ใช้ทำให้ง่ายต่อการทำความเข้าใจมากขึ้น ซึ่งกลุ่มผู้พัฒนาแพ็คเกจทาง bioinformatics ที่มีชื่อเสียงและเชื่อถือได้ ได้แก่ Bioconductor นั่นเองครับ


Bioconductor


มาถึงส่วนของกลุ่มผู้พัฒนาแพ็คเกจทาง bioinformatics โดยเฉพาะครับ ในส่วนนี้ผมขอแนะนำ Bioconductor (รายละเอียดเพิ่มเติมที่ www.bioconductor.org) ซึ่งมีแพ็คเกจไว้แจกจ่ายมากกว่า 380 แพ็คเกจที่สนับสนุนการวิเคราะห์ genomic data ต่างๆ โดยเราสามารถติดตั้งแพ็คเกจของ Bioconductor บน R ได้ด้วยคำสั่งเพียงไม่กี่คำสั่ง ซึ่งง่ายและสะดวกดีครับ (รายละเอียดในการติดตั้งจะนำเสนอในโอกาสต่อๆ ไปนะครับ) นอกจากการพัฒนาแพ็คเกจแล้ว Bioconductor ยังมีการรวบรวมข้อมูลการทดลองต่างๆ ให้อยู่ในรูปของ data files ที่ใช้กับ R ได้ ซึ่งบางครั้งถูกนำไปใช้เป็น benchmark ในการทดสอบ algorithms ต่างๆ เพื่อวัดประสิทธิภาพในการวิเคราะห์และการคำนวณ ลักษณะตัวอย่างของข้อมูลนั้นได้แก่ affymetrix data, stem cells time course experiment รวมไปถึงข้อมูลการทดลองที่มีการเผยแพร่ในวารสารวิชาการบางฉบับด้วย อย่างข้อมูล acute lymphocytic leukemia (ALL) microarray dataset ของ Chiaretti et al. (2004) ก็ถูกจัดเก็บไว้ใน Bioconductor ในชื่อ dataset “ALL” ครับ และในรูปด้านบน เป็นภาพแสดงผลการวิเคราะห์ข้อมูลจาก dataset “ALL” ด้วยฟังก์ชั่น heatmap ใน R ครับ โดยส่วนใหญ่แพ็คเกจที่ถูกพัฒนานั้นจะมีข้อมูล (data) ของตนเองให้เรียกใช้ เพื่อเป็นตัวอย่างในการใช้คำสั่งที่มีอยู่ในแพ็กเก็ตนั้นๆ ครับ สำหรับผู้ที่สนใจสามารถดูข้อมูลเพิ่มเติมได้ที่ http://www.bioconductor.org/packages/release/data/experiment/ แต่เราไม่จำเป็นต้องเข้าไปดาวน์โหลดข้อมูลเหล่านี้โดยตรงจากเว็บไซต์ก็ได้นะครับ เราสามารถดาวน์โหลดโดยอาศัยฟังก์ชันของ Bioconductor ได้ครับและอีกอย่างข้อมูลเหล่านี้ส่วนใหญ่จะถูกดาวน์โหลดมาพร้อมกับการติดตั้งแพ็คเกจที่เราสนใจอยู่แล้วด้วยครับ ยกเว้นเฉพาะบางแพ็คเกจเท่านั้นที่เราจะต้องไปหาข้อมูลเหล่านี้ด้วยตนเอง อย่างไรก็ตาม ผมขอเน้นย้ำเลยครับว่า เราสามารถประยุกต์ใช้แพ็คเกจต่างๆ กับข้อมูลการทดลองของเราเองได้แน่นอนครับ อาจจะได้โดยตรงเลย หรือโดยอ้อมที่เราต้องปรับรูปแบบข้อมูลของเรานิดหน่อยเพื่อให้อยู่ในรูปแบบที่สามารถ load เข้าไปใน environment ของ R ได้โดยไม่ยุ่งยากครับ ส่วนใหญ่จะเป็นในรูปแบบ text file และ table ซึ่งก็สะดวกอยู่แล้วครับ สำหรับข้อมูลที่แพ็คเกจมีมาให้ ก็เพื่อใช้ทดลองการวิเคราะห์และเป็นตัวอย่างในการใช้งานฟังก์ชันต่างๆ ของแพ็คเกจ เพื่อความเข้าใจที่ถูกต้องตามวัตถุประสงค์ของผู้พัฒนาครับ


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

Monday, October 4, 2010

Book Reviews

Charles and Emma: The Darwins’ Leap of Faith

ฝน นิลเขต


สวัสดีคะคุณผู้อ่านทุกท่าน เชื่อว่าหลายๆ คนคงจะเป็นแฟนพันธุ์แท้ของชาร์ล ดาร์วิน นักธรรมชาติวิทยาชาวอังกฤษผู้ให้กำเนิดทฤษฎีวิวัฒนาการ และยังเผยแพร่แนวคิดดังกล่าวผ่านทางผลงานตีพิมพ์ชิ้นเอกของโลกภายใต้ชื่อว่า “On the Origin of Species” กันเป็นแน่ ทฤษฎีของดาร์วินนั้นนับว่าเป็นทฤษฎีที่เปลี่ยนแปลงความคิดในระดับมนุษยชาติกันเลยทีเดียวค่ะ และจัดเป็นรากฐานทางวิทยาศาสตร์ที่สำคัญอย่างยิ่งต่อนักชีววิทยายุคปัจจุบัน จนเราไม่อาจจะจินตนาการได้ว่าหากชาร์ล ดาร์วิน ไม่เผยแพร่ทฤษฎีดังกล่าว โลกเรา ณ ปัจจุบันนี้จะเป็นอย่างไร และวันนี้ในส่วนของ Book Reviews ฝนก็มีหนังสือดีๆ ที่บอกเล่าเกี่ยวกับชีวิตการทำงาน และชีวิตครอบครัวของชาร์ล ดาร์วินมาแนะนำกันค่ะ


หนังสือเล่มนี้มีชื่อว่า “Charles and Emma: The Darwins’ Leap of Faith” ซึ่งเขียนโดย Dehborah Heiligman จัดพิมพ์ครั้งที่ 1 เมื่อปี 2009 ที่ผ่านมานี่เอง หลายๆ คนคงจะทราบนะคะว่าโลกเพิ่งจะฉลองวาระครบรอบ 200 ปีให้กับชาร์ล ดาร์วิน ไปเมื่อปีที่แล้วนี่เอง หนังสือเล่มนี้ถือเป็นผลงานอีกหนึ่งชิ้นที่ได้ถ่ายทอดเรื่องราวประวัติชีวิตครอบครัวและชีวิตการทำงานของชาร์ล ดาร์วิน ได้อย่างพิถีพิถันและละเอียดอ่อน ราวกับว่าเรากำลังดำเนินชีวิตไปพร้อมๆ กับกิจวัตรของดาร์วินเลยค่ะ


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


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


ภายในเล่มนั้นแบ่งเป็นบทต่างๆ ถึง 33 บท และแต่ละบทก็เล่าเรื่องราวของดาร์วินตามลำดับเวลา โดยเริ่มการเล่าเรื่องของเขาภายหลังที่เขากลับจากการเดินทางไปกับราชนาวีอังกฤษด้วยเรือ HMS Beagle ในวัยที่ย่างเข้า 30 และเป็นช่วงเริ่มต้นที่จะลงหลักปักฐานสักที่ในกรุงลอนดอน


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


ในแต่ละบทของหนังสือเล่มนี้นั้นนอกจากจะบอกเล่าถึงเรื่องราวชีวิตของชาร์ลและเอมม่าแล้วนั้น ยังสอดแทรกให้ผู้อ่านเห็นภาพบ้านเมืองในยุคสมัยศตวรรษที่ 19 ซึ่งตรงกับยุควิคตอเรียของประเทศอังกฤษ ในขณะนั้นบ้านเมืองมีการเปลี่ยนแปลงทั้งการปฏิวัติอุตสาหกรรม และการขยับขยายบ้านเมือง รวมทั้งผู้เขียนบอกเล่าถึงปัญหาบ้านเมืองในขณะนั้นไม่ว่าจะเป็นช่องว่างระหว่างคนจนและคนรวย หรือแม้แต่การแตกแยกทางความเชื่อทางศาสนา


นอกจากนี้สิ่งหนึ่งที่ผู้อ่านจะได้รับจากหนังสือ คงจะเป็นเกร็ดเล็กเกร็ดน้อยเกี่ยวกับบุคคลสำคัญต่างๆ รอบตัวของชาร์ลในช่วงเวลานั้น ตั้งแต่บุคคลในครอบครัวของเขา และเอมม่า ซึ่งแสดงเป็น family tree ไว้อย่างชัดเจน ไปจนถึงผู้ช่วยของเขา ซิมส์ โควิงตั้ง (Syms Covington) ในครั้งที่เดินทางด้วยเรือ Beagle หรือบุคคลสำคัญที่มีอิทธิพลอย่างยิ่งและเป็นผู้คอยให้คำปรึกษา ทั้งยังสนับสนุนทางการเงินแก่ชาร์ล ซึ่งก็มีบิดาของเขาเองและลุงโจซี เวดจ์วู๊ด (Josiah Wedgwood) ผู้ที่ทำให้บิดาของชาร์ลตัดสินใจอนุญาตให้ชาร์ลออกเดินทางไปกับราชนาวีอังกฤษ ไปจนถึงผู้สนับสนุนทฤษฎีของชาร์ลอย่างโทมัส เฮนรี ฮักซ์เล่ย์ (Thomas Henry Huxley) นักชีววิทยาเพื่อนซี้ของชาร์ลเอง เขาให้การสนับสนุนทฤษฎีของชาร์ลจนได้รับการขนานนามว่าสุนัขของชาร์ล ดาร์วิน (Darwin’s Bulldog) และผู้คัดค้านทฤษฎีดังกล่าวเช่น Robert FitzRoy ซึ่งเป็นกัปตันเรือบีเกิ้ลที่ชาร์ลออกเดินทางไปด้วยนั่นเองคะ


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


“A man who dares to waste one hour of time has not discovered the value of life.”


“บุคคลใดปล่อยให้เวลาผ่านไปอย่างไร้ค่าแม้เพียงชั่วโมงเดียว บุคคลผู้นั้นย่อมไม่มีวันค้นพบคุณค่าของชัวิต”


Talk to...

นิสิตคิดอย่างไรกับ bioinformatics

ศิริขวัญ พลประทีป


สวัสดีค่ะ เพื่อนสมาชิก THAI Bioinformatics ทุกท่าน ช่วงเดือนที่ผ่านมาถือว่าเป็นชีพจรรองเท้าของปุ้มก็ว่าได้นะคะ ได้ไปสัมมนา หลั่นล้า...มาหลายที่ ทำให้รู้สึกว่าขณะนี้มหาวิทยาลัยในแต่ละที่พยายามผลักดัน อาจารย์ นักวิจัย หรือแม้กระทั่งนิสิต นักศึกษาในมหาวิทยาลัยของตน ให้เห็นความสำคัญของการทำวิจัยมากขึ้น โดยมีจุดมุ่งหมายในการก้าวเข้าสู่มหาวิทยาลัยวิจัยของประเทศ สิ่งเหล่านี้จะเกิดขึ้นมิได้เลยค่ะ ถ้าขาดบุคลากรที่มีความรู้ในประเทศ ทำให้ปุ้มนึกถึงคำคำหนึ่งที่ได้ยินสมัยยังละอ่อนอยู่นั่นคือ “เด็กฉลาดชาติเจริญ...” แต่ปุ้มของเสริมอีกนิดนะคะ นอกจากฉลาดแล้วก็ยังต้องเป็นคนดีด้วยค่ะ ดังนั้นจึงเกิดไอเดียปิ๊งปั๊ง... ขึ้นมา Talk to… ฉบับนี้คงต้องขออนุญาต บก. ขอสัมภาษณ์เด็กๆ บ้าง....นะคะ และแล้วปุ้มก็มีเหยื่อ เข้ามาติดกับอยู่ 5 คนค่ะ น้องๆ ทั้งหมดยังคงเป็นนิสิตทั้งปริญญาตรี โท และเอก ซึ่งร่ำเรียนอยู่ในหลักสูตรชีวเคมี คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัยค่ะ


ก่อนอื่นก็ต้องสวัสดีน้องๆ ทุกคนเลยนะคะ วันนี้ที่นัดน้องๆ มา ไม่ได้นัดมาทำมิดีมิร้ายนะคะ วันนี้ก็จะมาสัมภาษณ์น้องๆ เกี่ยวกับความคิดเห็น และประเด็นต่างๆ ทางด้าน bioinformatics ขอเกริ่นนิดนึงให้น้องๆ ทราบก่อนนะคะ ว่าวันนี้พี่ปุ้มจะมาสัมภาษณ์พวกเราเพื่อลง e-magazine เกี่ยวกับ bioinformatics ของคนไทยค่ะ ซึ่งมีจุดมุ่งหมายที่จะทำให้คนรุ่นใหม่ที่เริ่มสนใจ (หรือสนใจมานานแล้ว) เกี่ยวกับงานด้าน bioinformatics และนักวิจัยหรือกูรู ทางด้าน bioinformatics ได้มา joy กัน แลกเปลี่ยนความคิดเห็น ประเด็นร้อนกันเกี่ยวกับ bioinformatics ในด้านต่างๆ ค่ะ ฉบับนี้ เราได้น้องๆ มาร่วมแชร์ความคิด เกี่ยวกับ bioinformatics ว่าที่เราได้ร่ำเรียนมาในห้องเรียน มันเพียงพอหรือไม่ อะไรที่เป็นอุปสรรคของการเรียน bioinformatics ประเด็นตรงนี้อาจจะทำให้เราได้เห็นอีกมุมมองนึงของ bioinformatics มากขึ้นค่ะ ก่อนอื่นปุ้มขอแนะนำน้องๆ ของเราก่อนนะคะ เริ่มจาก… น้องอาทครับ ออมสินครับ ออปค่ะ พิมค่ะ เมย์ค่ะ


น้องๆ คิดว่า bioinformatics ยากไหมค่ะ

ยากกกกกกก มาก (ทุกคนตอบเป็นเสียงเดียวโดยมิได้นัดหมายเลยนะคะ)


อยากทราบคำจำกัดความของ bioinformatics ตามที่น้องๆ เข้าใจค่ะ

อาท: bio แปลว่า ชีวะ informatics ก็คือ ข่าวสาร ข้อมูล ซึ่งรวมแล้วก็คือข้อมูลที่เกี่ยวข้องกับชีวะ ครับ


ออมสิน: คิดว่าเป็นสาร���นเทศทางชีววิทยา ซึ่งเกี่ยวกับ DNA RNA โปรตีน ซึ่งเป็นแหล่งรวบรวมข้อมูลต่างๆ ทางด้านชีวภาพครับ


ออป: คำแรกที่ได้ยินก็คิดว่าต้องเป็นชีวสารสนเทศค่ะ ซึ่งเป็นแหล่งข้อมูลต่างๆ ที่รวบรวมความรู้ค่ะ


ทุกคนได้เรียน bioinformatics ในห้องเรียน มาบ้างหรือเปล่าคะ

เรียนผ่านมาทุกคนเลยครับ(ค่ะ) ออมสิน ออป อาท เรียนตอนปริญญาตรี สำหรับเมย์ กับพิม พึ่งได้มาเรียนตอน ปริญญาโทค่ะ


อะไรทำให้ทุกคนอยากเรียนวิชา bioinformatics คะ

ออมสิน: อาจารย์บังคับครับ (555)


เมย์: คิดว่าพอได้มาทำวิจัยทางชีวเคมี และได้เรียนรู้เกี่ยวกับ bioinformatics เลยคิดว่าวิชานี้มีความสำคัญกับงานวิจัย เลยอยากลงเรียนเพื่อให้ได้รู้มากขึ้น ลึกซึ้งขึ้นค่ะ (แต่ก็ยังไม่ลึกซึ้งเท่าไหร่ค่ะ 555)


อาท: คิดว่าถ้าในอนาคตเราจะต้องเรียนต่อ อาท คิดว่า วิชานี้น่าจะเป็นพื้นฐานที่ดีสำหรับการทำวิจัยต่อไปครับ


ออป: คิดว่าเกรดน่าจะง่ายค่ะ


พิม: อยากเห็นภาพกว้างๆ ของ bioinformatics ในหลายๆ มุม ที่อาจมีมากกว่าที่เรารู้ค่ะ


ทุกคนได้ใช้งานทางด้าน bioinformatics หรือเปล่าค่ะ แล้วใช้ทางด้านไหนบ้าง

พวกเราได้ใช้ทุกคนเลยค่ะ(ครับ)


อาท: ผมใช้หาข้อมูลทั่วๆ ไป ใน NCBI และ GenBank


เมย์: เมย์ใช้ออกแบบไพร์เมอร์


ออป: ใช้ส่วนใหญ่จะเป็นฐานข้อมูลโปรตีน DNA และก็ใช้ทำ sequence alignment ค่ะ


ตอนเรียนเรารู้สึกว่าวิชา bioinformatics ที่เราได้เรียนมาส่วน ไหนยากคะ

ออป: PyMol ค่ะ ดูการ docking ต่างๆ หาระยะห่างระหว่างโมเลกุล และการดูโครงสร้างของโปรตีน ยากมากค่ะเพราะมันต้องใช้ command line ซึ่งเราต้องรู้ลึก สำหรับออปคิดว่ามันค่อนข้างซับซ้อนและเวลาที่ใช้สอนมีน้อยมาก และมันเหมือนค่อนข้างไกลตัว เพราะไม่ค่อยได้ใช้ เมื่อเปรียบเทียบกับการทำ alignment ที่เราได้ใช้ประจำอยู่แล้ว ก็คิดว่าง่ายกว่าค่ะ


คิดว่าวิชานี้เป็นพื้นฐานที่ดีสำหรับการเริ่มต้นในการทำวิจัยหรือเปล่าคะ

ถูกต้องค่ะ มีประโยชน์มากเลยค่ะ


ทุกคนคิดว่าวิชาควรที่จะบรรจุอยู่ในหลักสูตรของภาควิชามั๊ยคะ

ควรอย่างยิ่งค่ะ โดยปกติแล้วที่จุฬาฯ เองก็จะมีวิชานี้บรรจุอยู่ในแลปอยู่แล้วค่ะ ซึ่งแทรกอยู่เล็กน้อยในแลป แต่นอกจากนั้นก็จะมีวิชา bioinformatics ซึ่งเป็นวิชาเลือกสำหรับนิสิต ป.ตรี-โท-เอก ให้ได้เรียนกันด้วยค่ะ


แล้ววิชานี้ rating ดี มากน้อยแค่ไหนคะ

Rating ดีต่อเมื่อเกรดดีค่ะ เหมือนเกรดเป็นแรงดึงดูดเลยค่ะ เพราะว่าวิชานี้จะอยู่ในเกณฑ์ ปี 4 เลยต้องขวนขวายหาเกรดมากๆ


ตอนเรียนคิดว่า part ไหนของ bioinformatics มีประโยชน์สำหรับเรามากและอยากให้อาจารย์เน้นหนักมากขึ้น

เมย์: เกี่ยวกับฐานข้อมูลค่ะ และการทำ alignment


ออป: ใช่ค่ะ ฐานข้อมูลเป็นส่วนสำคัญมาก เพราะอย่างน้อยถ้าเรารู้ว่าฐานข้อมูลมันมีอะไร ก็จะทำให้เราได้ใช้ประโยชน์มากขึ้นค่ะ


ถ้าให้พวกเราสอนวิชานี้ให้น้องๆ ม.ปลาย หรือน้อง ป.ตรี ปี 1 คิดว่าเราทำได้มั๊ยค่ะ

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


ถ้าให้พวกเราประเมินว่าก่อนที่เราจะได้เรียนกับหลังเรียนผ่านมาแล้ว เราคิดว่าเราได้เรียนรู้อะไรมากขึ้นกับวิชานี้มั๊ยคะ

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


ออป: ได้รู้ว่ามันมีวิชาแบบนี้อยู่ในโลกนี้ด้วยนะ แล้วก็เป็น guideline ให้เราได้นำไปใช้ในงานวิจัยต่อไปค่ะ


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


สุดท้ายแล้วพี่ปุ้มก็ขอโปรโมทเวปไซต์เราให้น้องๆ พี่ๆ เพื่อนๆ ให้รู้จักกันไปด้วยเลยนะคะ ตอนนี้สมัครเป็นสมาชิกกับ THAI Bioinformatics Network และ THAI Bioinformatics e-magazine ฟรีค่ะ เพียงแค่ส่งอีเมลเพื่อแจ้งชื่อ-นามสกุลเป็นภาษาไทยไปที่ thaibioinfo@gmail.com ค่ะ เขาก็จะมีทีมงาน ใจดีตอบกลับไปหาเพื่อนๆ กันเลยค่ะ แล้วทุกๆ เดือนก็จะมีข่าวคราวต่างๆ เกี่ยวกับ bioinformatic มาอัพเดทให้พวกเราติดตามกันค่ะ ในรูปแบบของ pdf ไฟล์สวยๆ ให้เพื่อนนั่งอ่าน นอนอ่านเล่นกันค่ะ ซึ่งจะจัดส่งให้ทางอีเมล์ของเพื่อนสมาชิกเลยค่ะ ฉบับนี้ปุ้มต้องขอลาไปก่อนนะคะ แล้วพบกันใหม่ใน Talk to… ฉบับหน้านะคะ สวัสดีค่ะ