Pandas & NumPy Academy · บทเรียน

การวิเคราะห์ตัวแปรเดียว

วิเคราะห์แต่ละคอลัมน์แยกกัน โดยวาดการกระจายสำหรับข้อมูลตัวเลขและนับค่าสำหรับข้อมูลหมวดหมู่ พร้อมสังเกตค่าผิดปกติและความเบ้

บทเรียน 2 จาก 413 ขั้นตอน

การวิเคราะห์ตัวแปรเดียว เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

การวิเคราะห์ตัวแปรเดียวคืออะไร

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

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
numeric_cols = df.select_dtypes('number').columns.tolist()
categoric_cols = df.select_dtypes('object').columns.tolist()

print('Numeric columns:', numeric_cols)
print('Categorical columns:', categoric_cols)

ฮิสโตแกรมสำหรับคอลัมน์ตัวเลข

สร้างฮิสโตแกรมสำหรับคอลัมน์ตัวเลขแต่ละคอลัมน์เพื่อดูรูปร่างการกระจายของคอลัมน์นั้น ให้สังเกต ความสมมาตรเทียบกับความเบ้ (หางยื่นไปด้านใดด้านหนึ่ง) จำนวนยอด (มียอดเดียวหรือหลายยอด) และ ค่าผิดปกติที่เห็นได้ชัด (ค่าที่อยู่ปลายสุดและดูไม่น่าเป็นไปได้) ใน Pandas, df.hist() จะสร้างตารางฮิสโตแกรมหลายคอลัมน์อย่างรวดเร็วโดยไม่ต้องเขียนลูป แต่ histplot ของ Seaborn ให้ควบคุมรายละเอียดของแต่ละคอลัมน์ได้มากกว่า

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

# Quick multi-column histogram grid
numeric = df.select_dtypes('number')
numeric.hist(bins=20, figsize=(12, 8), layout=(2, 3), color='steelblue', edgecolor='white')
plt.suptitle('Univariate Distributions (Numeric Columns)', y=1.02)
plt.tight_layout()
plt.show()

สถิติสรุปสำหรับคอลัมน์ตัวเลข

สำหรับคอลัมน์ตัวเลขแต่ละคอลัมน์ ให้คำนวณและเปรียบเทียบ mean กับ median หาก mean > median อย่างมีนัยสำคัญ การกระจายจะมีความเบ้ขวา (มีหางด้านขวายาว ซึ่งพบได้บ่อยในข้อมูลรายได้และราคา) หาก mean < median จะมีความเบ้ซ้าย นอกจากนี้ให้ตรวจสอบ ส่วนเบี่ยงเบนมาตรฐาน เทียบกับ mean ด้วย โดยหาก std มีค่ามากกว่า mean สำหรับตัวแปรที่ไม่ติดลบ นั่นอาจเป็นสัญญาณของความแปรปรวนสูงหรือค่าผิดปกติ คำนวณความเบ้โดยตรงด้วย df.skew()

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')

summary = pd.DataFrame({
    'mean': numeric.mean(),
    'median': numeric.median(),
    'std': numeric.std(),
    'skewness': numeric.skew(),
    'missing_pct': (numeric.isna().sum() / len(df) * 100).round(1)
}).round(2)

print(summary)

กราฟกล่องสำหรับตรวจหาค่าผิดปกติ

กราฟกล่องเป็นเครื่องมือเชิงภาพที่รวดเร็วที่สุดสำหรับค้นหา ค่าผิดปกติ ในคอลัมน์ตัวเลข จุดใด ๆ ที่อยู่นอกหนวดกราฟ (ห่างจาก Q1 หรือ Q3 มากกว่า 1.5×IQR) จะแสดงแยกเป็นจุดและถูกระบุว่าอาจเป็นค่าผิดปกติ คอลัมน์ที่มีจุดค่าผิดปกติจำนวนมากควรได้รับการตรวจสอบว่าเป็นข้อผิดพลาดจากการป้อนข้อมูล ค่าที่สุดโต่งแต่ถูกต้อง หรือหลักฐานของการกระจายที่ไม่เป็นปกติหรือไม่ กราฟกล่องยังแสดงความเบ้ขวาหรือซ้ายได้จากตำแหน่งที่ไม่สมมาตรของ median ภายในกล่อง

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

fig, axes = plt.subplots(1, 3, figsize=(14, 5))

for ax, col in zip(axes, ['age', 'fare', 'sibsp']):
    df[[col]].boxplot(ax=ax)
    ax.set_title(f'Box Plot: {col}')

plt.tight_layout()
plt.show()

การนับค่าผิดปกติด้วย IQR

