ในบรรดา Matlab และ Python ภาษาใดดีสำหรับการวิเคราะห์ทางสถิติ


17

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


2
นี่ควรเป็นชุมชน wiki, IMO
เชน

คุณอยากอธิบายไหมว่าทำไมคุณถึงมอง R ไม่ได้ด้วย?
Dirk Eddelbuettel

@DirK: ฉันแทบจะไม่เคยได้ยินเรื่องของ R นอกจากนี้ฉันต้องการที่จะเรียนรู้ภาษาการเขียนโปรแกรมบางอย่างเช่น Python และจากนั้นอีกครั้งฉันก็ไม่คิดว่า R จะอยู่ใกล้กับ python, IMO ฉันหวังว่ามันจะตอบคำถามของคุณ

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

ในแง่ของภูมิศาสตร์ (ที่ฉันทำปริญญาเอกของฉัน) ฉันคิดว่า R มีการติดตั้งเป็นอย่างดี (ดู gstat, geoR ฯลฯ ) อย่างน้อยฉันก็ไม่ทราบถึงความครอบคลุมที่สมบูรณ์ของเทคนิคทางธรณีภาษาในหลาม และทำไม R "ไม่มีที่ไหนใกล้กับงูหลาม"? ฉันเคยใช้ทั้งสองและสำหรับ geostats ฉันรู้สึกว่า R ค่อนข้างดีกว่า
Paul Hiemstra

คำตอบ:


29

ในฐานะผู้ใช้ Matlab Diehard ในช่วง 10 ปีที่ผ่านมาฉันแนะนำให้คุณเรียนรู้ Python เมื่อคุณมีทักษะเพียงพอในภาษาเมื่อคุณทำงานในภาษาที่คุณกำลังเรียนรู้มันจะดูเหมือนว่าคุณไม่ได้มีประสิทธิภาพเพียงพอและคุณจะกลับไปใช้ภาษาที่ดีที่สุดเริ่มต้นของคุณ อย่างน้อยที่สุดฉันขอแนะนำให้คุณลองใช้ภาษาที่มีความเชี่ยวชาญพอ ๆ กัน (ฉันจะแนะนำ R ด้วย)

สิ่งที่ฉันชอบเกี่ยวกับ Matlab:

  • ฉันมีความเชี่ยวชาญในมัน
  • มันเป็นภาษากลางในหมู่นักวิเคราะห์เชิงตัวเลข
  • เครื่องมือการทำโปรไฟล์นั้นดีมาก นี่เป็นเหตุผลเดียวที่ฉันใช้ Matlab แทนที่จะเป็นระดับแปดเสียง
  • มีโคลนฟรีแวร์, ระดับแปดเสียงซึ่งมีความสอดคล้องกับการใช้งานอ้างอิงที่ดี

