В этом сообщении в блоге мы будем работать над 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/
В конце просто хочу прокомментировать, что это просто числа, которые мы использовали для прогнозирования возможного количества случаев, которые могут произойти в будущем.
Что произойдет, БОГ лучше знает.
Позвольте нам ОСТАВАТЬСЯ ПОЗИТИВНЫМ в это время, поддерживать СОЦИАЛЬНОЕ РАССТОЯНИЕ и МОЛИТЬСЯ за лучшее будущее.
«ИСТИННО, ПРИ КАЖДОМ ТРУДНОСТИ ЕСТЬ ПОМОЩЬ».
СПАСИБО ЗА ЧТЕНИЕ :)