[Bioinformatics] Basic of DNA Analysis

NSLog0
Algorithml
Published in
4 min readApr 29, 2020

ผมจะมาแชร์เรื่อง DNA Analysis ที่จะอธิบายพื้นฐานที่ใช้ในการทำ DNA Analysis และการอ่าน DNA เน้นว่าพื้นฐานนะครับโดยผมได้สนใจเรื่องนี้ขึ้นมา จากได้ดู The Flash ซึ่งผมติดตามเป็นแฟนซี่รี่ย์มาตั้งแต่ SS1 และในหนังมีการนำเอา DNA และพลังต่างๆ มาหาตัวผู้ร้าย รวมถึงการสร้างวัคซีนเพื่อหยุดตัวร้ายต่างๆ ผมจึงเกิดไอเดียที่จะลองไปศึกษาการทำ DNA Analysis จึงเปิดดูใน Kaggle ก็พบว่ามีคนทำอยู่และมี Challenge เกี่ยวกับการวิเคราะห์ตัวไวรัส SARS-CoV-2 หรือโรค COVID-19 จึงได้ไปทำการศึกษาตัวงานและบทความของคนอื่นๆ และบทความนี้ก็เพื่อเป็นการรวบรวมข้อมูลเกี่ยวกับ DNA Analysis ที่ได้ไปศึกษามา เผื่อว่าใครสนในที่จะเป็น Data scientist สาย Biology รวมถึงใช้เตือนความจำของตัวเองด้วย ถ้าผิดพลาดประการใดผมต้องขออภัยด้วย หากว่ามีการอัพเดทความรู้เพิ่มเติมผมก็จะกลับมาแก้ไขและเพิ่มเนื้อหาให้ภายหลัง

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

Why Computer scientist must read Biology?

จริงๆ เราสามารถเอาไฟล์ DNA มาอ่านเลย ก็ได้ครับ แล้วทำไมต้องมาอ่านชีวะพื้นฐานอีก ตรงนี้ผมอยากอธิบายว่าปกติเวลาเราออกแบบระบบหรือแอพพลิเคชันต่างๆ เราจำเป็นต้องรู้ว่า Input คืออะไร ได้มาจากไหน หน้าตาเป็นยังไง และ Output เป็นอะไร เพราะงั้นการทำความเข้าใจในวิชาชีวะ จึงจำเป็นมากเพราะช่วยให้เราสามารถคิดหรือเลือกใช้ Algorithm ทั้งทางชีวะหรือคอมพิวเตอร์ได้เหมาะกับข้อมูล เช่น หากเราจะทำงานกับ Hash หรือ Array มันก็ใช้วิธีการต่างกัน หรือต่อให้เป็น DNA ก็ตามมันก็ต้องมีวิธีต่างๆ ในการจัดการเหมือนกัน และการทำความเข้าใจชีวะจะทำให้เราเลือก Algorithm ในการจัดการ Input ได้ถูกต้องและอธิบาย Output ได้ที่ได้จาก Input ได้

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

Structure of DNA

เป็นชื่อย่อของสารพันธุกรรมชนิดนึงที่เรียกเต็มๆ ว่า deoxyribonucleic acid ซึ่งตัวโมเลกุลที่ค่อนข้างมีความซับซ้อนมากๆ ทำหน้าที่เก็บ Instructions data ที่ทำให้สิ่งมีชีวิตต่างๆ เอาไปใช้สำหรับการดำรงชีวิต และใช้สำหรับสร้างโมเลกุลอีกตัวที่เราเรียกว่า โปรตีน (proteins) ในโครงสร้าง DNA จะมีโมเลกุลเล็กๆ ที่เชื่อมกันอยู่เรียกว่า Monomer อยู่ภายใต้โมเลกุลขนาดใหญ่กว่าชื่อว่า Polymer

ตัว Monomer ใน DNA พวกนี้เราเรียกมันว่า Nucleotides และส่วน Polymer เราจะเรียกมันว่า Polynucleotide สำหรับส่วนที่เราจะมาใช้ในการอ่านข้อมูลของ DNA ก็คือส่วนของ Monomer

