Plotnine ของดีสาย Data Viz ใน Python ใช้ง่าย ฟรี ที่คุณต้องมีติดเครื่อง​​

data visualization tool using Plotnine in Python

วันก่อน ตอนที่ผมไปลองเขียนโค้ด Python ใน Google Colabs (บริการคล้าย Jupyter Notebook ของ Google) ก็ได้ไปเจอกับ Library ตัวหนึ่ง ชื่อ Plotnine ซึ่งเพิ่งเคยได้ยิน เลยลองไปเสิร์จดู แล้วเจอว่ามันดีมากกกกก เลยเอามาแชร์กัน

Plotnine คือไลบรารี Python สำหรับพล็อตกราฟ (สาย Data Visualization) ที่ใช้คอนเซปต์ของ Grammar of Graphics อันเดียวกับ Library สำหรับทำ Data Visualization สุดฮิตใน R ชื่อ ggplot2

Grammar of Graphics ทำให้การสร้างกราฟที่สวยงามและซับซ้อนกลายเป็นเรื่องง่ายและเข้าใจได้แบบสุด ๆ

ในบทความนี้ผมจะป้ายยา Grammar of Graphics ว่ามันดียังไง และเดี๋ยวทิ้งลิงก์ให้สำหรับคนที่สนใจไปดาวน์โหลด Plotnine มาใช้กัน

Grammar of Graphics คอนเซปต์ที่ช่วยให้การเขียนพลอตยาก ๆ กลายเป็นเรื่องง่าย

สำหรับคนที่เขียน Python ทำงานสาย Data มาสักระยะหนึ่งแล้ว ก็เป็นที่รู้กันว่า Library สำหรับทำ Data Visualization ใน Python เช่น Matplotlib, Seaborn, Plotly จะมีคำสั่งให้ใช้มากมาย ใช้บ่อยยังไงก็จำได้หมด

เช่น ถ้าเราอยากพลอตกราฟแท่งใน Seaborn ก็ต้องใช้คำสั่ง barplot ส่วนถ้าอยากพลอตกราฟเส้นก็ต้องใช้ lineplot

และแต่ละคำสั่งก็มี parameter ที่เราต้องส่งแตกต่างกันไป ทำให้การใช้แต่ละครั้งต้องเสิร์ชดูวิธีใช้ก่อน

แล้วถ้ามีวิธีที่ดีกว่าในการวาดกราฟล่ะ?

สิ่งที่ผมชอบมากที่สุดใน ggplot2 (และตอนนี้คือ Plotnine) คือ คอนเซปต์ “Grammar of Graphics” ที่ทำให้การเขียนพลอตยาก ๆ ทำได้สะดวกสุด ๆ

Grammar of Graphics เปลี่ยนการจำฟังก์ชั่นเฉพาะของกราฟแบบที่เราต้องการ ไปเป็นการเขียนสมการแทน แนวคิดนี้จะให้เรามองกราฟเป็นการ “ประกอบร่าง” จากชั้น (layers) ต่าง ๆ แทน เหมือนต่อเลโก้เลยครับ

องค์ประกอบหลัก ๆ ของ Grammar of Graphics คือ:

  • Data: ข้อมูลที่เราจะใช้
  • Aes (Aesthetics = ความงาม): การจับคู่ข้อมูลเข้ากับแกนต่าง ๆ เช่น แกน x, แกน y, สี (color), ขนาด (size)
  • Geom (Geometry = รูปทรง): รูปทรงที่เราจะใช้แสดงผล เช่น geom_point() (กราฟจุด = Scatter plot), geom_bar() (กราฟแท่ง = Bar chart), geom_line() (กราฟเส้น = Line chart)

ตัวอย่างโค้ด: สร้างกราฟแบบ Step-by-Step ด้วย Plotnine

