การพัฒนาฐานข้อมูลชีวสารสนเทศเพื่อการวิจัยพันธะซัลไฟด์

เผยแพร่แล้ว: 2022-03-11

ฐานข้อมูลชีวสารสนเทศของ Protein Data Bank (PDB) เป็นคลังเก็บข้อมูลที่ใหญ่ที่สุดในโลกของโครงสร้างที่กำหนดโดยการทดลองของโปรตีน กรดนิวคลีอิก และส่วนประกอบที่ซับซ้อน ข้อมูลทั้งหมดถูกรวบรวมโดยใช้วิธีการทดลอง เช่น X-ray, spectroscopy, crystallography, NMR เป็นต้น

บทความนี้อธิบายวิธีการแยก กรอง และล้างข้อมูลออกจาก PDB ในทางกลับกัน ช่วยให้ประเภทของการวิเคราะห์ที่อธิบายในบทความ การเกิดขึ้นของพันธะโปรตีนซัลไฟด์ในโดเมนต่างๆ ของชีวิต: การเปรียบเทียบโปรตีนจากธนาคารข้อมูลโปรตีน ซึ่งตีพิมพ์ใน วิศวกรรมโปรตีน การออกแบบและการคัดเลือก เล่มที่ 27 ฉบับที่ 3 1 มีนาคม 2557 น. 65–72.

PDB มีโครงสร้างการทำซ้ำจำนวนมากที่มีความละเอียด วิธีการ การกลายพันธุ์ ฯลฯ ที่แตกต่างกัน การทดลองกับโปรตีนที่เหมือนกันหรือคล้ายกันสามารถสร้างอคติในการวิเคราะห์กลุ่มใดๆ ดังนั้น เราจะต้องเลือกโครงสร้างที่ถูกต้องจากชุดของสำเนาที่ซ้ำกัน . เพื่อจุดประสงค์นั้น เราจำเป็นต้องใช้ชุดโปรตีนที่ไม่ซ้ำซ้อน (NR)

เพื่อจุดประสงค์ในการทำให้เป็นมาตรฐาน ฉันแนะนำให้ดาวน์โหลดพจนานุกรมสารประกอบเคมีเพื่อนำเข้าชื่ออะตอมลงในฐานข้อมูลที่ใช้ 3NF หรือใช้ star schema และการสร้างแบบจำลองมิติ (ฉันยังใช้ DSSP เพื่อช่วยขจัดโครงสร้างที่มีปัญหา ฉันจะไม่พูดถึงเรื่องนี้ในบทความนี้ แต่โปรดทราบว่าฉันไม่ได้ใช้คุณลักษณะ DSSP อื่นใด)

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

โครงสร้างโปรตีนหลักและตติยภูมิ

โครงสร้างโปรตีนปฐมภูมิและตติยภูมิ ก่อนและหลังการพับโปรตีน
ที่มา: วิศวกรรมโปรตีน การออกแบบและการคัดเลือก ตามที่กล่าวไว้ในตอนต้นของบทความนี้

เอาท์พุต

เพื่อให้พร้อมสำหรับการป้อนข้อมูลลงใน R, SPSS หรือเครื่องมืออื่นๆ นักวิเคราะห์จะต้องให้ข้อมูลอยู่ในตารางฐานข้อมูลที่มีโครงสร้างนี้:

คอลัมน์ พิมพ์ คำอธิบาย
code character(4) รหัสการทดสอบ (ตัวเลขและตัวอักษร ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ และต้องไม่เริ่มต้นด้วยศูนย์)
title character varying(1000) ชื่อการทดสอบ สำหรับการอ้างอิง (ฟิลด์สามารถเป็นรูปแบบข้อความได้ด้วย)
ss_bonds integer จำนวนพันธะไดซัลไฟด์ในสายโซ่ที่เลือก
ssbonds_overlap integer จำนวนพันธะไดซัลไฟด์ที่ทับซ้อนกัน
intra_count integer จำนวนพันธบัตรที่ทำขึ้นในสายเดียวกัน
sci_name_src character varying(5000) ชื่อวิทยาศาสตร์ของสิ่งมีชีวิตที่ใช้ลำดับ
tax_path character varying เส้นทางในต้นไม้จำแนก Linnaean
src_class character varying(20) สิ่งมีชีวิตระดับบนสุด (ยูคาริโอต โพรคาริโอต ไวรัส อาร์เคีย อื่นๆ)
has_reactives7 boolean เป็นจริงก็ต่อเมื่อลำดับมีศูนย์ปฏิกิริยา
len_class7 integer ความยาวของลำดับในชุดที่ 7 (ตั้งค่าด้วย p-value 10e-7 คำนวณโดย blast)

วัสดุและวิธีการ

เพื่อให้บรรลุเป้าหมายนี้ ขั้นตอนแรกคือการรวบรวมข้อมูลจาก rcsb.org ไซต์นั้นมีโครงสร้าง PDB ที่ดาวน์โหลดได้ของการทดลองในรูปแบบต่างๆ

แม้ว่าข้อมูลจะถูกจัดเก็บในหลายรูปแบบ แต่ในตัวอย่างนี้ จะใช้เฉพาะรูปแบบข้อความที่คั่นด้วยช่องว่างคงที่ที่จัดรูปแบบ (PDB) เท่านั้น อีกทางเลือกหนึ่งสำหรับรูปแบบข้อความของ PDB คือ PDBML เวอร์ชัน XML แต่บางครั้งมีรายการการตั้งชื่อตำแหน่งอะตอมที่มีรูปแบบไม่ถูกต้อง ซึ่งอาจทำให้เกิดปัญหาในการวิเคราะห์ข้อมูล mmCIF ที่เก่ากว่าและรูปแบบอื่นๆ อาจมีให้ใช้งานเช่นกัน แต่จะไม่ได้อธิบายไว้ในบทความนี้

รูปแบบ PDB

รูปแบบ PDB เป็นรูปแบบข้อความที่มีความกว้างคงที่แบบแฟรกเมนต์ ซึ่งสามารถแยกวิเคราะห์ได้อย่างง่ายดายด้วยการสืบค้น SQL, ปลั๊กอิน Java หรือโมดูล Perl เป็นต้น ประเภทข้อมูลแต่ละประเภทในที่เก็บไฟล์จะแสดงเป็นบรรทัดที่ขึ้นต้นด้วยแท็กที่เหมาะสม เราจะพูดถึงแต่ละประเภทแท็กในหัวข้อย่อยต่อไปนี้ ความยาวบรรทัดน้อยกว่าหรือเท่ากับ 80 อักขระ โดยที่แท็กใช้อักขระหกตัวหรือน้อยกว่า บวกกับช่องว่างอย่างน้อยหนึ่งช่องซึ่งรวมกันเป็นแปดไบต์ นอกจากนี้ยังมีกรณีที่ไม่มีช่องว่างระหว่างแท็กและข้อมูล โดยปกติสำหรับแท็ก CONECT

