علوم داده
مدل سازی انتشار ویروس با NumPy
در این مثال، نحوه استفاده از NumPy برای شبیه سازی انتشار ویروس در یک جمعیت را بررسی می کنیم.
فرض:
- ویروس با نرخ ثابتی بین افراد سرایت می کند.
- افراد آلوده برای مدت مشخصی مسری هستند و سپس بهبود می یابند.
- نرخ بهبودی ثابت است.
هدف:
- شبیه سازی تعداد افراد آلوده، بهبود یافته و در معرض خطر در طول زمان
- نمایش منحنی اپیدمی (تعداد افراد آلوده در هر زمان)
مراحل:
1. تعریف پارامترها:
population_size
: اندازه جمعیتinfection_rate
: نرخ سرایت ویروس (احتمال ابتلا به ویروس در تماس با فرد آلوده)recovery_rate
: نرخ بهبودی (احتمال بهبودی در هر روز)simulation_days
: تعداد روزهای شبیه سازی
Python
import numpy as np
population_size = 10000
infection_rate = 0.05
recovery_rate = 0.02
simulation_days = 365
2. ایجاد آرایه ها:
infected
: تعداد افراد آلوده در هر روزrecovered
: تعداد افراد بهبود یافته در هر روزsusceptible
: تعداد افراد در معرض خطر ابتلا در هر روز
Python
infected = np.zeros(simulation_days)
recovered = np.zeros(simulation_days)
susceptible = np.ones(simulation_days) * population_size
3. شبیه سازی:
- یک فرد در روز اول به طور تصادفی آلوده می شود.
- در هر روز، برای هر فرد:
- اگر فرد آلوده است:
- با احتمال
recovery_rate
بهبود می یابد. - با احتمال
1 - recovery_rate
مسری باقی می ماند.
- با احتمال
- اگر فرد در معرض خطر است:
- با احتمال
infection_rate * susceptible[t] / population_size
آلوده می شود.
- با احتمال
- اگر فرد آلوده است:
Python
# آلوده کردن یک فرد به طور تصادفی در روز اول
infected[0] = 1
for t in range(1, simulation_days):
# به روز رسانی وضعیت افراد آلوده
for i in range(int(infected[t])):
if np.random.rand() < recovery_rate:
recovered[t] += 1
infected[t] -= 1
else:
infected[t] += 1
# به روز رسانی وضعیت افراد در معرض خطر
new_infections = np.random.binomial(population_size, infection_rate * susceptible[t] / population_size)
infected[t] += new_infections
susceptible[t] -= new_infections
4. محاسبه شاخص های اپیدمی:
active_cases
: تعداد افراد آلوده یا مسری در هر روز
Python
active_cases = infected + susceptible - recovered
5. نمایش منحنی اپیدمی:
- از
matplotlib
برای رسم نمودار تعداد افراد آلوده، بهبود یافته و در معرض خطر در طول زمان استفاده کنید.
Python
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6))
plt.plot(infected, label='Infected')
plt.plot(recovered, label='Recovered')
plt.plot(active_cases, label='Active Cases')
plt.plot(susceptible, label='Susceptible')
plt.xlabel('Days')
plt.ylabel('Population')
plt.title('Epidemic Simulation')
plt.legend()
plt.grid(True)
plt.show()
این مثال نشان می دهد که چگونه می توان از NumPy برای شبیه سازی مدل های اپیدمیولوژیک ساده و تجزیه و تحلیل داده های مربوط به انتشار بیماری ها استفاده کرد.
نکات:
- می توانید مدل را با اضافه کردن پارامترهای بیشتر مانند نرخ مرگ و میر، اقدامات پیشگیرانه و مداخلات درمانی پیچیده تر کنید.
- می توانید از NumPy و سایر کتابخانه های پایتون مانند
pandas
وseaborn
برای تجزیه و تحلیل و نمایش داده های شبیه سازی شده به رو