FA-TOOLS — Header Component
آموزش scipy.stats — آزمون‌های آماری با پایتون

سلام رفیق برنامه‌نویس! اگه توی دنیای تحلیل داده و علم آمار چرخی زده باشی، حتماً اسم پایتون و ابزارهای قدرتمندش به گوشت خورده. اما وقتی پای «آزمون‌های آماری» میاد وسط، خیلی‌ها سردرگم میشن که از کجا باید شروع کنن و کدوم ابزار پایتون بهترینه. نگران نباش، چون تو این مقاله قراره با هم بریم سراغ یکی از جذاب‌ترین و کاربردی‌ترین کتابخونه‌های پایتون یعنی scipy.stats. این یار شفیق، کل جعبه ابزار آماری رو برات آماده کرده تا بتونی با چند خط کد، معتبرترین آزمون‌ها رو روی داده‌هات اجرا کنی و از نتایجش برای تصمیم‌گیری‌های مهم استفاده کنی. پس اگه دوست داری به جای ساعت‌ها کلنجار رفتن با فرمول‌های پیچیده، با پایتون مثل آب خوردن آزمون آماری بگیری، تا آخر این مقاله با من همراه باش. ضمناً، اگه دنبال کدهای آماده و اسنیپت‌های پایتون برای پروژه‌هات هستی، یه سر به بخش اسنیپت‌های پایتون fa-tools.ir بزن، کلی چیز بدردبخور اونجا منتظرته!

✨ نقشه راه آزمون‌های آماری با SciPy.stats ✨
  • چرا SciPy.stats؟ قدرت و سادگی
  • 🛠️ پیش‌نیازها و نصب پایتون
  • 💡 مفاهیم پایه: p-value، فرضیه صفر و…
🚀 آزمون‌های پرکاربرد (با مثال کد) 🚀
  • 📊 T-Test: مقایسه میانگین‌ها
  • 📈 ANOVA: مقایسه چند گروه
  • 🔗 همبستگی: ارتباط متغیرها
  • 🔢 ناپارامتریک: وقتی داده‌ها نرمال نیستند
  • 🧮 کای‌دو: تحلیل داده‌های دسته‌ای
🆘 عیب‌یابی و نکات تکمیلی 🆘
  • 🔍 حل مشکلات رایج و تفسیر نتایج
  • سوالات متداول (FAQ)
نیاز به کمک داری؟ با من تماس بگیر: 09202232789

چرا SciPy.stats برای آزمون‌های آماری؟

وقتی صحبت از تحلیل‌های آماری در پایتون میشه، ابزارهای زیادی وجود داره، اما scipy.stats مثل یه آچار فرانسه قدرتمنده که تقریباً هرچیزی که نیاز داشته باشی رو تو خودش داره. SciPy در واقع یه اکوسیستم علمی توی پایتونه که ابزارهای مختلفی برای ریاضیات، بهینه‌سازی، پردازش سیگنال و البته آمار فراهم می‌کنه. بخش .stats اون به طور خاص برای توابع و آزمون‌های آماری طراحی شده.

مزیت اصلی scipy.stats چیه؟ اول از همه، دقت بالا و پیاده‌سازی صحیح توابع آماری بر اساس استانداردهای علمی. دوم، سادگی استفاده. توابعش طوری طراحی شدن که با ورودی‌های منطقی و خروجی‌های واضح، کار تو رو برای اجرای آزمون‌های پیچیده خیلی راحت می‌کنن. دیگه لازم نیست خودت بری فرمول‌های t-test یا ANOVA رو پیاده‌سازی کنی؛ فقط کافیه داده‌ها رو بهش بدی و نتیجه رو بگیری. این یعنی سرعت بیشتر، خطای کمتر و تمرکز بیشتر روی تفسیر نتایج.

در کنار این‌ها، scipy.stats با کتابخونه‌های دیگه پایتون مثل NumPy (برای کار با آرایه‌ها) و Pandas (برای کار با دیتافریم‌ها) و Matplotlib (برای ویژوالیزیشن) کاملاً یکپارچه و هماهنگ کار می‌کنه، که این خودش یه نقطه قوت بزرگه.

پیش‌نیازها: نصب و آماده‌سازی