TITLE

แท็ก TITLE ทำเครื่องหมายบรรทัดในฐานะที่เป็น (ส่วนหนึ่งของ) ชื่อของการทดลอง ซึ่งประกอบด้วยชื่อโมเลกุลและข้อมูลที่เกี่ยวข้องอื่นๆ เช่น การแทรก การกลายพันธุ์ หรือการลบกรดอะมิโนจำเพาะ

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 TITLE A TWO DISULFIDE DERIVATIVE OF CHARYBDOTOXIN WITH DISULFIDE TITLE 2 13-33 REPLACED BY TWO ALPHA-AMINOBUTYRIC ACIDS, NMR, 30 TITLE 3 STRUCTURES

ในกรณีที่มีหลายบรรทัดในเร็กคอร์ด TITLE จะต้องต่อชื่อเรื่อง โดยเรียงลำดับตามหมายเลขที่ต่อเนื่องกัน ซึ่งจัดวางชิดขวา บนไบต์ 9 และ 10 (ขึ้นอยู่กับจำนวนบรรทัดเหล่านี้)

ATOM

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

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 ATOM 390 N GLY A 26 -1.120 -2.842 4.624 1.00 0.00 N ATOM 391 CA GLY A 26 -0.334 -2.509 3.469 1.00 0.00 C ATOM 392 C GLY A 26 0.682 -1.548 3.972 1.00 0.00 C ATOM 393 O GLY A 26 0.420 -0.786 4.898 1.00 0.00 O ATOM 394 H GLY A 26 -0.832 -2.438 5.489 1.00 0.00 H ATOM 395 HA2 GLY A 26 0.163 -3.399 3.111 1.00 0.00 H ATOM 396 HA3 GLY A 26 -0.955 -2.006 2.739 1.00 0.00 H

ตัวอย่างข้างต้นนำมาจากการทดลอง 1BAH คอลัมน์แรกระบุประเภทของเรคคอร์ด และคอลัมน์ที่สองคือหมายเลขซีเรียลของอะตอม ทุกอะตอมในโครงสร้างมีหมายเลขซีเรียลของตัวเอง

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

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

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

คอลัมน์สุดท้ายที่ 2 คือปัจจัยอุณหภูมิ ซึ่งนำข้อมูลเกี่ยวกับความผิดปกติในผลึก โดยวัดเป็น Ų ค่าที่มากกว่า60Ųหมายถึงความผิดปกติ ในขณะที่ค่าที่ต่ำกว่า30Ųหมายถึงความมั่นใจ ไม่มีอยู่ในไฟล์ PDB เสมอไป เนื่องจากขึ้นอยู่กับวิธีการทดลอง

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

TER

นี่เป็นการทำเครื่องหมายจุดสิ้นสุดของห่วงโซ่ แม้จะไม่มีเส้นนี้ ก็ยังแยกแยะได้ง่ายว่าห่วงโซ่สิ้นสุดที่ใด ดังนั้น มักจะขาดบรรทัด TER

MODEL และ ENDMDL

เส้น MODEL ทำเครื่องหมายที่จุดเริ่มต้นของแบบจำลองของโครงสร้าง และประกอบด้วยหมายเลขประจำเครื่องของแบบจำลอง

หลังจากเส้นอะตอมทั้งหมดในแบบจำลองนั้น มันจะลงท้ายด้วยเส้น ENDMDL

SSBOND

เส้นเหล่านี้มีพันธะไดซัลไฟด์ระหว่างกรดอะมิโนซิสเทอีน พันธะไดซัลไฟด์สามารถมีอยู่ในเรซิดิวประเภทอื่นๆ แต่ในบทความนี้จะวิเคราะห์เฉพาะกรดอะมิโน ดังนั้นจึงรวมเฉพาะซิสเทอีนเท่านั้น ตัวอย่างต่อไปนี้มาจากการทดสอบด้วยรหัส 132L :

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 SSBOND 1 CYS A 6 CYS A 127 1555 1555 2.01 SSBOND 2 CYS A 30 CYS A 115 1555 1555 2.05 SSBOND 3 CYS A 64 CYS A 80 1555 1555 2.02 SSBOND 4 CYS A 76 CYS A 94 1555 1555 2.02

ในตัวอย่างนี้ มีพันธะไดซัลไฟด์สี่พันธะที่แท็กในไฟล์ด้วยหมายเลขลำดับของพันธะในคอลัมน์ที่สอง พันธะทั้งหมดเหล่านี้ใช้ซิสเทอีน (คอลัมน์ 3 และ 6) และทั้งหมดมีอยู่ในสาย A (คอลัมน์ 4 และ 7) หลังจากแต่ละสายมีหมายเลขลำดับเรซิดิวซึ่งระบุตำแหน่งของพันธะในสายเปปไทด์ รหัสการแทรกอยู่ถัดจากลำดับเรซิดิวแต่ละลำดับ แต่ในตัวอย่างนี้ไม่มีเพราะไม่มีกรดอะมิโนแทรกอยู่ในบริเวณนั้น สองคอลัมน์ก่อนหน้าคอลัมน์สุดท้ายสงวนไว้สำหรับการดำเนินการสมมาตร และคอลัมน์สุดท้ายคือระยะห่างระหว่างอะตอมของกำมะถัน ซึ่งวัดเป็น Å

สละเวลาสักครู่เพื่อให้บริบทกับข้อมูลนี้

รูปภาพด้านล่าง ถ่ายโดยใช้โปรแกรมดู rcsb.org NGL แสดงโครงสร้างของการทดลอง 132L โดยเฉพาะอย่างยิ่ง พวกมันแสดงโปรตีนที่ไม่มีลิแกนด์ ภาพแรกใช้ไม้แทน โดยสี CPK แสดงกำมะถันและพันธะเป็นสีเหลือง การเชื่อมต่อรูปตัววีแสดงถึงการเชื่อมต่อของเมไทโอนีน ในขณะที่การเชื่อมต่อรูปตัว Z เป็นพันธะไดซัลไฟด์ระหว่างซิสเทอีน

