Постройте данные о COVID-19 с помощью Plotly и Seaborn для выявления выбросов

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

Как применить визуализацию данных для выявления выбросов? Как построить график с помощью Plotly или Seaborn, написав несколько строк кода Python? В этой статье мы будем использовать набор данных Covid-19 в качестве примера, чтобы продемонстрировать, как выявлять аномалии в 50 штатах Америки. Ответы, которые мы можем получить от выбросов, включают:

  • В каком штате самый высокий уровень смертности?
  • Какая дата показывает самый большой дневной рост?
  • В каком штате больше всего подтвержденных случаев?
  • В каком штате больше всего смертей?

Набор данных нового вируса короны 2019 'covid_19_data.csv', используемый в этом проекте, содержит ежедневную информацию о количестве заболевших, смертей и выздоровлении от COVID-19. . Это данные временного ряда, показывающие, что количество обращений за любую заданную ‘ObservationDate’ является совокупным числом.

Взгляните на данные:

The shape of dataset:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 109382 entries, 0 to 109381
Data columns (total 8 columns):
SNo                109382 non-null int64
ObservationDate    109382 non-null object
Province/State     75709 non-null object
Country/Region     109382 non-null object
Last Update        109382 non-null object
Confirmed          109382 non-null float64
Deaths             109382 non-null float64
Recovered          109382 non-null float64
dtypes: float64(3), int64(1), object(4)
memory usage: 6.7+ MB

«Страна / регион» собраны в наборе данных:

df['Country/Region'].value_counts()
US                                  11776
Russia                               8837
Mainland China                       7314
Japan                                5417
Mexico                               3827
Colombia                             3738
India                                3636
Brazil                               3263
Ukraine                              2925
Peru                                 2917
Canada                               2730
Italy                                2687
...

Подмножество данных для хранения объектов для США только на 13.09.2020.

mask_date = df['ObservationDate']=='09/13/2020'
mask_country = df['Country/Region']=='US'
df = pd.read_csv('covid_19_data.csv')
df[mask_date & mask_country]

Создайте сценарий скрипки с Plotly, чтобы показать распределение числа смертей в 50 штатах Америки 13 сентября 2020 года.

import plotly.express as px
fig = px.violin(df[mask_date & mask_country], y="Deaths", box=True, points='all', title="Number of Deaths in the 50 states of America on 2020-09-13")
fig.show()

Как показано на графике, максимальное количество смертей составляет 33 023 000, а среднее - около 1140. Есть также три штата, в которых кумулятивная смертность на 13 сентября 2020 года составила около 15 000. Эти сущности считаются выбросами с точки зрения статистического распределения.

В каком штате больше всего смертей или больше всего подтвержденных случаев?

Основываясь на показанном выше распределении, давайте отследим состояния с «Смертью» больше или равным 6000.

mask_deaths_2 = df['Deaths'] >= 6000
COL_TO_PLOT = ['Country/Region','Province/State','ObservationDate','Deaths','Confirmed']
bar_plot_df = df[mask_date & mask_country & mask_deaths_2][COL_TO_PLOT]
bar_plot_df

Используйте гистограмму Сиборна для сравнения «Количество смертей и подтвержденных случаев в 10 ведущих штатах Америки (2020–09–13)»:

Какие выбросы выявлены на этом графике? Как показано на изображении выше, к 13 сентября 2020 года Калифорния имеет наибольшее количество подтвержденных случаев, а Нью-Йорк имеет наибольшее количество смертей.

В каком штате самый высокий уровень смертности?

Мое внимание привлекла печальная вещь: в Нью-Джерси очень много смертей, в то время как количество подтвержденных случаев невелико по сравнению с другими штатами. Это означает, что уровень смертности в Нью-Джерси намного выше, чем в других штатах. Давайте проверим это, вычислив ‘MortalityRate’ для 10 основных состояний:

bar_plot_df['MortalityRate'] = bar_plot_df['Deaths'] / bar_plot_df['Confirmed']
fig = px.bar(bar_plot_df, x='Province/State', y='MortalityRate', title = 'Highest Mortality Rate')
fig.show()

Чтобы копнуть глубже, давайте разберем набор данных для ведения записей с «09/09/2020» для 10 самых популярных штатов. Вычислите уровень смертности для каждого штата на каждый день. Затем примените Plotly, чтобы построить график тенденции уровня смертности.

COL_STATES = bar_plot_df['Province/State'].tolist()
mask_states = df['Province/State'].isin(COL_STATES)
mask_date_2 = df['ObservationDate'] >= '09/01/2020'
COL_TO_PLOT = ['Province/State','ObservationDate','Deaths','Confirmed']
scatter_plot_df = df[mask_date_2 & mask_states][COL_TO_PLOT]
scatter_plot_df['MortalityRate'] = scatter_plot_df['Deaths'] / scatter_plot_df['Confirmed']
import plotly.graph_objects as go
fig3 = go.Figure()
# Add traces
for STATE in COL_STATES:
    mask_state = scatter_plot_df['Province/State']==STATE
    fig3.add_trace(go.Scatter(x=scatter_plot_df.loc[mask_state, 'ObservationDate'], y=scatter_plot_df.loc[mask_state, 'MortalityRate'],mode='lines+markers', name=str(STATE)))
fig3.update_layout(title='Which state has the highest mortality rate? (mortality rate=num of Deaths/num of Confirmed) ',
                  yaxis_zeroline=False, xaxis_zeroline=False)
fig3.show()

Как показано на диаграмме разброса, Нью-Джерси находится наверху. К сожалению, из каждых 100 человек, пострадавших в Нью-Джерси, 8 из них скончались. ПОЧЕМУ ??? Это как-то связано с медицинской системой Нью-Джерси? Что-то не так с политикой правительства? У меня нет ответов. Но это удивительное наблюдение возникло после того, как мы обнаружили выбросы, которые могут направить людей к дальнейшему исследованию проблемы и поиску возможных решений.

Какая дата показывает самый большой дневной рост?

  • Сначала выберите «ObservationDate» между «01/09/2020» и «13/09/2020».
  • Во-вторых, оставьте только те организации, которые входят в 10 ведущих штатов Америки, а именно: ['Калифорния', 'Флорида', 'Джорджия', 'Иллинойс', 'Массачусетс', 'Мичиган', 'Нью-Джерси', 'Нью-Джерси', Йорк »,« Пенсильвания »,« Техас »].
  • В-третьих, напишите код Python для вычисления разницы между двумя последовательными датами в количестве смертей в 10 лучших штатах Америки.

Мы вычислили следующие дельта-данные:

Нарисуйте тепловую карту с числовыми значениями в каждой ячейке, чтобы визуализировать ежедневный рост смертности в 10 ведущих штатах Америки (2020–09–01 ~ 2020–09–13):

fig2, ax = plt.subplots(figsize=(18, 13))
fig2.subplots_adjust(top=.91)
plt.suptitle('Daily raise of deaths in top 10 states of America (2020-09-01~2020-09-13)', fontsize=24, fontweight='bold')
cbar_kws = {'orientation':"vertical", 'pad':0.12, 'aspect':50}
ax.set_ylabel("Y Label",fontsize=20)
for tick in ax.xaxis.get_major_ticks():
    tick.label.set_fontsize(14)
for tick in ax.yaxis.get_major_ticks():
    tick.label.set_fontsize(14)
g = sns.heatmap(all_delta_df, annot=True, fmt='d', linewidths=.3, ax=ax, cmap='RdPu', cbar_kws=cbar_kws);
g.set_xticklabels(g.get_xticklabels(), rotation = 30, fontsize = 14);

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

По необработанным данным мы убедились, что вычисленные дельта-данные верны:

the daily raise on Sep 11 = number of deaths on Sep 11 — the value on Sep 10 = 14227 — 13930 = 297

Как показано на тепловой карте, второе по величине дневное повышение наблюдается во Флориде 10 сентября, а третье - все еще во Флориде 9 сентября.

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

Как специалист по данным, который всегда старается быть рациональным, мое сердце упало во время работы над этим второстепенным проектом. За количеством смертей и заболевших стоит миллионы людей, пострадавших от пандемии COVID-19. Печаль о потерянных семьях, слезах и разбитых сердцах проистекает из этих тепловых карт, скрипичных сюжетов и гистограмм. Давайте закончим эту статью цитатой о надежде:

«Это тяжелые времена. Мир болит. Мы живем в страхе и забываем ходить с надеждой. Но надежда не забыла вас. Так что попроси его на ужин. Он, наверное, голоден и будет благодарен за приглашение. - Либба Брей

Продолжить 🤖: зарегистрируйтесь, чтобы узнать, как создавать и развертывать чат-ботов Dialogflow из моего курса Udemy:



Получите доступ к экспертному обзору - Подпишитесь на DDI Intel