В этом сообщении в блоге мы будем работать над Covid-19 в Пакистане. Этот пост разбит на две части: сначала мы делаем часть анализа, а затем прогнозируем случаи на будущее.

Прежде чем мы начнем, просто хочу упомянуть, что если вы хотите получить больше информации, посмотрите видеоурок.

Руководство по прогнозированию Covid-19 в Пакистане:
https://youtu.be/Pt76F5rHsRE
Руководство по глобальному прогнозированию Covid-19:
https://www.youtube.com/watch?v=ZNi_3bcutkY

Давайте сначала исследуем некоторые ключевые моменты этой пандемии, чтобы мы знали о проблеме, которую пытаемся решить.

ЧТО ТАКОЕ КОРОНА ВИРУС

Название «коронавирус» происходит от выступов в виде короны на их поверхности. «Корона» на латыни означает «нимб» или «корона». Среди людей коронавирусные инфекции чаще всего возникают в зимние месяцы и ранней весной. Люди регулярно простужаются из-за коронавируса и могут заразиться им примерно через 4 месяца. Это потому, что антитела к коронавирусу не живут долго. Также антитела к одному штамму коронавируса могут быть неэффективными против другого.

Пандемия коронавируса - это продолжающаяся пандемия коронавирусного заболевания 2019 года (COVID-19), вызванная коронавирусом 2 (SARS-CoV-2) тяжелого острого респираторного синдрома. Впервые вспышка была выявлена ​​в Ухане, провинция Хубэй, Китай, в декабре 2019 года, и был признан пандемией Всемирной организацией здравоохранения (ВОЗ) 11 марта 2020 года.

Симптомы

Общие симптомы:
лихорадка, усталость, сухой кашель
Некоторые люди могут испытывать:
боли, заложенность носа, насморк, боль в горле, диарею.

В среднем симптомы проявляются через 5–6 дней с момента заражения вирусом, однако это может занять до 14 дней.

COVID-19 В ПАКИСТАНЕ

Было подтверждено, что пандемия COVID-19 достигла Пакистана 26 февраля 2020 года, когда у студента в Карачи по возвращении из Ирана был обнаружен положительный результат. К 18 марта случаи заболевания были зарегистрированы во всех четырех провинциях, двух автономных территориях и на федеральной территории Исламабад.
По состоянию на 3 мая 2020 года было зарегистрировано более 19 100 подтвержденных случаев, из которых 4315 выздоровели и 385 умерли в страна. В Пенджабе зарегистрировано наибольшее количество случаев заболевания - более 7 100, в то время как в Хайбер-Пахтунхва зарегистрировано наибольшее количество смертей в стране, в общей сложности 172 человека. Страна находится под общенациональной изоляцией до 9 мая, которая была начата 1 апреля и позже. продлен дважды.

ВРЕМЯ КОДИРОВАТЬ…

Цель состоит в том, чтобы создать модель машинного обучения, которая может предсказывать и прогнозировать новые случаи, смерти, случаи излечения на основе прошлых данных по Пакистану и прогнозировать новые случаи в целом, а также на уровне провинции / штата и города, а также.

Я уже выполнил часть извлечения и очистки данных, так что давайте перейдем к анализу некоторых данных.

Вы можете получить данные из моего репозитория git-hub
https://github.com/uzairaj/Covid19-Pakistan-Prediction-Model

#after importing libraries
#reading data
covid_data = pd.read_excel('../input/pak_data-v2.xlsx')
#printing head of our data, to know about columns
covid_data.head()

#printing data types of each column
covid_data.dtypes
#start date of covid in Pakistan
covid_data.Date.min()
#max date
covid_data.Date.max()
#creating a copy of dataframe
pak_data = covid_data.copy()
### Now creating new columns like Total Confirmed, Total Recovered, Total Deaths and Active cases based on New, Deaths, Cured cases
pak_data['Total Confirmed Cases'] = 0
pak_data['Total Recovered'] = 0
pak_data['Total Deaths'] = 0
pak_data['Active Cases'] = 0
for i in range(0, len(pak_data)):
    if (i == 0):
        pak_data['Total Confirmed Cases'].iloc[i] = pak_data['New Cases'].iloc[i]
        pak_data['Total Recovered'].iloc[i] = pak_data['Cured Cases'].iloc[i]
        pak_data['Total Deaths'].iloc[i] = pak_data['Death Cases'].iloc[i]
        pak_data['Active Cases'].iloc[i] = pak_data['Active Cases'].iloc[i-1] + pak_data['New Cases'].iloc[i] - pak_data['Death Cases'].iloc[i] - pak_data['Cured Cases'].iloc[i]
    else:
        pak_data['Total Confirmed Cases'].iloc[i] = pak_data['Total Confirmed Cases'].iloc[i-1] + pak_data['New Cases'].iloc[i]
        pak_data['Total Recovered'].iloc[i] =  pak_data['Total Recovered'].iloc[i-1] + pak_data['Cured Cases'].iloc[i]
        pak_data['Total Deaths'].iloc[i] =  pak_data['Total Deaths'].iloc[i-1] + pak_data['Death Cases'].iloc[i]
        pak_data['Active Cases'].iloc[i] = pak_data['Active Cases'].iloc[i-1] + pak_data['New Cases'].iloc[i] - pak_data['Death Cases'].iloc[i] - pak_data['Cured Cases'].iloc[i]
#printing head after adding new column in data
pak_data.head()