แท่งแทนด้วยสี CPK แสดงพันธะซัลเฟอร์ไดซัลไฟด์เป็นสีเหลือง

ในภาพถัดไป วิธีการแบบง่ายของการสร้างภาพโปรตีนที่เรียกว่าการสร้างภาพ ข้อมูลกระดูกสันหลัง จะแสดงสีด้วยกรดอะมิโน โดยที่ซีสเตอีนจะมีสีเหลือง มันเป็นตัวแทนของโปรตีนชนิดเดียวกัน โดยไม่รวมสายด้านข้าง และมีเพียงส่วนหนึ่งของกลุ่มเปปไทด์เท่านั้น ในกรณีนี้คือกระดูกสันหลังของโปรตีน มันประกอบด้วยสามอะตอม: N-terminal, C-alpha และ C-terminal ภาพนี้ไม่ได้แสดงพันธะไดซัลไฟด์ แต่แสดงการจัดเรียงเชิงพื้นที่ของโปรตีนได้ง่ายขึ้น:

กระดูกสันหลังของโปรตีนอย่างง่ายที่แต่งแต้มด้วยกรดอะมิโนโดยที่ซีสเตอีนมีสีเหลือง

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

CONECT

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

SOURCE

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

 SOURCE MOL_ID: 1; SOURCE 2 ORGANISM_SCIENTIFIC: ANOPHELES GAMBIAE; SOURCE 3 ORGANISM_COMMON: AFRICAN MALARIA MOSQUITO; SOURCE 4 ORGANISM_TAXID: 7165; SOURCE 5 GENE: GST1-6; SOURCE 6 EXPRESSION_SYSTEM: ESCHERICHIA COLI; SOURCE 7 EXPRESSION_SYSTEM_TAXID: 562; SOURCE 8 EXPRESSION_SYSTEM_STRAIN: BL21(DE3)PLYSS; SOURCE 9 EXPRESSION_SYSTEM_VECTOR_TYPE: PLASMID; SOURCE 10 EXPRESSION_SYSTEM_PLASMID: PXAGGST1-6

รูปแบบ NR

นี่คือรายการชุด PDB ของสายที่ไม่ซ้ำซ้อน (NR) สามารถดูสแน็ปช็อตได้ที่ ftp.ncbi.nih.gov/mmdb/nrtable/ จุดประสงค์คือเพื่อหลีกเลี่ยงอคติที่ไม่จำเป็นที่เกิดจากความคล้ายคลึงของโปรตีน NR มีสามชุดที่มีระดับค่า p-value ของเอกลักษณ์ที่แตกต่างกันซึ่งสร้างขึ้นโดยการเปรียบเทียบโครงสร้าง PDB ทั้งหมด ผลลัพธ์จะถูกเพิ่มลงในไฟล์ข้อความซึ่งจะอธิบายในภายหลัง ไม่จำเป็นต้องใช้คอลัมน์ทั้งหมดสำหรับโปรเจ็กต์นี้ ดังนั้นจะอธิบายเฉพาะคอลัมน์ที่สำคัญเท่านั้น

สองคอลัมน์แรกมีโค้ดการทดสอบ PDB ที่ไม่ซ้ำกันและตัวระบุลูกโซ่ตามที่อธิบายไว้สำหรับระเบียน ATOM ด้านบน คอลัมน์ 6, 9 และ C มีข้อมูลเกี่ยวกับการแสดงค่า p ซึ่งเป็นระดับความคล้ายคลึงของลำดับที่คำนวณโดย BLAST หากค่านั้นเป็นศูนย์ จะไม่ถือว่าเป็นส่วนหนึ่งของชุด ถ้าค่าเป็น 1 แสดงว่าเป็น คอลัมน์ดังกล่าวแสดงถึงการยอมรับชุดที่มีค่า p-values ​​ที่ 10e-7, 10e-40 และ 10e-80 ตามลำดับ เฉพาะชุดที่มีค่าตัดค่า p เท่ากับ 10e-7 เท่านั้นที่จะนำไปใช้ในการวิเคราะห์

คอลัมน์สุดท้ายมีข้อมูลเกี่ยวกับการยอมรับของโครงสร้าง โดยที่ a ยอมรับได้ และ n ไม่ยอมรับ

 #--------------------------------------------------------------------------------------------------------------------------- # 1 2 3 4 5 6 7 8 9 ABCDEFGHIJKLMNOPQ #--------------------------------------------------------------------------------------------------------------------------- 3F8V A 69715 1 1 1 1 1 1 1 1 1 9427 1 1 0.00 0.00 0.00 0.00 1.08 1 6 5 164 X a 3DKE X 68132 1 2 0 1 2 0 1 2 0 39139 1 1 0.00 0.00 0.00 0.00 1.25 1 11 7 164 X a 3HH3 A 77317 1 3 0 1 3 0 1 3 0 90 1 0 0.00 0.00 0.00 0.00 1.25 1 5 4 164 X a 3HH5 A 77319 1 4 0 1 4 0 1 4 0 90 2 0 0.00 0.00 0.00 0.00 1.25 1 4 4 164 X a

การสร้างฐานข้อมูลและการแยกวิเคราะห์ข้อมูล

ตอนนี้เรามีแนวคิดว่าเรากำลังเผชิญกับอะไรและต้องทำอะไร มาเริ่มกันเลย

กำลังดาวน์โหลดข้อมูล

ข้อมูลทั้งหมดสำหรับการวิเคราะห์นี้สามารถพบได้ตามที่อยู่สามแห่งเหล่านี้:

  • ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/
  • ftp.ncbi.nih.gov/mmdb/nrtable/
  • ftp.ncbi.nih.gov/pub/taxonomy/taxdmp.zip

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

การแยกวิเคราะห์ข้อมูล

โดยปกติการแยกวิเคราะห์ไฟล์ PDB ทำได้โดยปลั๊กอินหรือโมดูลใน Java, Perl หรือ Python ในกรณีของการวิจัยนี้ ฉันเขียนแอปพลิเคชัน Perl แบบกำหนดเองโดยไม่ต้องใช้โมดูลการแยกวิเคราะห์ PDB ที่เขียนไว้ล่วงหน้า เหตุผลก็คือเมื่อต้องแยกวิเคราะห์ข้อมูลจำนวนมาก จากประสบการณ์ของผม ปัญหาที่พบบ่อยที่สุดเกี่ยวกับการใช้ข้อมูลทดลองคือข้อผิดพลาดในข้อมูล บางครั้งมีข้อผิดพลาดเกี่ยวกับพิกัด ระยะทาง ความยาวบรรทัด ความคิดเห็นในสถานที่ที่ไม่ควรอยู่ ฯลฯ

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

