[TH] Data Science Ep1 Pandas

บทความนี้เป็นการใช้งานคลังไลบรารี Pandas ของภาษาไพธอนโดยใช้บอร์ด Raspberry Pi 3 B+ เป็นอุปกรณ์ทำงาน โดยสามารถนำไปประยุกต์ใช้งานกับไพธอนของระบบปฏิบัติการ Windows, macOS หรือ Linux ได้ ซึ่งบทความนี้จะแบ่งเป็นหลายตอนเหมือนกับคลังไลบรารี ulab ที่ผ่านมา โดยในบทความตอนที่ 1 กล่าวถึงคุณสมัติของ Pandas, การติดตั้ง และโครงสร้างข้อมูลของ Pandas

Pandas

Pandas ถูกพัฒนาต่อเนื่องมาตั้งแต่ปี ค.ศ.2008 [1] เพื่อเป็นคลังไลบรารีแบบเปิดเผยโค้ด (Open Source) ที่ใช้ลิขสิทธิ์แบบ BSD ซึ่งเป็นเครื่องมือสำหรับทำงานเกี่ยวกับโครงสร้างข้อมูลและการวิเคราะห์ข้อมูล ทำให้เป็นที่นิยมใช้สำหรับงานประยุกต์เกี่ยวกับการเงิน เศรษฐศาสตร์ สถิติ และการวิเคราะห์ข้อมูล เป็นต้น โดยวิศัยทัศน์ของ Pandas คือ ให้ทุกคนเข้าถึงได้ อิสระในการใช้และปรับแต่ง ยืดหยุ่น ทรงพลัง ใช้ง่าย และทำงานได้เร็ว จุดเด่นของไลบรารีเป็นดังนี้

  1. มี DataFrame ที่ทำงานได้รวดเร็วสำหรับการบริหารจัดการกับข้อมูลและเข้าถึงได้ด้วยการอ้างอิงตำแหน่งของข้อมูล (indexing)
  2. มีเครื่องมือในการอ่านและเขียนข้อมูลในหน่วยความจำกับรูปแบบข้อมูลภายนอกที่เป็น CSV,ไฟล์ข้อความ, ไฟล์ Excel ของ Microsoft, ไฟล์ SQL ของระบบจัดการฐานข้อมูล และรูปแบบไฟล์ HDF5
  3. มีระบบ Data Alignment และตัวจัดการข้อมูลผิดพลาด (Missing Data)
  4. ยืดหยุ่นในการปรับเปลี่ยนขนาด (reshape) และไพวอต (Pivot) ของก้อนข้อมูล (Data sets)
  5. สามารถทำการเลื่อนข้อมูล (Slicing), xxx (fancy indexing) และ xxx (subsetting) กับก้อนข้อมูลขนาดใหญ่
  6. สามารถเพิ่มและลบคอลัมน์ได้ตามโครงสร้างข้อมูลที่นำมาใช้
  7. รองรับการจัดกลุ่มและแปลงก้อนข้อมูล
  8. ประสิทธิภาพสูงในการรวม (join) และต่อเชื่อม (merge) ก้อนข้อมูลขนาดใหญ่
  9. ใช้การอ้างอิงในแบบระดับชั้น (Hierarchical axis indexing) ทำให้รองรับการทำงานกับข้อมูลแบบหลายมิติ
  10. มีฟังชันทำงานด้านอนุกรมเวลา (Time series-functionality) ได้แก่
    1. date range generation และ frequency conversion
    2. การย้ายวินโดว์ทางสถิติ
    3. การเลื่อนวันที่
    4. สร้างโดเมนเวลาตามที่ต้องการ
    5. เชื่อมอนุกรมเวลาโดยไม่สูญเสียข้อมูล
  11. ปรับแต่งประสิทธิภาพการทำงานเพื่อให้เรียกใช้ผ่าน Cython

ติดตั้ง Pandas

การติดตั้ง Pandas สามารถทำผ่าน pip ด้วยคำสั่งดังนี้

pip3 install pandas

สำหรับการอัพเกรดใช้คำสั่งรูปแบบต่อไปนี้

pip3 install –upgrade pandas

หมายเหตุ
กรณีที่ใช้กับระบบปฏิบัติการ Windows หรือ Linux รุ่นใหม่ที่ยกเลิกการติดตั้งไลบรารีและเครื่องมือของไพธอนรุ่น 2 (เช่น Ubuntu 20.04 เป็นต้นมา) ใช้คำสั่ง pip แทน pip3

โครงสร้างข้อมูล

โครงสร้างข้อมุลในการจัดเก็บข้อมูลของ Pandas มี 3 ประเภท คือ

  1. Series เป็นโครงสร้างข้อมูลแถวลำดับแบบ 1 มิติ มีแกนเดียว คือ axis 0
  2. DataFrame เป็นโครงสร้างข้อมูลแถวลำดับ 2 มิติ มีข้อมูล 2 แกน (axis) คือ axis 0 หรือแถว และ 1 หรือคอลัมน์ โดยแต่ละคอลัมน์จะต้องเป็นข้อมูลประเภทเดียวกัน
  3. Panel เป็นโครงสร้างข้อมูลแถวลำดับ 3 มิติ มีข้อมูล 3 แกน (axis) คือ axis 0, 1 และ 2 สำหรับอ้างอิงค่าแถว,คอลัมน์ และระดับความลึก เป็นการนำข้อมูลแบบ DataFrame หลายชุดมาซ้อนกัน เช่น มี DataFrame ยอดขายแต่ละเดือน เมื่อนำมาเป็น Panel คือ มี DataFrame ของเดือน ม.ค. ถึง ธ.ค. มาซ้อนกันในแกนความลึก

ตัวอย่างการโหลด CSV มาเป็น DataFrame

ตัวอย่างโปรแกรมต่อไปนี้เป็นการโหลดไฟล์ csv ชื่อ data-travel-phetchaburi-2018.csv ซึ่งตัวอย่างของไฟล์เป็นดังภาพที่ 1

import pandas as pd
fileName = 'data-travel-phetchaburi-2018.csv'
travels = pd.read_csv(fileName)
print(travels)
ภาพที่ 1 ตัวอย่างข้อมูลในไฟล์ data-travel-phetchaburi-2018.csv

เมื่อรันโปรแกรม kmds01.py จะได้ผลลัพธ์ดังภาพที่ 2

ภาพที่ 2 ตัวอย่างผลลัพธ์จากโปรแกรม kmds01.py

การ describe

การสั่งให้มีการ describe ข้อมูลภายใน DataFrame ทำได้โดยเรียกใช้เมธอด describe() ดังตัวอย่างโปรแกรม kmds02.py

import pandas as pd
fileName = 'data-travel-phetchaburi-2018.csv'
travels = pd.read_csv(fileName)
desc = travels.describe()
print(desc)

ตัวอย่างของผลลัพธ์จากการทำงานของ kmds02.py เป็นดังภาพที่ 3 และ 4 ซึ่งจะได้การประเมินผลเกี่ยวกับ count, unique, top และ freq

ภาพที่ 3 ตัวอย่างผลลัพธ์จากการ describe (1/2)
ภาพที่ 4 ตัวอย่างจาก describe(2/2)

ตัวอย่าง info/shape/head/tail/sample และการบันทึก

ตัวอย่างโปรแกรม kmds03.py เป็นการโหลดข้อมูลจาก csv หลังจากนั้นแสดงรุ่นของ pandas แสดง info ของ DataFrame, แสดงขนาดของตาราง (shape), แสดงข้อมูลส่วนหัว ส่วนหาง ตัวอย่าง และดำเนินการบันทึก DataFrame ลงไฟล์ csv และ json

import pandas as pd
fileName = 'data-travel-phetchaburi-2018.csv'
travels = pd.read_csv(fileName)
print("Pandas Version : ", pd.__version__)
print(travels.info())
print('Shape = ',travels.shape)
print(travels.head())
print(travels.tail())
print(travels.sample())
travels.to_csv('data-travel-result.csv')
travels.to_json('data-travel-result.json')

ตัวอย่างของการทำงาน kmds03.py เป็นดังภาพที่ 5

ภาพที่ 5 ตัวอย่างการทำงานของ kmds03.py

ตัวอย่างการ sum/min/max/mean

ตัวอย่างโปรแกรม kmds04.py เป็นการประมวลผลข้อมูลใน DataFrame เพื่อหาผลรวม ค่าน้อยที่สุด ค่ามากที่สุด และค่าเฉลี่ย โดยเลือกประมวลผลเฉพาะเดือน Jan

import pandas as pd
fileName = 'data-travel-phetchaburi-2018.csv'
travels = pd.read_csv(fileName)
travels['total'] = travels.sum(axis=1)
print(travels)
Jan = travels['Jan']
print(":::::::: Jan. ::::::::")
print('\tsum = ',Jan.sum())
print('\tmin = ',Jan.min())
print('\tmax = ',Jan.max())
print('\tmean = ',Jan.mean())

ตัวอย่างของผลลัพธ์การทำงานจาก kmds04.py เป็นดังภาพที่ 6

ภาพที่ 6 ตัวอย่างผลลัพธ์จาก kmds04.py

เมื่อได้ข้อมูลและนำมาประมวลผลข้อมูลซึ่งมีหลากหลายวิธีที่จะขอกล่าวต่อไปในบทความถัด ๆ ไป ตอนนี้สรุปได้ว่าการทำ Data Science มีขั้นตอนพื้นฐานเบื้องต้น 3 ขั้นตอนดังภาพที่ 7 คือ นำข้อมูลเข้าผ่านทาง Pandas หลังจากนั้นดำเนินการกับข้อมูล และสุดท้ายแสดงข้อมูลในรูปแบบของกราฟผ่าน Matplotlib

ภาพที่ 7 ขั้นตอนการทำ Data Science

จากตัวอย่างการอ่านข้อมูลมาเก็บใน DataFrame หลังจากนั้น describe() และประมวลผลข้อมูลกันไปบ้างแล้วนั้น ผู้อ่านค้นพบอะไรน่าสนใจจากข้อมูลกันบ้างครับ

สรุป

บทความนี้ได้บอกถึงคุณสมบัติและการติดตั้ง Pandas ซึ่งเป็นคลังไลบรารีที่ถูกใช้มากในงานด้าน AI พร้อมทั้งได้กล่าวถึงโครงสร้างการจัดเก็บข้อมูลของ Pandas ที่ชื่อ Series, DataFrame และ Panel โดยเริ่มต้นการใช้งานด้วยการอ่านข้อมูลจากไฟล์ csv ที่เกี่ยวข้องกับสถิติการท่องเที่ยวในจังหวัดเพชรบุรีปี ค.ศ. 2018 เมื่อนำมาผ่านเมธอด describe() จึงได้ข้อมูลสรุปที่น่าสนใจมากขึ้นเกี่ยวกับการ count, unique, top และ freq ส่วนในบทความตอนถัดไปจะกล่าวถึงเรื่องที่เกี่ยวข้องต่อไป สุดท้ายนี้หวังว่าบทความนี้คงมีประโยชน์บ้างไม่มากก็น้อย และขอให้สนุกกับการเขียนโปรแกรมครับ

อ้างอิง

  1. About Pandas
  2. Python Pandas Quick Guide

(C) 2020-2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2020-11-30, 2021-06-29
ปรับปรุงเมื่อ 2021-08-26