درآمدی بر آمار با استفاده از لایبرری NumPy و زبان برنامه‌نویسی Python

درآمدی بر آمار با استفاده از لایبرری NumPy و زبان برنامه‌نویسی Python

Statistics (آمار) علمی است که به مطالعهٔ جمع‌آوری، تحلیل و تفسیر داده‌ها با قوانین ریاضیاتی و نهایتاً به دست آوردن نتایج کاربردی از آن‌ها می‌پردازد و پایتون هم یکی از زبان‌های برنامه‌نویسی مطرح در این حوزه است که با کمک لایبرری‌های بسیاری که برای آن نوشته شده توانسته اجرای بسیاری از تَسک‌های مرتبط با آمار و تحلیل داده‌ها را برای دولوپرها سریع و آسان نماید. آنچه در این مقاله قصد داریم آموزش دهیم، معرفی لایبرری NumPy و همچنین آموزش نحوهٔ استفاده از آن به منظور دستیابی به داده‌هایی همچون Variance ،Median ،Mean و Standard Deviation است که در ادامه بیشتر با مفهوم تک‌تک این اصطلاحات آشنا خواهیم شد.

آشنایی با مفاهیم Descriptive Statistics (آمار توصیفی) و Inferential Statistics (آمار استنباطی)
پیش از شروع کار با NumPy، قصد داریم در مورد دو نوع از آمار که تحت عناوین Descriptive Statistics و Inferential Statistics شناخته می‌شوند توضیحی اجمالی ارائه دهیم.

تنظیم و دسته‌بندی داده‌های مرتبط با تمامی اعضای جامعهٔ آماری به صورت جداول یا نمودارها سپس تعیین ارتباط مابین آن‌ها Descriptive Statistics (آمار توصیفی) نامیده می‌شود و این در حالی است که آمار توصیفی نمی‌تواند امکان ارائهٔ نتیجه‌گیری فراتر از داده‌های تحت بررسی را فراهم آورد. در یک کلام، آمار توصیفی صرفاً داده‌های خام را به شکلی قابل‌فهم‌تر در اختیار کارشناسان قرار می‌دهد که این کار، بررسی و تفسیر داده‌ها را آسان‌تر می‌سازد.

مطالعهٔ بخشی از اعضای جامعهٔ آماری از طریق نمونه‌گیری که نشانگر خصوصیات اصلی جامعه می‌باشد که در نهایت نتایج حاصل از آن به کل جامعه تعمیم داده خواهد شد و از داده‌های به دست آمده می‌توان برای تصمیم‌گیری‌های کلان استفاده کرد را Inferential Statistics (آمار استنباطی) می‌گوییم. به عبارتی، در اغلب موارد بررسی کل جامعه در بررسی‌های آماری برای به دست آوردن نتایج ممکن نیست و از همین روی محققین ویژگی‌ها و خصوصیات گروه کوچکی از جامعهٔ آماری را به دست آورده سپس به کل جامعه تعمیم می‌دهند.

به عبارت دیگر، تفاوت اصلی آمار توصیفی و آمار استنباطی در این است که نتایج آمار توصیفی را نمی‌توان به کل جامعهٔ آماری تعمیم داد چرا که در این نوع از علم آمار هدف صرفاً ارائهٔ ویژگی‌های نمونه‌های آماری است اما در آمار استنباطی ‌می‌توان نتایج به دست آمده از نمونهٔ آماری را به کل جامعهٔ آماری تعمیم داد زیرا داده‌های به دست آمده در این مدل برگرفته از بطن جامعهٔ آماری بوده و به نوعی با قطعیت همراه است (البته این موضوع همیشه ٪۱۰۰ نیست.)

آشنایی با مفاهیم میانگین، میانه و مُد
حال که توضیحی کوتاه در مورد ماهیت انواع آمار دادیم، اکنون نوبت به آشنایی با مفاهیمی همچون Variance ،Mode ،Median ،Mean و Standard Deviation می‌رسد که بدون آشنایی با آن‌ها، در علم آمار کاری از پیش نخواهید برد که به منظور بررسی این مفاهیم، نیاز به یک جامعهٔ آماری داریم تا از طریق آن بهتر بتوانیم این مفاهیم را درک کنیم. برای همین منظور، جامعهٔ آماری زیر را در نظر می‌گیریم:

3, 3, 8, 9, 15, 15, 15, 17, 17, 27, 40, 44, 44