การสร้างฐานข้อมูล

เมื่อสร้างฐานข้อมูล โปรดทราบว่าฐานข้อมูลนี้สร้างขึ้นสำหรับการประมวลผลข้อมูล การวิเคราะห์ในภายหลังจะทำใน SPSS หรือ R สำหรับจุดประสงค์ของเราในที่นี้ ขอแนะนำให้ใช้ PostgreSQL กับเวอร์ชัน 8.4 เป็นอย่างน้อย

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

ในกรณีนี้ ผลลัพธ์สุดท้ายจะเป็นตารางเดียว ซึ่งสามารถส่งออกไปยังไฟล์เพื่อใช้กับเครื่องมือทางสถิติบางอย่าง เช่น SPSS หรือ R

โต๊ะ

การแยกข้อมูลจากระเบียน ATOM จะต้องเชื่อมต่อกับระเบียน HEADER หรือ TITLE ลำดับชั้นข้อมูลได้อธิบายไว้ในภาพด้านล่าง

ลำดับชั้นตามธรรมชาติของข้อมูลพันธะไดซัลไฟด์ที่จะส่งผลให้ฐานข้อมูลอยู่ในรูปแบบปกติที่สาม

เนื่องจากรูปภาพนี้เป็นการแสดงแบบง่ายของฐานข้อมูลในรูปแบบปกติที่สาม (3NF) จึงมีค่าใช้จ่ายมากเกินไปสำหรับจุดประสงค์ของเรา เหตุผล: ในการคำนวณระยะห่างระหว่างอะตอมสำหรับการตรวจจับพันธะไดซัลไฟด์ เราจำเป็นต้องทำการรวมเข้าด้วยกัน ในกรณีนี้ เราจะมีตารางที่เชื่อมต่อตัวเองสองครั้ง และยังรวมเข้ากับโครงสร้างรองและโครงสร้างหลักอย่างละสองครั้ง ซึ่งเป็นกระบวนการที่ช้ามาก เนื่องจากไม่ใช่ทุกการวิเคราะห์ที่ต้องการข้อมูลโครงสร้างทุติยภูมิ จึงมีการเสนอสคีมาอื่นในกรณีที่คุณจำเป็นต้องนำข้อมูลกลับมาใช้ใหม่หรือวิเคราะห์พันธะไดซัลไฟด์ในปริมาณที่มากขึ้น:

โมเดลที่มีรายละเอียดมากขึ้นของสคีมาฐานข้อมูลที่ไม่ได้ใช้โครงสร้างรอง (3NF)

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

เลย์เอาต์ฐานข้อมูลโดยใช้สคีมาดาวและการสร้างแบบจำลองมิติ

ในกรณีที่ต้องดำเนินการกับพันธบัตรทั้งหมด ฉันขอแนะนำสตาร์สคีมา

(มิฉะนั้นก็ไม่จำเป็นเพราะพันธะไดซัลไฟด์นั้นไม่ธรรมดาเหมือนพันธะอื่นๆ ในกรณีของงานนี้ จำนวนพันธะไดซัลไฟด์ใกล้จะถึง 30,000 ซึ่งอาจเร็วพอใน 3NF แต่ฉันตัดสินใจดำเนินการผ่าน ตารางที่ไม่ได้ทำให้เป็นมาตรฐาน ดังนั้นจึงไม่มีภาพอยู่ที่นี่)

จำนวนรวมที่คาดไว้ของพันธะโควาเลนต์ทั้งหมดคืออย่างน้อยสองเท่าของจำนวนอะตอมในโครงสร้างระดับอุดมศึกษา และในกรณีนั้น 3NF จะช้ามาก ดังนั้นจำเป็นต้องมีการดีนอร์มัลไลเซชันโดยใช้รูปแบบสคีมาของดาว ในสคีมานั้น ตารางบางตารางมีการตรวจสอบคีย์ภายนอกสองครั้ง และนั่นเป็นเพราะมีการสร้างพันธะระหว่างสองอะตอม ดังนั้นแต่ละอะตอมจึงจำเป็นต้องมี primary_structure_id , atom_name_id และ residue_id ของตัวเอง

มีสองวิธีในการเติมตาราง d_atom_name : จากข้อมูล และจากแหล่งอื่น พจนานุกรมองค์ประกอบทางเคมีที่ฉันกล่าวถึงก่อนหน้านี้ รูปแบบคล้ายกับรูปแบบ PDB: มีประโยชน์เฉพาะบรรทัด RESIDUE และ CONECT เนื่องจากคอลัมน์แรกของ RESIDUE มีโค้ดสามตัวอักษรตกค้าง และ CONECT มีชื่อของอะตอมและการเชื่อมต่อของอะตอม ซึ่งเป็นชื่ออะตอมด้วย จากไฟล์นี้ เราสามารถแยกวิเคราะห์ชื่ออะตอมทั้งหมดและรวมไว้ในฐานข้อมูลของเรา แม้ว่าฉันแนะนำให้คุณอนุญาตฐานข้อมูลที่มีชื่ออะตอมที่ไม่อยู่ในรายการ

 RESIDUE PRO 17 CONECT N 3 CA CD H CONECT CA 4 NC CB HA CONECT C 3 CA O OXT CONECT O 1 C CONECT CB 4 CA CG HB2 HB3 CONECT CG 4 CB CD HG2 HG3 CONECT CD 4 N CG HD2 HD3 CONECT OXT 2 C HXT CONECT H 1 N CONECT HA 1 CA CONECT HB2 1 CB CONECT HB3 1 CB CONECT HG2 1 CG CONECT HG3 1 CG CONECT HD2 1 CD CONECT HD3 1 CD CONECT HXT 1 OXT END HET PRO 17 HETNAM PRO PROLINE FORMUL PRO C5 H9 N1 O2

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

ในส่วนนี้จะอธิบายเฉพาะตารางที่สำคัญที่สุดเท่านั้น

