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.

16 KiB

Визуализация пропорций

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

В этом уроке вы будете использовать другой набор данных, связанный с природой, чтобы визуализировать пропорции, например, сколько различных видов грибов содержится в данном наборе данных о грибах. Давайте исследуем эти удивительные грибы, используя данные, полученные из Audubon, которые содержат информацию о 23 видах пластинчатых грибов из семейств Agaricus и Lepiota. Вы попробуете создать вкусные визуализации, такие как:

  • Круговые диаграммы 🥧
  • Кольцевые диаграммы 🍩
  • Вафельные диаграммы 🧇

💡 Очень интересный проект Charticulator от Microsoft Research предлагает бесплатный интерфейс для визуализации данных с помощью перетаскивания. В одном из их уроков также используется этот набор данных о грибах! Вы можете изучить данные и освоить библиотеку одновременно: Урок Charticulator.

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

Узнайте больше о грибах 🍄

Грибы — это очень интересный объект для изучения. Давайте импортируем набор данных, чтобы изучить их:

import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('../../data/mushrooms.csv')
mushrooms.head()

Выводится таблица с отличными данными для анализа:

class cap-shape cap-surface cap-color bruises odor gill-attachment gill-spacing gill-size gill-color stalk-shape stalk-root stalk-surface-above-ring stalk-surface-below-ring stalk-color-above-ring stalk-color-below-ring veil-type veil-color ring-number ring-type spore-print-color population habitat
Ядовитый Выпуклая Гладкая Коричневая Синяки Резкий Свободное Плотное Узкий Черный Утолщённая Равная Гладкая Гладкая Белая Белая Частичная Белая Один Висячий Черный Разбросанная Городская
Съедобный Выпуклая Гладкая Жёлтая Синяки Миндаль Свободное Плотное Широкий Черный Утолщённая Клубень Гладкая Гладкая Белая Белая Частичная Белая Один Висячий Коричневый Многочисленная Травянистая
Съедобный Колокольчик Гладкая Белая Синяки Анис Свободное Плотное Широкий Коричневый Утолщённая Клубень Гладкая Гладкая Белая Белая Частичная Белая Один Висячий Коричневый Многочисленная Луга
Ядовитый Выпуклая Чешуйчатая Белая Синяки Резкий Свободное Плотное Узкий Коричневый Утолщённая Равная Гладкая Гладкая Белая Белая Частичная Белая Один Висячий Черный Разбросанная Городская

Сразу видно, что все данные представлены в текстовом формате. Чтобы использовать их в диаграмме, необходимо преобразовать данные. Большая часть данных представлена в виде объектов:

print(mushrooms.select_dtypes(["object"]).columns)

Результат:

Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
       'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
       'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
       'stalk-surface-below-ring', 'stalk-color-above-ring',
       'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
       'ring-type', 'spore-print-color', 'population', 'habitat'],
      dtype='object')

Возьмите эти данные и преобразуйте столбец 'class' в категорию:

cols = mushrooms.select_dtypes(["object"]).columns
mushrooms[cols] = mushrooms[cols].astype('category')
edibleclass=mushrooms.groupby(['class']).count()
edibleclass

Теперь, если вы выведете данные о грибах, вы увидите, что они сгруппированы по категориям в зависимости от класса (ядовитые/съедобные):

cap-shape cap-surface cap-color bruises odor gill-attachment gill-spacing gill-size gill-color stalk-shape ... stalk-surface-below-ring stalk-color-above-ring stalk-color-below-ring veil-type veil-color ring-number ring-type spore-print-color population habitat
class
Съедобный 4208 4208 4208 4208 4208 4208 4208 4208 4208 4208 ... 4208 4208 4208 4208 4208 4208 4208 4208 4208 4208
Ядовитый 3916 3916 3916 3916 3916 3916 3916 3916 3916 3916 ... 3916 3916 3916 3916 3916 3916 3916 3916 3916 3916

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

Круг!

labels=['Edible','Poisonous']
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()

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

круговая диаграмма

Кольца!

Более интересной версией круговой диаграммы является кольцевая диаграмма, которая представляет собой круговую диаграмму с отверстием в центре. Давайте посмотрим на наши данные с помощью этого метода.

Посмотрите на различные места обитания грибов:

habitat=mushrooms.groupby(['habitat']).count()
habitat

Здесь вы группируете данные по месту обитания. Их всего 7, поэтому используйте их в качестве меток для кольцевой диаграммы:

labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']

plt.pie(habitat['class'], labels=labels,
        autopct='%1.1f%%', pctdistance=0.85)
  
center_circle = plt.Circle((0, 0), 0.40, fc='white')
fig = plt.gcf()

fig.gca().add_artist(center_circle)
  
plt.title('Mushroom Habitats')
  
plt.show()

кольцевая диаграмма

Этот код рисует диаграмму и центральный круг, а затем добавляет этот круг в диаграмму. Измените ширину центрального круга, изменив 0.40 на другое значение.

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

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

Вафли!

Диаграмма типа "вафля" — это другой способ визуализации количеств в виде двумерного массива квадратов. Попробуйте визуализировать различные количества цветов шляпок грибов в этом наборе данных. Для этого вам нужно установить вспомогательную библиотеку PyWaffle и использовать Matplotlib:

pip install pywaffle

Выберите сегмент данных для группировки:

capcolor=mushrooms.groupby(['cap-color']).count()
capcolor

Создайте вафельную диаграмму, создав метки и затем сгруппировав данные:

import pandas as pd
import matplotlib.pyplot as plt
from pywaffle import Waffle
  
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
    'amount': capcolor['class']
     }
  
df = pd.DataFrame(data)
  
fig = plt.figure(
    FigureClass = Waffle,
    rows = 100,
    values = df.amount,
    labels = list(df.color),
    figsize = (30,30),
    colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
)

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

вафельная диаграмма

Pywaffle поддерживает использование иконок в диаграммах, которые могут быть любыми иконками из Font Awesome. Проведите эксперименты, чтобы создать ещё более интересную вафельную диаграмму, используя иконки вместо квадратов.

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

🚀 Задание

Попробуйте воссоздать эти "вкусные" диаграммы в Charticulator.

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

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

Иногда не очевидно, когда использовать круговую, кольцевую или вафельную диаграмму. Вот несколько статей для изучения этой темы:

https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart

https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce

https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm

https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402

Проведите исследование, чтобы найти больше информации об этом сложном выборе.

Задание

Попробуйте в Excel


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