Matplotlib
รู้จักกับ Matplotlib
Matplotlib เป็น library สำหรับการสร้างกราฟและภาพแสดงผลข้อมูลในภาษา Python มักใช้ในงานด้านวิทยาศาสตร์ข้อมูล (Data Science), การคำนวณทางคณิตศาสตร์, และการวิเคราะห์ข้อมูล โดยช ่วยให้สามารถสร้างกราฟหลากหลายประเภท เช่น
- Line Plot (กราฟเส้น) - ใช้สำหรับแสดงความสัมพันธ์ระหว่างข้อมูลต่อเนื่อง
- Bar Plot (กราฟแท่ง) - ใช้สำหรับเปรียบเทียบค่าระหว่างกลุ่มข้อมูล
- Scatter Plot (กราฟจุด) - ใช้สำหรับแสดงความสัมพันธ์ระหว่างสองตัวแปร
- Histogram (ฮิสโตแกรม) - ใช้แสดงการกระจายตัวของข้อมูล
- Pie Chart (กราฟวงกลม) - ใช้แสดงสัดส่วนของข้อมูลแต่ละประเภท
- Heatmap - ใช้แสดงข้อมูลในรูปแบบตารางที่มีการไล่สีเพื่อบ่งบอกค่า
Matplotlib ทำให้สามารถปรับแต่งกราฟได้อย่างละเอียด เช่น สี, รูปแบบเส้น, ตำแหน่งแกน, ชื่อแกน, และ legend ช่วยให้การนำเสนอข้อมูลดูน่าสนใจและเข้าใจง่ายขึ้น
โดยเริ่มต้น สำหรับการลง matplotlib
สามารถลงได้ผ่านคำสั่ง pip
เช่นเดิม
pip install matplotlib
ลองใช้งาน matplotlib แบบง่ายๆ
import matplotlib.pyplot as plt
# ข้อมูลตัวอย่าง
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# สร้างกราฟเส้น
plt.plot(x, y)
plt.title('Simple Line Plot') # ข้อมูลหัว Graph
plt.xlabel('X-axis') # ข้อมูลแกน X
plt.ylabel('Y-axis') # ข้อมูลแกน Y
plt.show()
ผลลัพธ์
โดยตัว Matplotlib เป็นที่นิยมใน Python สำหรับการสร้างภาพข้อมูล (Data Visualization) ด้วยเหตุผลหลากหลายประการตั้งแต่
- Matplotlib รองรับประเภทของกราฟที่หลากหลาย และสามารถปรับแต่งกราฟได้ในรายละเอียด เช่น การเพิ่มป้ายแกน (Axis Labels), ชื่อกราฟ (Titles), สี, รูปแบบของเส้น และคำอธิบายประกอบ (Annotations)
- เป็นพื้นฐาน library อื่นๆ เช่น Seaborn, Pandas plotting และ ggplot ถูกพัฒนาขึ้นบนพื้นฐานของ Matplotlib โดย library เหล่านี้ช่วยให้การทำงานบางอย่างง่ายขึ้น แต่ยังสามารถเข้าถึง function การทำงานเต็มรูปแบบของ Matplotlib ได้
- Matplotlib สามารถทำงานร่วมกับ library อื่น ๆ ใน Python ได้อย่างดี เช่น NumPy สำหรับจัดการข้อมูลตัวเลข, Pandas สำหรับการจัดการข้อมูล, และ Jupyter Notebook สำหรับการสำรวจข้อมูลแบบ interactive เป็นต้น
- Matplotlib เปิดตัวมาตั้งแต่ปี 2003 ทำให้เป็นหนึ่งใน library การสร้างกราฟที่เก่าแก่และมีความเสถียรที่สุดสำหรับ Python อีกหนึ่งตัว
Matplotlib กับ Pandans
การใช้ Matplotlib ร่วมกับ Pandas นั ้นเป็นวิธีที่นิยมมากในการสร้างกราฟจากข้อมูลใน DataFrame ของ Pandas เพราะ Pandas มี function .plot()
ที่ช่วยให้สามารถสร้างกราฟได้อย่างรวดเร็วด้วยข้อมูลที่อยู่ใน DataFrame และสามารถใช้ Matplotlib ในการปรับแต่งกราฟเพิ่มเติมได้
ตัวอย่างการใช้งาน Pandas ร่วมกับ Matplotlib แบบง่าย ๆ
1. การสร้าง Line Plot จาก DataFrame
import pandas as pd
import matplotlib.pyplot as plt
# สร้าง DataFrame ตัวอย่าง
data = {
'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
'Sales': [250, 310, 220, 370, 280]
}
df = pd.DataFrame(data)
# สร้างกราฟเส้น (Line Plot)
df.plot(x='Month', y='Sales', kind='line')
# เพิ่ม title และ label
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()
ผลลัพธ์
ในตัวอย่างนี้ เราสร้างกราฟเส้นแสดงยอดขายรายเดือน โดยใช้ข้อมูลจาก DataFrame ซึ่งสามารถสร้างได้ผ่าน .plot()
ของ Pandas
- การสร้าง Bar Plot จาก DataFrame
import pandas as pd
import matplotlib.pyplot as plt
# สร้าง DataFrame ตัวอย่าง
data = {
'Product': ['A', 'B', 'C', 'D'],
'Quantity': [50, 70, 40, 90]
}
df = pd.DataFrame(data)
# สร้างกราฟแท่ง (Bar Plot)
df.plot(x='Product', y='Quantity', kind='bar')
# เพิ่ม title และ label
plt.title('Product Quantity')
plt.xlabel('Product')
plt.ylabel('Quantity')
plt.show()
ในตัวอย่างนี้เป็นการสร้างกราฟแท่งเพื่อแสดงปริมาณสินค้าของแต่ละผลิตภัณฑ์ โดยใช้ข้อมูลจาก DataFrame
- การสร้าง Scatter Plot จาก DataFrame
import pandas as pd
import matplotlib.pyplot as plt
# สร้าง DataFrame ตัวอย่าง
data = {
'Height': [150, 160, 165, 170, 175],
'Weight': [50, 55, 60, 65, 70]
}
df = pd.DataFrame(data)
# สร้างกราฟจุด (Scatter Plot)
df.plot(x='Height', y='Weight', kind='scatter')
# เพิ่ม title และ label
plt.title('Height vs Weight')
plt.xlabel('Height (cm)')
plt.ylabel('Weight (kg)')
plt.show()
ผลลัพธ์
นี่คือตัวอย่างของ Matplotlib ร่วมกับ Pandas ต่อมาเราจะเริ่มมารู้จักองค์ประกอบเพิ่มเติมของ Matplotlib กัน
Plot Customization
https://www.geeksforgeeks.org/python-matplotlib-an-overview/
Plot Customization ใน matplotlib คือการปรับแต่งรายละเอียดต่าง ๆ ของกราฟเพื่อทำให้การนำเสนอข้อมูลดูชัดเจนและสวยงามขึ้น โดย Matplotlib มีความยืดหยุ่นในการปรับแต่งตั้งแต่สี, รูปแบบเส้น, ขนาด, ชื่อแกน, legend, การตั้งค่าต่าง ๆ บนแกน, และอื่น ๆ อีกมากมาย
ตัวอย่างการปรับแต่งกราฟ (Plot Customization)
- การเปลี่ยนสีและรูปแบบของเส้น
import matplotlib.pyplot as plt
# ข้อมูลตัวอย่าง
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# ปรับแต่งสีเส้นและรูปแบบเส้น
plt.plot(x, y, color='red', linestyle='--', marker='o', markerfacecolor='blue', markersize=10)
# เพิ่ม title และ label
plt.title('Customized Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# แสดงกราฟ
plt.show()
ผลลัพธ์
ในตัวอย่างนี้
- เปลี่ยนสีของเส้นเป็นสีแดง (
color='red'
) - เปลี่ยนรูปแบบเส้นเป็นเส้นประ (
linestyle='--'
) - เพิ่มจุดบนเส้นโดยใช้ marker แบบวงกลม (
marker='o'
) และตั้งค่าสีจุด (markerfacecolor='blue'
) พร้อมกำหนดขนาดจุด (markersize=10
)
- การเพิ่ม legend และตั้งค่าขอบเขตแกน
import matplotlib.pyplot as plt
# ข้อมูลตัวอย่าง
x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]
# สร้างกราฟสองเส้น
plt.plot(x, y1, label='Line 1', color='blue', marker='o')
plt.plot(x, y2, label='Line 2', color='green', marker='s')
# เพิ่มชื่อแกนและ title
plt.title('Comparison of Two Lines')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# เพิ่ม legend
plt.legend()
# ตั้งค่าขอบเขตแกน
plt.xlim(0, 6)
plt.ylim(0, 12)
# แสดงกราฟ
plt.show()
ผลลัพธ์
ในตัวอย่างนี้
- เราสร้างกราฟ 2 เส้น โดยเพิ่ม legend เพื่อบอกว่าแต่ละเส้นแสดงข้อมูลอะไร (
label='Line 1'
,label='Line 2'
) - ตั้งค่าขอบเขตการแสดงผลของแกน X และ Y (
xlim(0, 6)
,ylim(0, 12)
)
- การสร้างกราฟที่มี subplot
import matplotlib.pyplot as plt
# ข้อมูลตัวอย่าง
x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]
# สร้าง subplot สองกราฟ
plt.figure(figsize=(10, 5))
# Subplot ที่ 1
plt.subplot(1, 2, 1)
plt.plot(x, y1, color='blue', marker='o')
plt.title('Line 1')
# Subplot ที่ 2
plt.subplot(1, 2, 2)
plt.plot(x, y2, color='green', marker='s')
plt.title('Line 2')
# แสดงกราฟ
plt.tight_layout()
plt.show()
ผลลัพธ์
Other Plot Types
https://matplotlib.org/stable/plot_types/index.html
จะเห็นว่า matplotlib เองก็มี Plot Type ให้ใช้อยู่หลากหลายประเภท เราจะลองมาดูตัวอย่างแต่ละ use case ที่ซับซ้อนขึ้นกัน
Stacked Plots
Stacked plot ใช้ในการแสดงผลข้อมูลแบบซ้อนกันในลักษณะของกราฟเส้น โดยจะแสดงให้เห็นการรวมกันของค่าต่าง ๆ ในแต่ละหมวดหมู่
ตัวอย่าง csv sales_data.csv
Month,Product A,Product B,Product C
January,100,150,200
February,120,160,180
March,130,170,190
April,140,180,210
May,150,200,220
code python
import pandas as pd
import matplotlib.pyplot as plt
# อ่านข้อมูลจากไฟล์ CSV
df = pd.read_csv('sales_data.csv')
# สมมติข้อมูลมีคอลัมน์ 'Month', 'Product A', 'Product B', 'Product C'
df.set_index('Month', inplace=True)
# สร้าง Stacked Plot
df.plot(kind='area', stacked=True)
plt.title('Stacked Plot of Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()
ผลลัพธ์
เหมาะกับโจทย์แบบ ไหนบ้าง ?
Stacked Plots เหมาะกับโจทย์ที่ต้องการแสดงข้อมูลแบบรวมกันและเปรียบเทียบองค์ประกอบของข้อมูลในหลายหมวดหมู่โดยรวมเป็นหนึ่งเดียว ต่อไปนี้คือตัวอย่างโจทย์ที่ Stacked Plots เหมาะสม
- การแสดงส่วนประกอบของยอดขายสินค้าหลายประเภท เช่น การเปรียบเทียบยอดขายของผลิตภัณฑ์หลายชนิดในแต่ละเดือน และต้องการเห็นยอดรวมของยอดขายทั้งหมด
- การวิเคราะห์การใช้พลังงานจากหลายแหล่งพลังงาน เช่น แสดงการใช้พลังงานไฟฟ้า ก๊าซธรรมชาติ และน้ำมันในแต่ละปี และเห็นการใช้พลังงานรวมทั้งหมดในแต่ละปี
- การติดตามการเติบโตของรายได้จากหลายแหล่ง เช่น แสดงรายได้จากแต่ละธุรกิจของบริษัทในแต่ละไตรมาส และต้องการเห็นรายได้รวมในแต่ละช่วงเวลา
- การเปรียบเทียบจำนวนประชากรของกลุ่มอายุในแต่ละปี เช่น การแสดงประชา กรในแต่ละช่วงอายุในประเทศหนึ่ง และเห็นแนวโน้มประชากรรวมในแต่ละปี
- การแสดงส่วนประกอบของค่าใช้จ่ายในองค์กร เช่น การแสดงค่าใช้จ่ายในแต่ละหมวดหมู่ (เช่น การตลาด, การผลิต, การวิจัย) โดยต้องการเห็นค่าใช้จ่ายรวมในแต่ละเดือนหรือปี
- การติดตามปริมาณการขนส่งสินค้าหลายชนิด เช่น การแสดงปริมาณการขนส่งสินค้าต่าง ๆ ผ่านท่าเรือในแต่ละเดือน พร้อมกับเห็นปริมาณการขนส่งรวม
- การแสดงสัดส่วนการใช้สื่อโฆษณาหลายช่องทาง เช่น เปรียบเทียบการใช้เงินในช่องทางโฆษณาต่าง ๆ (ออนไลน์, สื่อสิ่งพิมพ์, โทรทัศน์) ในแต่ละไตรมาส พร้อมกับการดูค่าใช้จ่ายรวมของแต่ละช่องทาง
- การแสดงส่วนประกอบการลงคะแนนเสียง เช่น การแสดงจำนวนผู้ลงคะแนนเสียงในแต่ละกลุ่ม (เช่น กลุ่มวัยรุ่น, วัยทำงาน, ผู้สูงอายุ) ในการเลือกตั้งแต่ละครั้ง และต้องการเห็นจำนวนผู้ลงคะแนนรวม
- การแสดงปริมาณการผลิตสินค้าหลายประเภทในโรงงาน เช่น การเปรียบเทียบการผลิตสินค้าต่าง ๆ ในโรงงานในแต่ละเดือน และต้องการดูยอดการผลิตรวมทั้งหมด
Stacked Plots มีประโยชน์มากเมื่อต้องการเปรียบเทียบการกระจายของข้อมูลหลายหมวดหมู่ และยังต้องการเห็นการเปลี่ยนแปลงของค่ารวมในแต่ละช่วงเวลาหรือหมวดหมู่ด้วย
Pie Charts
Pie chart แสดงสัดส่วนของข้อมูลแต่ละประเภทในลักษณะของกราฟวงกลม
ตัวอย่าง csv market_share.csv
Brand,Share
Brand A,30
Brand B,20
Brand C,25
Brand D,15
Brand E,10
code python
import pandas as pd
import matplotlib.pyplot as plt
# อ่านข้อมูลจากไฟล์ CSV
df = pd.read_csv('market_share.csv')
# สมมติข้อมูลมีคอลัมน์ 'Brand', 'Share'
labels = df['Brand']
sizes = df['Share']
# สร้าง Pie Chart
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Market Share by Brand')
plt.show()
ผลลัพธ์
เหมาะกับโจทย์แบบไหนบ้าง ?
Pie Charts เหมาะกับโจทย์ที่ต้องการแสดงสัดส่วนหรือส่วนแบ่งของข้อมูลในภาพรวม ซึ่งแต่ละส่วนของกราฟจะแสดงเป็นเปอร์เซ็นต์ของข้อมูลรวม ตัวอย่างโจทย์ที่เหมาะกับการใช้ Pie Charts มีดังนี้
- แสดงสัดส่วนตลาด (Market Share) ของบริษัท เช่น การแสดงส่วนแบ่งการตลาดของบริษัทต่าง ๆ ในอุตสาหกรรมโทรศัพท์มือถือ
- การแบ่งสัดส่วนค่าใช้จ่ายในงบประมาณ เช่น แสดงการแบ่งหมวดหมู่ของงบประมาณภาครัฐที่จัดสรรให้กับการศึกษา สาธารณสุข โครงสร้างพื้นฐาน และอื่น ๆ
- การสำรวจความคิดเห็น (Survey Results) เช่น การแสดงผลสำรวจความคิดเห็นของผู้บริโภคเกี่ยวกับแบรนด์โปรด โดยแบ่งเป็นเปอร์เซ็นต์ของผู้เลือกแต่ละแบรนด์
- การแจกแจงจำนวนสมาชิกตามประเภทสมาชิก (Subscription Types) เช่น การแสดงสัดส่วนของสมาชิกแต่ละประเภทในบริการสตรีมมิง (เช่น Basic, Standard, Premium)
- การแบ่งปันส่วนแบ่งพลังงานจากแหล่งต่าง ๆ เช่น แสดงส่วนแบ่งของแหล่งพลังงานในประเทศ (พลังงานแสงอาทิตย์, ลม, ถ่านหิน, ก๊าซธรรมชาติ)
- การแบ่งประเภทของยอดขายสินค้าตามหมวดหมู่ เช่น แสดงสัดส่วนของยอดขายในแต่ละหมวดหมู่สินค้า (เช่น เสื้อผ้า, เครื่องใช้ไฟฟ้า, สินค้าอุปโภคบริโภค)
- การแบ่งกลุ่มประชากรตามอายุ เช่น การแสดงสัดส่วนของประชากรตามกลุ่มอายุในประเทศหนึ่ง
- การจัดสรรเวลาในการทำงานประจำวัน เช่น แสดงสัดส่วนเวลาที่ใช้ในกิจกรรมต่าง ๆ ของวัน (เช่น การประชุม, การทำงาน, การพักผ่อน)
- การแบ่งสัดส่วนการใช้สื่อโฆษณา เช่น การแสดงสัดส่วนของการใช้เงินในแต่ละช่องทางการโฆษณา (เช่น สื่อออนไลน์, ทีวี, วิทยุ)
- การแจกแจงประเภทของข้อร้องเรียนลูกค้า เช่น การแสดงสัดส่วนของประเภทข้อร้องเรียนที่ได้รับในศูนย์บริการลูกค้า (เช่น การจัดส่ง, การคืนเงิน, คุณภาพสินค้า)
Pie Charts จะเหมาะที่สุดเมื่อมีข้อมูลที่ต้องการแสดงเป็นสัดส่วนหรือเปอร์เซ็นต์ในภาพรวม และเหมาะกับโจทย์ที่มีจำนวนหมวดหมู่ไม่มากเกินไป (เช่น 5-7 หมวดหมู่) เพื่อให้การนำเสนอไม่ซับซ้อน
ข้อเสียของการใช้ Pie Charts มีหลายประการ ซึ่งอาจทำให้การตีความข้อมูลเป็นไปอย่างไม่แม่นยำหรือไม่ชัดเจนในบางสถานการณ์ ต่อไปนี้เป็นข้อเสียหลัก ๆ ของการใช้ Pie Charts
- ยากต่อการเปรียบเทียบหลาย ๆ ชิ้น หากมีหลายส่วนในวงกลม การเปรียบเทียบขนาดของแต่ละชิ้นส่วนจะยากขึ้น โดยเฉพาะเมื่อส่วนต่าง ๆ มีขนาดใกล้เคียงกัน ทำให้ผู้ดูไม่สามารถบอกได้ว่าชิ้นไหนใหญ่กว่าเล็กน้อย
- ไม่เหมาะสำหรับข้อมูลที่มีหลายค่า เมื่อมีหลายหมวดหมู่หรือหลายค่า (เช่น มากกว่า 5-6 ค่า) Pie Charts จะดูซับซ้อนเกินไป และทำให้ยากต่อการตีความข้อมูล
- การตีความขนาดเชิงมุมไม่แม่นยำ สมองมนุษย์ไม่ถนัดในการประเมินขนาดของมุมหรือพื้นที่ใน Pie Chart เมื่อเทียบกับกราฟประเภทอื่น เช่น Bar Chart ที่สามารถเปรียบเทียบความยาวของแท่งได้โดยตรง
- ข้อมูลที่เป็นศูนย์หรือน้อยมากแสดงผลยาก Pie Charts ไม่สามารถแสดงค่าที่เป็นศูนย์หรือใกล้เคียงศูนย์ได้อย่างชัดเจน ซึ่งทำให้การนำเสนอข้อมูลในบางกรณีเป็นเรื่องยาก
- ไม่แสดงการเปลี่ยนแปลงเมื่อมีหลายกลุ่มเปรียบเทียบกัน Pie Charts ไม่เหมาะกับการเปรียบเทียบการเปลี่ยนแปลงของข้อมูลในหลายช่วงเวลา หรือหลายกลุ่มพร้อมกัน เช่น การแสดงยอดขายของผลิตภัณฑ์ในแต่ละเดือนซึ่งทำได้ดีกว่าด้วย Line Chart หรือ Bar Chart
- อาจทำให้เข้าใจผิดได้ง่าย หาก Pie Chart ถู กออกแบบมาไม่ดี (เช่น การใช้สีหรือขนาดของชิ้นส่วนไม่สมดุล) อาจทำให้ผู้ดูเข้าใจข้อมูลผิดได้ง่าย โดยเฉพาะเมื่อไม่ได้ระบุค่าตัวเลขหรือสัดส่วนที่ชัดเจน
- พื้นที่จำกัดในการแสดงข้อมูล Pie Chart ใช้พื้นที่มากในการแสดงข้อมูลเมื่อเปรียบเทียบกับ Bar Chart ที่สามารถแสดงข้อมูลหลายชุดได้ในพื้นที่เล็กกว่า และง่ายต่อการเพิ่มหมวดหมู่ใหม่
- ไม่เหมาะสำหรับข้อมูลที่มีค่าเป็นลบหรือเป็นศูนย์ Pie Charts ไม่สามารถแสดงข้อมูลที่เป็นค่าลบได้ เนื่องจากแสดงข้อมูลในรูปแบบส่วนของวงกลมที่ต้องรวมเป็น 100% หรือผลรวมบวกเสมอ
- ไม่แสดงการกระจายของข้อมูล Pie Charts ไม่สามารถแสดงแนวโน้มหรือการกระจายของข้อมูลได้ ทำให้การวิเคราะห์เชิงลึกเกี่ยวกับรูปแบบหรือความสัมพันธ์ระหว่างข้อมูลเป็นไปได้ยาก
ดังนั้น Pie Charts จึงเหมาะสำหรับการแสดงสั ดส่วนหรือส่วนแบ่งที่มีจำนวนน้อย แต่ไม่เหมาะสำหรับการเปรียบเทียบข้อมูลที่ซับซ้อนหรือมีหมวดหมู่มาก ๆ
Box Plots
Box Plot (หรือ Box-and-Whisker Plot) คือเครื่องมือแสดงการกระจายตัวของข้อมูลในรูปแบบกราฟิกที่ช่วยให้มองเห็นค่ากลาง (median), ค่าต่ำสุด (minimum), ค่าสูงสุด (maximum), ค่าฐานล่าง (Q1 หรือ 25th percentile), ค่าฐานบน (Q3 หรือ 75th percentile) และการกระจายของข้อมูลอย่างชัดเจน นอกจากนี้ Box Plot ยังช่วยในการมองหาค่าผิดปกติ (outliers) ของข้อมูลได้ง่าย
ตัวอย่าง csv student_scores.csv
Class,Scores
A,85
A,90
A,78
B,92
B,88
B,79
C,85
C,91
C,82
code python
import pandas as pd
import matplotlib.pyplot as plt
# อ่านข้อมูลจากไฟล์ CSV
df = pd.read_csv('student_scores.csv')
# สมมติข้อมูลมีคอลัมน์ 'Scores'
plt.boxplot(df['Scores'])
plt.title('Box Plot of Student Scores')
plt.ylabel('Scores')
plt.show()
ผลลัพธ์
เหมาะกับโจทย์แบบไหนบ้าง ?
- การเปรียบเทียบการกระจายของข้อมูลหลายกลุ่ม เช่น เปรียบเทียบผลสอบของนักเรียนในแต่ละชั้นเรียน โดย Box Plot สามารถแสดงได้ว่าผลการเรียนของนักเรียนแต่ละชั้นมีการกระจายตัวอย่างไร
- การวิเคราะห์ข้อมูลทางสถิติ ใช้ Box Plot เพื่อแสดงการกระจายของข้อมูลทางสถิติเช่น ผลการทดสอบทางวิทยาศาสตร์ หรือผลการทดลอง เพื่อดูค่ากลางและการกระจายของข้อมูลในแต่ละชุดทดลอง
- การตรวจสอบข้อมูลที่มี outliers เช่น ในการวิเคราะห์รายได้ของประชากร Box Plot สามารถช่วยในการระบุ outliers ได้ง่าย (เช่น รายได้ที่สูงกว่าหรือต่ำกว่าปกติ) เพื่อใช้ในการวิเคราะห์เพิ่มเติม
- การวิเคราะห์ข้อมูลที่มีการกระจายตัวไม่สมมาตร Box Plot เหมาะในการดูข้อมูลที่มีการกระจายตัวแบบไม่สมมาตร เช่น ค่าใช้จ่ายที่หลาก หลายในโปรเจกต์ หรือการกระจายของการทำงานล่วงเวลาของพนักงาน
- การเปรียบเทียบประสิทธิภาพของอัลกอริธึมต่าง ๆ ในการทดลอง ใช้ในการแสดงผลการทำงานของอัลกอริธึมที่แตกต่างกันในการทดลองหลาย ๆ ชุด โดย Box Plot จะช่วยให้เห็นแนวโน้มความแตกต่างในการกระจายตัวของผลลัพธ์ได้
- การแสดงข้อมูลในเชิงเวลา เช่น การแสดงการเปลี่ยนแปลงของเวลาในการทำงานของโปรเซสในช่วงเวลาหลายเดือน Box Plot จะช่วยให้เห็นแนวโน้มและการกระจายของข้อมูลในแต่ละช่วงเวลา
- การวิเคราะห์ประสิทธิภาพการทำงานของทีมงาน เช่น การแสดงเวลาที่ใช้ในการทำงานของพนักงานแต่ละกลุ่ม Box Plot จะช่วยในการเปรียบเทียบระหว่างทีมและดูการกระจายของประสิทธิภาพการทำงาน
- การวิเคราะห์การกระจายของราคาในตลาดการลงทุน เช่น ใช้ Box Plot ในการแสดงการกระจายของราคาหุ้นหรือราคาอสังหาริมทรัพย์ในแต่ละช่วงเวลา เพื่อดูแนวโน้มและความผันผวนของราคา
- การวิเคราะห์ข้อมูลสุขภาพ เช่น การเปรียบเทียบค่า BMI ของผู้คนในแต่ละช่วงอายุ Box Plot จะช่วยแสดงการกระจายตัวของข้อมูลและตรวจสอบค่าผิดปกติ (เช่น BMI สูงหรือต่ำผิดปกติ)
- การวิเคราะห์เวลาในการจัดส่งสินค้า เช่น การเปรียบเทียบเวลาในการจัดส่งของสินค้าในแต่ละเดือน Box Plot จะช่วยในการวิเคราะห์การกระจายของเวลาที่ใช้ในการจัดส่งและตรวจสอบเวลาที่ล่าช้าเกินมาตรฐาน
Box Plot เหมาะกับโจทย์ที่ต้องการวิเคราะห์การกระจายตัวของข้อมูล รวมถึงการมองหาค่ากลาง ขอบเขตของข้อมูล และค่าที่เป็น outliers
Heatmaps
Heatmaps คือกราฟิกที่ใช้สีเพื่อแสดงค่าหรือความหนาแน่นของข้อมูลในรูปแบบตารางหรือพื้นที่ โ ดยแต่ละเซลล์หรือพื้นที่ใน Heatmap จะถูกระบายสีตามค่าที่แทนข้อมูลนั้น ๆ ซึ่งสีจะมีความเข้มอ่อนต่างกันตามระดับของข้อมูล เช่น สีเข้มแทนค่าที่สูงกว่า และสีอ่อนแทนค่าที่ต่ำกว่า
โดย Heatmap นั้นต้องมีการใช้ library ใน seaborn เพิ่ม โดย seaborn
มี function heatmap
ที่ถูกออกแบบมาให้ใช้งานง่ายและมีการจัดการสไตล์ที่ดูสวยงาม รวมถึงการปรับแต่งได้หลากหลาย เช่น การเพิ่มตัวเลขบน grid การใช้โทนสีที่เหมาะสม และการจัดการข้อมูลที่เป็น missing values เป็นต้น
โดย Seaborn สามารถลง library เพิ่มได้จากคำสั่ง
pip install seaborn
ตัวอย่าง csv correlation_data.csv
Variable A,Variable B,Variable C,Variable D,Variable E
1.0,0.8,0.5,0.3,-0.2
0.8,1.0,0.6,0.4,-0.3
0.5,0.6,1.0,0.7,-0.1
0.3,0.4,0.7,1.0,-0.4
-0.2,-0.3,-0.1,-0.4,1.0
code python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# อ่านข้อมูลจากไฟล์ CSV
df = pd.read_csv('correlation_data.csv')
# สมมติข้อมูลเป็นค่า correlation ของตัวแปร
corr = df.corr()
# สร้าง Heatmap
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Heatmap of Correlations')
plt.show()
ผลลัพธ์
เหมาะกับโจทย์แบบไหนบ้าง ?
- การแสดงปริมาณการเข้าชมเว็บไซต์ เช่น การแสดงปริมาณการเข้าชมเว็บไซต์ในแต่ละชั่วโมงของวัน หรือการแสดงบริเวณที่ผู้ใช้คลิกบ่อยที่สุดบนหน้าเว็บ (Click Heatmap)
- การวิเคราะห์ข้อมูลการใช้พลังงาน เช่น การแสดงการใช้พลังงานไฟฟ้าในแต่ละช่วงเวลาของวันตลอดทั้งสัปดาห์ โดยใช้สีแทนระดับการใช้พลังงาน
- การวิเคราะห์ข้อมูลทางการเงิน เช่น การแสดงความสัมพันธ์ระหว่างตัวชี้วัดทางการเงิน เช่น ราคาหุ้น ปริมาณการซื้อขาย หรือการเคลื่อนไหวของตลาดในช่วงเวลา
- การวิเคราะห์ผลการศึกษา เช่น การแสดงคะแนนสอบของนักเรียนในแต่ละวิชาหรือตารางผลการประเมินของนักเรียน โดยใช้สีแทนระดับคะแนน
- การวิเคราะห์การใช้พื้นที่ ในเมือง เช่น การแสดงปริมาณการใช้บริการขนส่งสาธารณะในแต่ละเขตพื้นที่ในช่วงเวลาต่าง ๆ ของวัน หรือปริมาณคนในพื้นที่สาธารณะต่าง ๆ
- การแสดงการกระจายของโรคระบาด เช่น การแสดงจำนวนผู้ติดเชื้อในแต่ละภูมิภาคหรือเมืองในช่วงเวลาต่าง ๆ เพื่อดูความเข้มข้นและการกระจายของโรค
- การวิเคราะห์การขายสินค้าในร้านค้า เช่น การแสดงยอดขายสินค้าต่าง ๆ ในช่วงเวลาและวันต่าง ๆ ของสัปดาห์ เพื่อดูว่าช่วงเวลาไหนขายดีที่สุด
- การแสดงการจราจรในระบบเครือข่ายคอมพิวเตอร์ เช่น การแสดงข้อมูลการใช้งาน bandwidth หรือการกระจายของข้อมูลที่ไหลผ่านเครือข่ายในแต่ละช่วงเวลา เพื่อหาจุดที่การใช้งานสูงสุด
- การวิเคราะห์ความสัมพันธ์ระหว่างตัวแปรหลายตัว เช่น การแสดงความสัมพันธ์ระหว่างตัวแปรต่าง ๆ ในงานวิจัยหรือการวิเคราะห์ข้อมูล โดยใช้ Heatmap เพื่อแสดงระดับของ correlation ระหว่างตัวแปร
- การแสดงการใช้ทรัพยากรในโครงการหรือระบบ เช่น การแสดงปริมาณการใช้ CPU, หน่วยความจำ หรือเครือข่ายของเซิร์ฟเวอร์ในแต่ละช่วงเวลา เพื่อดูการใช้งานที่สูงหรือต่ำในแต่ละช่วง
Heatmaps เหมาะสำหรับโจทย์ที่ต้องการแสดงการกระจายของข้อมูลในพื้นที่หรือตาราง ที่สามารถใช้สีเพื่อแทนค่าที่แตกต่างกัน ทำให้เห็นภาพรวมของข้อมูลได้อย่างชัดเจนและเข้าใจง่าย
Other Library
นอกจาก Matplotlib แล้ว ยังมี library อื่น ๆ ที่ได้รับความนิยมในการทำ Data Visualization ใน Python ซึ่งแต่ละตัวมีคุณสมบัติพิเศษและฟีเจอร์ที่เหมาะสมกับการใช้งานที่หลากหลาย ต่อไปนี้เป็น library ที่น่าสนใจ
1. Seaborn — https://seaborn.pydata.org/
- รายละเอียด: สร้างขึ้นบน Matplotlib แต่เพิ่มความสามารถในการทำกราฟที่ซับซ้อนขึ้น เช่น การวิเคราะห์ข้อมูลเชิงสถิติ และการสร้าง Heatmap, Pairplot, Violin Plot ได้อย่างง่ายดาย
- การใช้งาน: เหมาะกับการทำกราฟที่ต้องการความซับซ้อนทางสถิติ และทำให้กราฟดูมีความสวยงามเป็นพิเศษ
import seaborn as sns
sns.lineplot(x='Date', y='Value', data=data)
2. Plotly — https://plotly.com/
- รายละเอียด: เป็น library สำหรับการสร้างกราฟแบบโต้ตอบได้ (interactive) สามารถขยายหรือเลื่อนดูข้อมูลได้ในกราฟ เหมาะกับการนำเสนอข้อมูลในเว็บหรือแอปพลิเคชัน
- การใช้งาน: เหมาะสำหรับการสร้างกราฟที่สามารถโต้ตอบได้ เช่น การสร้าง dashboard หรือแอปพลิเคชันที่ต้องการความ interactive
import plotly.express as px
fig = px.line(data, x='Date', y='Value', title='Interactive Line Plot')
fig.show()
3. Bokeh — https://bokeh.org/
- รายละเอียด: library ที่เน้นการสร้างกราฟแบบโต้ตอบได้ในเว็บบราวเซอร์โดยตรง รองรับการสร้างกราฟแบบมีปฏิสัมพันธ์ได้คล้ายกับ Plotly แต่มีฟีเจอร์เฉพาะตัว เช่น สามารถแทรกกราฟลงในเว็บ HTML ได้ง่าย
- การใช้งาน: เหมาะกับการสร้างกราฟเชิงโต้ตอบในเว็บแอปพลิเคชันหรือการแสดงผลข้อมูลแบบเรียลไทม์
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
output_notebook()
p = figure(x_axis_type="datetime", title="Time Series Data", plot_width=800)
p.line(data['Date'], data['Value'], line_width=2)
show(p)
- ggplot (Plotnine) — https://plotnine.org/
- รายละเอียด: พัฒนามาจาก ggplot2 ใน R เป็นการทำกราฟที่ใช้ syntax แบบ grammar of graphics ซึ่งช่วยให้การทำกราฟซับซ้อนทำได้เป็นระบบมากขึ้น
- การใช้งาน: เหมาะสำหรับคนที่คุ้นเคยกับ ggplot2 ใน R และต้องการใช้งานใน Python
from plotnine import ggplot, aes, geom_line
ggplot(data, aes(x='Date', y='Value')) + geom_line()
- Geopandas + Folium — https://geopandas.org/en/stable/
- รายละเอียด: ใช้สำหรับการสร้างแผนที่และการแสดงข้อมูลเชิงภูมิศาสตร์ สามารถเชื่อมต่อกับข้อมูลพิกัดและข้อมูลเช ิงภูมิศาสตร์เพื่อสร้างแผนที่โต้ตอบได้
- การใช้งาน: เหมาะสำหรับการทำงานที่เกี่ยวข้องกับข้อมูลเชิงภูมิศาสตร์ เช่น การสร้าง Heatmap บนแผนที่
import geopandas as gpd
import folium
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
m = folium.Map(location=[20, 0], zoom_start=2)
folium.Choropleth(geo_data=world).add_to(m)
m