Постройте данные о 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. Печаль о потерянных семьях, слезах и разбитых сердцах проистекает из этих тепловых карт, скрипичных сюжетов и гистограмм. Давайте закончим эту статью цитатой о надежде:
«Это тяжелые времена. Мир болит. Мы живем в страхе и забываем ходить с надеждой. Но надежда не забыла вас. Так что попроси его на ужин. Он, наверное, голоден и будет благодарен за приглашение. - Либба Брей