สิ่งที่ฉันไม่ชอบเกี่ยวกับ Matlab:

  • ไม่มีระบบที่ดีในการจัดการแพ็คเกจและสคริปต์ของบุคคลที่สาม (ฟรีหรืออย่างอื่น) Mathworks ควบคุม 'การแลกเปลี่ยนไฟล์กลาง' และการติดตั้งแพ็กเกจเสริมดูเหมือนว่าจะไม่น่าดูอะไรเลยเหมือนกับระบบที่ยอดเยี่ยมที่ R มี นอกจากนี้ Mathworks ไม่มีแรงจูงใจในการปรับปรุงสถานการณ์นี้เพราะพวกเขาทำเงินจากการขายกล่องเครื่องมือซึ่งแข่งขันกับแพ็คเกจฟรีแวร์
  • ใบอนุญาตสำหรับการคำนวณแบบขนานใน Matlab นั้นมีราคาแพงอย่างไม่น่าเชื่อ
  • m-code ส่วนใหญ่รวมถึงฟังก์ชั่นกล่องเครื่องมือและตัวเครื่องบางตัวได้รับการออกแบบให้มีความถูกต้องอย่างเห็นได้ชัดโดยเสียค่าใช้จ่ายทั้งประสิทธิภาพและ / หรือการใช้งาน ตัวอย่างที่ชัดเจนที่สุดของmedianฟังก์ชั่นนี้คือฟังก์ชั่นของ Matlab ซึ่งทำการเรียงลำดับข้อมูลจากนั้นรับค่ากลางดำเนินการเรียงลำดับของข้อมูลแล้วจะใช้เวลาค่ากลางนี่เป็นอัลกอริธึมที่ผิดตั้งแต่ยุค 70
  • กราฟการบันทึกไฟล์เป็นสิ่งที่ดีที่สุดใน Matlab
  • ฉันไม่พบประสบการณ์การใช้งานของฉันที่จะปรับปรุงในช่วง 5 ปีที่ผ่านมา (เมื่อฉันเริ่มใช้ Matlab แทนระดับแปดเสียง) แม้ว่า Mathworks จะยังคงเพิ่มเสียงระฆังและเสียงนกหวีด สิ่งนี้บ่งชี้ว่าฉันไม่ใช่ลูกค้าเป้าหมายของพวกเขา แต่พวกเขากำลังมองหาเพื่อขยายส่วนแบ่งการตลาดโดยทำให้ผู้ใช้ระดับสูงยิ่งแย่ลง
  • ขณะนี้มี 2 วิธีในการเขียนโปรแกรมเชิงวัตถุใน Matlab ซึ่งทำให้เกิดความสับสนมากที่สุด รหัสดั้งเดิมที่ใช้รูปแบบเก่าจะคงอยู่ชั่วระยะเวลาหนึ่ง
  • Matlab UI เขียนขึ้นใน Java ซึ่งมีแนวคิดที่ไม่พึงประสงค์เกี่ยวกับการจัดการหน่วยความจำ

+1 จุดที่ดี เกี่ยวกับเรื่องนี้: "ความคิดอันไม่พึงประสงค์เกี่ยวกับการจัดการหน่วยความจำ" .. น่าสนใจ
ARS

1
หน่วยความจำของฉันจะไปที่ใดที่หนึ่ง ; ประสบการณ์ของผมกับ Java นอกของการใช้ Matlab แสดงว่าเป็นผู้กระทำผิดมีแนวโน้มและทำงานใน-nojvmจะปรากฏขึ้นเพื่อให้ความช่วยเหลือ ...
shabbychef

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

1
@mbq: shuffleอาจอยู่ในกล่องเครื่องมือไม่ใช่ stock matlab อาจจะเลวร้ายยิ่งกว่า builtin randpermซึ่งส่งกลับดัชนีการเรียงลำดับของเวกเตอร์แบบสุ่ม อีกครั้งนี้น่าจะเป็นขั้นตอนวิธีการที่ไม่ถูกต้อง (ผมเพิ่งได้เรียนรู้เกี่ยวกับนู-Fisher-Yates สับเปลี่ยนที่นี่ใน stats.SE) ..
shabbychef

1
@mbq: ส่วนที่ดีอื่น ๆ เกี่ยวกับrandpermว่ามันได้รับผลกระทบจากการเพาะเมล็ดrandnในขณะที่ Knuth-Fisher-Yates รุ่น mex'ed อาจไม่สามารถเข้าถึงเมล็ด randn 'ภายใน' และการสลับรุ่นบริสุทธิ์อาจเป็นไปได้ ช้าเกินไป
shabbychef

11

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

ในครั้งแรกที่แตกต่างที่ใหญ่ที่สุดคืองูใหญ่เป็นภาษาการเขียนโปรแกรมวัตถุประสงค์ทั่วไป Matlab นั้นยอดเยี่ยมตราบใดที่โลกของคุณมีค่าประมาณ isomorphic ไปยังอาร์เรย์ตัวเลข fortran เมื่อคุณเริ่มจัดการกับ data munging และปัญหาที่เกี่ยวข้อง Python จะสรุป Matlab ตัวอย่างเช่นดูหนังสือเกร็กวิลสัน: ข้อมูลกระทืบ: แก้ปัญหาในชีวิตประจำวันโดยใช้ Java, Python และอื่น ๆ

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

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