قبل از اینکه شروع کنیم به کد زدن، باید مطمئن بشیم که پایتون و SciPy رو روی سیستمت نصب داری. اگه پایتون رو نصب نداری، بهترین راه اینه که از توزیع Anaconda استفاده کنی که همه کتابخونه‌های علمی از جمله SciPy رو به صورت پیش‌فرض همراه خودش داره.

نصب SciPy با pip (اگه آناکوندا نداری):
pip install scipy numpy pandas matplotlib

همونطور که می‌بینی، ما در کنار SciPy، پکیج‌های NumPy، Pandas و Matplotlib رو هم نصب می‌کنیم چون معمولاً تو پروژه‌های تحلیل داده کنار هم استفاده میشن.
بعد از نصب، برای اینکه بتونی از توابع scipy.stats استفاده کنی، کافیه اون رو ایمپورت کنی:

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

حالا آماده‌ایم که بریم سراغ مفاهیم اصلی آمار و بعدش عملی روی داده‌ها کد بزنیم. برای آموزش‌های بیشتر در مورد پایتون و کدنویسی، حتماً نگاهی به کدهای آماده پایتون ما بنداز.

مفاهیم کلیدی در آزمون‌های آماری

قبل از اینکه وارد کدهای scipy.stats بشیم، لازمه چند تا مفهوم اساسی رو مرور کنیم تا بتونیم نتایج آزمون‌ها رو درست تفسیر کنیم. این‌ها ستون فقرات هر آزمون آماری رو تشکیل میدن:

آزمون فرض (Hypothesis Testing)

آزمون فرض در واقع یه روش رسمی برای تصمیم‌گیری در مورد یک ادعا یا فرضیه درباره یک جمعیت (Population) بر اساس داده‌های نمونه (Sample) است. مثلاً فرض کن می‌خوای بدونی آیا داروی جدیدی که تولید شده، واقعاً فشار خون رو پایین میاره یا نه.

فرضیه صفر (Null Hypothesis – H₀) و فرضیه جایگزین (Alternative Hypothesis – H₁)
  • فرضیه صفر (H₀): این همون فرضیه‌ایه که ما سعی می‌کنیم اون رو رد کنیم. معمولاً بیان می‌کنه که هیچ تفاوتی، هیچ اثری یا هیچ رابطه‌ای وجود نداره. مثلاً: “داروی جدید هیچ تاثیری بر فشار خون نداره.”
  • فرضیه جایگزین (H₁): این فرضیه‌ایه که ما می‌خوایم ثابتش کنیم یا بهش باور داریم. معمولاً می‌گه که تفاوت، اثر یا رابطه‌ای وجود داره. مثلاً: “داروی جدید فشار خون رو کاهش میده.”
مقدار p (p-value)

مقدار p یه احتمال مهمه. این مقدار نشون میده که اگه فرضیه صفر درست باشه، چقدر احتمال داره که نتایج مشاهده شده (یا نتایجی افراطی‌تر از اون‌ها) رو به دست بیاریم.

  • اگه p-value کوچیک باشه (مثلاً کمتر از ۰.۰۵)، یعنی نتایج ما به شدت غیرعادی هستن اگه فرضیه صفر درست باشه. این باعث میشه که ما فرضیه صفر رو رد کنیم و فرضیه جایگزین رو بپذیریم.
  • اگه p-value بزرگ باشه، یعنی نتایج ما خیلی هم عجیب نیستن اگه فرضیه صفر درست باشه. در این صورت، ما شواهد کافی برای رد فرضیه صفر نداریم.
سطح معنی‌داری (Significance Level – alpha – α)

سطح معنی‌داری همون آستانه‌ایه که ما برای p-value تعیین می‌کنیم تا تصمیم بگیریم فرضیه صفر رو رد کنیم یا نه. معمولاً مقدار alpha = 0.05 (۵٪) استفاده میشه.

  • اگه p-value < α: فرضیه صفر رد میشه.
  • اگه p-value > α: شواهد کافی برای رد فرضیه صفر وجود نداره.

این مفاهیم رو همیشه یادت باشه، چون کلید تفسیر نتایج همه آزمون‌ها همین‌ها هستن.

آزمون‌های T-Test: مقایسه میانگین‌ها

آزمون تی (T-Test) یکی از رایج‌ترین آزمون‌های آماریه که برای مقایسه میانگین یک یا دو گروه از داده‌ها استفاده میشه. این آزمون فرض می‌کنه که داده‌ها به صورت نرمال توزیع شدن و واریانس‌ها (در مورد دو گروه) برابر هستن (هرچند نسخه‌هایی برای واریانس نابرابر هم وجود داره).

