Ранее я объяснял, как выполнить визуализацию данных с помощью Python. В этой статье будет показано, почему это важный шаг, когда вам нужно выполнить задачи по науке о данных.

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

Одним из самых известных примеров, демонстрирующих важность графического отображения данных, является квартет Анскомба.

Сегодня мы изучим этот набор данных с помощью Python!

Понимание квартета Анскомба

Anscombe’s Quartet — это набор из четырех наборов данных, созданных для того, чтобы подчеркнуть важность визуализации данных в статистическом анализе. Эти наборы данных были представлены статистиком Фрэнсисом Анскомбом в 1973 году и с тех пор стали классическим примером в области науки о данных.

Давайте кратко рассмотрим каждый из четырех наборов данных в квартете Анскомба:

Набор данных I:

  • x: [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5]
  • y: [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]

Этот набор данных демонстрирует относительно линейную зависимость между x и y.

Набор данных II:

  • x: [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5]
  • y: [9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74]

Подобно набору данных I, этот набор данных также показывает линейную зависимость, но с небольшой кривой.

Набор данных III:

  • x: [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5]
  • y: [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73]

Набор данных III имеет очевидный выброс, который существенно влияет на линейную регрессию.

Набор данных IV:

  • x: [8, 8, 8, 8, 8, 8, 8, 19, 8, 8, 8]
  • y: [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.50, 5.56, 7.91, 6.89]

Этот набор данных демонстрирует, как один выброс может полностью изменить линию линейной регрессии.

Изучение квартета Анскомба с помощью Python

Во-первых, мы можем загрузить Anscombe’s Quartet в Python с помощью следующего кода:

import pandas as pd
import matplotlib.pyplot as plt


def get_anscombe_quartet():
    return pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/anscombe.csv')


if __name__ == '__main__':
    anscombe = get_anscombe_quartet()

С помощью этого метода все 4 набора данных содержатся в одном наборе данных, поэтому после загрузки квартета Анскомба мы должны разделить его на 4 разных набора данных.

    dataset_1 = anscombe[anscombe['dataset'] == 'I']
    dataset_2 = anscombe[anscombe['dataset'] == 'II']
    dataset_3 = anscombe[anscombe['dataset'] == 'III']
    dataset_4 = anscombe[anscombe['dataset'] == 'IV']

    datasets = [dataset_1, dataset_2, dataset_3, dataset_4]
    dataset_names = ['Dataset I', 'Dataset II', 'Dataset III', 'Dataset IV']

Мы можем отобразить их:

    for dataset, name in zip(datasets, dataset_names):
        print(name)
        print(dataset)
        print()
Dataset I
   dataset     x      y
0        I  10.0   8.04
1        I   8.0   6.95
2        I  13.0   7.58
3        I   9.0   8.81
4        I  11.0   8.33
5        I  14.0   9.96
6        I   6.0   7.24
7        I   4.0   4.26
8        I  12.0  10.84
9        I   7.0   4.82
10       I   5.0   5.68

Dataset II
   dataset     x     y
11      II  10.0  9.14
12      II   8.0  8.14
13      II  13.0  8.74
14      II   9.0  8.77
15      II  11.0  9.26
16      II  14.0  8.10
17      II   6.0  6.13
18      II   4.0  3.10
19      II  12.0  9.13
20      II   7.0  7.26
21      II   5.0  4.74

Dataset III
   dataset     x      y
22     III  10.0   7.46
23     III   8.0   6.77
24     III  13.0  12.74
25     III   9.0   7.11
26     III  11.0   7.81
27     III  14.0   8.84
28     III   6.0   6.08
29     III   4.0   5.39
30     III  12.0   8.15
31     III   7.0   6.42
32     III   5.0   5.73

Dataset IV
   dataset     x      y
33      IV   8.0   6.58
34      IV   8.0   5.76
35      IV   8.0   7.71
36      IV   8.0   8.84
37      IV   8.0   8.47
38      IV   8.0   7.04
39      IV   8.0   5.25
40      IV  19.0  12.50
41      IV   8.0   5.56
42      IV   8.0   7.91
43      IV   8.0   6.89