กล่องเครื่องมือสถิติใน Matlab ค่อนข้างสนุก มีบางอย่างที่คล้ายกันกับ R หรือไม่ตัวอย่างเช่นคุณสามารถลองใช้ฟังก์ชั่นต่าง ๆ ที่เหมาะกับการถดถอยได้อย่างรวดเร็ว
Alex R.

6

ฉันเป็นผู้ใช้ Matlab ตัวยงมานานกว่า 10 ปีแล้ว หลายปีที่ผ่านมาฉันไม่มีเหตุผลที่จะทำงานนอกเหนือจากกล่องเครื่องมือที่ฉันสร้างขึ้นสำหรับงานของฉัน แม้ว่าฟังก์ชั่นจำนวนมากถูกสร้างขึ้นสำหรับกล่องเครื่องมือฉันมักจะต้องสร้างอัลกอริทึมสำหรับการวิเคราะห์การเปลี่ยนแปลงอย่างรวดเร็ว เนื่องจากอัลกอริทึมเหล่านี้มักใช้คณิตศาสตร์เมทริกซ์ Matlab จึงเป็นตัวเลือกที่เหมาะสมที่สุดสำหรับงานของฉัน นอกจากกล่องเครื่องมือ Matlab ของฉันของรหัสอื่น ๆ ในกลุ่มของฉันทำงานอย่างกว้างขวางใน Java เนื่องจากมีการทำงานร่วมกันอย่างชัดเจนระหว่างภาษา เป็นเวลาหลายปีที่ฉันมีความสุขอย่างสมบูรณ์กับ Matlab แต่ประมาณ 3 ปีที่แล้วฉันตัดสินใจที่จะเริ่มต้นการเปลี่ยนแปลงอย่างช้าๆจาก Matlab และยินดีที่จะบอกว่าฉันยังไม่ได้เปิดมันในอีกประมาณหนึ่งปี นี่คือเหตุผลสำหรับการย้ายของฉัน:

  • ฉันทำงานกับระบบคอมพิวเตอร์ออนไลน์และออฟไลน์ระบบการออกใบอนุญาตมักจะปวดหัวอยู่เสมอ ดูเหมือนจะเกิดขึ้นเสมอว่าเมื่อเราต้องการ Matlab มากที่สุดใบอนุญาตจะหมดอายุหรือมีปัญหาทันที นี่เป็นอาการปวดหัวเสมอ นอกจากนี้หากเราต้องการแบ่งปันรหัสและอีกฝ่ายไม่มีใบอนุญาตสำหรับกล่องเครื่องมือเดียวกันสิ่งนี้สร้างความปวดหัว มันไม่ฟรี
  • ฉันมักจะต้องสร้างงานนำเสนอ แม้ว่า Matlab จะมีเครื่องมือมากมายสำหรับการสร้างตัวเลขซึ่งทำให้มีประสิทธิภาพมากสำหรับการออกแบบอัลกอริทึม แต่การบันทึกตัวเลขเพื่อให้สามารถแทรกลงในงานนำเสนอและดูดีไม่ใช่เรื่องง่าย ฉันมักจะต้องแทรกไฟล์ EPS ลงในโปรแกรมวาดภาพ Adobe เพื่อลบขยะทั้งหมดแก้ไขแบบอักษรและล้างบรรทัด มีเครื่องมือบางอย่างที่ช่วยในเรื่องนี้ในการแลกเปลี่ยนไฟล์ (export_fig.m)
  • ฉันมักจะได้รับรหัส Matlab จากคนอื่น ๆ เมื่อสิ่งนี้เกิดขึ้นฉันมักจะเขียนใหม่เพราะ: API ของพวกเขาไม่สามารถใช้งานได้กับข้อมูลของฉันรหัสของพวกเขาไม่สมเหตุสมผลมันช้าไม่ส่งออกสิ่งที่ฉันต้องการ ... โดยทั่วไปคนที่พัฒนาใน Matlab คือ ไม่ใช่วิศวกรซอฟต์แวร์และ Matlab ไม่สนับสนุนหลักการออกแบบใด ๆ
  • ฉันเป็นผู้ใช้ที่มีพลัง ฉันชอบเทอร์มินัล ฉันเกลียด GUI - เกลียดมัน และเมื่อพวกเขาเพิ่มริบบิ้นสไตล์ "windows" ฉันเกลียดมันมากขึ้น โดยทั่วไปการปรับแต่งของพวกเขาไปยัง GUI และการจัดการหน่วยความจำแย่มากกดปุ่มสุดท้ายของฉันแล้วฉันก็ตัดสินใจออก การใช้-nodesktopตัวเลือกเป็นสิ่งที่ดีเป็นส่วนใหญ่ แต่ก็มีปัญหา
  • ความเป็นไปได้มากมายในการออกแบบฟังก์ชั่น (ใช้ OO หรือการออกแบบฟังก์ชั่น) แต่ไม่มีใครรู้สึกถูกต้อง ฉันไม่ได้รับความพึงพอใจจากการออกแบบฟังก์ชั่นที่ดีใน Matlab
  • ชุมชนใหญ่ แต่ไม่ใช่เรื่องง่ายที่จะแชร์และค้นหารหัสที่ดี การแลกเปลี่ยนไฟล์นั้นยอดเยี่ยม