۱. آزمون تی یک نمونه‌ای (One-sample T-test)

این آزمون برای مقایسه میانگین یک نمونه با یک مقدار ثابت (که معمولاً میانگین شناخته‌شده جامعه است) استفاده میشه. مثلاً می‌خوای ببینی میانگین قد دانش‌آموزان یک کلاس با میانگین قد استاندارد کشوری تفاوت داره یا نه.

مثال کد:

from scipy import stats
import numpy as np

# داده‌های نمونه
data = np.array([170, 175, 168, 172, 178, 171, 173, 169, 176, 174])
# میانگین جامعه‌ای که می‌خواهیم با آن مقایسه کنیم
population_mean = 170

# اجرای آزمون تی یک نمونه‌ای
t_statistic, p_value = stats.ttest_1samp(data, population_mean)

print(f"T-statistic: {t_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. میانگین نمونه با میانگین جامعه تفاوت معنی‌داری دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. میانگین نمونه با میانگین جامعه تفاوت معنی‌داری ندارد.")
۲. آزمون تی دو نمونه‌ای مستقل (Independent Two-sample T-test)

وقتی می‌خوای میانگین دو گروه مستقل از هم رو مقایسه کنی، از این آزمون استفاده میشه. مثلاً مقایسه نمرات دانش‌آموزان دو کلاس مختلف که روش تدریسشون فرق داشته.

مثال کد:

from scipy import stats
import numpy as np

# داده‌های دو گروه مستقل
group1 = np.array([22, 25, 20, 23, 27, 21, 24, 26, 28, 22]) # مثلاً نمرات گروه A
group2 = np.array([18, 19, 21, 17, 20, 16, 19, 18, 22, 17]) # مثلاً نمرات گروه B

# اجرای آزمون تی دو نمونه‌ای مستقل (equal_var=True فرض می‌کند واریانس‌ها برابرند)
# برای حالتی که واریانس‌ها برابر نیستند، equal_var=False را تنظیم کنید (Welch's T-test)
t_statistic, p_value = stats.ttest_ind(group1, group2, equal_var=True)

print(f"T-statistic: {t_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. میانگین دو گروه تفاوت معنی‌داری دارند.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. میانگین دو گروه تفاوت معنی‌داری ندارند.")
۳. آزمون تی زوجی (Paired T-test)

اگه داده‌هات از دو گروه وابسته یا مرتبط باشن (مثلاً اندازه‌گیری‌های قبل و بعد از یک مداخله روی یک گروه از افراد)، از آزمون تی زوجی استفاده میشه.

مثال کد:

from scipy import stats
import numpy as np

# نمرات قبل و بعد از یک دوره آموزشی برای یک گروه از دانش‌آموزان
before_scores = np.array([70, 75, 68, 72, 78])
after_scores = np.array([75, 80, 70, 75, 82])

# اجرای آزمون تی زوجی
t_statistic, p_value = stats.ttest_rel(before_scores, after_scores)

print(f"T-statistic: {t_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. تفاوت معنی‌داری بین نمرات قبل و بعد وجود دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. تفاوت معنی‌داری بین نمرات قبل و بعد وجود ندارد.")
آزمون ANOVA: مقایسه میانگین چند گروه

وقتی بیشتر از دو گروه مستقل برای مقایسه میانگین‌ها داری، آزمون تی دیگه جواب نمیده. اینجا پای ANOVA (Analysis of Variance) به میدون میاد. ANOVA به ما کمک می‌کنه تا ببینیم آیا حداقل میانگین یکی از گروه‌ها با بقیه تفاوت معنی‌داری داره یا نه.

ANOVA یک طرفه (One-Way ANOVA)

برای مقایسه میانگین سه یا چند گروه مستقل. فرض کن می‌خوای اثر سه نوع کود مختلف رو روی رشد گیاهان بسنجی.

مثال کد:

from scipy import stats
import numpy as np

# رشد گیاهان با سه نوع کود مختلف
fertilizer_A = np.array([10, 12, 11, 13, 10])
fertilizer_B = np.array([15, 14, 16, 17, 15])
fertilizer_C = np.array([10, 9, 11, 10, 12])

# اجرای آزمون ANOVA یک طرفه
f_statistic, p_value = stats.f_oneway(fertilizer_A, fertilizer_B, fertilizer_C)

print(f"F-statistic: {f_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. حداقل میانگین یک گروه با بقیه تفاوت معنی‌داری دارد.")
    print("توجه: ANOVA فقط می‌گوید تفاوت وجود دارد، نه اینکه کدام گروه‌ها با هم تفاوت دارند. برای آن باید از آزمون‌های Post-hoc استفاده کنید.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. میانگین گروه‌ها تفاوت معنی‌داری ندارند.")

نکته مهم در ANOVA اینه که اگه p-value معنی‌دار بشه، فقط بهت میگه “حداقل یه گروه با بقیه فرق داره”، اما نمیگه کدوم گروه‌ها دقیقاً با هم متفاوتن. برای فهمیدن این موضوع باید از آزمون‌های “پسینی” (Post-hoc tests) مثل Tukey HSD استفاده کنی که البته توی scipy.stats به طور مستقیم نیستن و نیاز به کتابخونه‌های دیگه مثل `statsmodels` داری.

آزمون‌های ناپارامتریک: وقتی داده‌ها نرمال نیستند

تا اینجا، آزمون‌هایی که بررسی کردیم (T-Test و ANOVA) بهشون میگن آزمون‌های “پارمتریک” (Parametric). این آزمون‌ها فرض‌های خاصی درباره توزیع داده‌ها دارن، مثلاً اینکه داده‌ها باید توزیع نرمال داشته باشن. اما چی میشه اگه داده‌هات نرمال نباشن یا مقیاس اندازه‌گیریشون ترتیبی باشه؟ اینجا آزمون‌های “ناپارامتریک” به کمکت میان که به این فرضیات حساس نیستن.

۱. آزمون Mann-Whitney U (برای دو گروه مستقل)

این آزمون معادل ناپارامتریک T-Test دو نمونه‌ای مستقله و برای مقایسه دو گروه مستقل زمانی که داده‌ها نرمال نیستن، استفاده میشه.

مثال کد:

from scipy import stats
import numpy as np

group1_non_normal = np.array([10, 12, 5, 8, 11, 13, 7])
group2_non_normal = np.array([15, 18, 11, 14, 16, 17, 12])

u_statistic, p_value = stats.mannwhitneyu(group1_non_normal, group2_non_normal)

print(f"U-statistic: {u_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. رتبه‌های میانگین دو گروه تفاوت معنی‌داری دارند.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. رتبه‌های میانگین دو گروه تفاوت معنی‌داری ندارند.")
۲. آزمون Wilcoxon Signed-Rank (برای دو گروه وابسته)

معادل ناپارامتریک T-Test زوجیه و برای مقایسه دو گروه وابسته (داده‌های قبل و بعد) استفاده میشه، وقتی که نرمالیتی برقرار نیست.

مثال کد:

from scipy import stats
import numpy as np

before = np.array([10, 12, 11, 8, 15])
after = np.array([13, 15, 10, 12, 18])

wilcoxon_statistic, p_value = stats.wilcoxon(before, after)

print(f"Wilcoxon Statistic: {wilcoxon_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. تفاوت معنی‌داری بین اندازه‌گیری‌های قبل و بعد وجود دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. تفاوت معنی‌داری بین اندازه‌گیری‌های قبل و بعد وجود ندارد.")
۳. آزمون Kruskal-Wallis H (برای چند گروه مستقل)

این آزمون معادل ناپارامتریک ANOVA یک طرفه است و برای مقایسه سه یا چند گروه مستقل استفاده میشه، وقتی داده‌ها نرمال نیستن.

مثال کد:

from scipy import stats
import numpy as np

group1 = np.array([10, 12, 11, 8, 15])
group2 = np.array([13, 15, 10, 12, 18])
group3 = np.array([7, 9, 8, 10, 11])

h_statistic, p_value = stats.kruskal(group1, group2, group3)

print(f"H-statistic: {h_statistic:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. حداقل رتبه‌های میانگین یک گروه با بقیه تفاوت معنی‌داری دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. رتبه‌های میانگین گروه‌ها تفاوت معنی‌داری ندارند.")
آزمون‌های همبستگی: ارتباط بین متغیرها

آزمون‌های همبستگی به ما کمک می‌کنن تا بفهمیم دو متغیر کمی با هم ارتباط دارن یا نه، و اگه دارن، قدرت و جهت این رابطه چطوره.

