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.

206 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
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"
}
-->
# Визуализация пропорций
|![ Скетчноут от [(@sketchthedocs)](https://sketchthedocs.dev) ](../../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()
```
Вуаля, круговая диаграмма, показывающая пропорции данных в соответствии с этими двумя классами грибов. Очень важно правильно указать порядок меток, особенно здесь, поэтому обязательно проверьте порядок, в котором создается массив меток!
![круговая диаграмма](../../../../3-Data-Visualization/11-visualization-proportions/images/pie1-wb.png)
## Кольца!
Более интересной версией круговой диаграммы является кольцевая диаграмма, которая представляет собой круговую диаграмму с отверстием в центре. Давайте посмотрим на наши данные с помощью этого метода.
Посмотрите на различные места обитания грибов:
```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()
```
![кольцевая диаграмма](../../../../3-Data-Visualization/11-visualization-proportions/images/donut-wb.png)
Этот код рисует диаграмму и центральный круг, а затем добавляет этот круг в диаграмму. Измените ширину центрального круга, изменив `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"],
)
```
Используя вафельную диаграмму, вы можете наглядно увидеть пропорции цветов шляпок грибов в этом наборе данных. Интересно, что есть много грибов с зелёными шляпками!
![вафельная диаграмма](../../../../3-Data-Visualization/11-visualization-proportions/images/waffle.png)
✅ 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). Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.