Теперь давайте опишем их, и мы увидим нечто странное:

    for dataset, name in zip(datasets, dataset_names):
        print(name)
        print(dataset.describe())
        print()
Dataset I
               x          y
count  11.000000  11.000000
mean    9.000000   7.500909
std     3.316625   2.031568
min     4.000000   4.260000
25%     6.500000   6.315000
50%     9.000000   7.580000
75%    11.500000   8.570000
max    14.000000  10.840000

Dataset II
               x          y
count  11.000000  11.000000
mean    9.000000   7.500909
std     3.316625   2.031657
min     4.000000   3.100000
25%     6.500000   6.695000
50%     9.000000   8.140000
75%    11.500000   8.950000
max    14.000000   9.260000

Dataset III
               x          y
count  11.000000  11.000000
mean    9.000000   7.500000
std     3.316625   2.030424
min     4.000000   5.390000
25%     6.500000   6.250000
50%     9.000000   7.110000
75%    11.500000   7.980000
max    14.000000  12.740000

Dataset IV
               x          y
count  11.000000  11.000000
mean    9.000000   7.500909
std     3.316625   2.030579
min     8.000000   5.250000
25%     8.000000   6.170000
50%     8.000000   7.040000
75%     8.000000   8.190000
max    19.000000  12.500000

Как видите, каждый набор данных имеет одинаковое среднее значение и стандартное отклонение. Теперь мы можем визуализировать наборы данных:

    fig, axs = plt.subplots(2, 2, figsize=(10, 10))
    axs[0, 0].plot(dataset_1['x'], dataset_1['y'], 'o')
    axs[0, 0].set_title('Dataset I')
    axs[0, 1].plot(dataset_2['x'], dataset_2['y'], 'o')
    axs[0, 1].set_title('Dataset II')
    axs[1, 0].plot(dataset_3['x'], dataset_3['y'], 'o')
    axs[1, 0].set_title('Dataset III')
    axs[1, 1].plot(dataset_4['x'], dataset_4['y'], 'o')
    axs[1, 1].set_title('Dataset IV')
    plt.show()

Что Anscombe’s Quartet может рассказать нам о визуализации данных?

Anscombe’s Quartet подчеркивает ограничения, связанные с опорой исключительно на сводную статистику, и подчеркивает необходимость визуального исследования и графического представления данных.

Во-первых, он показывает, что сводные статистические данные могут вводить в заблуждение. Несмотря на то, что четыре набора данных в квартете Анскомба имеют идентичные средние значения, дисперсию, корреляцию и параметры линии линейной регрессии, они имеют разные закономерности. Это показывает, что сводная статистика сама по себе не может отразить полную картину данных.

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

Наконец, становятся очевидными выбросы и важные моменты. Действительно, Anscombe’s Quartet включает в себя наборы данных, в которых мы можем четко идентифицировать выбросы, визуализируя их. Эти необычные наблюдения выделяются, позволяя нам оценить их влияние на сводную статистику и регрессионные модели.

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

fig, axs = plt.subplots(2, 2, figsize=(10, 10))
    for dataset, name, ax in zip(datasets, dataset_names, axs.flatten()):
        ax.plot(dataset['x'], dataset['y'], 'o')
        m, b = np.polyfit(dataset['x'], dataset['y'], 1)
        ax.plot(dataset['x'], m * dataset['x'] + b)
        ax.set_title(name)
    plt.show()

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

Заключительное примечание

Я надеюсь, что эта статья показала вам, насколько важно визуализировать ваши данные для ваших задач по науке о данных.

Хотя иногда это может показаться утомительным и повторяющимся, вы должны заставить себя это сделать. Это должно войти в привычку!

Чтобы ознакомиться с другими историями из этой серии, нажмите ниже!



Чтобы узнать больше о моих историях о Python, нажмите здесь! Вы также можете получить доступ ко всему моему контенту, проверив эту страницу.

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

Если вы еще не подписаны на Medium и хотите поддержать меня или получить доступ ко всем моим историям, вы можете использовать мою ссылку: