توزیع داده (Data Distribution)
اینجا با مفهوم توزیع داده در نامپای آشنا می شویم. یعنی بفهمیم کدام مقدارها بیشتر تکرار می شوند و چطور این رفتار را با اعداد تصادفی شبیه سازی کنیم.
توزیع داده یعنی چه؟
توزیع داده (Data Distribution) یعنی لیستی از همه مقدارهای ممکن، همراه تعداد تکرار هر مقدار.
مثلا نمره های کلاس را تصور کن؛ می گوییم چند نفر 20 شده اند، چند نفر 19، چند نفر 18 و همین طور تا 10.
چنین لیستی برای آمار و علم داده خیلی مهم است؛ چون به ما می گوید داده بیشتر دور کدام مقدارها جمع شده است.
توزیع تصادفی بر اساس احتمال
توزیع تصادفی (Random Distribution) یعنی مجموعه ای از عددهای تصادفی که از یک الگوی احتمال مشخص پیروی می کنند.
اینجا با چیزی به نام تابع چگالی احتمال (Probability Density Function) سروکار داریم؛ یعنی تابعی که می گوید هر مقدار چه شانسی دارد دیده شود.
در نامپای می توانیم با تابع choice() از ماژول random عددهای تصادفی بسازیم که طبق احتمال های دلخواه رفتار کنند.
این کار کمک می کند شبیه سازی های واقعی تری انجام دهیم؛ مثلا شبیه سازی نمره ها یا نتایج یک بازی.
استفاده از choice با احتمال ها
تابع choice() علاوه بر لیست مقدارها، یک آرایه احتمال هم می گیرد. هر عدد احتمال بین 0 و 1 است.
اگر احتمال یک مقدار 0 باشد، آن مقدار هرگز انتخاب نمی شود. اگر 1 باشد، همیشه همان مقدار انتخاب می شود.
مثال: توزیع داده یک بعدی
در این مثال یک آرایه 1 بعدی با 100 مقدار می سازیم. هر مقدار باید 3، 5، 7 یا 9 باشد؛ اما با احتمال های متفاوت.
from numpy import random
x = random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(100))
print(x)
در این توزیع، مقدار 7 بیشترین احتمال را دارد؛ پس معمولا بیشتر دیده می شود. مقدار 9 احتمال 0 دارد؛ یعنی هرچقدر هم برنامه را اجرا کنیم، در خروجی دیده نمی شود.
نکته: مجموع همه احتمال ها باید دقیقا 1 باشد؛ وگرنه توزیع معتبر نیست.
توزیع داده در آرایه های چندبعدی
تابع choice() می تواند آرایه هایی با شکل های مختلف بسازد. کافی است پارامتر size را به شکل دلخواه بدهیم.
مثال: توزیع داده دوبعدی
اینجا همان احتمال ها را نگه می داریم؛ اما آرایه دوبعدی سه ردیفی با پنج ستون می سازیم.
from numpy import random
x = random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=(3, 5))
print(x)
باز هم بیشتر مقدارها 7 خواهند بود؛ چون احتمال 7 از بقیه بزرگ تر است. با این روش می توانی جدول نمره، ماتریس بازی یا داده آزمایشی بسازی.
اگر می خواهی درباره خود عددهای تصادفی بیشتر بدانی، صفحه مقدمه تصادفی سازی نامپای برایت مناسب است.
یک تمرین ساده برای توزیع داده
برای تمرین توزیع داده در نامپای این سه کار را انجام بده:
- یک آرایه 20 تایی بساز که بیشتر مقدارها 7 باشند.
- یک آرایه دوبعدی 4×5 بساز و احتمال 5 را بیشتر کن.
- تعداد هر مقدار را با
numpy.uniqueو پارامترreturn_countsبشمار.
جمع بندی سریع
- توزیع داده یعنی بدانیم هر مقدار چند بار تکرار می شود.
- در نامپای می توانیم توزیع های تصادفی بسازیم که شبیه دنیای واقعی باشند.
- تابع
choice()با آرایه احتمال، توزیع های مختلف می سازد. - مجموع احتمال ها باید همیشه 1 باشد.
- با تغییر
sizeمی توانیم توزیع داده را روی آرایه های چندبعدی اعمال کنیم.