การใช้ไพธอนวิเคราะห์ข้อมูลเบื้องต้น

Python for Basic Data Analysis

สุวิทย์ กิระวิทยา

25 เมษายน 2563

 

ทำไมต้องไพธอน?

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

 

ส่วนที่ 1 การติดตั้ง

ในการวิเคราะห์ข้อมูล เรามักจะใช้ไลบรารี่ 3 ตัว (Numpy, Scipy และ Matplotlib) ที่มาพร้อมกับโปรแกรมภาษาไพธอน เป็นแพ็กเกตที่ชื่อว่า “Anaconda” ซึ่งทุกคนสามารถดาวน์โหลดได้ฟรี ทั้งแบบ 32 และ 64 บิต บนแพล็ตฟอร์ม Microsoft Windows, Mac และ Linux โดยดาวน์โหลดได้ที่ https://www.anaconda.com/products/individual

 

ส่วนที่ 2 การเริ่มใช้งานและบันทึกงาน

หลังจากติดตั้ง Anaconda แล้ว ก็จะมีไอคอนหรือ App ชื่อว่า “Spyder” ขอให้เปิด App นี้แล้วรอสักครู่ จากนั้น โปรแกรมก็จะแสดงหน้าต่างขึ้น ดังรูป

 

A screenshot of a cell phone

Description automatically generated

 

ในขั้นแรก เราควรทำความเข้าใจการจัดวางหน้าต่างในโปรแกรมก่อน โดยการกดเมาส์เลือกส่วนต่างดู และลองดูเมนูย่อยในเมนูบาร์ดู โดยที่เรายังไม่จำเป็นต้องเข้าใจทั้งหมด หลังจากนั้น ขอให้ลองป้อนโค้ดคำสั่งลงในไอไพธอนคอนโซล (IPython Console) ที่แสดงเป็นส่วนที่ 1 ในรูป เช่น พิมพ์ “1+1” ที่ In [1]: แล้วกดปุ่ม Enter โปรแกรมจะได้ผลลัพธ์คือ Out [1]: 2 เพียงแค่นี้เราก็สามารถใช้ Spyder เป็นเหมือนเครื่องคิดเลขได้แล้ว! และเราสามารถย้อนดูข้อมูลที่พิมพ์ลงไปทีละคำสั่งได้โดย กดปุ่มลูกศรขึ้น หรือเลือกดูคำสั่งย้อนหลังโดยการกดที่แถบ History

 

การป้อนข้อมูล

หากเราป้อน “x = 5” ลงไป จะเป็นการกำหนดตัวแปรชื่อ x ให้และมีค่าเท่ากับ 5 ดังนั้นในแถบ Variable explorer ในส่วนที่ 3 เราจะสังเกตเห็นได้ว่า x และ 5 จะแสดงในรายการตัวแปร หากเราป้อน “print(x)” โปรแกรมก็จะแสดงค่า 5 ออกมา คำสั่ง print นี้ มีประโยชน์มากในตอนเขียนโค้ดในอิดิเตอร์ (ส่วนที่ 2) ต่อไป หากเราป้อน “y = 4” แล้วป้อน “x+y” เราก็จะได้ผลลัพธ์ของการคำนวณออกมาคือ Out [4]: 9 สำหรับการเขียนโค้ดในคอนโซลนั้นเราสามารถเห็นค่าของตัวแปรได้โดยการพิมพ์ชื่อตัวแปรแล้วกด Enter (ไม่ต้องใช้คำสั่ง print)

 

ปุ่มลูกศร

ในการพิมพ์โค้ดในคอนโซลเรามักใช้ปุ่มลูกศรช่วยเลื่อนเคอร์เซอร์ เช่น หากเราต้องการเก็บค่าของ x+y เราก็เรียกคำสั่งเก่าโดยการกดลูกศรขึ้นแล้วเลื่อนเคอร์เซอร์ไปที่หน้าสุดโดยการกดปุ่มลูกศรซ้ายหลาย ๆ ที หรือกดปุ่ม Home แล้วพิมพ์เพิ่ม เช่น “z=x+y” แล้วกด Enter ค่าของ x+y ก็จะเก็บในตัวแปรใหม่ z (โดยไม่แสดงผลออกมาให้เห็น)

 