วิธี IQR (พิสัยระหว่างควอไทล์) กำหนดให้ค่าที่ต่ำกว่า Q1 - 1.5×IQR หรือสูงกว่า Q3 + 1.5×IQR เป็นค่าผิดปกติ คุณสามารถคำนวณด้วยโปรแกรมเพื่อนับและตรวจสอบค่าผิดปกติในคอลัมน์ตัวเลขทุกคอลัมน์ได้โดยไม่ต้องสร้างกราฟ วิธีนี้มีประโยชน์ใน pipeline อัตโนมัติที่ต้องบันทึกจำนวนค่าผิดปกติแทนการสร้างแผนภูมิ การตัดสินใจว่าจะจัดการค่าผิดปกติอย่างไร — ลบ จำกัดค่า หรือทำเครื่องหมาย — ควรเป็นการตัดสินใจโดยไตร่ตรองและอาศัยความรู้เฉพาะด้าน

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')

Q1 = numeric.quantile(0.25)
Q3 = numeric.quantile(0.75)
IQR = Q3 - Q1

lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR

outlier_counts = ((numeric < lower) | (numeric > upper)).sum()
print('Outlier counts per column:')
print(outlier_counts[outlier_counts > 0])

การนับค่าสำหรับคอลัมน์ประเภทหมวดหมู่

สำหรับคอลัมน์ประเภทหมวดหมู่แต่ละคอลัมน์ ให้เรียกใช้ value_counts() เพื่อดูการกระจายของข้อมูลในแต่ละหมวดหมู่ ตรวจสอบเสมอว่า มีหมวดหมู่ใดหมวดหมู่หนึ่งครองสัดส่วนมากเกินไป (>80%) หรือไม่ เพราะจะทำให้เกิด ความไม่สมดุลของคลาส ในงานจำแนกประเภท มี หมวดหมู่ที่พบได้น้อย ซึ่งมีข้อมูลเพียง 1-2 รายการหรือไม่ (อาจเป็นการสะกดผิดหรือข้อผิดพลาดจากการป้อนข้อมูล) และการกระจายตรงตามที่คาดหวังทางธุรกิจหรือไม่ (เช่น คอลัมน์ 'country' ที่แสดงว่าคำสั่งซื้อส่วนใหญ่มาจากประเทศที่ไม่คาดคิด)

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

for col in ['sex', 'embarked', 'class', 'who']:
    counts = df[col].value_counts(dropna=False)
    pct = (counts / len(df) * 100).round(1)
    result = pd.DataFrame({'count': counts, 'pct%': pct})
    print(f'\n--- {col} ---')
    print(result)

แผนภูมิแท่งสำหรับตัวแปรประเภทหมวดหมู่

แสดงจำนวนค่าของข้อมูลประเภทหมวดหมู่เป็นแผนภูมิแท่งโดยใช้ sns.countplot หรือเรียกใช้ value_counts().plot(kind='bar') เรียงแท่งจากความถี่มากไปน้อยเพื่อให้ผู้อ่านเห็นหมวดหมู่ที่มีสัดส่วนสูงได้ทันที สำหรับตัวแปรแบบสองค่า (ใช่/ไม่ใช่ ชาย/หญิง) สามารถใช้แผนภูมิวงกลมได้ แต่หากมีมากกว่า 3 หมวดหมู่ แผนภูมิแท่งจะอ่านได้ชัดเจนกว่าเสมอ หมุนป้ายกำกับของขีดแกน 45 องศาเมื่อชื่อหมวดหมู่ยาว

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

sns.countplot(data=df, x='embarked', order=df['embarked'].value_counts().index, ax=axes[0])
axes[0].set_title('Embarkation Port Counts')

sns.countplot(data=df, x='class', order=['First', 'Second', 'Third'], ax=axes[1])
axes[1].set_title('Passenger Class Counts')

plt.tight_layout()
plt.show()

การตรวจหาความเบ้และการใช้การแปลงค่า

คอลัมน์ตัวเลขที่มีความเบ้ขวาสูง (ความเบ้ > 1.5) มักได้ประโยชน์จาก การแปลงลอการิทึมเพื่อทำให้การกระจายสมมาตรมากขึ้น วิธีนี้สำคัญสำหรับการทดสอบทางสถิติหลายประเภทและอัลกอริทึม ML บางชนิดที่สมมติว่าข้อมูลมีการแจกแจงปกติ ให้ใช้ np.log1p() (log(x+1) ซึ่งปลอดภัยสำหรับค่าที่ใกล้ศูนย์) แล้วตรวจสอบความเบ้อีกครั้ง เปรียบเทียบฮิสโตแกรมก่อนและหลังเพื่อยืนยันว่าการกระจายมีรูปร่างคล้ายระฆังมากขึ้น

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('titanic')

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

sns.histplot(df['fare'], bins=30, kde=True, ax=axes[0])
axes[0].set_title(f'fare (skew={df["fare"].skew():.2f})')

log_fare = np.log1p(df['fare'])
sns.histplot(log_fare, bins=30, kde=True, ax=axes[1], color='coral')
axes[1].set_title(f'log1p(fare) (skew={log_fare.skew():.2f})')

