ในการเขียนโปรแกรมเกี่ยวกับ Machine Learning หรือ Data Science นั้น หลาย ๆ อาจจะคิดว่าส่วนที่ต้องใช้เวลามากที่สุดคือการเทรนหรือวิเคราะห์ข้อมูล แต่แท้จริงแล้ว จากประสบการณ์ของผมสำหรับโปรแกรมเมอร์แล้ว สิ่งที่น่าปวดหัวและกินเวลามากที่สุดคือการจัดการข้อมูลดิบให้สวยงามเพื่อให้สามารถเอาไปใช้ในการวิเคราะห์หรือคำนวณค่าต่าง ๆ ได้ครับ ยกตัวอย่างชุดข้อมูลต่อไปนี้ ผู้เรียนคิดว่ามีจุดที่ผิดปกติตรงไหนบ้าง? (ลองคิดดูก่อนค่อยดูเฉลยท้ายบทความนะครับ*)
จากชุดข้อมูลด้านบน เราสามารถมองเห็นความผิดปกติของข้อมูลได้ง่ายเนื่องจากข้อมูลมีจำนวนน้อย แต่ในการทำงานจริงชุดข้อมูลที่เราต้องเอามาวิเคราะห์อาจมีเป็นร้อยเป็นพันคอลัมน์ และมีเป็นหมื่นเป็นแสนเป็นล้านข้อมูล ซึ่งเราคงไม่สามารถนั่งดูแล้วแก้ไขเองทีละช่องได้อย่างแน่นอน ซึ่งตรงจุดนี้แหละครับที่เจ้าไลบรารี Pandas จะเข้ามาช่วยเรา
Pandas เป็น open source, BSD-licensed library สำหรับการเขียนโปรแกรมภาษาไพทอนที่ช่วยให้เราสามารถจัดการข้อมูลทั้งเรื่องโครงสร้างของข้อมูลและการวิเคราห์ข้อมูลได้ง่ายขึ้น มีวิธีการใช้งานง่ายไม่ยุ่งยาก และมี Document ที่เขียนวิธีใช้งานของแต่ละฟังก์ชันค่อนข้างดี โดยผู้เรียนสามารถอ่าน Document ได้จากหน้าเว็บ และดูตัวอย่างการใช้งานที่มีอีกมากมายได้โดยค้นจากอินเตอร์เน็ต
สำหรับในบทความนี้ ผู้เรียนจะได้ทดลองใช้ฟังก์ชันเด่น ๆ ของไลบรารี Pandas ในการจัดการกับข้อมูลรูปแบบต่าง ๆ แบบง่าย ๆ กันครับ ให้ดาวน์โหลดไฟล์ dataset ที่จะใช้ในบทความนี้จากที่นี่
สำหรับใครที่สนใจคอร์สเรียน AI ขอแนะนำคอร์ส Machine Learning (AI701) หรือหากยังไม่มีพื้นฐานเขียนโปรแกรมมาก่อนสามารถลงคอร์ส Python + Web Programming + Machine Learning (PY203) ของทาง EPT ที่สอนแบบจัดเต็มตั้งแต่พื้นฐาน Python จนลงลึกถึงทฤษฎี AI ซึ่งเป็นคอร์สที่มีหลักสูตรเทียบเท่าเรียนในมหาวิทยาลัยชั้นนำ 2-3 ปีเลยครับ
เราสามารถติดตั้งไลบรารี Pandas ได้โดยใช้คำสั่ง pip โดยพิมพ์คำสั่งต่อไปนี้ในโปรแกรม Command Prompt หรือ Terminal หรือ Anaconda Prompt ขึ้นอยู่กับว่าเราต้องการพิมพ์ Code เพื่อทดสอบที่ไหน
pip install pandas |
สำหรับผู้ที่ต้องการใช้ Anaconda บน Windows ให้ดาวน์โหลดและติดตั้ง Anaconda ตามขั้นตอนในเว็บนี้
สำหรับผู้ที่ต้องการใช้งานผ่าน Jupyter Notebook บน AWS ให้ติดตั้ง Jupyter Notebook ตามบทความ AI101 - Jupyter Notebook on AWS และติดตั้ง Pandas ผ่าน Jupyter Notebook โดยพิมพ์คำสั่งต่อไปนี้ใน Jupyter Notebook แล้วกดปุ่มรัน
!pip install pandas |
เราสามารถใช้งาน pandas ได้โดยการ import pandas ทั้งนี้ในบทความนี้จะมีการใช้งาน numpy ด้วย ดังนั้นจึง import numpy เตรียมไว้
หมายเหตุ: ในขั้นตอนนี้ ถ้าพิมพ์ถูกต้องหมดแต่ยังขึ้น Error แสดงว่ายังไม่ได้ติดตั้งไลบรารี pandas หรือ numpy ใน Environment ที่ใช้ วิธีแก้คือ ให้ปิด Spyder หรืออะไรก็ตามที่ใช้อยู่แล้วทำการติดตั้งไลบรารีที่ขาดไปก่อน จากนั้นค่อยเปิดโปรแกรมนั้น ๆ ขึ้นมาใหม่ (กรณีใช้ Jupyter Notebook แล้วเกิน Error ก็ให้ทำการติดตั้งไลบรารีผ่าน Jupyter Notebook ก่อนเช่นกัน)
Object ของ Pandas แบ่งออกเป็น 2 ชนิดได้แก่ Series และ DataFrame ซึ่งมีลักษณะดังนี้
1. Series is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the index.
ตัวอย่างการสร้าง Series โดยใส่ list ของข้อมูล
2. DataFrame is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it like a spreadsheet or SQL table, or a dict of Series objects. It is generally the most commonly used pandas object. Like Series, DataFrame accepts many different kinds of input:
ตัวอย่างการสร้าง DataFrame จาก numpy โดยให้ datetime เป็น index และ A B C D เป็นชื่อ column
ตัวอย่างการสร้าง DataFrame จากไฟล์ csv ซึ่งเป็นสิ่งที่เราจะได้ใช้บ่อยที่สุดในการเรียนคอร์ส Machine Learning (AI701)
หลังจาก Import ชุดข้อมูลเข้ามาแล้ว เราสามารถดูรายละเอียดของข้อมูลเราได้จากฟังก์ชันของคลาส DataFrame เพื่อตรวจสอบว่าชุดข้อมูลของเรามีปัญหาหรือไม่ ในตัวอย่างนี้เราจะดูข้อมูลของตัวแปร df2 และ df ซึ่งได้สร้างไว้แล้วด้านบน
- ดูข้อมูล 5 แถวแรก ของตัวแปร df2
- ดูข้อมูล 3 แถวสุดท้าย ของตัวแปร df2
- ดู index และ column ของตัวแปร df2
- ดูชนิดของข้อมูลแต่ละ column ของตัวแปร df2
- ดู correlation ของตัวแปร df2 แบบตัวเลขธรรมดา และแบบตัวเลขพร้อมสี
- ดูข้อมูลสรุปเชิงสถิติของตัวแปร df
- Transpose ตัวแปร df
- Sort ตัวแปร df จาก axis
- Sort ตัวแปร df จาก values
- Select จากชื่อ column
- Select โดย Slices the row
- Select จาก Label
- Select แบบหลาย column หลาย row
- Getting a scalar value
- Select แบบกำหนดเงื่อนไข
- เพิ่ม column ใหม่ตาม index
- Set ค่าจาก label
- Set ค่าจากตำแหน่ง
- Set ค่าทั้ง column
- Set ค่าจากเงื่อนไข
สร้างตัวแปรใหม่ชื่อ df3 ขนาด 4x4 โดยให้ชื่อคอลัมน์เป็น A, B, C, D และสุ่มข้อมูลใส่ทุกช่อง
- Delete column
- Delete row การ delete row จะต้องกำหนดด้วย index และเมื่อลบแล้ว index จะไม่ใช่เลขต่อเนื่องกัน ดังนั้นจึงควร reset ค่า index ให้เป็นเลขเรียงกันใหม่ด้วย
การพล็อตกราฟเป็นวิธีที่ช่วยให้เราเห็นภาพรวมของข้อมูลได้อย่างรวดเร็ว ซึ่งสามารถทำได้โดยใช้ฟังก์ชัน plot()
ในตัวอย่างนี้จะทำการสุ่มข้อมูลจำนวน 50 แถว 2 คอลัมน์ (A, B) และกำหนด index ของข้อมูลเป็นวันที่ตั้งแต่ 1 ม.ค. ปี 2000 ไป 50 วัน เพื่อสร้างตัวแปร df3 ซึ่งเป็น DataFrame (กรณีที่ถ้ากราฟไม่ขึ้นให้กดรันโค้ดช่องสุดท้ายอีกที)
หลายครั้งที่ชุดข้อมูลที่เราได้มาอาจจะมีข้อมูลไม่ครบ ในตัวอย่างนี้จะสร้างตัวแปรใหม่ชื่อ df6 ขนาด 4x4 โดยให้ชื่อคอลัมน์เป็น C1, C2, C3, C4 และ index ของแถวเป็น R1, R2, R3, R4 และสุ่มข้อมูลใส่บางช่อง เมื่อพิมพ์ค่าออกมาดูจะเห็นว่าช่องที่ไม่มีข้อมูลจะขึ้นคำว่า NaN
- ดูว่ามี Missing Value ไหมด้วยฟังก์ชัน isna() ถ้ามีจะตอบ True
- ดูว่ามี Missing Value ไหมด้วยฟังก์ชัน notna() ถ้ามีจะตอบ False
- จัดการโดยการลบแถวที่มี Missing Value ซึ่งโดยปกติจะไม่ค่อยแนะนำวิธีนี้ ดังเช่นในตัวอย่างนี้ทำให้ข้อมูลหายไปเกือบหมด
- จัดการโดยแทนค่า Missing Value ด้วยค่าเฉลี่ย เป็นวิธีที่นิยมมากกว่าการลบทิ้งทั้งแถว
Dataset Name: pandas_test.csv
- อ่านไฟล์: เราสามารถอ่านไฟล์ .csv ได้ด้วยฟังก์ชัน read_csv() เหมือนดังตัวอย่างที่ได้ทำไปก่อนหน้านี้ ในตัวอย่างนี้จะทดลองอ่านไฟล์ pandas_test.csv ใส่ตัวแปร df_csv
หมายเหตุ: สำหรับคนที่ขึ้น Error ให้ดูว่าใส่ path ถูกไหมโดยจะต้องใส่ path ของเครื่องผู้เรียนเองนะครับ
- เขียนไฟล์: เราสามารถบันทึก Dataframe เป็นไฟล์ .csv ได้ด้วยฟังก์ชัน to_csv() ในตัวอย่างนี้จะบันทึกค่าจากตัวแปร df_csv ลงไฟล์ pandas_test_write.csv
จะเห็นว่าหลังจากรันคำสั่งบรรทัดนี้แล้วจะมีไฟล์ pandas_test_write.csv เพิ่มขึ้นมา
และเมื่อลองเปิดไฟล์เทียบกับไฟล์ pandas_test.csv ดู จะเห็นว่าต่างกันอยู่นิดหน่อย คือ ในไฟล์ pandas_test_write.csv จะมีคอลัมน์ index ของ DataFrame เพิ่มเข้ามาด้วยนั่นเอง
Dataset Name: thaiword.txt
- อ่านไฟล์: เราสามารถอ่านไฟล์ .txt ได้ด้วยฟังก์ชัน read_csv() มาใส่ใน DataFrame ได้เช่นกัน ในตัวอย่างนี้จะทดลองอ่านไฟล์ thaiword.txt ใส่ตัวแปร df_txt ซึ่งจะเห็นว่าผลลัพธ์ที่ได้จะถือว่าคำในบรรทัดแรกเป็นชื่อคอลัมน์และมี index เพิ่มขึ้นมาเนื่องจากเป็น DataFrame
หมายเหตุ: สำหรับคนที่ขึ้น Error ให้ดูว่าใส่ path ถูกไหมโดยจะต้องใส่ path ของเครื่องผู้เรียนเองนะครับ
- เขียนไฟล์: เราสามารถเขียน DataFrame ลงไฟล์ .txt ได้โดยใช้ฟังก์ชัน to_csv()
Dataset Name: global_temperature.xlsx
การเขียนอ่านไฟล์ Excel จะต้องติดตั้ง Python package ที่ Environment ของ Anaconda ก่อนโดยปิดโปรแกรม Spyder หรือ Jupyter Notebook แล้วทำการติดตั้งไลบรารีที่ขาดไปผ่าน Anaconda Prompt ก่อนโดยใช้คำสั่งต่อไปนี้ จากนั้นค่อยเปิดโปรแกรม Spyder หรือ Jupyter Notebook ขึ้นมาใหม่
pip install xlwt openpyxl xlsxwriter xlrd |
ซึ่งแต่ละ package มีรายละเอียดดังนี้
หลังจากติดตั้งเรียบร้อยแล้ว ต่อไปจะทดลองอ่าน/เขียนไฟล์ Excel ให้เปิดโปรแกรม Spyder หรือ Jupyter Notebook ขึ้นมา
- อ่านไฟล์: เราสามารถอ่านไฟล์ Excel ได้ด้วยฟังก์ชัน read_excel() ในตัวอย่างนี้จะทดลองอ่านไฟล์ global_temperature.xlsx ใส่ตัวแปร df_excel ซึ่งจะได้ผลลัพธ์เป็น DataFrame
หมายเหตุ: สำหรับคนที่ขึ้น Error ให้ดูว่าใส่ path ถูกไหมโดยจะต้องใส่ path ของเครื่องผู้เรียนเองนะครับ ถ้าใส่ถูกแล้วให้ดูว่าติดตั้ง package เรียบร้อยแล้วหรือยัง
- เขียนไฟล์: เราสามารถเขียน DataFrame ลงไฟล์ Excel ได้โดยใช้ฟังก์ชัน to_excel()
ในบทความต่อไป เราจะมาใช้ AI สร้างแอนิเมชันจากตัวการ์ตูนที่เราวาดเองด้วย Code 2 บรรทัดกัน แล้วพบกันใหม่บทความหน้านะครับ
[1] https://pandas.pydata.org/pandas-docs/stable/
[2] https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html
[3] https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html
[4] https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html
[5] https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html
* เฉลยเกมจับผิด จากชุดข้อมูลด้านบนจะเห็นว่ามีข้อมูลที่ดูแล้วไม่น่าจะถูกต้องดังนี้
Tag ที่น่าสนใจ: ai102 pandas data_analysis data_manipulation machine_learning python library_installation import_library object_creation viewing_data
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM