สถาบันข้อมูลขนาดใหญ่ (องค์การมหาชน)

Logo BDI For web

Julia vs. Python ภาษาไหนดีสุดสำหรับวิทยาศาสตร์ข้อมูล?

Mar 9, 2022
Julia vs. Python ภาษาไหนดีสุดสำหรับวิทยาศาสตร์ข้อมูล?
Julia vs. Python ภาษาไหนดีสุดสำหรับวิทยาศาสตร์ข้อมูล?

ในวันที่ภาษา Python ได้กลายเป็นแกนนำในโลก Data Science (วิทยาศาสตร์ข้อมูล) และ Machine Learning  ทราบหรือไม่ว่ามีภาษาหนึ่งที่ถูกสร้างขึ้นจากศูนย์เพื่อการวิเคราะห์ข้อมูลและทำ Data Science โดยเฉพาะ นั่นคือภาษา Julia ซึ่งเราจะเปรียบเทียบกันว่า Julia vs. Python ต่างกันอย่างไร

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

สำหรับนักพัฒนาที่อยู่เบื้องหลังภาษา Julia พวกเขามุ่งเป้าไปที่ “การคำนวณทางวิทยาศาสตร์, การทำ Machine Learning, การทำเหมืองข้อมูล หรือ Data Mining (การวิเคราะห์ข้อมูลจากข้อมูลจำนวนมาก เพื่อหาความสัมพันธ์ของข้อมูลที่ซ่อนอยู่), พีชคณิตเชิงเส้นที่ซับซ้อน, การคำนวณแบบกระจายและการคำนวณแบบทำพร้อมกัน (Distributed and Parallel Computing)” — Python มันยังเร็วไม่พอและก็ยังไม่สะดวกพอ ดังนั้นภาษา Julia จึงตั้งเป้าไม่ใช่แค่จะให้นักวิทยาศาสตร์ข้อมูล นักวิเคราะห์ได้ความรวดเร็วและสะดวกสบายตอนพัฒนาโปรแกรม แต่ยังรวมถึงความเร็วชนิดแบบกระพริบตาไม่ทันในตอนรันโปรแกรมด้วย

ภาษา Julia คืออะไร?

ภาษา Julia ถูกสร้างขึ้นในปี 2009 โดยทีมงาน 4 คนและต่อมาได้เปิดเผยต่อสาธารณะในปี 2012 Julia โดยมีจุดมุ่งหมายเพื่อแก้ไขข้อบกพร่องใน Python รวมถึงภาษาและแอปพลิเคชันอื่นๆที่ใช้สำหรับการคำนวณทางวิทยาศาสตร์และการประมวลผลข้อมูล “ พวกเราโลภมาก” เหล่าผู้ให้กำเนิด Julia เขียนไว้:

เราต้องการภาษาที่เป็น Open Source คือภาษาที่สามารถให้ใคร ๆ มาช่วยพัฒนาปรับปรุงได้ ไม่ใช่ผูกขาดกับบริษัทใดบริษัทหนึ่ง ซึ่ง Open Source เป็นซอฟต์แวร์ที่มีใบอนุญาตใช้ได้แบบเสรี เราต้องการความเร็วแบบภาษา C ที่มีความไดนามิกของ Ruby เราต้องการภาษาที่ไม่ซับซ้อนจนคนงง และมีความคล่องตัวอย่าง Lisp นอกจากนี้มันต้องรับรองพวกการทำงานทางคณิตศาสตร์ที่คุ้นเคยและชัดเจนแบบเช่น Matlab เราต้องการภาษาที่ใช้ได้กับการเขียนโปรแกรมทั่วไปแบบเช่น Python และต้องง่ายสำหรับการทำสถิติแบบภาษา R  ยังไม่พอต้องประมวลผลพวกข้อมูลประเภทข้อความ (string) ได้เป็นธรรมชาติแบบ Perl และมีเครื่องมือที่ทรงพลังสำหรับวิเคราะห์พีชคณิตเชิงเส้นเช่นเดียวกับ Matlab และต้องมีคุณสมบัติ ในการรวมใช้โปรแกรมต่าง ๆ เข้าด้วยกันเป็น shell  แต่ยังต้องเรียนรู้ง่าย และต้องให้ Hackers ที่แน่จริงไม่ใช้งานลำบาก เราต้องการให้เป็นภาษาที่มีการโต้ตอบรายงานข้อผิดพลาดได้ทันที และต้องการให้ Compile ได้ด้วย

