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