Log transformation

Log transformation
By Leonardo.ai

การทำ Log transformation เป็นเทคนิคที่ใช้ในการแปลงข้อมูลที่เบ้เพื่อให้ได้การกระจายที่ใกล้เคียงกับการกระจายแบบปกติมากขึ้น (Normal distribution) ทำได้โดยการนำ logarithm ของข้อมูลแต่ละจุด ซึ่งถูกนำมาใช้ประโยชน์เมื่อต้องจัดการกับข้อมูลที่เบ้ขวา เพราะช่วยบีบส่วนบนของการกระจายในขณะที่ยืดส่วนล่างออก

ตัวอย่าง Python code สำหรับ Log transformation

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# สร้างข้อมูลที่เบ้ขวา
np.random.seed(42)
data = np.random.lognormal(mean=0, sigma=1, size=1000)

# ทำการแปลงข้อมูลด้วย log
log_data = np.log(data)

# สร้างกราฟ
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# ข้อมูลต้นฉบับ
ax1.hist(data, bins=30, edgecolor='black')
ax1.set_title('Original data')
ax1.set_xlabel('Value')
ax1.set_ylabel('Frequency')

# ข้อมูลที่แปลงด้วย log
ax2.hist(log_data, bins=30, edgecolor='black')
ax2.set_title('Log Transformed data')
ax2.set_xlabel('Log(Value)')
ax2.set_ylabel('Frequency')

plt.tight_layout()
plt.show()

# ทำการทดสอบ Shapiro-Wilk เพื่อดูการกระจายแบบปกติ
_, p_value_original = stats.shapiro(data)
_, p_value_log = stats.shapiro(log_data)

print(f"Shapiro-Wilk p-value (Original data): {p_value_original:.6f}")
print(f"Shapiro-Wilk p-value (Log Transformed data): {p_value_log:.6f}")

การทำงานของ Code ดังนี้

  1. สร้างข้อมูลที่เบ้ขวาโดยใช้การกระจายแบบ log normal
  2. ใช้ np.log() เพื่อแปลงข้อมูลด้วย Log
  3. สร้างฮิสโตแกรมของข้อมูล Original และข้อมูลที่แปลงแล้ว (Transformed data)
  4. ทำการทดสอบ Shapiro-Wilk เพื่อดูว่าข้อมูลมีการกระจายแบบปกติหรือไม่

การทดสอบ Shapiro-Wilk ช่วยประเมินว่าข้อมูลมีการกระจายแบบปกติหรือไม่ ถ้าค่า p-value > 0.05 แสดงว่าข้อมูลไม่แตกต่างจากการกระจายแบบปกติอย่างมีนัยสำคัญ


Blog นี้ เขียนร่วมกับ Claude.ai โดยใช้ Prompt

Please explain about log transformation for getting normal distribution with python code.