Why Numpy Array is more interested to pick compared to List in Practical Data Science

ทำไม Numpy Array ถึงน่าใช้กว่า List ในงานประเภท Data Science Part 1

tonkatsukun
3 min readJun 28, 2022

--

สวัสดีตอนเย็นผู้อ่านทุกท่านนะค้าบบ

こんばんは🇯🇵✨

เชื่อว่าหลายๆคนในที่นี้น่าจะเคยเห็นหรือได้ยินกันมาบ้างแล้วว่าเจ้าตัว List ในภาษา Python นั้นมันวิเศษขนาดไหนใช่มั้ยครับ เพราะว่ามันสามารถนำมาใช้ได้สะดวกมากๆเวลาเราต้องการที่จะเก็บข้อมูลหรืออื่นๆ (เรียกได้ว่าสำหรับคนที่เคยเขียนภาษาในตำนานอย่างเช่น C, C++, Java เนี่ย ก็ต้องแอบปลื้มในความสะดวกสบายในความใช้ง่ายของมันบ้างแน่นอนครับ แฮะๆ)

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

จะเห็นได้ว่านอกจากวิธีสร้างที่แสนง่ายแล้ว ประโยชน์ของมันนี่ก็เรียกได้ว่ามากโขเลยครับ ซึ่งถ้าให้อวยไอเจ้า List นี่แบบย่อๆได้ 3 ข้อ ก็จะได้ประมาณว่า

  1. เวลาสร้าง List ขึ้นมานั้น เราไม่จำเป็นต้องทำการประกาศประเภทของมัน (ต่างจาก Array ในภาษาอื่นๆที่ต้องกำหนดประเภทของมันเพื่อบอกให้โปรแกรมรู้ว่ามันถูกสร้างขึ้นมาเพื่อเก็บตัวแปรประเภทใด)
  2. ตัวของ List เองนั้นสามารถเก็บข้อมูลได้หลากหลายประเภท ดังนั้น ข้อมูลที่ถูกจัดเก็บใน List นั้น ไม่จำเป็นต้องเป็นตัวแปรประเภทเดียวกันก็ได้ ซึ่งนั่นแปลว่าใน 1 List สามารถที่จะมีข้อมูลที่เป็น Integer, Float, Boolean, String, Character อยู่ด้วยกันก็ได้ (ต่างจาก Array ในภาษาอื่นๆซึ่งเมื่อเราประกาศประเภทของมันแล้ว มันจะสามารถเก็บได้เฉพาะข้อมูลที่เป็นประเภทเดียวกันกับมันเท่านั้น เช่น Array ของ Integer ก็จะสามารถเก็บได้เฉพาะข้อมูลที่เป็น Integer เท่านั้น)
  3. ในทาง Programming แล้ว ถ้าให้รูปแบบการเก็บข้อมูลนั้นเป็นการจองเข้าพักโรงแรมชื่อดัง เจ้า Array ก็เปรียบเสมือนนักท่องเที่ยว ส่วนเจ้า List เนี่ยก็เป็นดั่งเจ้าของโรงแรมเลยครับ เพราะว่าตัวของ List นั้นไม่จำเป็นต้องบอกโปรแกรมเลยว่าเราต้องการที่จะใช้พื้นที่เท่าไหร่ เพียงแค่เราบอกว่าจะมีการใส่ข้อมูลเข้ามาเพิ่ม เจ้าตัวของ List ก็จะขยายขนาดเพื่อรองรับข้อมูลที่จะใส่ให้เราเองครับ ซึ่งต่างกับเจ้า Array ของเราโดยสิ้นเชิง เพราะไม่ใช่เพียงแค่ประกาศประเภทของข้อมูลที่มันจะเก็บเพียงอย่างเดียว แต่จำเป็นอย่างมากที่จะต้องบอกจำนวนที่แน่นอนที่เราจะใช้ในการเก็บข้อมูลด้วย เปรียบเสมือนกับนักท่องเที่ยวที่ต้องติดต่อจองที่พักกับทางโรงแรมเลยครับ ต่างกับเจ้า List เพียงลิบลับที่เปรียบเสมือนเจ้าของโรงแรมที่สามารถที่จะเพิ่มห้อง-ลดห้องเท่าไหร่ก็ได้ตามใจฉันเลยครับผม

โอ้โห ความสามารถเหนือชั้นแบบนี้นี่มันนักแสดงดาวรุ่งชัดๆ ยังจะมีนักแสดงคนไหนมาสู้ความสามารถระดับนี้ได้อีกหรอเนี่ย?

คำตอบคือมีแน่นอนครับ ถึงแม้ว่า List จะเป็นเหมือนกับนักแสดงระดับดาวรุ่ง แต่นักแสดงที่สามารถแสดงได้ดีและเป็นดาวรุ่งไม่ได้มีเพียงคนเดียวซะหน่อยหนิครับ เพราะละครหรือหนังแต่ละเรื่องนั้น ต่างต้องการนักแสดงที่มีบุคลิกลักษณะเฉพาะตัวที่แตกต่างกันออกไป นั่นจึงเป็นเหตุผลที่ทำให้มีนักแสดงชื่อดังมากมายเต็มไปหมดยังไงล่ะครับ (หวังว่าเปรียบเทียบแบบนี้จะไม่ทำให้พวกเราหลุดจากเนื้อหาหลักไปนะครับ แฮะๆ) ดังนั้น ต่อจากนี้ไป ผมขอแนะนำนักแสดงนำดาวรุ่งอีกคนนึงซึ่งมีชื่อเสียงเรียงนามไม่แพ้เจ้า List เลย ซึ่ง aka ในวงการ Programming ของเขานั้น รู้จักกันในนามของ Numpy Array จาก Numpy Library นั่นเองครับ!!!

แล้วเจ้า Numpy นี่มันคืออะไร?

One of the most famous libraries in Python known as Numpy Library used for Scientific Computing

ก่อนที่เราจะมารู้จักเจ้าตัวของ Numpy Array ได้เนี่ย ขอแวะมาอธิบายที่มาที่ไปของมันก่อนละกันครับ โดยเจ้าตัวของ Numpy Array เนี่ย จะถูกสร้างขึ้นมาจาก Library นึงซึ่งมีชื่อว่า Numerical Python หรือที่ชาว Python เราเรียกกันแบบสั้นๆว่า Numpy นั่นเองครับ ซึ่งนิยามของเจ้าตัว Numpy นั้นมีการเขียนเอาไว้แบบนี้ครับ

“NumPy is a Python fundamental package used for efficient manipulations and operations on High-level mathematical functions, Multi-dimensional arrays, Linear algebra, Fourier Transformations, Random Number Capabilities, etc. It provides tools for integrating C, C++, and Fortran code in Python. NumPy is mostly used in Python for scientific computing.”

ซึ่งจากความหมายข้างต้นนี้แล้ว สามารถแปลให้เข้าใจแบบสั้นๆภาษาลิงได้ว่า เป็นเครื่องมือชิ้นนึงในภาษา Python สำหรับการคำนวณและจัดการกับข้อมูลต่างๆบนฟังก์ชันทางคณิตศาสตร์ระดับสูงนั่นเองครับ หรือก็คือเป็นเครื่องมือสำหรับการคำนวณทางคณิตศาสตร์สำหรับข้อมูลที่มีจำนวนมากและมีความซับซ้อนสูงนั่นเองครับ ยกตัวอย่างง่ายๆเช่น การคำนวณ Matrix ในทางคณิตศาสตร์ที่ทั้งซับซ้อนแล้ววุ่นวายมาก ถ้าเคยเรียนเลขตอนมัธยมปลายหรือ Linear Algebra ในช่วงมหาลัยมา ทุกคนนั้นต้องเคยนั่งเขียนเจ้าตัว Matrix ที่สมาชิกนั้นก็เยอะเหลือเกินอยู่หลายๆครั้งเลยครับในโจทย์หนึ่งข้อ ขี้เกียจกันใช่มั้ยครับ5555555 แน่นอนว่าคอมพิวเตอร์มันก็ขี้เกียจเหมือนกันแหละครับ มันจึงมีเครื่องมือที่มีชื่อว่า Numpy โผล่ขึ้นมาเพื่อจัดการปัญหาเหล่านี้นี่แหละ ซึ่งตัวของเครื่องมือชิ้นนี้ถูกเขียนขึ้นมาด้วยภาษา C จึงทำให้สามารถทำงานได้อย่างรวดเร็วและมีประสิทธิภาพสูง (แต่เหตุผลเท่านี้คงไม่พอให้เราหายกระจ่างใช่มั้ยครับ5555) และมากไปกว่านั้นแล้ว ผมอยากให้ทุกคนลองมองกลับไปที่ประมาณ 5–6 บรรทัดสุดท้ายของตัวนิยามของมันอีกครั้งนึงครับ ซึ่งได้มีส่วนที่น่าสนใจมากๆอยู่ครับ

It provides tools for integrating C, C++, and Fortran code in Python. NumPy is mostly used in Python for scientific computing.”

ใช่ครับ เจ้าตัว Numpy Library เนี่ยนั้นได้มีเครื่องมือในการรวมโค้ดของ C, C++ และ Fortran เข้าด้วยกันนั่นเองครับ ซึ่งเจ้า 3 ตัวนี้นั้นเป็นที่รู้จักกันในด้านความเร็วและความมีประสิทธิภาพของมันอยู่แล้วนะครับ อย่างเช่น ภาษาตระกูล C ที่สามารถเข้าไปเล่นกับ Hardware ได้โดยตรง จึงทำให้เราเหมือนกับคนขับแข่ง F1 ในสนามแข่งรถเลยครับ เปรียบกับ Python ที่ทุกอย่างนั้นแทบจะถูก simplify ให้ใช้งานได้ง่ายขึ้นแล้ว จึงเหมือนกับเป็นผู้โดยสารที่นั่งข้างคนขับมากกว่าครับ55555 (แน่นอนว่าเจ้าตัว Fortran นั้นมีประสิทธิภาพสูงมากในงาน Scientific Computing & Numerical computing เช่นกันครับ แต่เป็นหัวข้อที่ค่อนข้างใหญ่พอสมควร ในส่วนรายละเอียดของเจ้าตัว Fortran programming language ผมจึงจะขอเขียนในบทความต่อๆไปนะครับ)

ตอนนี้พวกเราคงรู้จักหน้าตาของทั้ง 2 นักแสดงดาวรุ่งของเราในค่ำคืนนี้แล้วนะครับ เพราะฉะนั้นผมขอกลับมาที่หัวข้อใหญ่ของเรากันเลยครับ ว่าในท้ายที่สุดแล้วเจ้า 2 ตัวนี้ นักแสดงคนไหนเหมาะกับงานที่เรียกว่า Data Science มากกว่ากัน ฉะนั้นเรามาเริ่มกันเลยดีกว่าครับ!

แน่นอนว่าสิ่งที่เราสงสัย ณ ตอนนี้คือ แล้วไอเจ้าตัว List กับ Numpy Array เนี่ย ตัวไหนมันทำงานได้ดีกว่ากันล่ะ หรือมันทำงานได้รวดเร็วเท่ากันกันแน่ แน่นอนว่ามีวิธีหาคำตอบสำหรับคำถามนี้ครับ ซึ่งก็คือการลงมือเขียนโค้ดนั่นเองเทียบประสิทธิภาพให้ทุกคนเห็นกับตานั่นเองครับ!!! โดยจะยกตัวอย่างให้เห็นแบบสั้นๆด้วยการเทียบประสิทธิภาพด้วยการให้ทั้ง 2 ตัวนี้มีสมาชิกทั้งหมด 1,000,000 ตัว (ใช่ครับ คาดว่าประมาณนี้กำลังดีเลยในการยกตัวอย่างง่ายๆ เนื่องจากงาน Data science นั้นต้องจัดการกับข้อมูลที่มีจำนวนมากๆ ดังนั้น 1 ล้านตัวนั้นไม่น้อยเกินไปครับ) โดยเราจะนำสมาชิกทุกตัวใน List และ Numpy Array มาคูณเข้าด้วย 2 ทั้งหมด แล้วมาดูกันครับว่าใครสามารถทำงานได้ดีกว่ากัน (เพื่อไม่ให้บทความยาวเกินไป ผมจะไม่อธิบายในส่วนของตัวโค้ดเยอะนะครับ)

ก่อนอื่นเลย เนื่องจากเราต้องทำการสร้าง Numpy Array เราจึงต้องเริ่มจาก import ตัวของ Numpy Library เข้ามาใช้ก่อนเลยครับ ส่วนเจ้าตัวของ Time Library ผมนำมาใช้ในการจับเวลาดูครับเพื่อดูว่าใครสามารถทำงานได้เร็วกว่ากัน(รูปไม่ชัดขออภัยครับ555555)

import Numpy library to create Numpy Array and time library for making computing performance metric

จากนั้นเมื่อเมื่อทำการ import library เข้ามาแล้ว เรามาสร้างตัวของ List และ Numpy Array กันครับ

creating both List and Numpy Array with 1 million elements stored