โครงสร้างของตัว Polymer เป็นการประกอบร่างของ Nucleotide หลายๆ ตัวมาเรียงต่อๆ กันเส้นยาวๆ จึงเกิดเป็น DNA ขึ้นมา หลังจากนี้ผมจะเรียก Monomer ว่า Nucleotide แทนเพราะเป็นศัทพ์ที่เขาใช้กันครับ

Nucleotide (building block)

อย่างที่ได้บอกไปว่าการอ่านข้อมูล DNA เราจะใช้ Nucleotide มาอ่านเพราะงั้น เราก็จะมาดูโครงสร้างของมันกันว่าจะอ่านมันอย่างไรและมันมีหน้าตาแบบไหน ใน Nucleotide สามารถแบ่งออกได้เป็น 4 ชนิดคือ Adenine, Cytosine, Guanine และ Thymine ทั้งหมดนี้จะถูกเรียกชื่อย่อๆ โดยเอาอักษรตัวหน้ามาใช้ในการเขียนเป็น A, C, G และ T ซึ่งในแต่ละ Nucleotide จะมีองค์ประกอบทางเคมีอยู่หลักๆ 3 ชนิด

  • น้ำตาล ที่มีชื่อทางเคมีว่า Deoxyribose
  • กลุ่มฟอตเฟส (Phosphate group)
  • Nucleobase (หรือเรียกว่า Base เฉยๆ)

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

nucleotide

สำหรับโครงสร้างทางเคมีของ Base แต่ละตัวสามารถเข้าไปดูได้ที่ Nucleotide base

DNA strand

Nucleotide จะมีการทำงาน อยู่ว่า ถ้า Base เป็นกลุ่ม A และกลุ่มที่จะมาเป็นคู่ (pair) ก็จะเป็น T และหากกลุ่มที่เป็น C ก็จะจับคู่กับ G เป็นต้น การจับคู่แบบนี้ก็เพราะมีคนค้นพบว่าของกลุ่ม A, T, C, G มีค่าไม่เท่ากัน แต่เขาก็พบว่า A-T มีค่าเท่ากันและ C-G มีค่าเท่ากัน เพราะงั้นเขาเลยจับคู่กันแบบนี้ และพวกนี้คือ Chargaff’s rules ตั้งตามชื่อคนค้นพบ ทำให้การเขียนเส้นคู่ขนาด (Double helix) ของ DNA จึงกลายเป็นแบบนี้

A T G C A G T A C
| | | | | | | | |
T A C G T C A T G
DNA

DNA is an antiparallel structure

Double helix

เส้นสองเส้นของ DNA นั้นจะวิ่งไปในทิศทางตรงกันข้าม จาก 3' (three prime) ไป 5' (five prime) สลับกัน สำหรับตรงนี้ผมแนะนำให้ดูสูตรทางเคมีแล้วจะเข้าใจว่ามากขึ้นครับ Link, Link และอันนี้ต้องรู้ไว้เพราะว่าจะใช้ในการทำ DNA Sequencing alignment ในเรื่องถัดไป

Structure of RNA

ก่อนหน้านี้เราพูดถึง DNA กันมาแล้ว ในส่วนนี้ผมจะมาพูดแบบรวบรัดในกระบวนการของการเอา DNA ไปสร้างโปรตีนกัน ก่อน DNA จะถูกนำไปใช้จะต้องแปลงให้เป็น RNA ก่อน และตัว RNA จะมีโครงสร้างคล้ายกับ DNA เพียงมันจะไม่เป็นเส้นคู่ๆ แต่จะมีเส้นเดี่ยวๆ และจะไม่มีกรด Thymine (T) แต่จะมี Uracil (U) แทน ดังนั้นการเขียน RNA ก็จะเป็นแบบนี้

DNA: T A G A T A A C G
| | | | | | | | |
RNA: A U C U A U U G C
RNA

Proteint synthesizers

