Ранее я объяснял, как выполнить визуализацию данных с помощью 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 и хотите поддержать меня или получить доступ ко всем моим историям, вы можете использовать мою ссылку: