เครื่องมือและโปรโตคอลสำหรับวิทยาศาสตร์ข้อมูลที่สามารถทำซ้ำได้โดยใช้ Python


50

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

  1. เครื่องมือสำหรับการควบคุมเวอร์ชันของข้อมูล
  2. เครื่องมือที่เปิดใช้งานการทำซ้ำขั้นตอนและการทดลอง
  3. โปรโตคอลและโครงสร้างไดเรกทอรีที่แนะนำสำหรับโครงการดังกล่าว
  4. เครื่องมือสร้าง / เรียกใช้อัตโนมัติ

2
เป็นที่คำถามในคำถามนี้หรือไม่? โปรดสละเวลาสักครู่เพื่ออ่านหลักเกณฑ์ของศูนย์ช่วยเหลือโดยเฉพาะ: "หากแรงจูงใจของคุณในการถามคำถามคือ 'ฉันต้องการมีส่วนร่วมในการอภิปรายเกี่ยวกับ ______' คุณไม่ควรถามคำถามที่นี่"
อากาศ

"คุณควรถามคำถามที่ปฏิบัติได้จริงและตอบได้ตามปัญหาจริงที่คุณเผชิญอยู่"
Yuval F

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

คำตอบ:


46

หัวข้อของการวิจัยที่ทำซ้ำ (RR) เป็นที่นิยมมากในวันนี้และดังนั้นจึงมีขนาดใหญ่มากแต่ฉันหวังว่าคำตอบของฉันจะครอบคลุมเพียงพอในการตอบและจะให้ข้อมูลที่เพียงพอสำหรับการวิจัยเพิ่มเติมหากคุณตัดสินใจทำเช่นนั้น

ในขณะที่มีเครื่องมือเฉพาะของ Python สำหรับ RR อยู่จริงฉันคิดว่ามันสมเหตุสมผลมากกว่าที่จะมุ่งเน้นไปที่เครื่องมือที่เป็นสากลมากขึ้น(คุณไม่มีทางแน่ใจได้เลยว่าภาษาการเขียนโปรแกรมและสภาพแวดล้อมการคำนวณที่คุณจะทำงานด้วยในอนาคต) ต้องบอกว่ามาดูกันว่ามีเครื่องมืออะไรบ้างสำหรับรายการของคุณ

1) เครื่องมือสำหรับการควบคุมเวอร์ชันข้อมูล ถ้าคุณวางแผนที่จะทำงานกับข้อมูลขนาดใหญ่ (มาก) ฉันคิดว่ามันสมเหตุสมผลที่จะใช้gitซึ่งคุณใช้สำหรับการควบคุมเวอร์ชันของซอร์สโค้ด โครงสร้างพื้นฐานมีอยู่แล้ว แม้ว่าไฟล์ของคุณจะไบนารีและใหญ่คำแนะนำนี้อาจจะเป็นประโยชน์: https://stackoverflow.com/questions/540535/managing-large-binary-files-with-git

