|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "42119bcc97bee88254e381156d770f3c",
|
|
|
"translation_date": "2025-09-06T06:12:09+00:00",
|
|
|
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
|
|
|
"language_code": "ru"
|
|
|
}
|
|
|
-->
|
|
|
# Визуализация пропорций
|
|
|
|
|
|
| ](../../sketchnotes/11-Visualizing-Proportions.png)|
|
|
|
|:---:|
|
|
|
|Визуализация пропорций - _Скетчноут от [@nitya](https://twitter.com/nitya)_ |
|
|
|
|
|
|
В этом уроке вы будете использовать другой набор данных, связанный с природой, чтобы визуализировать пропорции, например, сколько различных видов грибов содержится в данном наборе данных о грибах. Давайте исследуем эти удивительные грибы, используя данные, полученные из Audubon, которые содержат информацию о 23 видах пластинчатых грибов из семейств Agaricus и Lepiota. Вы попробуете создать вкусные визуализации, такие как:
|
|
|
|
|
|
- Круговые диаграммы 🥧
|
|
|
- Кольцевые диаграммы 🍩
|
|
|
- Вафельные диаграммы 🧇
|
|
|
|
|
|
> 💡 Очень интересный проект [Charticulator](https://charticulator.com) от Microsoft Research предлагает бесплатный интерфейс для визуализации данных с помощью перетаскивания. В одном из их уроков также используется этот набор данных о грибах! Вы можете изучить данные и освоить библиотеку одновременно: [Урок Charticulator](https://charticulator.com/tutorials/tutorial4.html).
|
|
|
|
|
|
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ds/quiz/20)
|
|
|
|
|
|
## Узнайте больше о грибах 🍄
|
|
|
|
|
|
Грибы — это очень интересный объект для изучения. Давайте импортируем набор данных, чтобы изучить их:
|
|
|
|
|
|
```python
|
|
|
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 |
|
|
|
| --------- | --------- | ----------- | --------- | ------- | ------- | --------------- | ------------ | --------- | ---------- | ----------- | ---------- | ------------------------ | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
|
|
|
| Ядовитый | Выпуклая | Гладкая | Коричневая| Синяки | Резкий | Свободное | Плотное | Узкий | Черный | Утолщённая | Равная | Гладкая | Гладкая | Белая | Белая | Частичная | Белая | Один | Висячий | Черный | Разбросанная | Городская |
|
|
|
| Съедобный | Выпуклая | Гладкая | Жёлтая | Синяки | Миндаль | Свободное | Плотное | Широкий | Черный | Утолщённая | Клубень | Гладкая | Гладкая | Белая | Белая | Частичная | Белая | Один | Висячий | Коричневый | Многочисленная | Травянистая |
|
|
|
| Съедобный | Колокольчик | Гладкая | Белая | Синяки | Анис | Свободное | Плотное | Широкий | Коричневый | Утолщённая | Клубень | Гладкая | Гладкая | Белая | Белая | Частичная | Белая | Один | Висячий | Коричневый | Многочисленная | Луга |
|
|
|
| Ядовитый | Выпуклая | Чешуйчатая | Белая | Синяки | Резкий | Свободное | Плотное | Узкий | Коричневый | Утолщённая | Равная | Гладкая | Гладкая | Белая | Белая | Частичная | Белая | Один | Висячий | Черный | Разбросанная | Городская |
|
|
|
|
|
|
Сразу видно, что все данные представлены в текстовом формате. Чтобы использовать их в диаграмме, необходимо преобразовать данные. Большая часть данных представлена в виде объектов:
|
|
|
|
|
|
```python
|
|
|
print(mushrooms.select_dtypes(["object"]).columns)
|
|
|
```
|
|
|
|
|
|
Результат:
|
|
|
|
|
|
```output
|
|
|
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' в категорию:
|
|
|
|
|
|
```python
|
|
|
cols = mushrooms.select_dtypes(["object"]).columns
|
|
|
mushrooms[cols] = mushrooms[cols].astype('category')
|
|
|
```
|
|
|
|
|
|
```python
|
|
|
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 |
|
|
|
|
|
|
Если вы следуете порядку, представленному в этой таблице, чтобы создать метки категорий класса, вы можете построить круговую диаграмму:
|
|
|
|
|
|
## Круг!
|
|
|
|
|
|
```python
|
|
|
labels=['Edible','Poisonous']
|
|
|
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
|
|
|
plt.title('Edible?')
|
|
|
plt.show()
|
|
|
```
|
|
|
Вуаля, круговая диаграмма, показывающая пропорции данных в соответствии с этими двумя классами грибов. Очень важно правильно указать порядок меток, особенно здесь, поэтому обязательно проверьте порядок, в котором создается массив меток!
|
|
|
|
|
|

|
|
|
|
|
|
## Кольца!
|
|
|
|
|
|
Более интересной версией круговой диаграммы является кольцевая диаграмма, которая представляет собой круговую диаграмму с отверстием в центре. Давайте посмотрим на наши данные с помощью этого метода.
|
|
|
|
|
|
Посмотрите на различные места обитания грибов:
|
|
|
|
|
|
```python
|
|
|
habitat=mushrooms.groupby(['habitat']).count()
|
|
|
habitat
|
|
|
```
|
|
|
Здесь вы группируете данные по месту обитания. Их всего 7, поэтому используйте их в качестве меток для кольцевой диаграммы:
|
|
|
|
|
|
```python
|
|
|
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` на другое значение.
|
|
|
|
|
|
Кольцевые диаграммы можно настраивать различными способами, чтобы изменить метки. Метки, в частности, можно выделить для улучшения читаемости. Подробнее читайте в [документации](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut).
|
|
|
|
|
|
Теперь, когда вы знаете, как группировать данные и отображать их в виде круговой или кольцевой диаграммы, вы можете попробовать другие типы диаграмм. Попробуйте вафельную диаграмму, которая представляет собой другой способ визуализации количества.
|
|
|
|
|
|
## Вафли!
|
|
|
|
|
|
Диаграмма типа "вафля" — это другой способ визуализации количеств в виде двумерного массива квадратов. Попробуйте визуализировать различные количества цветов шляпок грибов в этом наборе данных. Для этого вам нужно установить вспомогательную библиотеку [PyWaffle](https://pypi.org/project/pywaffle/) и использовать Matplotlib:
|
|
|
|
|
|
```python
|
|
|
pip install pywaffle
|
|
|
```
|
|
|
|
|
|
Выберите сегмент данных для группировки:
|
|
|
|
|
|
```python
|
|
|
capcolor=mushrooms.groupby(['cap-color']).count()
|
|
|
capcolor
|
|
|
```
|
|
|
|
|
|
Создайте вафельную диаграмму, создав метки и затем сгруппировав данные:
|
|
|
|
|
|
```python
|
|
|
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](https://fontawesome.com/). Проведите эксперименты, чтобы создать ещё более интересную вафельную диаграмму, используя иконки вместо квадратов.
|
|
|
|
|
|
В этом уроке вы изучили три способа визуализации пропорций. Сначала нужно сгруппировать данные по категориям, а затем решить, какой способ отображения данных — круг, кольцо или вафля — подходит лучше всего. Все они "вкусные" и дают пользователю мгновенное представление о наборе данных.
|
|
|
|
|
|
## 🚀 Задание
|
|
|
|
|
|
Попробуйте воссоздать эти "вкусные" диаграммы в [Charticulator](https://charticulator.com).
|
|
|
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ds/quiz/21)
|
|
|
|
|
|
## Обзор и самостоятельное изучение
|
|
|
|
|
|
Иногда не очевидно, когда использовать круговую, кольцевую или вафельную диаграмму. Вот несколько статей для изучения этой темы:
|
|
|
|
|
|
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](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от ответственности**:
|
|
|
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода. |