ตารางหลักคือ:

  • proteins : ตารางที่มีชื่อและรหัสการทดลอง
  • ps : ตารางโครงสร้างหลักซึ่งจะมี sequence chain_id และ code
  • ts : ตารางที่มีโครงสร้างระดับอุดมศึกษา/ควอเทอร์นารีที่ดึงมาจากข้อมูลดิบและแปลงเป็นรูปแบบระเบียน ATOM ซึ่งจะใช้เป็นตารางแสดง และสามารถดรอปได้หลังจากการสกัด ไม่รวมแกนด์
  • sources : รายชื่อสิ่งมีชีวิตที่ได้รับข้อมูลการทดลอง
  • tax_names , taxonomy_path , taxonomy_paths : ชื่ออนุกรมวิธาน Linnean จากฐานข้อมูลอนุกรมวิธาน NCBI ใช้เพื่อรับเส้นทางอนุกรมวิธานจากสิ่งมีชีวิตที่ระบุไว้ใน sources
  • nr : รายชื่อโปรตีนที่ไม่ซ้ำซ้อนของ NCBI ที่สกัดจากชุด NR
  • pdb_ssbond : รายการพันธะไดซัลไฟด์ในไฟล์ PDB ที่กำหนด

การกรองและประมวลผลข้อมูล

ดึงข้อมูลจากสแน็ปช็อตจากที่เก็บ RCSB PDB

แต่ละไฟล์จะถูกนำเข้าไปยังตารางเดียว raw_pdb ในฐานข้อมูล PostgreSQL ของเราโดยใช้สคริปต์ Perl สคริปต์ใช้ธุรกรรมการแทรก 10,000 รายการต่ออัน

โครงสร้างของ raw_pdb คือ:

คอลัมน์ พิมพ์ ตัวดัดแปลง
รหัส ตัวละครที่แตกต่างกัน(20) ไม่เป็นโมฆะ
line_num จำนวนเต็ม ไม่เป็นโมฆะ
line_cont ตัวละครที่แตกต่างกัน(80) ไม่เป็นโมฆะ

สคริปต์นำเข้ามีลักษณะดังนี้:

 #!/usr/bin/perl -w use FindBin '$Bin'; use DBI; $dbName = 'bioinf'; $dbLogin = 'ezop'; $dbPass = 'XYZ'; $conn = DBI->connect("DBI:Pg:database=$dbName;host=localhost", "$dbLogin", "$dbPass", {'RaiseError' => 1, 'AutoCommit' => 0}); die "./pdb_lines_unos.pl <table> <file>" if not defined($ARGV[0]); $recordCount = 0; $table = $ARGV[0]; $fName = $ARGV[1]; open F, "zcat $fName|"; while (<F>) { chomp; $linija = $_; $recordCount += 1; $sql = "insert into $table (code, line_num, line_cont) values (?, ?, ?)"; $conn->do($sql, undef, $fName, $recordCount, $linija); $conn->commit() if ($recordCount%10000 == 0); } close F; $conn->commit(); 1;

หลังจากนำเข้าบรรทัดแล้ว จะถูกแยกวิเคราะห์โดยใช้ฟังก์ชันที่เราจะกำหนดไว้ด้านล่าง

จากข้อมูล raw_pdb เราสร้างตาราง ts , ps , proteins , sources , sources_organela และ ss_bond โดยแยกวิเคราะห์เร็กคอร์ดที่เกี่ยวข้อง

ตาราง ps มีคอลัมน์สำคัญสามคอลัมน์: chain , length และ sequence ลำดับโปรตีนถูกสร้างขึ้นโดยใช้อะตอม C-alpha สำหรับแต่ละสายและสำหรับเรซิดิวแต่ละตัวที่เรียงลำดับโดยลำดับเรซิดิว โดยรับเฉพาะการสอดแทรกครั้งแรกและตำแหน่งสำรองที่หนึ่งเท่านั้น chain ถูกนำมาจากคอลัมน์ TS.chain และ length เป็นเพียงความยาวที่คำนวณล่วงหน้าของสตริง sequence เนื่องจากบทความนี้มีขึ้นเพื่อวิเคราะห์เฉพาะสายโซ่เดียวและการเชื่อมต่อภายในห่วงโซ่ การวิเคราะห์ของเราจึงข้ามโปรตีนหลายสาย

ภายในเร็กคอร์ด SSBOND พันธะไดซัลไฟด์ทั้งหมดจะถูกเก็บไว้ในตาราง pdb_ssbond ซึ่งสืบทอดมาจากตาราง pdb_ssbond_extended pdb_ssbond มีลักษณะดังนี้:

คอลัมน์ พิมพ์ Nullable ค่าเริ่มต้น คำอธิบาย
id จำนวนเต็ม ไม่เป็นโมฆะ nextval('pdb_ssbond_id_seq'::regclass)
รหัส ตัวละคร(4) รหัสสี่ตัวอักษร
ser_num จำนวนเต็ม หมายเลขซีเรียลของ ssbond
สารตกค้าง1 ตัวละคร(3) สารตกค้างแรกในพันธะ
chain_id1 ตัวละคร(1) ห่วงโซ่แรกในพันธบัตร
res_seq1 จำนวนเต็ม เลขลำดับของสารตกค้างแรก
i_code1 ตัวละคร(1) รหัสแทรกของสารตกค้างแรก
สารตกค้าง2 ตัวละคร(3) สารตกค้างที่สองในพันธะ
chain_id2 ตัวละคร(1) ห่วงโซ่ที่สองในพันธะ
res_seq2 จำนวนเต็ม เลขลำดับของสารตกค้างที่สอง
i_code2 ตัวละคร(1) รหัสแทรกของสารตกค้างที่สอง
ซิม1 ตัวละคร(6) ตัวดำเนินการสมมาตรตัวแรก
sym2 ตัวละคร(6) ตัวดำเนินการสมมาตรที่สอง
dist ตัวเลข(5,2) ระยะห่างระหว่างอะตอม
is_reactive บูลีน ไม่เป็นโมฆะ เท็จ ทำเครื่องหมายสำหรับการเกิดปฏิกิริยา (ที่จะตั้งค่า)
is_consecutive บูลีน ไม่เป็นโมฆะ จริง เครื่องหมายสำหรับพันธบัตรต่อเนื่อง (ที่จะกำหนด)
rep7 บูลีน ไม่เป็นโมฆะ เท็จ เครื่องหมายสำหรับโครงสร้าง set-7 (ที่จะกำหนด)
rep40 บูลีน ไม่เป็นโมฆะ เท็จ เครื่องหมายสำหรับโครงสร้าง set-40 (ที่จะกำหนด)
rep80 บูลีน ไม่เป็นโมฆะ เท็จ เครื่องหมายสำหรับโครงสร้าง set-80 (ที่จะกำหนด)
is_from_pdb บูลีน จริง นำมาจาก PDB เป็นแหล่ง (ที่จะตั้งค่า)

