Не ограничиваясь совокупными цифрами, чтобы количественно оценить распространение коронавируса

Covid-19, который зародился в Китае, теперь распространился по всему миру, и страны изо всех сил пытаются с ним бороться. Вирус, который зародился как чрезвычайная ситуация в области здравоохранения, теперь начал иметь серьезные экономические последствия. В этой статье я попытался понять и визуализировать распространение Covid-19 с помощью Pandas и Plotly.

Начнем с импорта всех библиотек и загрузки всех данных. Данные размещены в Университете Джона Хопкинса, и их можно найти по ссылке здесь. Есть три файла, которые содержат общее количество подтвержденных случаев, смертей и выздоровлений.

После выполнения приведенного выше кода данные выглядят вот так.

У нас есть

  • Даты (столбцами)
  • Всего подтвержденных случаев
  • Провинция
  • Страны
  • Широта и долгота

Несмотря на то, что данные хорошо организованы, мы немного изменим их, чтобы сделать их более подходящими для построения графиков. Мы можем использовать функцию pandas melt, чтобы изменить форму дат в одном столбце, чтобы мы могли позже установить его в качестве индекса, что значительно упрощает построение графика.

С датами и странами в качестве индексов наборы данных теперь чище и их намного проще строить. См. Снимок ниже.

В рамках данной статьи мы будем рассматривать данные только на уровне страны, а не на уровне провинции / штата. Давайте создадим консолидированный набор данных, который объединит наборы данных для случаев, смертей и выздоровлений. Я также создал функцию для ежедневного подсчета совокупных данных. Мы используем следующий код для обработки.

Я также создал несколько вычисляемых полей, таких как «Активные случаи» («Случаи без результата смерти или выздоровления») и «Отношение смертей к случаям», и объединил все наборы данных, используя функцию слияния из pandas.

Активные случаи = Подтвержденные случаи - Выздоровление - Смерти

Консолидированный набор данных содержит индекс в виде страны и даты, а каждый показатель - в виде столбца (см. Снимок экрана ниже).

Мы используем plotly.graph_objects для всех наших построений. Это отличное решение для создания красивых графиков без большого количества кода. Мы используем приведенный ниже код для создания пяти диаграмм, показывающих глобальные числа для подтвержденных случаев, активных случаев, смертей, выздоровлений, соотношения смертей к случаям.

Мы видим, что количество подтвержденных случаев, смертей и выздоровлений растет, но по этим цифрам трудно определить степень роста, поскольку они являются кумулятивными. Соотношение смертей к числу заболевших составляет 3,4% (об этом сообщила ВОЗ несколько дней назад).

Полезность «Активных случаев» в качестве метрики очевидна сразу, поскольку она обеспечивает моментальный снимок вспышки в определенный момент времени. На графике мы видим, что число активных случаев заболевания снижается с середины февраля, что является хорошим индикатором того, что мы лучше сдерживаем вспышку. Однако сама по себе эта диаграмма вводит в заблуждение, поскольку мы знаем, что большинство случаев находится в Китае, и это может исказить цифры. Давайте сравним активные случаи для региона, за исключением Китая.

Сюжет выше рисует две совершенно разные картины ситуации внутри и за пределами Китая. Вспышка, похоже, находится под контролем, и количество случаев заболевания внутри Китая сокращается, но за пределами Китая она по-прежнему довольно сильно растет.

Давайте углубимся в данные по каждой стране. Чтобы разобраться в данных, давайте ограничимся 10 странами, в которых все случаи превышают 300. Давайте построим график этих стран по количеству случаев, используя приведенный ниже код:

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

В качестве примера, выходные данные для Италии ниже показывают первую дату как «2020–01–31» как начало вспышки с двумя подтвержденными случаями. Тогда индекс можно интерпретировать как «День 0».

Давайте теперь построим график данных для четырех стран с наибольшим числом случаев заболевания и посмотрим, как со временем разрасталась вспышка, используя приведенный ниже код:

Давайте посмотрим на результат ниже. Обратите внимание, как быстро цифры растут после начала роста.

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

Потребовалось 29 дней, чтобы пересечь 100 случаев в Южной Корее, и всего 16 дней, чтобы преодолеть 7000! В Италии на то, чтобы пересечь 100, потребовалось 23 дня, и всего 13 дней, чтобы преодолеть 5000!

Наконец, поскольку ситуация сильно различается в зависимости от страны, поэтому стоит создать представление, в котором мы можем глубоко погрузиться в конкретную страну. Здесь мы можем использовать библиотеку ipywidgets, чтобы сделать нашу диаграмму интерактивной и сделать выбор страны возможным из раскрывающегося списка, используя приведенный ниже код:

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

Опять же, мы замечаем, что рост является внезапным и довольно быстрым, и, несмотря на большое количество случаев, Италия все еще не достигла пика по общему количеству случаев!

Число случаев заболевания и смертей во всем мире растет, но по данным из Китая мы видим, что с помощью надлежащих мер вспышку можно взять под контроль. Если вы хотите самостоятельно проанализировать данные с помощью моего кода, перейдите по ссылке на блокнот jupyter здесь.

Будем надеяться и молиться о скорейшем прекращении вспышки болезни!