plt.tight_layout()
plt.show()

การตรวจสอบคอลัมน์ที่มีความแปรปรวนเป็นศูนย์

คอลัมน์ที่มี ความแปรปรวนเป็นศูนย์ (ค่าทั้งหมดเหมือนกัน) ไม่ให้ข้อมูลใด ๆ แก่แบบจำลอง และควรถูกตัดออก คอลัมน์ที่มีความแปรปรวนใกล้ศูนย์ (99% ของแถวมีค่าเดียวกัน) ก็ไม่มีประโยชน์ในทำนองเดียวกัน ให้คำนวณความแปรปรวนด้วย df.var() แล้วกรองข้อมูล นอกจากนี้ให้ตรวจสอบคอลัมน์ที่ nunique() == len(df) ด้วย เพราะคอลัมน์เหล่านี้น่าจะเป็นคอลัมน์ ID ซึ่งไม่ควรใช้เป็นคุณลักษณะ แต่อาจมีประโยชน์ในฐานะตัวระบุแถว

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')

# Zero-variance columns
zero_var = numeric.columns[numeric.var() == 0].tolist()
print('Zero-variance columns:', zero_var)

# Near-zero variance (std < 0.01)
nzv = numeric.columns[numeric.std() < 0.01].tolist()
print('Near-zero variance:', nzv)

# Likely ID columns (all unique values)
id_candidates = [c for c in df.columns if df[c].nunique() == len(df)]
print('Likely ID columns:', id_candidates)

ลูปอัตโนมัติสำหรับการวิเคราะห์ตัวแปรเดียว

แทนที่จะทำการวิเคราะห์แบบเดิมซ้ำด้วยตนเองสำหรับแต่ละคอลัมน์ ให้เขียนลูปที่วนผ่านคอลัมน์ตัวเลขทั้งหมดและพิมพ์สถิติสำคัญในรูปแบบที่เป็นโครงสร้าง วิธีนี้ช่วยให้ตรวจดูคอลัมน์หลายสิบคอลัมน์ได้อย่างรวดเร็วและทำเครื่องหมายคอลัมน์ที่ต้องตรวจสอบเพิ่มเติม ผลลัพธ์สามารถบันทึกเป็นไฟล์ CSV เป็นส่วนหนึ่งของบันทึกการตรวจสอบ pipeline ซึ่งผู้มีส่วนเกี่ยวข้องสามารถทบทวนได้ก่อนนำข้อมูลไปใช้สร้างแบบจำลอง

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')

rows = []
for col in numeric.columns:
    s = df[col]
    Q1, Q3 = s.quantile(0.25), s.quantile(0.75)
    IQR = Q3 - Q1
    n_outliers = ((s < Q1 - 1.5*IQR) | (s > Q3 + 1.5*IQR)).sum()
    rows.append({
        'column': col,
        'missing_pct': round(s.isna().mean() * 100, 1),
        'mean': round(s.mean(), 2),
        'std': round(s.std(), 2),
        'skew': round(s.skew(), 2),
        'outliers': int(n_outliers)
    })

report = pd.DataFrame(rows)
print(report.to_string(index=False))

การบันทึกผลการวิเคราะห์ตัวแปรเดียว

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการวิเคราะห์ตัวแปรเดียวจากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ฮิสโตแกรมแสดงรูปร่างการกระจายของคอลัมน์ตัวเลข กราฟกล่องและเส้นกั้น IQR ใช้ระบุค่าผิดปกติ และ value_counts แสดงความถี่ของหมวดหมู่สำหรับคอลัมน์ประเภทหมวดหมู่ การทำให้การตรวจสอบเหล่านี้เป็นอัตโนมัติด้วยลูปจะสร้างรายงานคุณภาพที่นำกลับมาใช้ซ้ำได้ บทถัดไป เราจะสำรวจการวิเคราะห์สองตัวแปรและสหสัมพันธ์ — เพื่อทำความเข้าใจความสัมพันธ์ระหว่างคู่คอลัมน์

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “การวิเคราะห์ตัวแปรเดียว” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การวิเคราะห์ตัวแปรเดียว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การวิเคราะห์ตัวแปรเดียว”

วิเคราะห์แต่ละคอลัมน์แยกกัน โดยวาดการกระจายสำหรับข้อมูลตัวเลขและนับค่าสำหรับข้อมูลหมวดหมู่ พร้อมสังเกตค่าผิดปกติและความเบ้ คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การวิเคราะห์ตัวแปรเดียว” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รายการตรวจสอบการสำรวจชุดข้อมูล
  2. การวิเคราะห์ตัวแปรเดียว
  3. การวิเคราะห์สองตัวแปรและสหสัมพันธ์
  4. การสรุปข้อค้นพบในรายงาน
← กลับไปที่ Pandas & NumPy Academy