นี่เป็นเพียงส่วนหนึ่งของ Matlab ของฉัน มันเป็นคุณลักษณะที่ส่องแสง: มันง่ายและง่ายต่อการเขียนโค้ดอย่างรวดเร็ว (ถ้าไม่น่าเกลียด) ฉันทิ้งมันไปแล้วและการค้นหาของฉันทำให้ฉันผ่าน Clojure-> JavaScript-> Python <-> Julia; ใช่ฉันเคยไปทั่วสถานที่

  • Clojure: ภาษาฟังก์ชั่นที่สวยงาม เหตุผลของฉันสำหรับการใช้ Clojure คือความสามารถในการสคริปต์ Java ฐานรหัส "ใหญ่" จำนวนมากของเราอยู่ใน Java ดังนั้นจึงสมเหตุสมผลดี ในช่วงเวลาของการประมวลผลทางวิทยาศาสตร์มากมายไม่พร้อมใช้งานและไม่มากกับการสร้างภาพด้วย แต่ฉันคิดว่านี่เป็นการเปลี่ยนแปลง
  • Javascript: หลังจากเห็นมาตรฐานที่http://julialang.org/และเนื่องจากฉันสนใจความสามารถในการสร้างภาพข้อมูลของD3ฉันจึงตัดสินใจลองใช้ JavaScript จาวาสคริปต์นั้นเร็วมากอย่างน่าประหลาดใจ แต่ถ้าคุณต้องการที่จะเกลียดตัวเองเรียนรู้จาวาสคริปต์
  • Python: Python มีชุมชนที่น่าทึ่งและมีโครงการที่ยอดเยี่ยมมากมายเกิดขึ้น IPython Notebook นั้นยอดเยี่ยมด้วยเหตุผลหลายประการ (หนึ่งในนั้นคือการคัดลอก / ตัวเลขในอดีตไปสู่ ​​powerpoint) โครงการต่างๆเช่น NumPy / SciPy / Scikit-Learn / Pandas ทำให้ Python สนุกและใช้งานง่าย มันง่ายมากที่จะใช้กับหลายแกนหรือกลุ่ม ฉันมีความสุขมากกับสวิตช์
  • จูเลีย: จูเลียน่าทึ่งมาก โดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ Matlab มันอยู่ในช่วงวัยเด็กดังนั้นมีการเปลี่ยนแปลงมากมายเกิดขึ้น หนึ่งในข้อเสียเปรียบหลักของ Python ก็คือมันไม่มีฟังก์ชั่นในตัวทั้งหมดที่ Matlab มี แน่นอนว่า NumPy / SciPy นำฟังก์ชั่นนั้นมาใช้ แต่มันไม่ได้มีมาให้และคุณต้องตัดสินใจว่าจะเป็นวัตถุหลามบริสุทธิ์หรือวัตถุที่เป็นก้อน Julia โดยทั่วไปมีทุกสิ่งที่คุณต้องการ Python มาจาก Matlab ฉันจะรอ แต่นี่เป็นตัวเลือกที่ดีที่สุดสำหรับผู้ใช้ Matlab ในอนาคต
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.