تحلیل آماری با SciPy: راهنمای جامع برای علم داده و یادگیری ماشین
SciPy یکی از مهمترین کتابخانههای پایتون برای محاسبات علمی است. این کتابخانه مجموعهای گسترده از الگوریتمها و توابع را برای انجام تحلیلهای آماری، بهینهسازی، انتگرالگیری، جبر خطی، پردازش سیگنال و بسیاری موارد دیگر ارائه میدهد. در این مقاله، به بررسی عمیق تحلیل آماری با استفاده از SciPy میپردازیم و نحوه استفاده از توابع مختلف آن را برای انجام تحلیلهای رایج آماری آموزش میدهیم. این مقاله برای افرادی که در زمینه علم داده و یادگیری ماشین فعالیت میکنند و به دنبال ابزاری قدرتمند برای تحلیل دادههای خود هستند، بسیار مفید خواهد بود.
مقدمهای بر SciPy و ماژول stats
SciPy بر پایه NumPy ساخته شده است و از آرایههای NumPy برای ذخیره و دستکاری دادهها استفاده میکند. ماژول stats در SciPy، قلب تپنده تحلیل آماری در این کتابخانه است. این ماژول شامل توابعی برای توزیعهای احتمال، آزمونهای آماری، آمار توصیفی و بسیاری موارد دیگر است.
آمار توصیفی با SciPy
آمار توصیفی به ما کمک میکند تا ویژگیهای اصلی یک مجموعه داده را خلاصه کنیم. SciPy توابع مختلفی برای محاسبه آمار توصیفی مانند میانگین، میانه، انحراف معیار، واریانس، چارکها و غیره ارائه میدهد. برای مثال:
import numpy as np
from scipy import stats
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
mean = np.mean(data)
median = np.median(data)
std_dev = np.std(data)
variance = np.var(data)
percentiles = np.percentile(data, [25, 50, 75])
print(f"میانگین: {mean}")
print(f"میانه: {median}")
print(f"انحراف معیار: {std_dev}")
print(f"واریانس: {variance}")
print(f"چارکها: {percentiles}")
همچنین میتوان از تابع describe در ماژول stats برای محاسبه چندین آمار توصیفی به صورت همزمان استفاده کرد:
description = stats.describe(data) print(description)
توزیعهای احتمال
SciPy از طیف گستردهای از توزیعهای احتمال پشتیبانی میکند، از جمله توزیع نرمال، توزیع یکنواخت، توزیع نمایی، توزیع پواسون و غیره. میتوان از این توزیعها برای مدلسازی دادهها، تولید اعداد تصادفی و انجام آزمونهای آماری استفاده کرد.
توزیع نرمال
توزیع نرمال یکی از مهمترین توزیعهای احتمال است. میتوان از تابع norm در ماژول stats برای کار با توزیع نرمال استفاده کرد:
from scipy.stats import norm
# تولید یک عدد تصادفی از توزیع نرمال با میانگین 0 و انحراف معیار 1
random_number = norm.rvs(loc=0, scale=1)
print(f"عدد تصادفی از توزیع نرمال: {random_number}")
# محاسبه احتمال اینکه یک عدد تصادفی از توزیع نرمال کمتر از 1 باشد
probability = norm.cdf(1)
print(f"احتمال کمتر از 1: {probability}")
# محاسبه مقدار x که احتمال اینکه یک عدد تصادفی از توزیع نرمال کمتر از x باشد برابر با 0.95 است
x = norm.ppf(0.95)
print(f"مقدار x برای احتمال 0.95: {x}")
آزمونهای آماری
SciPy توابع مختلفی برای انجام آزمونهای آماری ارائه میدهد، از جمله آزمون t، آزمون خی دو، آزمون ANOVA و غیره. این آزمونها به ما کمک میکنند تا فرضیات آماری را بررسی کنیم و تصمیمات مبتنی بر دادهها بگیریم.
آزمون t
آزمون t برای مقایسه میانگین دو گروه استفاده میشود. میتوان از تابع ttest_ind در ماژول stats برای انجام آزمون t مستقل استفاده کرد:
from scipy.stats import ttest_ind
data1 = np.array([1, 2, 3, 4, 5])
data2 = np.array([6, 7, 8, 9, 10])
t_statistic, p_value = ttest_ind(data1, data2)
print(f"آمار t: {t_statistic}")
print(f"مقدار p: {p_value}")
اگر مقدار p کمتر از سطح معنیداری (معمولاً 0.05) باشد، فرضیه صفر رد میشود و میتوان نتیجه گرفت که میانگین دو گروه به طور معنیداری متفاوت است.
آزمون خی دو
آزمون خی دو برای بررسی ارتباط بین دو متغیر طبقهای استفاده میشود. میتوان از تابع chi2_contingency در ماژول stats برای انجام آزمون خی دو استفاده کرد:
from scipy.stats import chi2_contingency
observed = np.array([[10, 20, 30], [6, 9, 12]])
chi2_statistic, p_value, dof, expected = chi2_contingency(observed)
print(f"آمار خی دو: {chi2_statistic}")
print(f"مقدار p: {p_value}")
print(f"درجه آزادی: {dof}")
print(f"مقادیر مورد انتظار: {expected}")
همبستگی و رگرسیون
SciPy توابعی برای محاسبه همبستگی بین دو متغیر و انجام رگرسیون خطی ارائه میدهد.
همبستگی
میتوان از تابع pearsonr در ماژول stats برای محاسبه ضریب همبستگی پیرسون بین دو متغیر استفاده کرد:
from scipy.stats import pearsonr
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
correlation, p_value = pearsonr(x, y)
print(f"ضریب همبستگی: {correlation}")
print(f"مقدار p: {p_value}")
رگرسیون خطی
میتوان از تابع linregress در ماژول stats برای انجام رگرسیون خطی استفاده کرد:
from scipy.stats import linregress
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
slope, intercept, r_value, p_value, std_err = linregress(x, y)
print(f"شیب: {slope}")
print(f"عرض از مبدا: {intercept}")
print(f"ضریب تعیین: {r_value**2}")
print(f"مقدار p: {p_value}")
print(f"خطای استاندارد: {std_err}")
نتیجهگیری
SciPy یک ابزار قدرتمند برای انجام تحلیل آماری در پایتون است. با استفاده از توابع مختلف این کتابخانه، میتوان آمار توصیفی را محاسبه کرد، توزیعهای احتمال را مدلسازی کرد، آزمونهای آماری را انجام داد و روابط بین متغیرها را بررسی کرد. این مقاله تنها یک مقدمه بر تحلیل آماری با SciPy بود و امکانات بسیار بیشتری در این کتابخانه وجود دارد. با تمرین و مطالعه بیشتر، میتوانید از تمام قابلیتهای SciPy برای تحلیل دادههای خود استفاده کنید و به نتایج معنیداری دست یابید.

بدون دیدگاه