ในที่สุดพวกเราก็ได้เห็นหน้าเจ้าตัวของ List และ Numpy Array เรียบร้อยกันแล้วนะครับ (ทำตามสัญญาตอนแรกแล้วนะครับ5555) เมื่อได้ทำการเรียกนักแสดงทั้ง 2 ของเราแล้ว มาให้มันทำงานกันเลยครับ ซึ่งงานของทั้งสองก็คือการนำสมาชิกที่ตัวเองเก็บอยู่ทุกตัวมาคูณด้วย 2 หรือพูดภาษาคนก็คือว่าให้ทั้ง List และ Numpy Array นั่นเป็นหัวหน้ากองทัพทั้ง 2 คน ซึ่งทั้งคู่มีลูกสมุนที่มาร่วมรบจำนวน 1 ล้านคนเท่ากัน และถือปืนคนละ 1 กระบอก (เปรียบเสมือนข้อมูล 1 ล้านตัว) ซึ่งในสนามรบนี้มีคำสั่งด่วนว่าทหารทุกนายต้องมีปืนอย่างต่ำคนละ 2 กระบอก ดังนั้นวิ่งเข้าไปหยิบปืนอีกคนละหนึ่งกระบอกโดยด่วน ดังนั้นหัวหน้ากองทัพคนไหนสามารถทำให้ลูกสมุนของตัวเองทุกคนหยิบปืนได้ครบ 2 กระบอกก่อน ก็แปลว่าหัวหน้ากองทัพคนนั้นสามารถทำงานได้ดีกว่าและเร็วกว่านั่นเองครับ (เริ่มออกทะเลแล้วกลับมาที่ตัวโค้ดดีกว่าครับ5555555)

perform multiply by 2, then, observe time efficiency

เมื่อทำการรันตัวโค้ดแล้ว จะได้ผลลัพธ์ดังรูปด้านล่างครับ

time effieciency of List and Numpy Array on the same task

จะเห็นว่าตัวของ Numpy Array สามารถทำงานได้รวดเร็วกว่าตัวของ List อยู่หลายเท่าเลยทีเดียวครับ (เทียบจากการนำมาคูณด้วย 2 ตัวแล้ว การทำงานของ Numpy นั้นเร็วกว่า List ถึง 144 เท่าเลยทีเดียว! (ลองคิดดูนะครับว่าถ้าประมวณผลข้อมูลชุด A ใช้เวลา 1 ชั่วโมงโดยการใช้ Numpy Array แล้วถ้าเราเลือกใช้ List ล่ะ มันจะนานขนาดไหน) ซึ่ง ณ ตอนนี้ทุกคนก็น่าจะพอเห็นภาพแบบคร่าวๆแล้วนะครับว่าเจ้าตัว Numpy Array เนี่ยมันเร็วกว่าเยอะมากๆเมื่อต้องจัดการกับข้อมูลจำนวนขนาดใหญ่และมีความซับซ้อนสูงครับ

Conclusion of Part 1

จบกันไปแล้วนะครับสำหรับพาร์ทแรก ซึ่งตัวผมคิดว่าได้อธิบายไปมากพอสมควรเลยครับ55555 ในพาร์ทต่อไปผมจะมาพูดถึงเหตุผลที่นอกเหนือจาก Time efficiency นะครับว่านอกจากความเร็วในการประมวลผลแล้ว มีในส่วนไหนอีกที่เจ้าตัวของ Numpy Array สามารถทำได้ดีกว่า List และเหตุผลอีกมากมายที่มันถูกนำมาใช้ในงาน Data Science ครับ แต่ผมนั้นขออนุญาตปิดจบบทความพาร์ทแรกไว้เพียงเท่านี้ (จริงๆแล้วเป็นบทความแรกที่ผมได้เขียนด้วยครับ ^ ^) ยังไงก็ฝากติดตาม Blog ที่ผมเขียนด้วยนะครับ ติชมได้เลยนะครับผู้อ่านทุกท่าน ยินดีนำไปปรับปรุงให้ดีขึ้นนะครับผม ขอฝากเนื้อฝากตัวไว้กับผู้อ่านทุกท่านด้วยนะค้าบบ แล้วเจอกันครั้งต่อไปในหัวข้อเดิม “ทำไม Numpy Array ถึงน่าใช้กว่า List ในงานประเภท Data Science Part 2” นะค้าบบ ขอบคุณค้าบบ ドサよろしくお願いします🇯🇵🎉✨

--

--

tonkatsukun

わたしはぴむうです | dreamed to be a Blogger that can write anything that makes people smile :) | Interest : AI & Machine Learning, Anime, Manga, Japanese | よろしくお願いします