ฉันยังเพิ่มดัชนีเหล่านี้:

 "pdb_ssbond_pkey" PRIMARY KEY, btree (id) "ndxcode1" btree (code, chain_id1, res_seq1) "ndxcode2" btree (code, chain_id2, res_seq2)

สันนิษฐานว่าการกระจายของพันธะไดซัลไฟด์ก่อนจุดตัดเป็นแบบเกาส์เซียน (โดยไม่มีการทดสอบ เช่น การทดสอบ KS) ดังนั้นค่าเบี่ยงเบนมาตรฐานจึงคำนวณในแต่ละระยะห่างระหว่างซิสเทอีนในโปรตีนเดียวกันเพื่อค้นหาช่วงของความยาวพันธะที่อนุญาตและเปรียบเทียบ จนถึงจุดตัด คัทออฟเหมือนกับค่าเฉลี่ยที่คำนวณได้บวก-ลบสามส่วนเบี่ยงเบนมาตรฐาน เราได้ขยายช่วงเพื่อแนะนำพันธะไดซัลไฟด์ที่เป็นไปได้มากขึ้นซึ่งไม่ได้รวมอยู่ในไฟล์ PDB ในแถว SSBOND แต่เราแทรกตัวเองด้วยการคำนวณระยะทางระหว่างระเบียน ATOM ช่วงที่เลือกสำหรับ ssbonds อยู่ระหว่าง 1.6175344456264 และ 2.48801947642267 Å ซึ่งเป็นค่าเฉลี่ย (2.05) บวก-ลบสี่ส่วนเบี่ยงเบนมาตรฐาน:

 select count(1) as cnt , stddev(dist) as std_dev , avg(dist) as avg_val , -stddev(dist) + avg(dist) as left1 , stddev(dist) + avg(dist) as right1 , -2 * stddev(dist) + avg(dist) as left2 , 2 * stddev(dist) + avg(dist) as right2 , -3 * stddev(dist) + avg(dist) as left3 , 3 * stddev(dist) + avg(dist) as right3 , -4 * stddev(dist) + avg(dist) as left4 , 4 * stddev(dist) + avg(dist) as right4 , min(dist) , max(dist) from pdb_ssbond_tmp where dist > 0 and dist < 20;

ตาราง TS มีพิกัดของอะตอมทั้งหมด แต่จะใช้เฉพาะซีสเตอีนเท่านั้น โดยมีกำมะถันชื่อ " SG " ดังนั้นตารางการแสดงละครอื่นที่มีอะตอมกำมะถัน " SG " เท่านั้นจึงถูกสร้างขึ้นเพื่อเร่งกระบวนการโดยการลดจำนวนระเบียนที่จะค้นหา เมื่อเลือกเฉพาะกำมะถัน จำนวนของการรวมตัวจะน้อยกว่าในกรณีของอะตอมทั้งหมด—194,574 ของอะตอมเดิมเมื่อเทียบกับ 122,761,100 ของอะตอมทั้งหมด ภายในตารางนี้รวมเข้ากับตัวมันเอง ระยะทางจะคำนวณโดยใช้ระยะทางแบบยุคลิด และผลลัพธ์จะถูกนำเข้าไปยังตาราง pdb_ssbond แต่เฉพาะระยะห่างระหว่างความยาวที่กำหนดไว้ซึ่งคำนวณก่อนหน้านี้เท่านั้น เหตุผลในการเร่งความเร็วนี้คือการลดระยะเวลาในการเรียกใช้กระบวนการทั้งหมดอีกครั้ง—เพื่อจุดประสงค์ในการตรวจสอบ—โดยคงไว้ภายในหนึ่งวัน

ในการทำความสะอาดพันธะไดซัลไฟด์ เราใช้อัลกอริทึมต่อไปนี้:

  • ลบเมื่อจุดเชื่อมต่อทั้งสองด้านชี้ไปที่กรดอะมิโนตัวเดียวกัน
  • ลบพันธบัตรที่มีความยาวไม่ระหว่าง 1.6175344456264 ถึง 2.48801947642267
  • ลบการแทรก
  • ขจัดพันธะที่เกิดจากตำแหน่งอะตอมอื่น แต่ออกจากตำแหน่งแรก

