مقدمه

در این درس، ما یک پروژه دیگر برای تولید و مصورسازی داده را انجام خواهیم داد. این بار، ما پرتاب یک جفت تاس را شبیه‌سازی کرده و نتایج را تحلیل می‌کنیم. این پروژه به ما کمک می‌کند تا با توزیع احتمال در یک پدیده تصادفی آشنا شویم. برای مصورسازی نتایج، ما از یک کتابخانه دیگر به نام Plotly استفاده خواهیم کرد. Plotly برای ساخت نمودارهای تعاملی و زیبا که برای وب مناسب هستند، بسیار قدرتمند است.

نصب Plotly

مانند Matplotlib، کتابخانه Plotly نیز باید با استفاده از pip نصب شود.

(data_env) $ pip install plotly
                    

ایجاد کلاس Die

ابتدا، یک کلاس برای مدل‌سازی یک تاس می‌سازیم. این کلاس تعداد وجه‌های تاس را مشخص کرده و یک متد برای شبیه‌سازی پرتاب آن خواهد داشت. یک فایل به نام die.py ایجاد کنید.

Copy Icon 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 می‌سازیم تا پرتاب دو تاس را شبیه‌سازی کرده و فراوانی هر نتیجه را محاسبه کنیم.

Copy Icon die_visual.py
from die import Die

# Create two D6 dice.
die_1 = Die()
die_2 = Die()

# Make some rolls, and store results in a list.
results = []
for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()
    results.append(result)
    
# Analyze the results.
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 به صورت یک نمودار میله‌ای (هیستوگرام) رسم کنیم.

Copy Icon die_visual.py
from plotly.graph_objs import Bar, Layout
from plotly import offline

# ... (previous code) ...

# Visualize the results.
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 بخوانیم و آنها را برای تحلیل و مصورسازی آماده کنیم.