2) เครื่องมือสำหรับการจัดการเวิร์กโฟลว์ RR และการทดลอง นี่คือรายการเครื่องมือที่ได้รับความนิยมสูงสุดในหมวดหมู่นี้เพื่อความรู้ที่ดีที่สุดของฉัน (เรียงตามลำดับความนิยม):

  • ระบบการจัดการเวิร์กโฟลว์ Taverna ( http://www.taverna.org.uk ) - มีความแข็งแกร่งมากหากเป็นชุดเครื่องมือที่ซับซ้อนเกินไป เครื่องมือสำคัญคือซอฟต์แวร์เดสก์ท็อปที่ใช้ Java อย่างไรก็ตามมันเข้ากันได้กับพอร์ทัลที่เก็บเวิร์กโฟลว์ออนไลน์myExperiment ( http://www.myexperiment.org ) ซึ่งผู้ใช้สามารถจัดเก็บและแบ่งปันเวิร์กโฟลว์ RR ของพวกเขา พอร์ทัล RR บนเว็บที่เข้ากันได้กับTavernaเรียกว่าTaverna Onlineแต่กำลังได้รับการพัฒนาและดูแลโดยองค์กรที่แตกต่างกันโดยสิ้นเชิงในรัสเซีย (เรียกว่าOnlineHPC : http://onlinehpc.com )

  • The Kepler Project ( https://kepler-project.org )

  • VisTrails ( http://vistrails.org )

  • มาดากัสการ์ ( http://www.reproducibility.org )

ตัวอย่าง ต่อไปนี้เป็นบทความที่น่าสนใจเกี่ยวกับขั้นตอนการทำงานทางวิทยาศาสตร์ที่มีตัวอย่างของการที่จริงการออกแบบขั้นตอนการทำงานและการวิเคราะห์ข้อมูลพื้นฐานเกี่ยวกับการใช้เคปเลอร์และmyExperimentโครงการ: http://f1000research.com/articles/3-110/v1

มีเครื่องมือ RR จำนวนมากที่ใช้กระบวนทัศน์การเขียนโปรแกรมเชิงความรู้เป็นตัวอย่างโดยLaTeXตระกูลซอฟต์แวร์ เครื่องมือที่ช่วยในการสร้างและการนำเสนอรายงานเป็นหมวดหมู่ขนาดใหญ่ด้วยซึ่งที่ไหนSweaveและknitrน่าจะเป็นที่รู้จักมากที่สุด Sweaveเป็นเครื่องมือที่เน้นไปที่ R แต่สามารถรวมเข้ากับโครงการที่ใช้ Python แม้ว่าจะมีความพยายามเพิ่มเติม ( https://stackoverflow.com/questions/2161152/sweave-for-python ) ฉันคิดว่าknitrอาจเป็นตัวเลือกที่ดีกว่าเนื่องจากทันสมัยมีการสนับสนุนอย่างกว้างขวางจากเครื่องมือยอดนิยม (เช่นRStudio) และเป็นกลางทางภาษา ( http://yihui.name/knitr/demo/engines )

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

สำหรับโครงสร้างไดเรกทอรีตัวอย่างคุณสามารถดูเอกสารประกอบสำหรับแพ็กเกจ R ProjectTemplate( http://projecttemplate.net ) ซึ่งเป็นความพยายามในการทำให้เวิร์กโฟลว์และโครงการวิเคราะห์ข้อมูลอัตโนมัติ:

ป้อนคำอธิบายรูปภาพที่นี่

4) เครื่องมือสร้าง / เรียกใช้อัตโนมัติ ตั้งแต่คำตอบของฉันคือการมุ่งเน้นสากล (ภาษากลาง) เครื่องมือ RR makeเครื่องมือที่นิยมมากที่สุดคือ อ่านบทความต่อไปด้วยเหตุผลบางอย่างที่จะใช้makeเป็น RR เวิร์กโฟลว์เครื่องมืออัตโนมัติที่แนะนำ: http://bost.ocks.org/mike/make แน่นอนว่ามีเครื่องมืออื่นที่คล้ายคลึงกันซึ่งอาจปรับปรุงบางด้านmakeหรือเพิ่มคุณสมบัติเพิ่มเติมบางอย่าง ตัวอย่างเช่น: ant(อย่างเป็นทางการ, Apache Ant: http://ant.apache.org ), Maven("รุ่นต่อไปant": http://maven.apache.org ), rake( https://github.com/ruby/rake ) , Makepp( http://makepp.sourceforge.net) สำหรับรายการที่ครอบคลุมของเครื่องมือดังกล่าวให้ดูที่วิกิพีเดีย: http://en.wikipedia.org/wiki/List_of_build_automation_software


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

@ gaborous: ฉันรู้เกี่ยวกับความหมายของการเขียนโปรแกรมและไม่ได้รวมลิงก์ไปยังกระบวนทัศน์เนื่องจากมีหลายแหล่งสำหรับสิ่งนั้นและพวกเขาหาง่ายมาก อย่างไรก็ตามขอขอบคุณสำหรับความคิดเห็นของคุณ
Aleksandr Blekh

1
ฉันเดาได้ว่าทำไมผมเพิ่มข้อมูลนี้เป็นความคิดเห็นสำหรับผู้อ่านที่สนใจ :)
gaborous

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

@ AN6U5: ขอบคุณสำหรับคำพูดดี ๆ ! ฉันเห็นด้วย - ฉันพลาดมุมมองนั้น (+1) โปรดอัปเดตคำตอบของฉันเพิ่มข้อมูลโดยย่อที่เกี่ยวข้องกับการตรวจสอบข้าม
Aleksandr Blekh

23

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

1) ใส่ทุกอย่างไว้ภายใต้การควบคุมเวอร์ชันเช่น Git:

สำหรับโครงการวิจัยงานอดิเรกฉันใช้ GitHub สำหรับการวิจัยในที่ทำงานฉันใช้เซิร์ฟเวอร์ GitLab ส่วนตัวที่มหาวิทยาลัยของเราให้บริการ ฉันเก็บชุดข้อมูลไว้ที่นั่นด้วย

2) ฉันทำการวิเคราะห์ส่วนใหญ่ของฉันพร้อมกับเอกสารประกอบในสมุดบันทึก IPython มันมีการจัดระเบียบอย่างมาก (สำหรับฉัน) ที่จะมีรหัสพล็อตและการอภิปราย / ข้อสรุปทั้งหมดในเอกสารเดียวหากฉันใช้งานสคริปต์ที่ใหญ่กว่าปกติฉันจะใส่มันไว้ในไฟล์. py สคริปต์แยกต่างหาก แต่ฉันจะยังคงรันมัน จากโน้ตบุ๊ก IPython ผ่าน% run magic เพื่อเพิ่มข้อมูลเกี่ยวกับวัตถุประสงค์ผลลัพธ์และพารามิเตอร์อื่น ๆ

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

ตัวอย่างเช่น


%watermark

29/06/2014 01:19:10

CPython 3.4.1
IPython 2.1.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit


%watermark -d -t

29/06/2014 01:19:11 


%watermark -v -m -p numpy,scipy

CPython 3.4.1
IPython 2.1.0

numpy 1.8.1
scipy 0.14.0

compiler   : GCC 4.2.1 (Apple Inc. build 5577)
system     : Darwin
release    : 13.2.0
machine    : x86_64
processor  : i386
CPU cores  : 2
interpreter: 64bit

สำหรับข้อมูลเพิ่มเติมโปรดดูที่เอกสารที่นี่


2
ฉันชอบเวทมนตร์ลายน้ำ สำหรับผู้ที่ไม่ทราบว่าตอนนี้ GitHub มีพื้นที่เก็บข้อมูลส่วนตัวฟรีถึง 5 แห่งสำหรับผู้ใช้ที่เกี่ยวข้องกับสถาบันการศึกษา
bogatron

19

เครื่องมือทำซ้ำที่ดีที่สุดคือสร้างบันทึกการกระทำของคุณดังนี้:

experiment/input ; expected ; observation/output ; current hypothesis and if supported or rejected
exp1 ; expected1 ; obs1 ; some fancy hypothesis, supported

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

เครื่องมือการทำซ้ำที่ยอดเยี่ยมสำหรับ Python ที่มีเส้นโค้งการเรียนรู้ต่ำแน่นอนว่าโน๊ตบุ๊ค IPython / Jupyter (อย่าลืม% logon และ% logstart magics ) เคล็ดลับ: เพื่อให้แน่ใจว่าโน้ตบุ๊คของคุณสามารถทำซ้ำได้ให้รีสตาร์ทเคอร์เนลและพยายามเรียกใช้เซลล์ทั้งหมดจากบนลงล่าง (ปุ่มเรียกใช้เซลล์ทั้งหมด): ถ้าใช้งานได้ให้บันทึกทุกอย่างในไฟล์เก็บถาวร ("แช่แข็ง") หากคุณต้องการเรียกใช้เซลล์ในลักษณะที่ไม่เป็นเชิงเส้นและไม่ต่อเนื่องและไม่ชัดเจนเพื่อหลีกเลี่ยงข้อผิดพลาดคุณจะต้องทำใหม่อีกครั้ง

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

Gitนั้นยอดเยี่ยมมากและไม่ผูกติดกับ Python มันจะช่วยให้คุณไม่เพียง แต่เก็บประวัติการทดลองรหัสชุดข้อมูลตัวเลขและอื่น ๆ ทั้งหมดของคุณเท่านั้น แต่ยังช่วยให้คุณมีเครื่องมือในการดูแลรักษา ( git pickaxe ) ร่วมมือ ( ตำหนิ ) และ debug ( git - bisect ) โดยใช้วิทยาศาสตร์ วิธีการแก้จุดบกพร่อง (เรียกว่าการแก้จุดบกพร่องเดลต้า ) นี่คือเรื่องราวของนักวิจัยที่สวมบทบาทพยายามสร้างระบบบันทึกการทดลองของเขาเองจนกระทั่งมันกลายเป็นโทรสารของ Git

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

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

  • พารามิเตอร์ทั้งหมดที่คุณให้ไว้;
  • สถานะซอร์สโค้ดที่แน่นอนของแอปพลิเคชันทดสอบและไฟล์กำหนดค่าทั้งหมดของคุณ
  • ผลลัพธ์ / แปลง / ผลลัพธ์และไฟล์ใด ๆ ที่สร้างโดยแอปพลิเคชันทดสอบของคุณ

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

เครื่องมือที่ยอดเยี่ยมอีกอย่างหนึ่งคือZeitgeist ของ GNOME (ก่อนหน้านี้เขียนใน Python แต่ตอนนี้เปลี่ยนเป็น Vala) ซึ่งเป็นระบบบันทึกการกระทำที่มีรูปแบบการทำเข็มทิศซึ่งบันทึกทุกสิ่งที่คุณทำและสามารถใช้การเรียนรู้ของเครื่องเพื่อสรุปช่วงเวลาที่คุณต้องการ เกี่ยวกับความคล้ายคลึงกันและรูปแบบการใช้งานเช่นตอบคำถามเช่น"สิ่งใดที่เกี่ยวข้องกับฉันมากที่สุดขณะที่ฉันทำงานโครงการ X เป็นเวลาหนึ่งเดือนเมื่อปีที่แล้ว" . ที่น่าสนใจZim Desktop Wikiซึ่งเป็นแอพจดบันทึกที่คล้ายกับ Evernote มีปลั๊กอินสำหรับทำงานกับ Zeitgeist

ในท้ายที่สุดคุณสามารถใช้ Git หรือ Sumatra หรือซอฟต์แวร์อื่น ๆ ที่คุณต้องการพวกเขาจะให้พลังการทำซ้ำที่เท่ากัน แต่สุมาตราได้รับการปรับแต่งเป็นพิเศษสำหรับการวิจัยทางวิทยาศาสตร์ดังนั้นจึงมีเครื่องมือแฟนซีบางอย่างเช่นเว็บ GUI เพื่อรวบรวมข้อมูล ผลลัพธ์ของคุณในขณะที่ Git ปรับให้เหมาะกับการบำรุงรักษาโค้ดมากขึ้น (แต่มีเครื่องมือในการแก้ไขข้อบกพร่องเช่น git-bisect ดังนั้นหากการทดสอบของคุณเกี่ยวข้องกับรหัสมันอาจจะดีกว่า) หรือแน่นอนคุณสามารถใช้ทั้งสองอย่าง!

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

ส่วนตัวในการคำนวณทางวิทยาศาสตร์กับงูหลาม, ฉันได้พบว่าบรรจุภัณฑ์ใบสมัครพร้อมกับห้องสมุดเป็นเพียงเจ็บปวดเกินไปดังนั้นตอนนี้ผมเพียงแค่ใช้แพคเกจทั้งหมดในหนึ่งเดียวหลามวิทยาศาสตร์เช่นงู (กับผู้จัดการแพคเกจที่ดีCONDA ) และเพียงแค่แนะนำผู้ใช้ให้ใช้แพ็คเกจเดียวกัน อีกวิธีหนึ่งคือการจัดทำสคริปต์เพื่อสร้างvirtualenvโดยอัตโนมัติหรือจัดทำทุกอย่างโดยใช้แอปพลิเคชัน Dockerเชิงพาณิชย์ตามที่อ้างโดย dsignหรือ opensource Vagrant (ตัวอย่างเช่นpylearn2-in-a-boxซึ่งใช้ Vagrant เพื่อแจกจ่ายซ้ำได้อย่างง่ายดาย แพ็คเกจสภาพแวดล้อมเสมือน)

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

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


14

ให้แน่ใจว่าได้ตรวจสอบนักเทียบท่า ! และโดยทั่วไปสิ่งที่ดีอื่น ๆ ทั้งหมดที่วิศวกรรมซอฟต์แวร์ได้สร้างขึ้นมานานหลายทศวรรษเพื่อให้แน่ใจว่ามีการแยกและทำซ้ำได้

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

ที่นี่ฉันพบว่านักเทียบท่ามีประโยชน์ นักเทียบท่าเป็นวิธีที่จะทำให้เป็นระเบียบและรวบรวมสูตรสำหรับสภาพแวดล้อมแบบไบนารี คุณสามารถเขียนสิ่งต่อไปนี้ใน dockerfile (ฉันใช้ภาษาอังกฤษธรรมดาที่นี่แทนไวยากรณ์ Dockerfile):

  • เริ่มต้นด้วยสภาพแวดล้อมไบนารีพื้นฐานเช่นเดียวกับอูบุนตู
  • ติดตั้ง libsparse-dev
  • (Pip) ติดตั้งจำนวน numpy และ scipy
  • ติดตั้ง X
  • ติดตั้ง libX-dev
  • (Pip) ติดตั้ง python-X
  • ติดตั้ง IPython-Notebook
  • คัดลอกสคริปต์ / โน๊ตบุ๊ค ธ ไปยังสภาพแวดล้อมแบบไบนารี่ของฉันดาต้าไทล์เหล่านี้และการกำหนดค่าเหล่านี้เพื่อทำสิ่งอื่น ๆ เพื่อให้มั่นใจว่าสามารถทำสำเนาได้ให้คัดลอกจาก url ที่มีชื่อแทนที่จะเป็นไฟล์โลคัล
  • อาจเรียกใช้ IPython-Notebook

บางบรรทัดจะติดตั้งสิ่งต่าง ๆ ใน Python โดยใช้ pip เนื่องจาก pip สามารถทำงานที่สะอาดมากในการเลือกเวอร์ชันแพ็คเกจที่ต้องการ ลองดูสิ!

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

docker run dockerregistery.thewheezylab.org/nowyouwillbelieveme

หรือหากพวกเขาต้องการที่จะกระตุ้นในสคริปต์ของคุณและอื่น ๆ :

docker run -i -t dockerregistery.thewheezylab.org/nowyouwillbelieveme /bin/bash

8

น่าเสียดายที่ฉันมีคะแนนชื่อเสียงไม่เพียงพอที่จะตอบโพสต์โดย Plank ดังนั้นต้องตอบคำถามทั้งหมด - ขอโทษด้วย

จริงๆแล้วฉันเป็นผู้พัฒนากรอบความรู้แบบสะสมโอเพนซอร์ซที่กล่าวถึงข้างต้น มันพยายามที่จะลดความซับซ้อนของการแบ่งปันสิ่งประดิษฐ์และเวิร์กโฟลว์การทดลองเป็นองค์ประกอบ Python ที่สามารถนำมาใช้ซ้ำและทำซ้ำได้ด้วย meta JSON API และ JSON ที่รวมกันผ่าน GitHub พวกเขายังสามารถเชื่อมต่อกับการวิเคราะห์เชิงทำนายด้วย JSON API แบบรวม

เราเพิ่งเปิดตัว V1.8.1 เวอร์ชันใหม่และให้เอกสารมากมายดังนั้นหวังว่าจะเข้าใจแนวคิดได้ง่ายขึ้นในตอนนี้: http://github.com/ctuning/ck/wiki

ขณะนี้เรามีโครงการทางวิชาการและอุตสาหกรรมมากมายตามกรอบนี้ดังนั้นคุณอาจตรวจสอบหนึ่งในนั้น - การเพิ่มประสิทธิภาพโปรแกรม crowdsourcing บนอุปกรณ์มือถือที่จัดทำโดยอาสาสมัครในลักษณะที่ทำซ้ำได้: http://cknowledge.org/repo

นอกจากนี้เรายังติดตามทรัพยากรต่าง ๆ ที่เกี่ยวข้องกับวิทยาศาสตร์แบบจำลองได้ที่นี่: https://github.com/ctuning/ck/wiki/Enabling-open-science

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


1
สรุปฤดูร้อนนี้เกี่ยวกับการวิจัยที่ทำซ้ำได้ (รวมถึงลิงก์ไปยังเครื่องมือที่เกี่ยวข้องชุดข้อมูลบทความและกิจกรรม) อาจเป็นที่สนใจเช่นgithub.com/ctuning/ck/wiki/Enabling-open-scen-blog-20160919
gfursin

7

มีหลักสูตรทั้งหมดที่อุทิศให้กับการวิจัยที่ทำซ้ำได้ https://www.coursera.org/learn/reproducible-research หลักสูตรนี้มีพื้นฐานจาก R แต่สามารถเรียนรู้แนวคิดพื้นฐานได้

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


6

ฉันเพิ่งมาข้ามเครื่องมือดังต่อไปนี้ - http://github.com/ctuning/ck มันเขียนไว้แล้วใน Python และดูเหมือนว่าจะรวมสิ่งที่คุณต้องการ (เพื่อนร่วมงานของฉันใช้มันในโครงการนำร่องเพื่อให้การรับรู้ภาพเป็นไปโดยอัตโนมัติ)

ข้อดี:

  1. เล็กมากพกพาและปรับแต่งได้
  2. รวมถึงเว็บเซิร์ฟเวอร์เพื่อกระจายการทดสอบและประมวลผลโดยใช้การวิเคราะห์เชิงทำนาย
  3. มีตัวอย่างการใช้งานเย็นเพื่อ crowdsource และทำซ้ำการเพิ่มประสิทธิภาพของคอมไพเลอร์ - http://cknowledge.org/repo

จุดด้อย:

  1. ระดับต่ำ - คุณต้องใช้เวิร์กโฟลว์ของคุณเองจากส่วนประกอบ Python ที่แชร์ผ่าน GitHub โดยใช้ JSON API หรือบรรทัดคำสั่ง
  2. เอกสารค่อนข้างซับซ้อน - ฉันหวังว่าพวกเขาจะหาเวลาอัปเดตในไม่ช้า

6

ฉันได้สร้างและเพิ่งเปิดตัวเครื่องมือโอเพนซอร์ซhttp://dvc.orgหรือ DVC ที่ทำสิ่งที่คุณพยายามจะเข้าถึง:

  1. [เครื่องมือสำหรับการควบคุมเวอร์ชันของข้อมูล] DVC ทำงานบน Git เพิ่มการควบคุมเวอร์ชันของไฟล์ข้อมูล (ไฟล์ถูกเก็บไว้นอก Git) และติดตามการพึ่งพาระหว่างรหัสและไฟล์ข้อมูล DVC ได้รับกราฟการพึ่งพา (DAG) สำหรับรหัสและข้อมูลโดยอัตโนมัติ
  2. [เครื่องมือที่เปิดใช้งานการทำซ้ำขั้นตอนและการทดลอง] dvc repro data/scores.csvจำลองขั้นตอนที่จำเป็นทั้งหมดเกี่ยวกับ DAG
  3. [โปรโตคอลและโครงสร้างไดเรกทอรีที่แนะนำสำหรับโครงการดังกล่าว] DVC ต้องการไดเรกทอรีข้อมูล ( dataโดยค่าเริ่มต้น) ซึ่งคุณควรจัดเก็บไฟล์ข้อมูลทั้งหมด อย่างไรก็ตาม DVC ย้ายเนื้อหาที่แท้จริงไปยัง.cacheไดเรกทอรีและสร้างsymlink อย่างโปร่งใส(ใช่ฉันทำให้มันทำงานบน Windows ได้เช่นกัน) .cacheไดเรกทอรีไม่ซิงค์กับ Git แต่มันอาจจะได้รับการซิงค์ผ่านเมฆ (S3 หรือ GCP) โดยคำสั่งdvc sync data/scores.csv(มันซิงค์แฟ้มข้อมูลที่สอดคล้องกับจากแคชเหมือน.cache/scores.csv_29de545)
  4. [เครื่องมือสร้าง / เรียกใช้อัตโนมัติ] ดูจากด้านบน

DVC กวดวิชาเป็นจุดเริ่มต้นที่ดี - "ข้อมูลการควบคุมเวอร์ชัน: การเรียนรู้เครื่องย้ำ"


5

การปฏิเสธความรับผิด: ฉันทำงานที่ บริษัทDatmoซึ่งสร้างเครื่องมือโอเพนซอร์ซเพื่อทำสิ่งนี้

แนวทางปฏิบัติที่ดีที่สุดสำหรับการทำซ้ำคือ:

1) ขั้นแรกให้จัดสภาพแวดล้อมของคุณลงในสภาพแวดล้อม Docker โดยสร้าง Dockerfile และสร้างความมั่นใจว่าการอ้างอิงทั้งหมดครอบคลุมในไฟล์นั้น ฉันพบว่าทรัพยากรนี้ดีที่สุด ( https://arxiv.org/pdf/1410.0846.pdf )

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

3) สุดท้ายเขียนเอกสารบางอย่างเพื่อให้ผู้ทดลอง / ผู้พัฒนาใหม่สามารถทบทวนรหัสของคุณทำซ้ำกับสภาพแวดล้อมและดูว่าคุณเก็บการกำหนดค่าและการวัดประสิทธิภาพไว้ที่ใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.