Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีปรับมาตรฐานฮิสโตแกรม (Normalize Histogram) ใน Python

การปรับมาตรฐานฮิสโตแกรม (Normalized Histogram) ทำให้พื้นที่ใต้กราฟเท่ากับ 1 แทนที่จะเป็นจำนวนนับ (counts) ทำให้เปรียบเทียบการกระจายของข้อมูลชุดต่างๆ ได้แม่นยำขึ้น แม้ขนาดตัวอย่างจะต่างกัน

ขั้นตอนการทำงาน

  1. นำเข้า matplotlib.pyplot
  2. เตรียมข้อมูล (รายการตัวเลข)
  3. พลอตฮิสโตแกรมด้วย plt.hist() โดยตั้งค่า density=True
  4. แสดงผลด้วย plt.show()

ตัวอย่างโค้ด

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

k = [5, 5, 5, 5]
x, bins, patches = plt.hist(k, density=True)
plt.show()

คำอธิบาย

  • density=True ทำให้ความสูงของแท่ง = ความถี่ / (จำนวนข้อมูลทั้งหมด × ความกว้างกลุ่ม)
  • พื้นที่รวมของแท่งทั้งหมด = 1 (integral = 1)
  • คืนค่า: n (ความหนาแน่น), bins (ขอบเขตกลุ่ม), patches (ออบเจกต์แท่ง)

เปรียบเทียบ: Counts vs Density


import numpy as np
import matplotlib.pyplot as plt

data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(0, 1, 100)  # ขนาดตัวอย่างต่างกัน

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))

# Counts - ขนาดตัวอย่างส่งผลต่อความสูง
ax1.hist(data1, bins=30, alpha=0.5, label='n=1000')
ax1.hist(data2, bins=30, alpha=0.5, label='n=100')
ax1.set_title('Counts')
ax1.legend()

# Density - แสดงรูปทรงการกระจายจริง
ax2.hist(data1, bins=30, density=True, alpha=0.5, label='n=1000')
ax2.hist(data2, bins=30, density=True, alpha=0.5, label='n=100')
ax2.set_title('Density (Normalized)')
ax2.legend()

plt.show()

การประยุกต์ใช้

  • เปรียบเทียบการกระจายระหว่างกลุ่มข้อมูลขนาดต่างกัน
  • ประมาณ Probability Density Function (PDF)
  • สถิติเชิงอนุมาน การทดสอบสมมติฐาน
  • Machine Learning: feature distribution visualization

หมายเหตุ

ใน Matplotlib รุ่นเก่าใช้ normed=True แต่ถูก deprecated แล้ว ควรใช้ density=True แทน