และนี่คือสิ่งที่ Julia ถูกสร้างขึ้น เพื่อตอบสนองสิ่งเหล่านั้น:

  • Julia เป็นภาษาที่ต้อง Complie ไม่ใช่เป็น Interpreter: ซึ่งกรณี Complie เราต้องเขียนโปรแกรมเป็นไฟล์ Source Code ให้เสร็จก่อน แล้วใช้ Complier ทำการ Complie ไฟล์ให้คอมพิวเตอร์เข้าใจ แต่ถ้าเป็น Interpreter จะเป็นการอ่านไฟล์แล้วแปลคำสั่งเหมือน Complier แต่จะไม่แปลพร้อมกันทั้งไฟล์ ซึ่ง Interpreter จะอ่าน Source Code ทีละบรรทัดเลย เพื่อประสิทธิภาพในการทำงานที่เร็วขึ้น Julia ถูก Complie แบบ Just-in-time (JIT) โดยใช้โครงสร้าง Complier แบบ LLVM  นั่นทำให้ Julia สามารถมีความเร็วสูสีกับภาษา C ได้
  • Julia ทำงานแบบ Interactive: เพราะ Julia มี REPL (Read-Eval-Print-Loop) คือการโต้ตอบตอนเขียนคำสั่งแบบบรรทัดต่อบรรทัดได้เลย คล้ายกับที่ Python ทำให้คุณสามารถเขียนสคริปต์และลองเช็คได้อย่างรวดเร็วทันที
  • Julia เข้าใจไม่ยาก ตรงไปตรงมา: Syntax ของ Julia นั้นคล้ายกับ Python แต่เข้าใจง่ายกว่าและมีประสิทธิภาพมากกว่าด้วย
  • Julia รวมข้อดีของทั้งตัวแปรแบบ Dynamic และ Static: คุณสามารถระบุประเภทสำหรับตัวแปรได้ เช่น “Unsigned 32-bit Integer” ซึ่งหมายถึง ตัวแปรที่ไว้ใช้เก็บจำนวนเต็มได้ตั้งแต่ 0 จนถึง 4,294,967,295 ในกรณีทั่ว ๆ ไปคุณยังสามารถสร้างลำดับชั้นของประเภทตัวแปรเพื่อจัดการตัวแปรเฉพาะบางประเภทได้อีก เช่น คุณสามารถเขียนฟังก์ชันที่รับจำนวนเต็มโดยไม่ต้องระบุความยาวหรือต้องบอกว่ารับค่าติดลบได้ไหม Julia จะจัดการให้เราโดยไม่ต้องพิมพ์บอกคอมพิวเตอร์เลยด้วยซ้ำ
  • Julia สามารถเรียก Library ของ Python, C และ Fortran ได้: Julia สามารถเชื่อมต่อโดยตรงกับ Library ภายนอกที่เขียนด้วยภาษา C และ Fortran นอกจากนี้ยังสามารถเชื่อมต่อกับโค้ด Python ผ่านทาง PyCall Library และแชร์ข้อมูลระหว่าง Python และ Julia ได้ด้วย
  • Julia รองรับ Metaprogramming: โปรแกรม Julia สามารถเขียนเพื่อสร้างโปรแกรม Julia ได้  และทำได้แม้แต่แก้ไขโค้ดของตัวเอง ซึ่งลักษณะเด่นตัวนี้ชวนให้นึกถึงภาษา Lisp มาก ๆ
  • Julia มี Debugger ที่สมบูรณ์: Julia version 1.1 ได้ใช้การ Debug ซึ่งรันโค้ดใน REPL ที่ช่วยให้สามารถเช็คผลลัพธ์ ตรวจสอบตัวแปร และเพิ่ม Breakpoints ใน Code ได้ ยังไม่พอคุณยังสามารถเช็ค Code ได้ว่ามีอะไรผิดพลาดไหมแบบรายบรรทัดได้เลย