รหัสสำหรับสิ่งนี้ (ใช้ตาราง pdb_ssbond เป็นอาร์กิวเมนต์แรก) คือ:

 CREATE OR REPLACE FUNCTION pdb_ssbond_clean2( clean_icodes boolean, clean_altloc boolean, mark_reactive boolean, mark_consecutive boolean) RETURNS void AS $$ declare _res integer; BEGIN delete from pdb_ssbond b where exists ( select a.id from pdb_ssbond a where a.code = b.code and a.id > b.id and ( ( a.chain_id1 = b.chain_id1 and a.res_seq1 = b.res_seq1 and a.chain_id2 = b.chain_id2 and a.res_seq2 = b.res_seq2) or ( a.chain_id1 = b.chain_id2 and a.res_seq1 = b.res_seq2 and a.chain_id2 = b.chain_id1 and a.res_seq2 = b.res_seq1) ) ) ; delete from pdb_ssbond where chain_id1 = chain_id2 and res_seq1 = res_seq2 and i_code1 = i_code2; update pdb_ssbond set is_consecutive = true , is_reactive = false; delete from pdb_ssbond where not dist between 1.6175344456264 and 2.48801947642267; if clean_icodes then delete from pdb_ssbond where i_code1 not in ('', ' ', 'A') or i_code2 not in ('', ' ', 'A') ; end if; if clean_altloc then delete from pdb_ssbond a where exists ( select 1 from pdb_ssbond b where b.code = a.code and b.chain_id1 = a.chain_id1 and b.res_seq1 = a.res_seq1 and b.i_code1 = a.i_code1 and b.ser_num < a.ser_num ) ; delete from pdb_ssbond a where exists ( select 1 from pdb_ssbond b where b.code = a.code and b.chain_id2 = a.chain_id2 and b.res_seq2 = a.res_seq2 and b.i_code2 = a.i_code2 and b.ser_num < a.ser_num ) ; end if; if mark_reactive then update pdb_ssbond set is_reactive = false ; update pdb_ssbond set is_reactive = true where exists ( select 1 from pdb_ssbond b where b.code = pdb_ssbond.code and b.chain_id1 = pdb_ssbond.chain_id1 and b.res_seq1 = pdb_ssbond.res_seq1 and b.i_code1 = pdb_ssbond.i_code1 and b.ser_num < pdb_ssbond.ser_num ) ; update pdb_ssbond set is_reactive = true where exists ( select 1 from pdb_ssbond b where b.code = pdb_ssbond.code and b.chain_id2 = pdb_ssbond.chain_id2 and b.res_seq2 = pdb_ssbond.res_seq2 and b.i_code2 = pdb_ssbond.i_code2 and b.ser_num < pdb_ssbond.ser_num ) ; update pdb_ssbond set is_reactive = true where (code, chain_id1, res_seq1, i_code1) in ( select code, chain_id1 as c, res_seq1 as r, i_code1 as i from pdb_ssbond intersect select code, chain_id2 as c, res_seq2 as r, i_code2 as i from pdb_ssbond ) ; update pdb_ssbond set is_reactive = true where (code, chain_id2, res_seq2, i_code2) in ( select code, chain_id1 as c, res_seq1 as r, i_code1 as i from pdb_ssbond intersect select code, chain_id2 as c, res_seq2 as r, i_code2 as i from pdb_ssbond ); end if; if mark_consecutive then update pdb_ssbond set is_consecutive = false; update pdb_ssbond set is_consecutive = true where not exists ( select 1 from pdb_ssbond a where a.code = pdb_ssbond.code and ( (a.chain_id1 = pdb_ssbond.chain_id1 and a.chain_id2 = pdb_ssbond.chain_id2) or (a.chain_id1 = pdb_ssbond.chain_id2 and a.chain_id2 = pdb_ssbond.chain_id1) ) and ( (a.res_seq1 between pdb_ssbond.res_seq1 and pdb_ssbond.res_seq2) or (a.res_seq2 between pdb_ssbond.res_seq1 and pdb_ssbond.res_seq2) or (pdb_ssbond.res_seq1 between a.res_seq1 and a.res_seq2) or (pdb_ssbond.res_seq2 between a.res_seq1 and a.res_seq2) ) and not ( a.code = pdb_ssbond.code and a.chain_id1 = pdb_ssbond.chain_id1 and a.chain_id2 = pdb_ssbond.chain_id2 and a.res_seq1 = pdb_ssbond.res_seq1 and a.res_seq2 = pdb_ssbond.res_seq2 ) ); end if; END; $$ LANGUAGE plpgsql;

ด้วยเหตุนี้ ชุดโปรตีนที่ไม่ซ้ำซ้อนจึงถูกนำเข้าไปยังตาราง nr ซึ่งเชื่อมต่อกับตาราง ps และ proteins และชุดจะถูกทำเครื่องหมาย ( set7 , set40 และ set80 ) ในตอนท้ายตามปริมาณโปรตีนจะวิเคราะห์เพียงชุดเดียวเท่านั้น สายโซ่ที่ไม่ตรงกันระหว่าง PDB และ NR จะถูกลบออกจากการวิเคราะห์

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

สำหรับโปรตีนที่เหลือ จะมีการอัพเดตจำนวนรวมของพันธะและจำนวนของพันธะที่ทับซ้อนกัน ซึ่งจะทำสำหรับแต่ละชุด

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

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

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

 select * from sources_organela where code = '1rav';
รหัส mol_id แท็ก วาล
1rav 0 MOL_ID 1
1rav 7 CELLULAR_LOCATION ไซโทพลาสซึม (สีขาว)

ไฟล์เก็บถาวรอนุกรมวิธานที่เราต้องการใช้เป็นไฟล์ ZIP ที่มีไฟล์ดัมพ์เจ็ดไฟล์ ในบรรดาไฟล์เหล่านี้ สองไฟล์ที่สำคัญที่สุดคือ names.dmp และ merged.dmp ทั้งสองไฟล์เป็นไฟล์ที่คั่นด้วยแท็บไปป์ CSV ตามรายละเอียดในเอกสารประกอบ:

  • ไฟล์ merged.dmp มีรายการของ taxonomy IDs ก่อนหน้า และ taxonomy IDs ปัจจุบันที่แต่ละอันถูกรวมเข้าด้วยกัน
  • names.dmp มีคอลัมน์สำคัญเหล่านี้ในลำดับนี้:
    • tax_id : อนุกรมวิธาน ID
    • name_txt : ชื่อของสปีชีส์ และถ้ามี ชื่อเฉพาะ (ซึ่งสปีชีส์สามารถพบได้หลายชื่อ วิธีนี้จะช่วยแก้ความกำกวม)
  • division.dmp มีชื่อโดเมนระดับบนสุดที่เราจะใช้เป็นคลาสของเรา
  • nodes.dmp เป็นตารางที่มีโครงสร้างลำดับชั้นของสิ่งมีชีวิตโดยใช้อนุกรมวิธาน ID
    • ประกอบด้วย ID อนุกรมวิธานหลัก ซึ่งเป็นคีย์ต่างประเทศที่สามารถพบได้ใน names.dmp
    • นอกจากนี้ยังมีรหัสแผนกซึ่งเป็นสิ่งสำคัญสำหรับเราในการจัดเก็บข้อมูลโดเมนระดับบนสุดที่เกี่ยวข้องอย่างถูกต้อง

ด้วยข้อมูลทั้งหมดนี้และการแก้ไขด้วยตนเอง (การตั้งค่าโดเมนที่ถูกต้องของชีวิต) เราจึงสามารถสร้างโครงสร้างของตาราง taxonomy_path ได้ การสุ่มตัวอย่างข้อมูลมีลักษณะดังนี้:

 select * from taxonomy_path order by length(path) limit 20 offset 2000;
