مقدمه
در این درس، ما یک پروژه دیگر برای تولید و مصورسازی داده را انجام خواهیم داد. این بار، ما پرتاب
یک جفت تاس را شبیهسازی کرده و نتایج را تحلیل میکنیم. این پروژه به ما کمک میکند تا با توزیع
احتمال در یک پدیده تصادفی آشنا شویم. برای مصورسازی نتایج، ما از یک کتابخانه دیگر به نام
Plotly استفاده خواهیم کرد. Plotly برای ساخت نمودارهای تعاملی و زیبا که برای وب
مناسب هستند، بسیار قدرتمند است.
نصب Plotly
مانند Matplotlib، کتابخانه Plotly نیز باید با استفاده از pip نصب شود.
(data_env) $ pip install plotly
ایجاد کلاس Die
ابتدا، یک کلاس برای مدلسازی یک تاس میسازیم. این کلاس تعداد وجههای تاس را مشخص کرده و یک متد
برای شبیهسازی پرتاب آن خواهد داشت. یک فایل به نام die.py ایجاد کنید.
die.py
from random import randint
class Die:
"""A class representing a single die."""
def __init__(self, num_sides=6):
"""Assume a six-sided die."""
self.num_sides = num_sides
def roll(self):
"""Return a random value between 1 and number of sides."""
return randint(1, self.num_sides)
این کلاس ساده، یک تاس با تعداد وجههای مشخص (به طور پیشفرض ۶) را مدل میکند و متد roll آن یک
عدد تصادفی بین ۱ و تعداد وجهها را برمیگرداند.
شبیهسازی پرتاب تاس
حالا یک اسکریپت جدید به نام die_visual.py میسازیم تا پرتاب دو تاس را شبیهسازی کرده و
فراوانی هر نتیجه را محاسبه کنیم.
die_visual.py
from die import Die
die_1 = Die()
die_2 = Die()
results = []
for roll_num in range(1000):
result = die_1.roll() + die_2.roll()
results.append(result)
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
در این کد، ما دو نمونه از کلاس Die میسازیم. سپس در یک حلقه، ۱۰۰۰ بار آنها را پرتاب کرده و
مجموع نتایج را در لیست results ذخیره میکنیم.
در بخش تحلیل، ما یک حلقه دیگر برای محاسبه فراوانی هر نتیجه ممکن (از ۲ تا ۱۲) ایجاد کرده و آن را
در لیست frequencies ذخیره میکنیم.
مصورسازی نتایج با Plotly
اکنون که دادههای فراوانی را داریم، میتوانیم آنها را با استفاده از Plotly به صورت یک نمودار
میلهای (هیستوگرام) رسم کنیم.
die_visual.py
from plotly.graph_objs import Bar, Layout
from plotly import offline
x_values = list(range(2, max_result+1))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': 'Result'}
y_axis_config = {'title': 'Frequency of Result'}
my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')
در این بخش، ما ابتدا دادههای محور x (نتایج ممکن) را آماده میکنیم. سپس، یک نمودار
میلهای (Bar) با دادههای محور x و y (فراوانیها) میسازیم.
در ادامه، با استفاده از Layout، عنوان و برچسبهای محورهای نمودار را پیکربندی میکنیم. در
نهایت، با فراخوانی offline.plot()، نمودار را در یک فایل HTML تعاملی
ذخیره میکنیم که به صورت خودکار در مرورگر شما باز خواهد شد.
در این درس، با ترکیب تولید دادههای تصادفی و مصورسازی آنها با کتابخانه Plotly، توانستیم یک
شبیهسازی جالب از پرتاب تاس را انجام دهیم و توزیع نتایج آن را به صورت بصری نمایش دهیم. با این
درس، فصل «تولید داده» به پایان میرسد. در فصل بعدی، به سراغ «دانلود داده» خواهیم رفت و یاد
میگیریم که چگونه دادهها را از فایلهایی با فرمتهای رایج مانند CSV و JSON بخوانیم و آنها
را برای تحلیل و مصورسازی آماده کنیم.