Julia vs. Python
Julia vs. Python

Julia vs. Python: ข้อดีของภาษา Julia

Julia ได้รับการออกแบบมาตั้งแต่ต้นสำหรับการคำนวณทางวิทยาศาสตร์และเชิงตัวเลข จึงไม่น่าแปลกใจที่ Julia จะมีคุณสมบัติมากมายสำหรับกรณีการใช้งานดังกล่าว:

  • Julia เร็ว: เพราะการมี JIT compilers ของ Julia และการประกาศตัวแปรที่ดี มันสามารถเอาชนะ Python ที่ “เขียนโดย Python แท้ ๆ ” ได้  จริงอยู่ที่ Python จะเร็วขึ้น ถ้าใช้ External Library ,JIT compilers ของ third party (อย่างเช่น PyPy) และการเพิ่มประสิทธิภาพด้วย เครื่องมืออย่าง Cython แต่ Julia ได้รับการออกแบบให้ทำงานได้เร็วขึ้นโดยไม่ต้องมาพึ่งสิ่งเหล่านี้
  • Julia มี Syntax ที่เหมาะกับงานคณิตศาสตร์: เมื่อทำโปรแกรมแนวคณิตศาสตร์กลุ่มเป้าหมายหลักสำหรับ Julia คือผู้ใช้ภาษาคอมพิวเตอร์ทางวิทยาศาสตร์ เช่น Matlab, R, Mathematica และ Octave ซึ่งไวยากรณ์ของ Julia สำหรับการดำเนินการทางคณิตศาสตร์จะเป็นแบบเดียวกับสูตรคณิตศาสตร์ที่เราเขียน ๆ กัน ไม่ใช่แบบในโลกของคอมพิวเตอร์ ตัวอย่างเช่น ถ้าโปรแกรมเมอร์จะบวกเลข ต้องเขียน C = a+b แต่ถ้าเป็นคนทั่วไปจะเขียน a+b = C ทำให้ผู้ที่ไม่ใช่โปรแกรมเมอร์เข้าใจภาษาได้ง่ายขึ้น
  • Julia มีการจัดการหน่วยความจำอัตโนมัติเหมือนกับ Python: Julia ไม่สร้างภาระให้กับผู้ใช้ที่ต้องละเมียดละไมกับการบริหารหน่วยความจำ นอกจากนี้ Julia ยังสามารถควบคุมในเรื่อง Garbage Collection ที่ช่วยคืน memory ให้กับโปรแกรม ซึ่งถ้าหากเราไม่ทำเลย โปรแกรมอาจช้าและพังได้ โดยถ้าคุณจะเปลี่ยนมาใช้ Julia คุณก็ยังไม่ได้สูญเสียความสะดวกสบายอันนึงที่อยู่ใน Python อยู่ดี
  • Julia ทำเรื่อง Parallelism ได้ดี: สามารถแจกงานให้แต่ละ CPU ในเครื่องคอมพิวเตอร์ช่วยกันทำพร้อม ๆ กันแบบคู่ขนานกันไปได้ โดยเวลาเราคำนวณทางคณิตศาสตร์และวิทยาศาสตร์ โปรแกรมจะบริหารทรัพยากรที่มีอยู่อย่างเต็มรูปแบบตามที่กำหนด โดยเฉพาะคอมพิวเตอร์ที่มีหลาย Core ทั้ง Python และ Julia สามารถเรียกใช้การดำเนินการแบบคู่ขนาน (Parallelism) กันได้ ในทางกลับกันวิธีการของ Python สำหรับการดำเนินการแบบขนานมักต้องการข้อมูลที่ทำเป็นอนุกรมและทำ Deserialize ระหว่าง Threads หรือ Nodes (เวลารับข้อมูลมาเป็นหลายๆ ก้อน การจะแกะข้อมูลที่ได้รับมาเรียกว่าการทำ Deserialize) ในขณะที่ Parallelization ของ Julia นั้นละเอียดกว่า นอกจากนี้ ไวยากรณ์ในการเขียน Parallelism ของ Julia ก็ไม่ซับซ้อนเท่า Python ซึ่งทำให้เกณฑ์การใช้งานทำได้ง่ายขึ้น
  • Julia กำลังพัฒนา Machine Learning Libraries ของตนเอง: Flux เป็น Machine Learning Library สำหรับ Julia ที่มีรูปแบบโมเดลที่มีอยู่มากมายสำหรับกรณีการใช้งานทั่วไป เนื่องจากมันถูกเขียนใน Julia ทั้งหมด จึงสามารถแก้ไขได้ตามที่ผู้ใช้ต้องการและใช้การรวบรวมแบบ Just-in-Time ดั้งเดิมของ Julia เพื่อเพิ่มประสิทธิภาพของโปรเจกต์จากภายในสู่ภายนอก