tax_id เส้นทาง is_viral is_eukaryote is_archaea is_other is_prokaryote
142182 สิ่งมีชีวิตเซลล์;แบคทีเรีย;เจมมาติโมนาเดเตส t
136087 สิ่งมีชีวิตเซลล์ ยูคาริโอต Malawimonadidae t
649454 ไวรัส;ฟาจที่ไม่จำแนกประเภท;Cyanophage G1168 t
321302 ไวรัส;ไวรัสที่ไม่ได้จำแนกประเภท;ไวรัส Tellina 1 t
649453 ไวรัส;ฟาจที่ไม่จำแนกประเภท;Cyanophage G1158 t
536461 ไวรัส;ฟาจที่ไม่จำแนกประเภท;Cyanophage S-SM1 t
536462 ไวรัส;ฟาจที่ไม่จำแนกประเภท;Cyanophage S-SM2 t
77041 ไวรัส;ไวรัสที่ไม่ได้จำแนกประเภท;ไวรัส Stealth 4 t
77042 ไวรัส;ไวรัสที่ไม่ได้จำแนกประเภท;ไวรัส Stealth 5 t
641835 ไวรัส;ฟาจที่ไม่จำแนกประเภท Vibrio phage 512 t
1074427 ไวรัส;ไวรัสที่ไม่ได้จำแนกประเภท;Mouse Rosavirus t
1074428 ไวรัส;ไวรัสที่ไม่ได้จำแนกประเภท;Mosavirus ของเมาส์ t
480920 ลำดับอื่นๆ พลาสมิด IncP-1 พลาสมิด 6-S1 t
2441 ลำดับอื่นๆ พลาสมิดพลาสมิด ColBM-Cl139 t
168317 ลำดับอื่นๆ พลาสมิด IncQ พลาสมิด pIE723 t
536472 ไวรัส;ฟาจที่ไม่จำแนกประเภท;Cyanophage Syn10 t
536474 Viruses;unclassified phages;Cyanophage Syn30 t
2407 other sequences;transposons;Transposon Tn501 t
227307 Viruses;ssDNA viruses;Circoviridae;Gyrovirus t
687247 Viruses;unclassified phages;Cyanophage ZQS-7 t

Before any analysis, to avoid biases, sequences have to be checked for their level of identity. Although the NR set contains sequences which are already compared between each other, an extra check is always recommended.

For each disulfide bond's prior statistical analysis, data is marked if it is reactive or overlapping. After marking overlaps, that information automatically reveals how many consecutive and non-consecutive bonds are inside each protein, and that data is stored in the proteins table from which all protein complexes are excluded in final result.

Each disulfide bond is marked also for its association to sets, by checking both bond sides to see if they belong to the same NR set. Where that is not the case, the disulfide bond is skipped for that set analysis.

To analyze the quantity of bonds by their variance, each length has to be put in a specific class. In this case, only five classes are chosen as written in the function below.

 CREATE OR REPLACE FUNCTION len2class(len integer) RETURNS integer AS $BODY$ BEGIN return case when len <= 100 then 1 when len > 100 and len <= 200 then 2 when len > 200 and len <= 300 then 3 when len > 300 and len <= 400 then 4 else 5 end; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;

Most of the protein sizes are less than 400 amino acids, so length classification is done by splitting lengths into five ranges, each taking 100 amino acids, except the last one which takes the rest. Below you can see how to use this function to extract data for analysis:

 SELECT p.code, p.title, p.ss_bonds, p.ssbonds_overlap, p.intra_count, p.sci_name_src, p.len, p.tax_path, p.pfam_families, p.src_class, ( SELECT s.id FROM src_classes s WHERE s.src_class::text = p.src_class::text) AS src_class_id, p.len_class7, ( SELECT s.val FROM sources_organela s WHERE s.code = p.code::bpchar AND s.tag::text = 'EXPRESSION_SYSTEM_CELLULAR_LOCATION'::text) AS expression_system_cellular_location, ( SELECT s.val FROM sources_organela s WHERE s.code = p.code::bpchar AND s.tag::text = 'CELLULAR_LOCATION'::text) AS cellular_location, ps.sequence, ps.uniprot_code, ps.accession_code, ps.cc, ps.seq_uniprot, ps.chain_id FROM proteins p JOIN nr n ON n.code::text = p.code::text AND n.rep7 = true JOIN ps ps ON ps.code::text = n.code::text AND ps.chain_id = n.chain_id AND ps.het = false WHERE p.is_excluded = false AND p.chain_cnt = 1 AND p.is_set7 = true AND p.reactive_cnt7 = 0 ORDER BY p.code;

An example result with corrected titles and some manually added columns is shown below.

รหัส PDB จำนวนพันธบัตร SS ทั้งหมด จำนวนพันธบัตร SS ที่ไม่ต่อเนื่องกัน ความยาว PDB / กรดอะมิโน โดเมน TargetP 1.1 แททพี 1.0 สัญญาณP 4.1 คลอโรพี 1.1 TMHMM 2.0 จำนวนโดเมนทรานส์เมมเบรน บิ๊กปี้ nucPred NetNES 1.1 PSORTb v3.0 SecretomeP 2.0 LocTree2 การทำนายการแปลเป็นเอกฉันท์
1akp 2 0 114 แบคทีเรีย ND Tat-สัญญาณ ไม่มีเปปไทด์สัญญาณ ND 0 ND ND ND ไม่รู้จัก ND ฟิมเบรียม ไม่รู้จัก
1ภู 2 0 102 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 1 ND ND ND ไม่รู้จัก ND หลั่ง ไม่รู้จัก
1c75 0 0 71 แบคทีเรีย ND Tat-สัญญาณ ไม่มีเปปไทด์สัญญาณ ND 0 ND ND ND เยื่อหุ้มเซลล์ไซโตพลาสซึม การหลั่งแบบไม่คลาสสิก ปริพลาสซึม ไม่รู้จัก
1c8x 0 0 265 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 1 ND ND ND ไม่รู้จัก ND หลั่ง ไม่รู้จัก
1cx1 1 0 153 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 1 ND ND ND นอกเซลล์ ND หลั่ง ไม่รู้จัก
1dab 0 0 539 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 0 ND ND ND เยื่อหุ้มชั้นนอก ND เยื่อหุ้มชั้นนอก ไม่รู้จัก
1dfu 0 0 94 แบคทีเรีย ND Tat-สัญญาณ ไม่มีเปปไทด์สัญญาณ ND 0 ND ND ND ไซโตพลาสซึม ND ไซโตซอล ไม่รู้จัก
1e8r 2 2 50 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 0 ND ND ND ไม่รู้จัก ND หลั่ง หลั่ง
1esc 3 0 302 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 1 ND ND ND นอกเซลล์ ND ปริพลาสซึม ไม่รู้จัก
1g6e 1 0 87 แบคทีเรีย ND Tat-สัญญาณ เปปไทด์สัญญาณ ND 1 ND ND ND ไม่รู้จัก ND หลั่ง ไม่รู้จัก

PostgreSQL เป็นตัวกลางในการประมวลผล

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

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


ขอขอบคุณเป็นพิเศษกับเพื่อนร่วมงานของ Toptal Stefan Fuchs และ Aldo Zelen สำหรับการให้คำปรึกษาอันล้ำค่าของพวกเขา