### This code will display cumulative records of Active, Recovered and Death cases for Pakistan
confirmed = pak_data['New Cases'].sum()
recovered = pak_data['Cured Cases'].sum()
deaths = pak_data['Death Cases'].sum()
active = confirmed - (recovered - deaths)
print(confirmed, recovered, deaths, active)
labels = ['Active Cases','Recovered Cases','Death Cases']
sizes = [active,recovered,deaths]
color= ['#66b3ff','green','red']
explode = []
for i in labels:
    explode.append(0.1)
    
plt.figure(figsize= (15,10))
plt.pie(sizes, labels=labels, autopct='%3.1f%%', startangle=9, explode =explode,colors = color)
centre_circle = plt.Circle((0,0),0.60,fc='white')
fig = plt.gcf()
fig.gca().add_artist(centre_circle)
plt.title('Pakistan COVID-19 Cases',fontsize = 24)
plt.axis('equal')  
plt.tight_layout()

###This will show spread of cases in Pakistan by Scatter plot with dates used as x-axis and cases at y-axis
fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='blue',name='Confimned Cases'))
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Recovered'],
                mode='lines+markers',marker_color='green',name='Recovered'))
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Deaths'], 
                mode='lines+markers',marker_color='red',name='Deaths'))
fig.update_layout(title_text='Coronavirus Cases in Pakistan',plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

ПРОГНОЗ ВРЕМЯ

МОДЕЛЬ ПРОРОКА

Пророк - это инструмент, который используется для прогнозирования данных, он обеспечивает практический подход к прогнозированию в масштабе. Он лучше всего работает с временными рядами, которые имеют сильные сезонные эффекты и несколько сезонов исторических данных. Prophet устойчив к отсутствию данных и сдвигам в тренде и, как правило, хорошо справляется с выбросами.

# This is predicting Total number of Confirmed Cases in Pakistan
confirmed = pak_data['Total Confirmed Cases'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(pak_data['Date'])
data['y'] = confirmed
prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=15)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(15)
#print(forecast)

fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Confirmed Cases (Predicted vs Actual) using Prophet')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

Похоже, что на 29 апреля фактических случаев было около 14,278 тыс., а наша модель предсказывала 14,486 тыс. подтвержденных случаев.

МОДЕЛИ ARIMA И SARIMA

В моделях временных рядов у нас есть две важные модели, и это модели ARIMA и SARIMA, обе принадлежат концепциям моделей ARMA.

Для справки:
ARMA: https://www.youtube.com/watch?v=HhvTlaN06AM
ARIMA: https://www.youtube.com/ смотреть? v = 3UmyHed0iYE
САРИМА: https://www.youtube.com/watch?v=WjeGUs6mzXg

######  ARIMA MODEL
cc = pak_data['Total Confirmed Cases'].values
# fit model
p,d,q = auto_arima(cc).order
print(p,d,q)
model = ARIMA(pak_data['Total Confirmed Cases'],order=(p,d,q))
arima = model.fit(disp=True)
forecast = arima.forecast(steps= 15)
pred = list(forecast[0])
print(pred)
start_date = pak_data['Date'].max()
prediction_dates = []
for i in range(15):
    date = start_date + datetime.timedelta(days=1)
    prediction_dates.append(date)
    start_date = date
fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prediction_dates, y=pred,
                    mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Confirmed cases Predicted vs Actual using ARIMA')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

######  SARIMA MODEL
cc = pak_data['Total Confirmed Cases'].values
# fit model
p,d,q = auto_arima(cc).order
print(p,d,q)
model = SARIMAX(cc, order=(p,d,q), seasonal_order=(0,0,0,0),measurement_error=True)#seasonal_order=(1, 1, 1, 1))
model_fit = model.fit(disp=False)
        
# make prediction
pred = model_fit.predict(len(cc), len(cc)+7)
print(pred)
        
start_date = pak_data['Date'].max()
prediction_dates = []
for i in range(15):
    date = start_date + datetime.timedelta(days=1)
    prediction_dates.append(date)
    start_date = date
fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prediction_dates, y=pred,
                    mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Confirmed cases Predicted vs Actual using SARIMA')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

Эти упомянутые эксперименты связаны с подтвержденными случаями для других данных, таких как прогноз выздоровления, случаи смерти, вы можете проверить видеоурок или записную книжку Kaggle или обратиться к коду Github и поиграть с ним.

Руководство по прогнозированию Covid-19 в Пакистане:
https://youtu.be/Pt76F5rHsRE
Руководство по глобальному прогнозированию Covid-19:
https://www.youtube.com/watch?v=ZNi_3bcutkY
Github:
https://github.com/uzairaj < br /> Блог:
http://uzairadamjee.com/blog/
Блокнот Kaggle:
https: / /www.kaggle.com/uzairadamjee/covid-19-pakistan-data-analysis-and-prediction
https://www.kaggle.com/uzairadamjee/analyze-forecasting-covid-19-data/

В конце просто хочу прокомментировать, что это просто числа, которые мы использовали для прогнозирования возможного количества случаев, которые могут произойти в будущем.

Что произойдет, БОГ лучше знает.

Позвольте нам ОСТАВАТЬСЯ ПОЗИТИВНЫМ в это время, поддерживать СОЦИАЛЬНОЕ РАССТОЯНИЕ и МОЛИТЬСЯ за лучшее будущее.

«ИСТИННО, ПРИ КАЖДОМ ТРУДНОСТИ ЕСТЬ ПОМОЩЬ».

СПАСИБО ЗА ЧТЕНИЕ :)