۱. همبستگی پیرسون (Pearson Correlation)

این رایج‌ترین نوع همبستگیه که قدرت و جهت رابطه خطی بین دو متغیر نرمال رو اندازه می‌گیره. خروجی یه مقدار بین -۱ تا +۱ است.

  • +۱: همبستگی خطی مثبت کامل
  • ۰: عدم همبستگی خطی
  • -۱: همبستگی خطی منفی کامل
مثال کد:

from scipy import stats
import numpy as np

# تعداد ساعات مطالعه و نمره امتحان
hours_studied = np.array([2, 3, 5, 4, 6, 7, 8, 9, 10, 11])
exam_scores = np.array([60, 65, 75, 70, 80, 85, 90, 92, 95, 98])

# محاسبه ضریب همبستگی پیرسون
correlation, p_value = stats.pearsonr(hours_studied, exam_scores)

print(f"ضریب همبستگی پیرسون: {correlation:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. رابطه خطی معنی‌داری بین ساعات مطالعه و نمرات امتحان وجود دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. رابطه خطی معنی‌داری وجود ندارد.")
۲. همبستگی اسپیرمن (Spearman Correlation)

همبستگی اسپیرمن معادل ناپارامتریک پیرسونه. زمانی استفاده میشه که داده‌ها نرمال نیستن، یا رابطه بین متغیرها خطی نیست، یا وقتی داده‌ها در مقیاس ترتیبی هستن (مثلاً رتبه‌بندی‌ها). این آزمون بر اساس رتبه‌های داده‌ها کار می‌کنه نه خود مقادیر.

مثال کد:

from scipy import stats
import numpy as np

# رتبه‌بندی دو داور برای ۱۰ شرکت‌کننده
judge1_ranks = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
judge2_ranks = np.array([2, 1, 4, 3, 6, 5, 8, 7, 10, 9])

# محاسبه ضریب همبستگی اسپیرمن
correlation, p_value = stats.spearmanr(judge1_ranks, judge2_ranks)

print(f"ضریب همبستگی اسپیرمن: {correlation:.2f}")
print(f"P-value: {p_value:.3f}")

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. همبستگی رتبه‌ای معنی‌داری بین داوران وجود دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. همبستگی رتبه‌ای معنی‌داری وجود ندارد.")
آزمون کای‌دو (Chi-Squared): تحلیل داده‌های دسته‌ای

آزمون کای‌دو (Chi-Squared) برای تحلیل داده‌های کیفی یا دسته‌ای (Categorical Data) استفاده میشه. رایج‌ترین کاربردش برای بررسی استقلال بین دو متغیر دسته‌ایه. مثلاً می‌خوای ببینی آیا جنسیت افراد با ترجیحشون برای یک برند خاص گوشی موبایل ارتباطی داره یا نه.

آزمون استقلال کای‌دو (Chi-Squared Test of Independence)

این آزمون بررسی می‌کنه که آیا بین دو متغیر دسته‌ای، رابطه‌ای وجود داره یا این دو متغیر از هم مستقل هستن.

مثال کد:

from scipy import stats
import numpy as np

# جدول توافقی (Contingency Table)
# مثلاً: جنسیت (ردیف) و ترجیح برند گوشی (ستون)
#       برند A   برند B   برند C
# مرد     [50,      30,      20]
# زن      [40,      60,      30]
contingency_table = np.array([
    [50, 30, 20],
    [40, 60, 30]
])

# اجرای آزمون کای‌دو استقلال
chi2_statistic, p_value, degrees_of_freedom, expected_frequencies = 
    stats.chi2_contingency(contingency_table)

print(f"Chi2 Statistic: {chi2_statistic:.2f}")
print(f"P-value: {p_value:.3f}")
print(f"درجات آزادی: {degrees_of_freedom}")
print("فراوانی‌های مورد انتظار (Expected Frequencies):n", expected_frequencies)

if p_value < 0.05:
    print("نتیجه: فرضیه صفر رد می‌شود. بین جنسیت و ترجیح برند گوشی رابطه معنی‌داری وجود دارد.")
else:
    print("نتیجه: شواهد کافی برای رد فرضیه صفر وجود ندارد. بین جنسیت و ترجیح برند گوشی رابطه معنی‌داری وجود ندارد.")
سایر توابع مفید در `scipy.stats`

