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

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

Papoj Thamjaroenporn

Former-Editor-in-Chief at BigData.go.th and Senior Data Scientist at GBDi