Julia vs. Python: ข้อดีของ Python

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

  • Python ใช้ดัชนีอาร์เรย์ฐานศูนย์: ภาษาคอมพิวเตอร์ส่วนใหญ่รวมถึง Python และ C มีองค์ประกอบตัวแรกของ Array ที่ค่าศูนย์ — เช่น String [0] ใน Python จะหมายถึงอักษรตัวแรกในสตริง แต่ Julia องค์ประกอบตัวแรกจะเริ่มต้นที่ 1 ซึ่งถูกออกแบบมาให้คล้ายกับแอปพลิเคชันคณิตศาสตร์และวิทยาศาสตร์อื่น ๆ เช่น Mathematica ที่ใช้ทำดัชนีเริ่มที่ 1 เช่นกัน ดังนั้น Julia เลยจงใจทำแบบนี้เพื่อดึงดูดเหล่าผู้คนกลุ่มนี้  จริงอยู่ที่มีความเป็นไปได้ที่ Julia จะทำเวอร์ชันรองรับดัชนีฐานศูนย์ด้วยฟีเชอร์ทดลอง แต่ที่ Julia มีดัชนีค่าเริ่มต้นที่ 1 อาจเป็นอุปสรรคกับผู้ใช้งานทั่วไป เพราะคนส่วนใหญ่จะคุ้นชินกับการเขียนโปรแกรมแบบดัชนีฐานศูนย์มากกว่า
  • Python มีค่าใช้จ่ายในการเริ่มต้นน้อยกว่า: ถึงโปรแกรม Python จะทำงานช้ากว่าโปรแกรม Julia แต่ Python Runtime (คือโปรแกรมที่คอยควบคุมทำให้แอปพลิเคชันที่เขียนด้วย Python ทำงานได้) เบากว่า และโดยทั่วไปโปรแกรม Python จะใช้เวลาน้อยกว่าตั้งแต่ตอนเริ่มต้นจนไปถึงได้ผลลัพธ์ครั้งแรก นอกจากนี้เพราะตัว JIT compilation ที่ช่วยเพิ่มความเร็วในการรันโปรแกรม Julia เราเลยต้องเสียเวลาตั้งค่าตอนเริ่มต้นมากกว่า ถึงจะมีหลาย ๆ อย่างคอยทำให้ Julia เริ่มทำงานเร็วขึ้น แต่ Python ยังคงมีความได้เปรียบนส่วนนี้
  • Python เป็นภาษาที่เติบโตเต็มที่แล้ว: ถ้าเปรียบเทียบกับคน Julia เหมือนอยู่ในวัยเด็กที่ยังสามารถมีการพัฒนาได้อีก โดยการพัฒนา Julia เพิ่งเริ่มต้นตั้งแต่ปี 2009 เท่านั้น และผ่านการเปลี่ยนแปลงฟีเจอร์ต่าง ๆ ไปพอสมควร ในทางกลับกัน Python มีมาเกือบ 30 ปีแล้ว
  • Python มีแพ็กเกจจากที่ต่าง ๆ มากกว่า: มี Community ที่กว้างขวางกว่าและประโยชน์ของ Python ที่มีแพ็กเกจสร้างโดยคนหรือองค์กรมากมายยังคงเป็นหนึ่งในเสน่ห์ที่นึ่งดูดที่สุดของภาษา Python  ในทางตรงกันข้ามความแปลกใหม่ของ Julia มีหมายความว่า Community ซอฟต์แวร์ยังเล็กอยู่ ถึง Julia จะปิดจุดอ่อนตัวเองด้วยการใช้ C Library และ Python Library ที่มีอยู่ได้บางส่วน แต่ Julia ก็ต้องการ Library ของตัวเองเพื่อให้สามารถพัฒนาไปได้อีก Library อย่างเช่น Flux และ Knet ทำให้ Julia มีประโยชน์สำหรับการทำ Deep Learning หรือ Machine Learning ก็ตาม แต่ก็ยังไม่เป็นที่นิยมมากนักเพราะงานส่วนใหญ่ก็ยังอยู่กับ TensorFlow ที่ถูกพัฒนาโดย Google หรือ PyTorch ที่ทาง Facebook พัฒนาขึ้น  
  • Python มีผู้ใช้หลายล้านคน: ภาษาทางคอมพิวเตอร์จะไม่มีความหมายเลยหากไม่มีชุมชนนักพัฒนาขนาดใหญ่ที่มีความทุ่มเทและกระตือรือร้น แม้ว่าชุมชนการพัฒนา Julia ก็มีความกระตือรือร้นและเติบโตขึ้น แต่ก็ยังเป็นเพียงเศษเสี้ยวของขนาดชุมชน มีการที่ Python ชุมชนนักพัฒนาขนาดมหึมาจึงถือว่าเป็นข้อได้เปรียบอย่างมาก
  • Python เร็วขึ้นเรื่อย ๆ: นอกเหนือจากการปรับปรุงตัว Interpreter ของ Python รวมถึงการปรับปรุงการประมวลผลแบบ Multi-core และ Parallel นอกจากนี้ Python ยังเพิ่มความเร็วได้ง่ายกว่าจากโครงการ Mypyc ที่จะแปลโค้ด Python ที่มีการนิยามชนิดตัวแปร (Type Annotation) ไปเป็น Native C ซึ่งมีความสะดวกรวดเร็วกว่า Cython มาก ซึ่งเป็นเรื่องปกติที่โค้ด Python ที่ถูกแปลงให้อยู่ในรูป Native C อาจจะให้ผลประสิทธิภาพดีขึ้นถึง 4 เท่า และมักจะมากกว่านั้นมากด้วยถ้าโปรแกรมมีแต่การคำนวณทางคณิตศาสตร์ล้วน ๆ ( Julia vs. Python )

บทความโดย Serdar Yegulalp
เนื้อหาจากบทความของ InfoWorld
แปลและเรียบเรียงโดย วิน เวธิต
ตรวจทานและปรับปรุงโดย ปพจน์ ธรรมเจริญพร

Waythit Puangpakisiri

Position Technology Solution Principal, IT division

© Big Data Institute | Privacy Notice