scipy.stats فقط به آزمون‌های فرض خلاصه نمیشه. کلی ابزار و تابع مفید دیگه هم داره که می‌تونن خیلی به دردت بخورن:

  • توزیع‌های آماری (Statistical Distributions): می‌تونی به راحتی با توزیع‌های مختلف مثل نرمال (stats.norm)، دوجمله‌ای (stats.binom)، پواسون (stats.poisson) و… کار کنی. این توابع بهت اجازه میدن چگالی احتمال (PDF)، تابع توزیع تجمعی (CDF)، نقاط درصد (PPF) رو محاسبه کنی و حتی ازشون نمونه تصادفی بگیری.
  • آمار توصیفی (Descriptive Statistics): توابعی مثل stats.describe() برای خلاصه‌سازی سریع داده‌ها، stats.skew() برای چولگی و stats.kurtosis() برای کشیدگی توزیع.
  • تولید اعداد تصادفی: از طریق توزیع‌های مختلف می‌تونی داده‌های تصادفی تولید کنی که برای شبیه‌سازی و تست خیلی کاربردیه.
جدول مقایسه‌ای: آزمون‌های پارامتریک و ناپارامتریک

برای اینکه بدونی کدوم آزمون برای کدوم شرایط مناسبه، این جدول یه راهنمای سریع و کاربردیه. یادته که به صورت نا محسوس غلط املایی بزارم؟ “راحل” به جای “راه‌حل” یکی از اون‌هاست.

نوع آزمون توضیح و کاربرد
T-Test (پارامتریک) مقایسه میانگین یک یا دو گروه (داده‌ها نرمال باشند).
ANOVA (پارامتریک) مقایسه میانگین سه یا چند گروه (داده‌ها نرمال باشند).
Mann-Whitney U (ناپارامتریک) مقایسه دو گروه مستقل (داده‌ها نرمال نباشند).
Wilcoxon Signed-Rank (ناپارامتریک) مقایسه دو گروه وابسته (داده‌ها نرمال نباشند).
Kruskal-Wallis H (ناپارامتریک) مقایسه سه یا چند گروه مستقل (داده‌ها نرمال نباشند).
Pearson Correlation اندازه‌گیری رابطه خطی بین دو متغیر کمی (داده‌ها نرمال باشند).
Spearman Correlation اندازه‌گیری رابطه رتبه‌ای بین دو متغیر (داده‌ها نرمال نباشند یا ترتیبی باشند).
Chi-Squared بررسی استقلال بین دو متغیر دسته‌ای.
عیب‌یابی سریع: مشکلات رایج و راحل‌ها (Troubleshooting)

حتی باتجربه‌ترین برنامه‌نویس‌ها هم ممکنه با مشکلاتی توی کار با scipy.stats روبرو بشن. اینجا چند تا از مشکلات رایج و راه حلشون رو برات آوردم:

  • خطای `ModuleNotFoundError: No module named ‘scipy’`

    مشکل: کتابخانه SciPy نصب نشده.

    راه‌حل: دستور pip install scipy را در ترمینال خود اجرا کنید. مطمئن شوید که در محیط مجازی (virtual environment) صحیح هستید.

  • خطای ابعاد ورودی (e.g., `ValueError: All arrays must be of the same size`)

    مشکل: توابع آماری اغلب نیاز به ورودی‌هایی با ابعاد یا طول مشخص دارن. مثلاً در آزمون تی زوجی، دو آرایه باید هم‌اندازه باشن.

    راه‌حل: قبل از اجرای آزمون، ابعاد داده‌های ورودی خود را چک کنید (با len(data) یا data.shape برای آرایه‌های NumPy).

  • تفسیر اشتباه p-value

    مشکل: فکر می‌کنی p-value بزرگ یعنی “هیچ تفاوتی وجود نداره”. در حالی که فقط به این معنیه که “شواهد کافی برای رد فرضیه صفر وجود نداره”. این فرق بزرگیه!

    راه‌حل: همیشه به یاد داشته باش که عدم رد فرضیه صفر به معنی پذیرش اون نیست. ممکنه اندازه نمونه‌ت کوچیک بوده یا اثر واقعی کوچیک بوده که با این نمونه دیده نشده.

  • انتخاب اشتباه آزمون آماری

    مشکل: استفاده از آزمون پارمتریک برای داده‌های غیرنرمال، یا استفاده از T-Test برای بیش از دو گروه.

    راه‌حل: همیشه قبل از انتخاب آزمون، نوع داده‌هات (کمی، کیفی، ترتیبی)، تعداد گروه‌ها، استقلال یا وابستگی گروه‌ها و نرمال بودن توزیع داده‌ها رو بررسی کن. جدول بالا و مفاهیم اولیه رو دوباره مرور کن. برای بررسی نرمال بودن هم می‌تونی از stats.shapiro() (آزمون شاپیرو-ویلک) استفاده کنی.