อาเรย์ (Array)

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

 

import numpy as np

 

และนอกจากไลบรารี่ Numpy แล้ว เราก็นิยมเรียกไลบรารี่สำหรับพล็อตกราฟ 2 มิติ คือ ไลบรารี่ย่อยชื่อ pyplot ในไลบรารี่ matplotlib มาด้วย

 

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

 

คอมเม้นต์

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

 

ตัวอย่างการใช้อาเรย์ หลังโหลดไลบรารี่ (ด้วยคำสั่ง import numpy as np) แล้ว คือ

x = np.array([1,2,3,4])

y = np.array([4,0,3,2])

z = x+y

 

อาเรย์ vs. ลิสต์

บางคนที่เคยเรียนภาษาไพธอนมาบ้างอาจคิดว่า การใช้อาเรย์เป็นเรื่องไม่จำเป็น เพราะภาษาไพธอนมีลิสต์อยู่แล้ว คือ เราสามารถกำหนดลิสต์

x = [1,2,3,4]

y = [4,0,3,2]

ได้ ซึ่งก็กำหนดได้จริง แต่หากทำเช่นนี้ เราจะไม่สามารถนำสมาชิกของ x มาบวกกับ y ได้อย่างที่ทำกับอาเรย์ เพราะหาก x และ y เป็นลิสต์ จะได้ว่า x+y = [1, 2, 3, 4, 4, 0, 3, 2]

 

อาเรย์ในไลบรารี่ Numpy มีประโยชน์มากในการนำไปใช้คำนวณงานต่าง ๆ เราสามารถอ้างอิงถึงสมาชิกในอาเรย์ได้ด้วย ดัชนี เช่น x[0] คือ สมาชิกตัวแรกของอาเรย์ x, x[1:3] คือสมาชิกตัวที่สองถึงสามของอาเรย์ x, x[1:] คือสมาชิกตัวที่สองถึงตัวสุดท้ายของอาเรย์ x นอกจากนี้หากป้อนตัวเลขดัชนีเป็นค่าติดลบ จะเป็นกับนับอาเรย์จากท้ายด้วย เช่น x[-1] คือ สมาชิกตัวสุดท้ายของอาเรย์ x เราสามารถสร้างอาเรย์หลายมิติในลักษณะเดียวกับเมตริกซ์หรือเทนเซอร์ได้ โดยใช้เครื่องหมาย [ , ] ซ้อนอีกชั้น เช่น x = np.array([[1,2],[3,4]]) คือ เมตริกซ์ [[1,2],[3,4]]

 

ฟังก์ชันมากมายในไลบรารี่ Numpy ที่สร้างมาเพื่อใช้งานกับอาเรย์ เช่นฟังก์ชันที่ใช้สร้างอาเรย์ของตัวเลข 0 ถึง N ใด ๆ คือ np.arange(N) และ np.linspace(0,N) หรือ สร้างอาเรย์ขนาด 3x4 ของตัวเลข 0 เพียงค่าเดียว คือ np.zeros([3,4]) โดยผู้ที่สนใจสามารถศึกษาได้เพิ่มเติมได้จากเอกสารออนไลน์ของไลบรารี่นี้ที่ https://numpy.org/doc/stable/ โดยการค้นหาคำสั่งในกล่องค้นหา

 

การคำนวณเชิงเลขอย่างง่าย

ตัวดำเนินการที่ใช้ได้กับอาเรย์ในลักษณะเดียวกับ ตัวเลขเดี่ยว ๆ คือ

+ บวก, - ลบ, * คูณ, / หาร, ** ยกกำลัง

abs() หาค่าสัมบูรณ์

sqrt() รากที่สอง

exp() หาค่า e ยกกำลัง

log() หาค่าล็อกฐานธรรมชาติ

log10() หาค่าล็อกฐานสิบ

sin() หาค่าไซน์