در مثال فوق، جامعهٔ آماری دارای ۱۳ عضو است که با توجه به کوچک بودن این جامعه، به سادگی خواهیم توانست در مثال‌های آتی میانگین، میانه، مُد، واریانس و انحراف معیار را محاسبه کنیم.

Mean (میانگین)
Mean که گاهی هم تحت عنوان Arithmetic Mean یا Average Score شناخته می‌شود، در علم آمار نوعی از بررسی میزان گرایش به مرکز (Central Tendency) است که از مجموع مقادیر موجود در یک مجموعه داده تقسیم بر تعداد آن‌ها به دست می‌آید (گرایش به مرکز به اعدادی اشاره دارد که داده‌های از پیش اندازه‌گیری شده را به صورت خلاصه توصیف می‌کند.) فرمول ریاضیاتی محاسبهٔ میانگین به شرح زیر است:

X¯=1nx1+x2++xn

اگر بخواهیم مفهوم میانگین را از طریق مثال توضیح دهیم، می‌توانیم از جامعهٔ آماری بالا استفاده کنیم بدین صورت که جمع جبری کلیهٔ اعداد (۲۵۷) تقسیم بر تعداد اعضای جامعه (۱۳) که به‌ صورت رُند معادل است با ۱۹/۷. به‌ عبارت دیگر داریم:

(3 + 3 + 8 + 9 + 15 + 15 + 15 + 17 + 17 + 27 + 40 + 44 + 44) ÷ 13 = 19.769230769

همان‌طور که مشاهده می‌شود، به سادگی توانستیم با جمع جبری تمامی اعضاء و تقسیم حاصل‌جمع بر تعداد، میانگین را به دست آوریم.

Median (میانه)
در علم آمار منظور از میانه که با M نشان داده می‌شود، نوعی بررسی میزان گرایش به مرکز است که جامعهٔ آماری را به 2 قسمت مساوی تقسیم کرده که اگر تعداد اعضاء فرد باشد، عددی که در وسط قرار می‌گیرد به عنوان میانه در نظر گرفته خواهد شد و این در حالی است که اگر تعداد اعضای جامعهٔ آماری زوج باشد، میانه از میانگین ۲ عضوی که در وسط جامعهٔ آماری قرار گرفته‌ به دست می‌آید (نیاز به توضیح است که برای محاسبهٔ میانه، ابتدا باید داده‌ها را از کوچک به بزرگ مرتب ساخت و سپس عددی که در وسط قرار می‌گیرد را به‌ عنوان میانه انتخاب کرد.)

از آنجا که تعداد اعضاء در مثال فوق فرد است، عددی که دقیقاً در وسط قرار گرفته (۱۵) را به عنوان میانه در نظر خواهیم گرفت. حال فرض کنیم که یک جامعهٔ آماری داریم که تعداد اعضاء در آن زوج است:

3, 3, 8, 9, 15, 15, 17, 17, 27, 40, 44, 44

همان‌طور که مشخص است، تعداد اعضای این جامعهٔ آماری برابر با ۱۲ است که در این صورت برای محاسبهٔ میانه کمی بیشتر باید تلاش کنیم. برای این منظور، ابتدا ۲ عضوی که در وسط قرار گرفته را با یکدیگر جمع کرده سپس طبق همان روشی که در مورد محاسبهٔ میانگین گفته شد، میانگین آن‌ها را به دست می‌آوریم:

(15 + 17) ÷ 2 = 32 ÷ 2 = 16

می‌بینیم زمانی‌که تعداد اعضای جامعهٔ آماری ما برابر با ۱۳ بود، میانه برابر با ۱۵ بود اما وقتی یک عضو از آن کاستیم، میانه به عدد ۱۶ تغییر یافت.

Mode (مُد)
مُد نوعی بررسی گرایش به مرکز است که در علم آمار، به داده‌ای که در یک مجموعه از داده‌ها بیشترین بار تکرار شده باشد اشاره دارد. داده‌های آماری ممکن است فاقد مُد باشند مثل ۴ و ۶ و ۱ که هیچ عددی بیش از یک بار تکرار نشده یا اینکه دارای ۱ مُد باشد مثل ۷ و ۶ و ۷ و ۱ (عدد ۷) و یا ۲ مد داشته باشد مانند ۷ و ۶ و ۷ و ۶ و ۱ و ۲ (اعداد ۶ و ۷) و اگر هم تکرار اعضای جامعهٔ آماری به طور یکسان در بین دادهای آماری اتفاق افتاده باشد (مثل ۴، ۴، ۴، ۳، ۳، ۳، ۱، ۱، ۱، ۸، ۸، ۸)، هیچ مُدی وجود ندارد.

بر خلاف میانگین و میانه که ما صرفاً با یک عدد روبه‌رو هستیم، همان‌طور که گفته شد، در یک جامعهٔ آماری می‌توانیم بیش از یک مُد داشته و یا هیچ مُدی نداشته باشیم. در مثال جامعهٔ آماری فوق‌الذکر، تنها عضوی که بیش از همه تکرار شده عدد ۱۵ است و از همین روی مُد این جامعه برابر با ۱۵ است در حالی که اگر تعداد تکرار عدد ۱۵ یکی کمتر بود، یعنی برابر با ۲ بود، آن وقت در این جامعهٔ آماری ۴ مُد داشتیم که عبارت بودند از ۳، ۱۵، ۱۷ و ۴۴.

Variance (وَردایی) و Standard Deviation (انحراف معیار)
در علم آمار، Variance (وَردایی) نوعی سنجش پراکندگی است. به عبارت دیگر، واریانس عددی است که نشان می‌دهد داده‌ها چگونه حول مقدار میانگین پخش شده‌اند که از طریق فرمول ریاضیاتی زیر محاسبه می‌شود:

σ2=Σx-x¯2n

به عبارت دیگر، جهت محاسبهٔ واریانس ابتدا میانگین را، همان‌طور که پیش از این توضیح داده شد، به دست می‌آوریم سپس هر یک از اعضای جامعهٔ آماری را از میانگین کم کرده و نتیجه را به توان ۲ می‌رسانیم. به عنوان مثال، در جامعهٔ آماری فوق حساب کردیم که میانگین برابر بود با 19/7 سپس باید اختلاف تک‌تک اعضای جامعهٔ آماری از میانگین را به صورت زیر به دست آوریم:

3 - 19.7 = −16.7
3 - 19.7 = −16.7
8 - 19.7 = −11.7
9 - 19.7 = −10.7
15 - 19.7 = −4.7
15 - 19.7 = −4.7
15 - 19.7 = −4.7
17 - 19.7 = −2.7
17 - 19.7 = −2.7
27 - 19.7 = 7.3
40 - 19.7 = 20.3
44 - 19.7 = 24.3
44 - 19.7 = 24.3

در پایان، تک‌تک داده‌ها را به توان ۲ رسانده و میانگین آن‌ها را حساب می‌کنیم (علت به توان رساندن این است که اعداد منفی منجر به خنثی شدن اعداد مثبت نشوند):

σ2=16.72 + 16.72 + 11.72 + 10.72 + 4.72 + 4.72 + 4.72 + 2.72 + 2.72 + 7.32 + 20.32 + 24.32 + 24.3213

به عبارت دیگر مقدار واریانس برابر است با:

σ2=2536.3713=195.105384615

Standard Deviation (انحراف معیار) هم یکی از شاخص‌های پراکندگی داده‌ها در آمار است که از جذر واریانس به دست می‌آید که نشان می‌دهد به طور میانگین داده‌ها به چه میزانی از مقدار متوسط فاصله دارند. توجه داشته باشیم که اگر انحراف معیار مجموعه‌ای از داده‌ها نزدیک به صفر باشد، این مسئله حاکی از آن است که داده‌ها نزدیک به میانگین هستند و پراکندگی اندکی دارند اما این در حالی است که انحراف معیار بزرگ‌تر، بیانگر پراکندگی قابل‌توجه داده‌ها است. فرمول ریاضیاتی محاسبهٔ انحراف معیار به شرح زیر است:

SD=x-x¯2n

در مثال فوق، اگر جذر واریانس (195/105384615) را بگیریم، انحراف معیار به دست می‌آید:

SD=195.105384615 = 13.9680129086

به خاطر داشته باشیم که انحراف معیار داده‌های ارزشمندی را در اختیارمان قرار می‌دهد به طوری که با استفاده از مقدار SD متوجه می‌شویم که کدام‌یک از اعضای جامعهٔ آماری در محدودهٔ استاندارد، کدام اعضاء بالای حد استاندارد و کدام‌یک پایین حد استاندارد قرار دارند.

آشنایی با نحوهٔ استفاده از لایبرری NumPy
اگر بخواهیم تعریف خلاصه‌ای از این لایبرری ارائه دهیم، باید بگوییم که NumPy یک لایبرری برای زبان پایتون است که با استفاده از آن به سادگی می‌توان محاسبات علمی انجام داد و از جمله فیچرهای این لایبرری می‌توان به موارد زیر اشاره کرد:

- فانکشن‌های محاسباتی پیشرفته
- ابزارهایی به منظور ادغام کدهای نوشته شده به زبان‌های C ،Fortran و ++C
- ابزارهای مرتبط با جبر خطی و ...

نصب این لایبرری روی گنو/لینوکس بسیار ساده است اما پیش نصب، حتماً نیاز است تا پایتون روی سیستم‌عامل شما نصب باشد (جهت آشنایی با نحوهٔ نصب این زبان روی اوبونتو، به آموزش نصب پایتون روی توزیع اوبونتو از سیستم عامل گنو/لینوکس در سکان آکادمی مراجعه نمایید.) به طور مثال، اگر پایتون نسخهٔ ۳ به بالا روی سیستم‌عامل اوبونتو نصب باشد، با اجرای دستور زیر در ترمینال می‌توان نسخه‌ای از این لایبرری که مناسب نسخهٔ ۳ است را دانلود و نصب نمود:

$ sudo apt-get install python3-numpy

همان‌طور که پیش از این توضیح داده شد، لایبرری NumPy دارای بسیاری از فانکشن‌های محاسباتی از پیش تعریف شده است که بدون استفاده از این لایبرری، دولوپر برای به دست آوردن نتیجه‌ای یکسان نیاز است تا ساعت‌ها کدنویسی کند. به منظور استفاده از NumPy برای به دست آوردن Variance ،Median ،Mean و Standard Deviation ابتدا فایلی با نامی دلخواه مثلاً statistics.py می‌سازیم و به خاطر داشته باشیم که پسوند فایل حتماً باید py. باشد:

# Importing numpy
import numpy as np

# X is a Python List
X = [32.32, 56.98, 21.52, 44.32, 55.63, 13.75, 43.47, 43.34]

# Sorting the data and printing it.
X.sort()
print(X)
# [13.75, 21.52, 32.32, 43.34, 43.47, 44.32, 55.63, 56.98]

# Using NumPy's built-in functions to Find Mean, Median, SD and Variance
mean = np.mean(X)
median = np.median(X)
sd = np.std(X)
variance = np.var(X)

# Printing the values
print("Mean", mean) # 38.91625
print("Median", median) # 43.405
print("Standard Deviation", sd) # 14.3815654029
print("Variance", variance) # 206.829423437

در تفسیر کدهای فوق باید بگوییم که در خط دوم لایبرری NumPy را به برنامه ایمپورت کرده و نامی خلاصه و کوتاه همچون np برای آن در نظر گرفته‌ایم. در خط پنجم هم لیستی تحت عنوان X ایجاد کرده‌ایم که حاوی یک جامعهٔ آماری از اعداد است.

پیش از این اشاره کردیم که برای یافتن میانه، ابتدا باید اعداد را از کوچک به بزرگ سُورت (مرتب) کنیم که به همین منظور هم در خط هشتم از تابع پیش‌فرض پایتون برای این کار تحت عنوان ()sort استفاده کرده و در خط نهم هم مقادیر این لیست را چاپ کرده‌ایم.

از خط سیزدهم الی شانزدهم هم ۴ متغیر تحت عناوین sd ،median ،mean و variance تعریف کرده و با استفاده از توابع پیش‌فرض لایبرری NumPy که برای محاسبات چنین آماری ارائه شده‌اند، این متغیرها را مقداردهی کرده‌ایم. در پایان هم از خط نوزدهم الی بیست‌ودوم مقدار این متغیرها را چاپ کرده به طوری که خروجی این برنامه به صورت زیر خواهد بود:

[13.75, 21.52, 32.32, 43.34, 43.47, 44.32, 55.63, 56.98]
Mean 38.91625
Median 43.405
Standard Deviation 14.3815654029
Variance 206.829423437
>>> 

می‌بینیم که استفاده از لایبرری NumPy به چه سادگی داده‌های آماری مد نظرمان را محاسبه نمود.



بهزاد مرادی