Как создать Coronavirus Dashboard с помощью Python и Dash?

Количество дел против дней

Распространение коронавируса - это то, о чем все говорят сегодня. Первые случаи были отмечены в Китае, и теперь он распространился на 186 стран мира. Коэффициент увеличения случаев варьируется в разных странах. В то время как такие страны, как Сингапур, ведут очень эффективную борьбу с вирусом и поддерживают низкий уровень заболеваемости, в некоторых странах, например, в Италии, число случаев увеличивается в геометрической прогрессии. Чтобы сравнить, как каждая страна борется с вирусом, я создал панель мониторинга, использующую библиотеки pandas и dash в python. В этой истории я расскажу вам, как я это сделал.

Приборная панель, созданная Университетом Джона Хопкинса

Я буду использовать данные из репозитория github Университета Джона Хопкинса. Они обновляют количество случаев и смертей с каждым днем.

Теперь давайте сделаем немного кодирования.

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

import dash import dash_core_components as dcc import dash_html_components as html импорт plotly.graph_objs as go импорт панд как pd

Вы можете прочитать данные, задав URL-адрес для pandas:

URL =»https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv»

df = pd.read_csv (url)

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

df = pd.read_csv (url) df_cntry = df.groupby («Страна / Регион»). sum () df_cntry = df_cntry.drop (['Lat', 'Long'], 1) df_cntry = df_cntry.T df_cntry.reset_index (inplace = True) df_cntry ['index'] = df_cntry ['index']. apply (pd.to_datetime)

После удаления last, long и транспонирования датафрейм выглядит следующим образом.

Теперь нам нужно проверить первый день, когда дело обнаружено.

Первый случай covid-19 встречается для следующих стран:

Италия: 31.01.20, Иран: 18.02.20, Германия: 26.01.20, Турция: 13.03.20, США: 23.02.20

Мы определим эти даты в словаре:

firstday_cntry = { 'Италия':»2/19/20" , 'Иран':» 2/18/20" , 'Германия':»2/18/20" , 'Турция':» 3/13/20" , 'US': ”2/23/20"} cntry_names = firstday_cntry.keys ()

Теперь мы получим количество случаев после первого свидания в стране. Для этого мы создадим новый фрейм данных под названием «df_new» ниже.

numbers = [] для i в диапазоне (45): numbers.append (i) new_numbers = [] для k, v в firstday_cntry.items (): new_numbers.append (df_cntry [df_cntry ['index']> v] [k ].к списку())

df_new = pd.DataFrame (new_numbers) df_new = df_new.T df_new.columns = cntry_names df_new ['Day'] = pd.Series (числа)

Числа показывают количество случаев для каждой страны дней с момента первого случая. Например, Турция обнаружила первый случай за 7 дней до этого, поэтому после 7-го ряда значения будут «nan».

Теперь пришло время создать дашборд. Чтобы создать панель мониторинга, мы создадим два словаря, которые называются метками и трассировками, используя цикл for.

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash (__name__, external_stylesheets = external_stylesheets)

следы = [] метки = []

для i в cntry_names: traces.append (dict (x = df_new ['Day'], y = df_new [i], текст = i, непрозрачность = 0,7,

name = i)) label.append (dict ({'label': i, 'value': i}))

Мы готовы запустить нашу панель инструментов. Используя приведенный ниже код, мы можем запустить его. В вашем браузере перейдите «http://127.0.0.1:8050/», и вы увидите панель инструментов.

app.layout = html.Div ([html.Div (

dcc.Graph (id = «barplot», figure = {«data»: следы, «layout»: go.Layout (title = »Covid-19»,

)})), html.Div (dcc.Dropdown (options = tags))])

if __name__ == «__main__»: app.run_server ()

Последняя панель инструментов

Мы видим, что на 6-й день количество дел ниже:

Италия: 453, Турция: 359, Иран: 95, США: 74, Германия: 17

В качестве вывода, если никакие другие меры предосторожности не будут приняты, у Турции будет более 1000 случаев к 9 дню. Мы можем видеть, насколько хорошо наша страна борется с вирусом короны по сравнению с другими странами.

День 9