cos() หาค่าโคไซน์

 

โดยฟังก์ชันเหล่านี้ จะดำเนินการกับสมาชิกแต่ละตัวในอาเรย์

หากให้ดำเนินการระหว่างเลขตัวเดี่ยว ๆ กับอาเรย์ เช่น 1+np.array([1,2,3,4]) แล้ว ไพธอนจะแปลงเลขเดี่ยว ๆ เป็นอาเรย์ที่มีขนาดเท่ากันเสียก่อนแล้วจึงดำเนินการ ซึ่งจะได้เป็น np.array([2,3,4,5])

 

การคำนวณเชิงเลขกับข้อมูลหลายตัว

กรณีฟังก์ชันที่ใช้สมาชิกหลายตัว ในการคำนวณ เช่น sum(), mean(), max(), min() ไพธอนก็จะทำกับสมาชิกทุกตัว นั่นคือ จะได้ผลเป็นเลขตัวเดียว เช่น np.mean(np.array([1,2,3,4])) ได้ผลคือ 2.5 หากข้อมูลเป็นอาเรย์มากกว่าหนึ่งมิติ (เช่นสองมิติ) แต่หากเราต้องการให้ทำกับข้อมูลในมิติเดียว ก็กำหนดได้จากการใส่พารามิเตอร์เพิ่ม เช่น np.mean(np.array([[1,2],[3,4]]),axis=0) = array([2., 3.]) ในขณะที่ np.mean(np.array([[1,2],[3,4]]),axis=1) ได้ผลลัพธ์คือ array([1.5, 3.5])

 

การใช้อิดิเตอร์

ในการใช้งานจริง เรามักจะเขียนโค้ดในอิดิเตอร์ แล้วบันทึก และรัน โดยกดปุ่ม F5 โดยอิดิเตอร์จะไม่แสดงผลออกมาหากไม่สั่งให้พิมพ์ด้วยคำสั่ง print

เราจะลองใช้อิดิเตอร์ โดยพิมพ์

 

import numpy as np

x = np.arange(-10,10,0.1)    # สร้างอาเรย์ x ที่มีค่าตั้งแต่ -10 ถึง 10 (ไม่รวม 10) โดยเพิ่มทีละ 0.1

y = x**2 + 6*x  + 4   # สร้างอาเรย์ y = x^2 + 6*x + 4

ymin = np.min(y)

print(ymin)

 

ส่วนที่ 3 การพล็อตข้อมูล

หากเราต้องการพล็อตข้อมูล ก็ทำได้โดยการโหลดไลบรารี่ matplotlib.pyplot คือ

import matplotlib.pyplot as plt

 

เมื่อโหลดไลบรารี่แล้ว การพล็อตกราฟสองมิติจากอาเรย์ x,y ใด ๆ ทำได้โดยง่ายคือ

plt.plot(x,y)

 

โดย x และ y จะต้องเป็นอาเรย์ 1 มิติ ที่มีขนาดเท่ากัน โดยผลที่ได้จะอยู่ในหน้าต่างใหม่ หรือในหน้าต่างเดิม ขึ้นกับ การกำหนดใน เมนู Tools/Preferences/IPython Console แถบ Graphics

 

 

สิ่งที่ควรอ่านต่อไป

หากเห็นว่า ไพธอนและ Numpy นั้นน่าสนใจ ผมขอแนะนำให้อ่านและทำตามเอกสารออนไลน์ ใน https://numpy.org/doc/stable/user/quickstart.html

สำหรับผู้ที่คิดว่ายังขาดความรู้ด้านภาษาไพธอน ก็สามารถหาอ่าน ดู หรือ ฟัง จากแหล่งความรู้มากมายในอินเทอร์เน็ต (โดยค้นหา python tutorial)

สำหรับผู้ที่ต้องการข้อมูลเจาะจง เช่น พยายามทำอะไรแล้วทำไม่ได้ (ขึ้น Error Message) ท่านก็สามารถหา Solution ได้จากการค้นข้อมูลในอินเทอร์เน็ตเช่นกัน

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

 

จบ