تعریف توابع تجمیعی
به توابعی که از یک مجموعه داده تنها یک عدد واحد گزارش میدهند، توابع تجمیعی میگویند.توابعی مثل مجموع (sum)، کمینه (min)، بیشینه (max)، میانگین (mean) و ... از این دسته هستند. چند مورد استفاده از این توابع را در کد زیر ببینیم:
a = np.random.randint(1, 11, 20)
print(a)
print("sum =", np.sum(a))
print("min =", np.min(a))
print("max =", np.max(a))
print("mean =", np.mean(a))
خروجی کد:
[ 5 7 4 5 6 9 1 8 10 10 8 3 5 10 9 1 2 9 3 1]
sum = 116
min = 1
max = 10
mean = 5.8
برخی از این توابع را میتوان به صورت متد هم برای آرایهها استفاده کرد به صورت زیر:
print(a)
print("sum =", a.sum())
print("min =", a.min())
print("max =", a.max())
print("mean =", a.mean())
خروجی کد:
[ 5 7 4 5 6 9 1 8 10 10 8 3 5 10 9 1 2 9 3 1]
sum = 116
min = 1
max = 10
mean = 5.8
نکته: توجه کنیم که میتوانیم برای بعضی از توابع ذکر شده در بالا از خود توابع درونی پایتون مثل max() و min() نیز استفاده کنیم اما اکیداً توصیه میشود که از توابع نامپای (مانند دو مثال بالا) استفاده کنیم چرا که سرعت انجام محاسبات آن بسیار سریع است.
توابع تجمیعی را میتوان برای آرایههای چند بُعدی نیز به کار برد. نتیجه آن نیز گزارش یک عدد برای کل آن آرایه است. برای مثال اگر از تابع sum برای یک آرایه چند بُعدی استفاده کنیم، نتیجه آن جمع تمام اعضای آرایه است. به کد زیر توجه کنید:
a = np.array([[1, 4, 10, 5],
[3, 2, 9, 11],
[6, 7, 12, 8]])
print(a)
print("sum =", np.sum(a))
print("min =", np.min(a))
print("max =", np.max(a))
print("mean =", np.mean(a))
خروجی کد:
[[ 1 4 10 5]
[ 3 2 9 11]
[ 6 7 12 8]]
sum = 78
min = 1
max = 12
mean = 6.5
ما میتوانیم با مشخص کردن راستای محور (جهت محور) عملیات تجمیع را تنها در آن راستا انجام دهیم. برای مثال اگر آرایه ما دو بُعدی باشد، میتوانیم مشخص کنیم که در راستای سطرها (جهت محور 1 یا همان چپ به راست) یا در راستای ستونها (جهت محور 0 یا همان بالا به پایین) عملیات تجمیع انجام شود. برای این که بهتر متوجه شویم نمونه کد زیر را ببینید:
a = np.array([[1, 4, 10, 5],
[3, 2, 9, 11],
[6, 7, 12, 8]])
print(a)
print(np.min(a, axis=0))
خروجی کد:
[[ 1 4 10 5]
[ 3 2 9 11]
[ 6 7 12 8]]
[1 2 9 5]
همانطور که در کد بالا میبینیم عمل تجمیع را در راستای محور 0 (بالا به پایین) انجام دادیم. به این معنا که کمینه هر ستون محاسبه شد و در یک آرایه به ما داده شد. در کد زیر اینبار جهت محور را 1 (یعنی برای سطرها یا همان چپ به راست) در نظر گرفتهایم.
a = np.array([[1, 4, 10, 5],
[3, 2, 9, 11],
[6, 7, 12, 8]])
print(a)
print(np.min(a, axis=1))
خروجی کد:
[[ 1 4 10 5]
[ 3 2 9 11]
[ 6 7 12 8]]
[1 2 6]
گزارههای آماری
با استفاده از توابعی میتوانیم گزارشی از توصیفهای آماری از دادهها را بررسی کنیم. این توصیفها شامل میانگین و واریانس، انحراف معیار، میانه و چندکها است. در جدول زیر تابع مربوط به هر توصیف آماری را میآوریم.
عملکرد | نام تابع |
محاسبه میانگین | np.mean() |
محاسبه واریانس | np.var() |
محاسبه انحراف معیار | np.std() |
محاسبه میانه | np.median() |
محاسبه چندکها | np.percentile() |
حال برای هر یک مثالی میآوریم. مثال زیر برای یک آرایه که حاوی قد 10 نفر است آورده شده است.
heights = np.array([160, 165, 180, 170, 160, 172, 168, 180, 162, 175])
print(heights)
print("mean =", np.mean(heights))
print("var =", np.var(heights))
print("std =", np.std(heights))
print("median =", np.median(heights))
print("percentile(25) =", np.percentile(heights, 25))
print("percentile(50) =", np.percentile(heights, 50))
print("percentile(75) =", np.percentile(heights, 75))
خروجی کد:
[160 165 180 170 160 172 168 180 162 175]
mean = 169.2
var = 51.55999999999999
std = 7.180529228406496
median = 169.0
percentile(25) = 162.75
percentile(50) = 169.0
percentile(75) = 174.25
نکته: برای استفاده از percentile که مربوط به چندکها است باید مشخص کنیم که چندک چندم را میخواهیم.
چندکها
در این بخش مختصری با چندکها آشنا میشویم. فرض کنید که مقادیری از یک کمیت را داشته باشیم. برای مثال در بالا کمیت ما قد افراد است. اگر این مقادیر را در یک آرایه از کم به زیاد مرتب کنیم و سپس آن را به قطعات مساوی تقسیم کنیم به مقادیر متناظر با این برشها چند میگوییم که متناسب با این تعداد نامهای مختلفی دارد.
مثلاً اگر تعداد این قطعات 10تا باشد (یعنی 9 برش داریم) به مقادیر برش دهک میگوییم. یا اگر تعداد قطعهها برابر 4 باشد (یعنی 3 برش داریم) به آن چارک میگوییم. که هر برش را به ترتیب چارک اول، چارک دوم و چارک سوم نام گذاری میکنیم. چارک دوم همان میانه (مقدار میانی) است. اگر این تعداد 100تا باشد (یعنی 99 برش داریم) که به آن صدک میگوییم. در کد بالا percentile همان محاسبه صدکها است. برای استفاده از این دستور علاوه بر این که آرایه را به عنوان ورودی میدهیم باید شماره صدک مورد نطر خود را نیز ذکر کنیم. همانطور که در مثال بالا میبینید برای نمونه صدکهای 25اُم، صدک 50اُم (که همان میانه است) و صدک 75اُم را چاپ کردهایم.
دیگر توابع تجمیعی
علاوه بر توابع تجمیعی که در بالا ذکر کردیم، توابع تجمیعی دیگری نیز داریم که در جدول زیر بعضی از آنها را ذکر میکنیم.
توضیح | تایع تجمیعی |
محاسبه ضرب عناصر یک آرایه | np.prod() |
برگرداندن اندیس خانهای با کمترین مقدار | np.argmin() |
برگرداندن اندیس خانهای با بیشترین مقدار | np.argmax() |
در کد زیر استفاده هر یک از توابع بالا را مشاهده میکنیم.
a = np.array([10, 14, 2, 6, 19, 20, 5])
print(a)
print("prod =", np.prod(a))
print("argmax =", np.argmax(a))
print("argmin =", np.argmin(a))
خروجی کد:
[10 14 2 6 19 20 5]
prod = 3192000
argmax = 5
argmin = 2
همانطور که میبینیم از آنجایی که بیشنه داده در آرایه a عدد 20 است و در خانه 5 قرار دارد بنابراین خروجی دستور argmax برابر 5 است و همچنین کمینه داده در آرایه a عدد 2 است که در خانه 2 قرار دارد پس خروجی دستور argmin برابر 2 است.