ตัว RNA เกิดจากการแบ่งตัวเองหรือก็อปปี้ตัวเองออกมาจาก DNA กระบวนการนี้เราจะเรียกมันว่า Transcription ซึ่งตัว RNA ตัวนี้จะเรียกว่า Messsager RNA หรือ mRNA จะถูกเพื่อส่งออกไปนอก nucleus (นิวเคลียส) ไปที่ cytoplasm (ไซโตพาสซึม) ไปหาตัวสร้างโปรตีนเรียกว่า Ribosomes เพื่อเริ่มกระบวนการ bind mRNA ตรงนี้ก็จะเหมือนการอ่านรหัสต่างๆ ซึ่งตัว Ribosomes ก็จะเริ่มสร้างกรดอะมิโนและนำ mRNA ไปห่อหุ่มไว้แล้วจึงจัดการอ่านรหัส จากนั้นจะมีการนำตัว Transfer RNA หรือ tRNA มาอ่านข้อมูลที่ละ 3 ชุด (codons group) จาก mRNA หลังจากนั้นก็จะกลายเป็น building block ของโปรตีนต่อไป ตรงนี้เราเรียกว่านำ RNA มาทำเป็นโปรตีนว่า Translation

สำหรับ tRNA จะพบได้ที่ Ribosomes และแต่ละ tRNA จะมี codon โค้ดของมันที่จะใช้ในการ bind mRNA และส่วนของ tRNA นั้นก็จะมีกรดอะมิโนที่ตรงกับโค้ดของตัวมันอยู่

Amino

เพื่อความเข้าใจยิ่งขึ้นผมแนะนำให้ลองดูวีดีโอด้านล่างนี้ครับ

Transcription -> Translate -> Protein

สรุปขั้นตอนทั้งหมดก็จะได้แบบนี้

whole process

สำหรับ * คือจุดที่หยุดสร้างโปรตีนหรือเรียกว่า Stop และจุดที่จะเริ่มทำการสร้าง (Start) หรือ bind mRNA มักจะอยู่ที่โค้ด AUG (link) และหากใครอยากลองเขียนในกระดาษเล่นๆ ดูก็ได้ครับ แล้วใช้ codon table แปลงค่าเพื่อทำความเข้าใจก่อน

Let’s coding begin

หลังจากเราเข้าใจกระบวนการ การทำงานของ DNA แล้ว ถัดไปเราจะเริ่มมาเขียนโปรแกรมกันโดยผมจะมีโจทย์ง่ายๆ ตามนี้

  • นับจำนวน A, T, C, G
  • แปลง DNA เป็นโปรตีนด้วย DNA codon table
  • การหาค่า GC content ตรงผมยังอ่านไม่เข้าใจเท่าไร แต่เห็นเขาบอกว่าเป็นการหาค่า stable ของ DNA โดยเอา G และ C มาใช้หาค่าเฉลี่ย

สำหรับการเขียนโค้ดผมใช้ python notebook เพราะมันแปะลงมาให้ดูในบทความได้ และใช้ไลบารี่ Biopython ช่วยคำนวณเพราะตัว Biopython มีคำสั่งต่างๆ ที่ใช้ในการทำงานด้าน DNA Analysis ครบหมดแล้วแถมเยอะด้วยหรือใครอยากจะ Challeng หน่อยก็สามารถทำได้โดยการเขียนฟังก์ชันขี้นมาเองได้ เพราะหลักๆ แล้ว ไฟล์ DNA จะเป็น String ครับ เราสามารถใช้ RegeX ทำงานได้

สำหรับไฟล์ DNA ส่วนมากเขาจะใช้ .fasta ครับ เป็นที่นิยามมากๆ

สำหรับใครอยากได้ dataset ด้าน DNA เรามีแหล่งอยู่ก็คือ genBank, NCBI, หรือพิมพ์ค้นหาใน kaggle ว่า SARS-CoV-2 ในบทความนี้ผมเอาไวรัสของโรค COVID-19 มาทำการเขียนโปรแกรม

สำหรับข้อดีของ Biopython คือมันสามารถโหลด dataset มาจาก gen bank ได้ด้วยนะครัล

Tip: SARS-CoV-2 คือชื่อไวรัสของโรค COVID-19 นะครับ อย่าสับสน

Code

Coding

เดี๋ยวไว้ครั้งหน้าจะมาแชร์เรื่องอื่นๆ เกี่ยวกับการเขียนโปรแกรมกับ DNA อีกนะครับ ตอนนี้ต้องขอไปอ่านทำความเข้าใจก่อน

--

--

NSLog0
Algorithml

I’m a Software Developer and Underwater photographer