توزیع زیف (Zipf Distribution)
در این صفحه با توزیع زیف در NumPy آشنا می شوی. این توزیع زیف (Zipf Distribution) بر اساس قانون زیف ساخته شده که می گوید واژه های پرکاربرد خیلی بیشتر تکرار می شوند.
توزیع زیف در NumPy چیست؟
در متن منبع گفته شده توزیع زیف برای نمونه گیری طبق قانون زیف استفاده می شود. قانون زیف می گوید در یک مجموعه، واژه رتبه nام تقریباً به اندازه 1/n از واژه اول دیده می شود.
مثلاً واژه پنجم پرکاربرد، حدود یک پنجم واژه اول ظاهر می شود. تابع random.zipf() همین رفتار را در توزیع زیف در NumPy شبیه سازی می کند.
خروجی این تابع اغلب عددهای کوچک است، اما گاهی عددهای بزرگ تر هم دیده می شود.
پارامترهای توزیع زیف در NumPy
طبق منبع، تابع random.zipf() دو پارامتر اصلی دارد:
- a: پارامتر توزیع است و شیب توزیع را تعیین می کند.
- size: شکل آرایه خروجی را مشخص می کند.
اگر a را کمی بزرگ تر انتخاب کنی، احتمال عددهای خیلی بزرگ کمتر می شود. size فقط می گوید چند نمونه از توزیع زیف در NumPy بسازیم و در چه چیدمانی.
برای مقایسه با توزیع دیگری که دُم بلندی دارد، می توانی صفحه توزیع پارتو در NumPy را هم ببینی.
نمونه گیری از توزیع زیف در NumPy
در مثال منبع، از توزیع زیف با پارامتر توزیع a=2 نمونه می گیریم. شکل آرایه خروجی 2x3 است؛ یعنی دو سطر و سه ستون.
گام ها:
- کتابخانه
randomرا از NumPy ایمپورت کن. - تابع
random.zipf()را باaوsizeمناسب صدا بزن. - خروجی را با
print()چاپ کن و عددها را ببین.
from numpy import random
x = random.zipf(a=2, size=(2, 3))
print(x)
نکته: اگر این آرایه را چند بار بسازی، معمولاً عددهای کوچک بیشترند و گاهی عددهای بزرگ تر ظاهر می شوند. این رفتار، امضای توزیع زیف در NumPy است.
نمایش توزیع زیف روی نمودار
در مثال دوم، 1000 نمونه از توزیع زیف در NumPy ساخته می شود. اما فقط مقدارهای کوچک تر از 10 رسم می شوند تا نمودار معنی دارتر و شلوغی کمتر شود.
در کد زیر از matplotlib برای رسم و از seaborn برای نمودار آماری استفاده شده است.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
x = random.zipf(a=2, size=1000)
filtered = x[x < 10]
sns.displot(filtered)
plt.show()
نکته: در این نمودار می بینی که رتبه های کوچک خیلی پرتکرارند و هرچه رتبه بزرگ تر شود، تعداد نمونه ها کمتر می شود.
جمع بندی سریع توزیع زیف
اگر خواستی مرور کنی، این صفحه توزیع زیف در NumPy نقطه شروع خوبی است.
- توزیع زیف طبق قانون زیف و رتبه واژه ها تعریف می شود.
- در NumPy با
random.zipf()از این توزیع نمونه می گیری. - پارامتر
aشیب و دُم توزیع را کنترل می کند. sizeفقط شکل آرایه خروجی را تعیین می کند.- در نمودار، رتبه های کوچک پرتکرار و رتبه های بزرگ کم تعداد هستند.