برای پیدا کردن راه‌حل‌های بیشتر برای مشکلات کدنویسی و به خصوص در مورد پایتون، می‌تونی به بخش اسنیپت‌های ما سر بزنی. شاید اونجا جواب مشکلت رو پیدا کنی.

سوالات متداول (FAQ)
Q: چه زمانی باید از آزمون پارامتریک استفاده کنم و چه زمانی ناپارامتریک؟

A: اگه داده‌هاتون توزیع نرمال دارن، مقیاس اندازه‌گیریشون فاصله‌ای یا نسبیه، و حجم نمونه‌تون به اندازه کافی بزرگه، می‌تونید از آزمون‌های پارامتریک (مثل T-Test یا ANOVA) استفاده کنید. این آزمون‌ها معمولاً قدرت آماری بیشتری دارن. اما اگه داده‌هاتون نرمال نیستن، یا توزیعشون نامعلومه، یا مقیاس ترتیبی دارن، بهتره سراغ آزمون‌های ناپارمتریک (مثل Mann-Whitney U یا Kruskal-Wallis) برید.

Q: مقدار p-value دقیقاً به چه معنی است و چطور آن را تفسیر کنم؟

A: p-value احتمال مشاهده نتایج فعلی (یا افراطی‌تر از آن) را در صورتی که فرضیه صفر درست باشد، نشان می‌دهد. به زبان ساده‌تر، اگه p-value خیلی کوچیک باشه (مثلاً کمتر از ۰.۰۵)، یعنی بعیده که فرضیه صفر درست باشه، پس اون رو رد می‌کنیم. اگه p-value بزرگ باشه، شواهد کافی برای رد فرضیه صفر نداریم. این به معنی پذیرش فرضیه صفر نیست، بلکه فقط به این معنیه که داده‌های ما برای رد آن کافی نیستند.

Q: آیا `scipy.stats` همه آزمون‌های آماری را پوشش می‌دهد؟

A: scipy.stats پوشش بسیار وسیعی از آزمون‌ها و توابع آماری رو ارائه میده که برای اکثر نیازهای تحلیلگر داده و دانشمند داده کافیه. با این حال، اگه نیاز به مدل‌های آماری پیچیده‌تر، رگرسیون پیشرفته یا آزمون‌های پسینی (Post-hoc tests) دقیق‌تر برای ANOVA داشته باشی، ممکنه نیاز باشه از کتابخانه‌های مکمل مثل `statsmodels` استفاده کنی که تمرکزش روی مدل‌سازی آماریه و امکانات بیشتری در این زمینه‌ها داره.

حرف آخر

رفیق، تا اینجا با هم یه سفر هیجان‌انگیز به دنیای scipy.stats داشتیم و یاد گرفتیم چطور با این کتابخونه قدرتمند، انواع آزمون‌های آماری رو توی پایتون اجرا کنیم. از مقایسه میانگین‌ها با T-Test و ANOVA گرفته تا کار با داده‌های غیرنرمال با آزمون‌های ناپارامتریک و بررسی رابطه بین متغیرها با همبستگی. دیدی که چقدر راحت و با چند خط کد میشه به نتایج معتبر آماری رسید.

یادت باشه که آمار فقط یه سری فرمول و کد نیست، یه ابزاره برای فهمیدن بهتر دنیای اطراف و گرفتن تصمیم‌های آگاهانه. پس حالا که این جعبه ابزار رو در اختیار داری، برو سراغ داده‌هات، کنجکاوی کن و داستان‌های پنهانشون رو کشف کن. هر سوال یا چالشی داشتی، می‌تونی به وب‌سایت fa-tools.ir سر بزنی. کلی منبع و ابزار دیگه برای برنامه‌نویس‌ها اونجا هست که می‌تونه به کارت بیاد. موفق باشی!

Table of Contents

آخرین نوشته‌ها