# Визуализация количеств |![Скетчноут от [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/09-Visualizing-Quantities.png)| |:---:| | Визуализация количеств - _Скетчноут от [@nitya](https://twitter.com/nitya)_ | В этом уроке вы изучите, как использовать одну из множества доступных библиотек Python для создания интересных визуализаций, связанных с концепцией количества. Используя очищенный набор данных о птицах Миннесоты, вы сможете узнать много интересного о местной фауне. ## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ds/quiz/16) ## Наблюдение за размахом крыльев с помощью Matplotlib Отличной библиотекой для создания как простых, так и сложных графиков и диаграмм различных типов является [Matplotlib](https://matplotlib.org/stable/index.html). В общем, процесс построения графиков с использованием этих библиотек включает в себя определение частей вашего датафрейма, которые вы хотите использовать, выполнение необходимых преобразований данных, назначение значений для осей x и y, выбор типа графика и его отображение. Matplotlib предлагает широкий выбор визуализаций, но в этом уроке мы сосредоточимся на тех, которые наиболее подходят для визуализации количеств: линейные графики, точечные диаграммы и столбчатые диаграммы. > ✅ Используйте наиболее подходящий тип графика в зависимости от структуры ваших данных и истории, которую вы хотите рассказать. > - Для анализа трендов во времени: линейный график > - Для сравнения значений: столбчатая диаграмма, колонка, круговая диаграмма, точечная диаграмма > - Для отображения частей целого: круговая диаграмма > - Для отображения распределения данных: точечная диаграмма, столбчатая диаграмма > - Для отображения трендов: линейный график, колонка > - Для отображения взаимосвязей между значениями: линейный график, точечная диаграмма, пузырьковая диаграмма Если у вас есть набор данных и вам нужно узнать, сколько определенного элемента в нем содержится, одной из первых задач будет проверка его значений. ✅ Существуют отличные "шпаргалки" по Matplotlib, доступные [здесь](https://matplotlib.org/cheatsheets/cheatsheets.pdf). ## Построение линейного графика для значений размаха крыльев птиц Откройте файл `notebook.ipynb` в корневой папке этого урока и добавьте ячейку. > Примечание: данные хранятся в корне этого репозитория в папке `/data`. ```python 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 | Начнем с построения графика для некоторых числовых данных, используя базовый линейный график. Допустим, вы хотите увидеть максимальный размах крыльев этих интересных птиц. ```python wingspan = birds['MaxWingspan'] wingspan.plot() ``` ![Макс. размах крыльев](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-02.png) Что вы замечаете сразу? Кажется, есть как минимум один выброс — это впечатляющий размах крыльев! Размах крыльев в 2300 сантиметров равен 23 метрам — неужели в Миннесоте летают птеродактили? Давайте разберемся. Хотя вы могли бы быстро отсортировать данные в Excel, чтобы найти эти выбросы, которые, вероятно, являются опечатками, продолжим процесс визуализации, работая с графиком. Добавьте подписи к оси x, чтобы показать, о каких птицах идет речь: ``` plt.title('Max Wingspan in Centimeters') plt.ylabel('Wingspan (CM)') plt.xlabel('Birds') plt.xticks(rotation=45) x = birds['Name'] y = birds['MaxWingspan'] plt.plot(x, y) plt.show() ``` ![Размах крыльев с подписями](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-labels-02.png) Даже с поворотом подписей на 45 градусов их слишком много, чтобы прочитать. Попробуем другой подход: подпишем только выбросы и разместим подписи внутри графика. Вы можете использовать точечную диаграмму, чтобы освободить место для подписей: ```python plt.title('Max Wingspan in Centimeters') plt.ylabel('Wingspan (CM)') plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False) for i in range(len(birds)): x = birds['Name'][i] y = birds['MaxWingspan'][i] plt.plot(x, y, 'bo') if birds['MaxWingspan'][i] > 500: plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12) plt.show() ``` Что здесь происходит? Вы использовали `tick_params`, чтобы скрыть нижние подписи, а затем создали цикл по вашему набору данных о птицах. Построив график с маленькими круглыми синими точками, используя `bo`, вы проверили, есть ли у птицы максимальный размах крыльев более 500, и отобразили ее название рядом с точкой, если это так. Вы немного сместили подписи по оси y (`y * (1 - 0.05)`) и использовали название птицы в качестве подписи. Что вы обнаружили? ![Выбросы](../../../../3-Data-Visualization/09-visualization-quantities/images/labeled-wingspan-02.png) ## Фильтрация данных Оба — Белоголовый орлан и Степной сокол, хотя, вероятно, очень крупные птицы, — кажутся ошибочно помеченными, с добавленным лишним `0` в их максимальном размахе крыльев. Вряд ли вы встретите Белоголового орлана с размахом крыльев 25 метров, но если это произойдет, пожалуйста, дайте нам знать! Давайте создадим новый датафрейм без этих двух выбросов: ```python plt.title('Max Wingspan in Centimeters') plt.ylabel('Wingspan (CM)') plt.xlabel('Birds') plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False) for i in range(len(birds)): x = birds['Name'][i] y = birds['MaxWingspan'][i] if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']: plt.plot(x, y, 'bo') plt.show() ``` Исключив выбросы, ваши данные стали более согласованными и понятными. ![Точечная диаграмма размахов крыльев](../../../../3-Data-Visualization/09-visualization-quantities/images/scatterplot-wingspan-02.png) Теперь, когда у нас есть более чистый набор данных, по крайней мере в отношении размаха крыльев, давайте узнаем больше об этих птицах. Хотя линейные и точечные диаграммы могут отображать информацию о значениях данных и их распределении, мы хотим подумать о значениях, содержащихся в этом наборе данных. Вы могли бы создать визуализации, чтобы ответить на следующие вопросы о количестве: > Сколько категорий птиц существует и каково их количество? > Сколько птиц вымерло, находится под угрозой исчезновения, редких или обычных? > Сколько существует различных родов и отрядов в терминологии Линнея? ## Изучение столбчатых диаграмм Столбчатые диаграммы удобны, когда нужно показать группировку данных. Давайте изучим категории птиц, представленные в этом наборе данных, чтобы увидеть, какая из них наиболее распространена по количеству. В файле ноутбука создайте базовую столбчатую диаграмму. ✅ Обратите внимание, что вы можете либо исключить двух птиц-выбросов, которых мы определили в предыдущем разделе, либо исправить опечатку в их размахе крыльев, либо оставить их для этих упражнений, которые не зависят от значений размаха крыльев. Если вы хотите создать столбчатую диаграмму, вы можете выбрать данные, на которых хотите сосредоточиться. Столбчатые диаграммы можно создавать из необработанных данных: ```python birds.plot(x='Category', kind='bar', stacked=True, title='Birds of Minnesota') ``` ![Все данные в виде столбчатой диаграммы](../../../../3-Data-Visualization/09-visualization-quantities/images/full-data-bar-02.png) Эта столбчатая диаграмма, однако, нечитаема, так как данных слишком много и они не сгруппированы. Вам нужно выбрать только те данные, которые вы хотите отобразить, поэтому давайте посмотрим на длину птиц в зависимости от их категории. Отфильтруйте данные, чтобы включить только категорию птиц. ✅ Обратите внимание, что вы используете Pandas для управления данными, а затем позволяете Matplotlib строить диаграмму. Поскольку категорий много, вы можете отобразить эту диаграмму вертикально и настроить ее высоту, чтобы учесть все данные: ```python category_count = birds.value_counts(birds['Category'].values, sort=True) plt.rcParams['figure.figsize'] = [6, 12] category_count.plot.barh() ``` ![Категории и длина](../../../../3-Data-Visualization/09-visualization-quantities/images/category-counts-02.png) Эта столбчатая диаграмма дает хорошее представление о количестве птиц в каждой категории. С первого взгляда видно, что наибольшее количество птиц в этом регионе относится к категории Утки/Гуси/Водоплавающие. Миннесота — это "земля 10,000 озер", так что это неудивительно! ✅ Попробуйте подсчитать что-нибудь еще в этом наборе данных. Удивило ли вас что-нибудь? ## Сравнение данных Вы можете попробовать разные сравнения сгруппированных данных, создавая новые оси. Попробуйте сравнить MaxLength птицы в зависимости от ее категории: ```python maxlength = birds['MaxLength'] plt.barh(y=birds['Category'], width=maxlength) plt.rcParams['figure.figsize'] = [6, 12] plt.show() ``` ![Сравнение данных](../../../../3-Data-Visualization/09-visualization-quantities/images/category-length-02.png) Здесь ничего удивительного: колибри имеют наименьшую максимальную длину по сравнению с пеликанами или гусями. Хорошо, когда данные логически понятны! Вы можете создавать более интересные визуализации столбчатых диаграмм, накладывая данные друг на друга. Давайте наложим минимальную и максимальную длину на каждую категорию птиц: ```python minLength = birds['MinLength'] maxLength = birds['MaxLength'] category = birds['Category'] plt.barh(category, maxLength) plt.barh(category, minLength) plt.show() ``` На этом графике вы можете увидеть диапазон минимальной и максимальной длины для каждой категории птиц. Можно с уверенностью сказать, что, исходя из этих данных, чем больше птица, тем больше диапазон ее длины. Удивительно! ![Наложенные значения](../../../../3-Data-Visualization/09-visualization-quantities/images/superimposed-02.png) ## 🚀 Задание Этот набор данных о птицах предлагает множество информации о различных типах птиц в определенной экосистеме. Поискать в интернете другие наборы данных, связанные с птицами. Попрактикуйтесь в создании графиков и диаграмм, чтобы узнать факты, о которых вы не подозревали. ## [Тест после лекции](https://ff-quizzes.netlify.app/en/ds/quiz/17) ## Обзор и самостоятельное изучение Этот первый урок дал вам информацию о том, как использовать Matplotlib для визуализации количеств. Проведите исследование других способов работы с наборами данных для визуализации. [Plotly](https://github.com/plotly/plotly.py) — это инструмент, который мы не будем рассматривать в этих уроках, поэтому посмотрите, что он может предложить. ## Задание [Линии, точки и столбцы](assignment.md) --- **Отказ от ответственности**: Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.