(โค้ดและ Output แบบเต็ม ๆ สามารถดูได้ที่นี่ Google Colabs: https://colab.research.google.com/drive/1qJflLvqoV5ngifyBuxjw5jmJ9DwOXhD1?usp=sharing )

ตัวอย่างนี้ เราจะมาใช้ข้อมูลราคาบ้านในอเมริกากัน โดยเราจะพลอตกราฟระหว่าง sales (ยอดขาย) กับ listings (จำนวนบ้านที่โพสขาย)

สมมติว่าผมต้องการสร้างกราฟจุดด้วย Plotnine ผมก็เขียนแบบนี้ได้เลย (ถ้าใครเคยใช้ ggplot2 จะเห็นว่ามันเหมือนกันเปี๊ยบ)

โค้ด:

p = (ggplot(txhousing) +
aes(x='sales', y='listings') +
geom_point())

p

แค่นี้เราก็ได้ Scatter Plot สวย ๆ มาแล้ว และทำให้เห็นว่า พอจำนวน listings เยอะขึ้น ก็ทำให้ sales เพิ่มขึ้น (ด้านขวาบนของกราฟ)

ผลลัพธ์:

Scatter plot depicting sales numbers using Plotnine in Python

จะเห็นจากโค้ดว่า plotnine ทำให้เราเขียนเป็นสมการได้เลย A + B + C + …

แล้วถ้าอยากเปลี่ยนหน้าตาพลอตล่ะ? ก็เปลี่ยนจาก geom_point() เป็น geom_bar() หรือ geom_line() ได้เลย

โค้ด:

p = (ggplot(txhousing) +
aes(x='sales', y='listings') +
geom_line())

p

ผลลัพธ์:

Line plot created with Plotnine in Python

แล้วอยากเพิ่มมิติให้เห็นภาพชัดขึ้นล่ะ? ได้เลย เราจะมาลองเพิ่มสี เพิ่มขนาด เราแค่เพิ่มโค้ดเป็นแบบนี้ครับ

โค้ด:

p = (ggplot(txhousing) +
aes(x='sales', y='listings', color='city', size='median') +
geom_line() +
theme(legend_position='bottom'))

p

ผลลัพธ์:

Line graph depicting population distribution across counties

(ขออภัยที่กราฟจะเริ่มดูยากครับ เนื่องจากข้อมูลตารางนี้ค่อนข้างเยอะ)

เห็นไหมครับ ว่าแค่เพิ่มสมการ + ไปเรื่อย ๆ ตัวกราฟฟิกของเราก็จะอลังการมากขึ้น

นี่คือความเจ๋งของ Plotnine และ Grammar of Graphics ครับ เราสามารถบวกองค์ประกอบต่างๆ เพิ่มเข้าไปได้เรื่อยๆ เพื่อสร้างกราฟที่ซับซ้อนได้อย่างเป็นเหตุเป็นผล

ป.ล. Grammar of Graphics มีหนังสือของตัวเองด้วยนะ ถ้าท่านใดสนใจก็ไปลุยได้ครับ

ป.ล.2 สำหรับท่านที่สนใจเรียนการใช้ Plotnine ผมขอแปะวีดิโอสั้น ๆ อันนี้ให้ด้วยครับ จะได้เห็นภาพมากขึ้น

ทางไปดาวน์โหลด Plotnine

Plotnine Python website free download

ณ ตอนนี้ Plotnine มี Star บน GitHub (เหมือนการกดไลก์บนเฟสบุ๊ก) 4,000 Star เข้าไปแล้ว และมีคนเข้ามาร่วมพัฒนา (Contributor) ถึง 90 คน

ถือว่าเป็นโปรเจกต์ที่ Active และน่าจับตามองมากๆ ครับ มั่นใจได้เลยว่ามีอนาคต และน่าหยิบมาใช้อย่างยิ่ง

และที่สำคัญ Plotnine ไม่ใช่ของใหม่ครับ เพราะ Version 0.1 ออกมาตั้งแต่ 2017 โน่นเลย แต่ผมเองก็เพิ่งมารู้

สำหรับใครที่ย้ายมา Python จากสาย R แล้วคิดถึง ggplot2 หรือใครที่อยากลองวิธีสร้างกราฟบน Python ที่ทรงพลังและอ่านโค้ดง่าย (น่าจะง่ายที่สุดเท่าที่ผมเคยเจอมา แต่ขอไม่อวยเยอะ เผื่อเจอตัวอื่นอีก XD) ผมขอป้ายยา Plotnine ไว้ในอ้อมอกอ้อมใจเลยครับ

ทางไปลอง: https://plotnine.org/

ลองแล้วเป็นยังไง หรือมีตัวไหนดีกว่า มา Feedback กันได้เลยนะคร้าบ

—-

ขอบคุณที่อ่านกันมาจนจบบทความนี้ครับ ถ้าเพื่อน ๆ คิดว่าบทความนี้มีประโยชน์ และอยากสนับสนุนให้ทีม DataTH มีกำลังใจทำบทความคุณภาพดี ให้อ่านฟรีกันนาน ๆ ฝากช่วยแชร์ให้เพื่อน ๆ หน่อยนะครับ

และถ้าอยากติดตามบทความดี ๆ ด้าน Data กัน สามารถติดตาม DataTH ได้บนช่องทางต่าง ๆ ทั้ง Website, Facebook, และ Youtube

แล้วพบกันใหม่บทความหน้าครับ

บทความอื่น ๆ ที่เกี่ยวข้อง

PDPA Icon

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

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save