You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/ru/3-Data-Visualization/10-visualization-distributions
leestott 9d4c123295
🌐 Update translations via Co-op Translator
1 year ago
..
solution 🌐 Update translations via Co-op Translator 1 year ago
README.md 🌐 Update translations via Co-op Translator 1 year ago
assignment.md 🌐 Update translations via Co-op Translator 1 year ago
notebook.ipynb 🌐 Update translations via Co-op Translator 1 year ago

README.md

Визуализация распределений

Скетчноут от (@sketchthedocs)
Визуализация распределений - Скетчноут от @nitya

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

Тест перед лекцией

Исследуем набор данных о птицах

Еще один способ изучить данные — это посмотреть на их распределение, то есть на то, как данные организованы вдоль оси. Например, вы можете захотеть узнать об общем распределении максимального размаха крыльев или максимальной массы тела птиц Миннесоты в этом наборе данных.

Давайте узнаем несколько фактов о распределении данных в этом наборе. В файле notebook.ipynb, который находится в корневой папке этого урока, импортируйте Pandas, Matplotlib и ваш набор данных:

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
Название Научное название Категория Отряд Семейство Род Статус сохранности МинДлина МаксДлина МинМассаТела МаксМассаТела МинРазмахКрыльев МаксРазмахКрыльев
0 Чернобрюхий свистун Dendrocygna autumnalis Утки/Гуси/Водоплавающие Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Рыжий свистун Dendrocygna bicolor Утки/Гуси/Водоплавающие Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Белый гусь Anser caerulescens Утки/Гуси/Водоплавающие Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Гусь Росса Anser rossii Утки/Гуси/Водоплавающие Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Большой белолобый гусь Anser albifrons Утки/Гуси/Водоплавающие Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

В общем, вы можете быстро посмотреть, как распределены данные, используя диаграмму рассеяния, как мы делали в предыдущем уроке:

birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))

plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')

plt.show()

макс длина по отрядам

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

Работа с гистограммами

Matplotlib предлагает отличные способы визуализации распределения данных с помощью гистограмм. Этот тип диаграммы похож на столбчатую диаграмму, где распределение можно увидеть через подъем и спад столбцов. Чтобы построить гистограмму, вам нужны числовые данные. Для создания гистограммы вы можете построить диаграмму, указав тип как 'hist' для гистограммы. Эта диаграмма показывает распределение MaxBodyMass для всего диапазона числовых данных набора. Разделяя массив данных на более мелкие интервалы (bins), она отображает распределение значений данных:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()

распределение по всему набору данных

Как вы видите, большинство из 400+ птиц в этом наборе данных имеют Max Body Mass менее 2000. Получите больше информации о данных, изменив параметр bins на большее число, например, 30:

birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()

распределение с большим количеством интервалов

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

Отфильтруйте данные, чтобы оставить только тех птиц, чья масса тела меньше 60, и покажите 40 bins:

filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]      
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()     

фильтрованная гистограмма

Попробуйте другие фильтры и точки данных. Чтобы увидеть полное распределение данных, уберите фильтр ['MaxBodyMass'], чтобы показать распределения с метками.

Гистограмма также предлагает интересные возможности для добавления цвета и меток:

Создайте 2D-гистограмму, чтобы сравнить взаимосвязь между двумя распределениями. Давайте сравним MaxBodyMass и MaxLength. Matplotlib предлагает встроенный способ показать сходимость с использованием более ярких цветов:

x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']

fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)

Кажется, есть ожидаемая корреляция между этими двумя элементами вдоль ожидаемой оси, с одной особенно сильной точкой сходимости:

2D диаграмма

Гистограммы хорошо работают с числовыми данными. А что, если нужно увидеть распределения по текстовым данным?

Исследуем набор данных для распределений по текстовым данным

Этот набор данных также содержит полезную информацию о категории птиц, их роде, виде, семействе, а также о статусе сохранности. Давайте изучим информацию о статусе сохранности. Каково распределение птиц по их статусу сохранности?

В наборе данных используются несколько аббревиатур для описания статуса сохранности. Эти аббревиатуры взяты из Красного списка МСОП, организации, которая каталогизирует статус видов.

  • CR: Находящиеся на грани исчезновения
  • EN: Исчезающие
  • EX: Вымершие
  • LC: Находящиеся под наименьшей угрозой
  • NT: Близкие к уязвимому положению
  • VU: Уязвимые

Эти значения являются текстовыми, поэтому вам нужно преобразовать их, чтобы создать гистограмму. Используя DataFrame filteredBirds, отобразите его статус сохранности вместе с минимальным размахом крыльев. Что вы видите?

x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']

kwargs = dict(alpha=0.5, bins=20)

plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')

plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();

размах крыльев и статус сохранности

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

Плотностные графики

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

Чтобы работать с плотностными графиками, ознакомьтесь с новой библиотекой для построения графиков, Seaborn.

Загрузите Seaborn и попробуйте базовый плотностный график:

import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()

Плотностный график

Вы можете увидеть, как график повторяет предыдущий для данных о минимальном размахе крыльев; он просто немного более плавный. Согласно документации Seaborn, "По сравнению с гистограммой, KDE может создавать график, который менее загроможден и более интерпретируем, особенно при отображении нескольких распределений. Однако он может вносить искажения, если исходное распределение ограничено или не является плавным. Как и в случае с гистограммой, качество представления также зависит от выбора хороших параметров сглаживания." источник Другими словами, выбросы, как всегда, могут негативно повлиять на ваши графики.

Если вы хотите пересмотреть ту "зубчатую" линию MaxBodyMass на втором графике, вы можете сгладить ее, воссоздав ее этим методом:

sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()

сглаженная линия массы тела

Если вы хотите получить плавную, но не слишком сглаженную линию, измените параметр bw_adjust:

sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()

менее сглаженная линия массы тела

Ознакомьтесь с параметрами, доступными для этого типа графика, и поэкспериментируйте!

Этот тип графика предлагает наглядные и объясняющие визуализации. Например, с помощью нескольких строк кода вы можете показать плотность максимальной массы тела по отрядам птиц:

sns.kdeplot(
   data=filteredBirds, x="MaxBodyMass", hue="Order",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)

масса тела по отрядам

Вы также можете отобразить плотность нескольких переменных на одном графике. Сравните MaxLength и MinLength птицы в зависимости от их статуса сохранности:

sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")

несколько плотностей, наложенных друг на друга

Возможно, стоит исследовать, имеет ли значение кластер "уязвимых" птиц в зависимости от их длины.

🚀 Задание

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

Тест после лекции

Обзор и самостоятельное изучение

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

Задание

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


Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.