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

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

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

پیش از شروع کار با 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 نشان داده می‌شود، نوعی بررسی میزان گرایش به مرکز است که جامعهٔ آماری را به ۲ قسمت مساوی تقسیم کرده که اگر تعداد اعضاء فرد باشد، عددی که در وسط قرار می‌گیرد به عنوان میانه در نظر گرفته خواهد شد و این در حالی است که اگر تعداد اعضای جامعهٔ آماری زوج باشد، میانه از میانگین ۲ عضوی که در وسط جامعهٔ آماری قرار گرفته‌ به دست می‌آید (لازم به ذکر است که برای محاسبهٔ میانه، ابتدا می‌بایست داده‌ها را از کوچک به بزرگ مرتب ساخت و سپس عددی که در وسط قرار می‌گیرد را به‌ عنوان میانه انتخاب کرد).

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

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

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

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

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

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

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

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

σ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

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

SD=x-x¯2n

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

SD=195.105384615 = 13.9680129086

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

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

آشنایی با لایبرری NumPy
اگر بخواهیم تعریف خلاصه‌ای از این لایبرری ارائه دهیم، بایستی بگوییم که NumPy یک لایبرری توسعه داده شده برای زبان برنامه‌نویسی پایتون است که با استفاده از آن به سادگی می‌توان محاسبات علمی انجام داد. از جمله فیچرهای این لایبرری می‌توان به موارد زیر اشاره کرد:
- فانکشن‌های محاسباتی بسیار پیشرفته
- ابزارهایی به منظور ادغام کدهای نوشته شده به زبان‌های C ،Fortran و ++C
- ابزارهای مرتبط با جبر خطی و ...

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

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 به چه سادگی داده‌های آماری مد نظرمان را محاسبه نمود.