|
3 weeks ago | |
---|---|---|
.. | ||
README.md | 3 weeks ago | |
assignment.md | 3 weeks ago |
README.md
Візуалізація кількісних даних
![]() |
---|
Візуалізація кількісних даних - Скетчноут від @nitya |
У цьому уроці ви дізнаєтеся, як використовувати деякі з багатьох доступних бібліотек R-пакетів для створення цікавих візуалізацій, пов'язаних із концепцією кількості. Використовуючи очищений набір даних про птахів Міннесоти, ви можете дізнатися багато цікавих фактів про місцеву дику природу.
Тест перед лекцією
Спостереження за розмахом крил за допомогою ggplot2
Відмінною бібліотекою для створення як простих, так і складних графіків і діаграм різних типів є ggplot2. Загалом, процес побудови графіків за допомогою цих бібліотек включає визначення частин вашого датафрейму, які ви хочете використати, виконання необхідних трансформацій даних, призначення значень осей x та y, вибір типу графіка та його відображення.
ggplot2
— це система для декларативного створення графіків, заснована на "Граматиці графіки". Граматика графіки — це загальна схема візуалізації даних, яка розбиває графіки на семантичні компоненти, такі як шкали та шари. Іншими словами, простота створення графіків для одновимірних або багатовимірних даних із мінімальною кількістю коду робить ggplot2
найпопулярнішим пакетом для візуалізації в R. Користувач вказує ggplot2
, як зіставити змінні з естетикою, які графічні примітиви використовувати, а ggplot2
виконує решту.
✅ Графік = Дані + Естетика + Геометрія
- Дані стосуються набору даних
- Естетика вказує змінні для вивчення (змінні x та y)
- Геометрія стосується типу графіка (лінійний графік, стовпчаста діаграма тощо)
Виберіть найкращу геометрію (тип графіка) відповідно до ваших даних і історії, яку ви хочете розповісти через графік.
- Для аналізу трендів: лінійний графік, стовпчаста діаграма
- Для порівняння значень: стовпчаста діаграма, кругова діаграма, точкова діаграма
- Для показу, як частини співвідносяться з цілим: кругова діаграма
- Для показу розподілу даних: точкова діаграма, стовпчаста діаграма
- Для показу взаємозв’язків між значеннями: лінійний графік, точкова діаграма, бульбашкова діаграма
✅ Ви також можете переглянути цей описовий шпаргалку для ggplot2.
Побудова лінійного графіка для значень розмаху крил птахів
Відкрийте консоль R і імпортуйте набір даних.
Примітка: Набір даних зберігається в корені цього репозиторію в папці
/data
.
Імпортуємо набір даних і переглянемо його перші 5 рядків.
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
Перші рядки даних містять суміш тексту та чисел:
Назва | НауковаНазва | Категорія | Ряд | Родина | Рід | СтатусЗбереження | МінДовжина | МаксДовжина | МінМасаТіла | МаксМасаТіла | МінРозмахКрил | МаксРозмахКрил | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Почнемо з побудови базового лінійного графіка для деяких числових даних. Припустимо, ви хочете побачити максимальний розмах крил цих цікавих птахів.
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
Тут ви встановлюєте пакет ggplot2
, а потім імпортуєте його в робоче середовище за допомогою команди library("ggplot2")
. Для побудови будь-якого графіка в ggplot використовується функція ggplot()
, і ви вказуєте набір даних, змінні x та y як атрибути. У цьому випадку ми використовуємо функцію geom_line()
, оскільки хочемо побудувати лінійний графік.
Що ви помічаєте одразу? Здається, є принаймні один викид — це досить великий розмах крил! Розмах крил понад 2000 сантиметрів дорівнює більше ніж 20 метрам — чи не літають у Міннесоті птеродактилі? Давайте дослідимо.
Хоча ви могли б швидко відсортувати дані в Excel, щоб знайти ці викиди, які, ймовірно, є помилками, продовжуйте процес візуалізації, працюючи безпосередньо з графіком.
Додайте підписи до осі x, щоб показати, про яких птахів йдеться:
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust=1))+
xlab("Birds") +
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters")
Ми вказуємо кут у theme
і задаємо підписи осей x та y у xlab()
та ylab()
відповідно. ggtitle()
задає назву графіку.
Навіть із поворотом підписів на 45 градусів їх занадто багато, щоб прочитати. Спробуємо іншу стратегію: підписати лише ті викиди та розмістити підписи всередині графіка. Ви можете використати точкову діаграму, щоб звільнити більше місця для підписів:
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters") +
Що тут відбувається? Ви використали функцію geom_point()
для побудови точкових діаграм. Завдяки цьому ви додали підписи для птахів із MaxWingspan > 500
і також приховали підписи на осі x, щоб зменшити захаращеність графіка.
Що ви виявляєте?
Фільтрація даних
І білоголовий орлан, і прерієвий сокіл, хоча, ймовірно, дуже великі птахи, здається, мають помилкові дані, з додатковим нулем у їхньому максимальному розмаху крил. Малоймовірно, що ви зустрінете білоголового орлана з розмахом крил 25 метрів, але якщо так, будь ласка, повідомте нам! Давайте створимо новий датафрейм без цих двох викидів:
birds_filtered <- subset(birds, MaxWingspan < 500)
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
ylab("Wingspan (CM)") +
xlab("Birds") +
ggtitle("Max Wingspan in Centimeters") +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
Ми створили новий датафрейм birds_filtered
, а потім побудували точкову діаграму. Відфільтрувавши викиди, ваші дані тепер більш узгоджені та зрозумілі.
Тепер, коли ми маємо очищений набір даних принаймні щодо розмаху крил, давайте дізнаємося більше про цих птахів.
Хоча лінійні та точкові графіки можуть відображати інформацію про значення даних та їх розподіл, ми хочемо подумати про значення, властиві цьому набору даних. Ви могли б створити візуалізації, щоб відповісти на такі питання про кількість:
Скільки категорій птахів існує і яка їх кількість?
Скільки птахів є вимерлими, під загрозою зникнення, рідкісними чи звичайними?
Скільки є різних родів і рядів за термінологією Ліннея?
Дослідження стовпчастих діаграм
Стовпчасті діаграми є практичними, коли потрібно показати групування даних. Давайте дослідимо категорії птахів, які є в цьому наборі даних, щоб побачити, яка з них є найпоширенішою за кількістю.
Створимо стовпчасту діаграму на основі відфільтрованих даних.
install.packages("dplyr")
install.packages("tidyverse")
library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
library(tidyverse)
birds_filtered %>% group_by(Category) %>%
summarise(n=n(),
MinLength = mean(MinLength),
MaxLength = mean(MaxLength),
MinBodyMass = mean(MinBodyMass),
MaxBodyMass = mean(MaxBodyMass),
MinWingspan=mean(MinWingspan),
MaxWingspan=mean(MaxWingspan)) %>%
gather("key", "value", - c(Category, n)) %>%
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
xlab("Category")+ggtitle("Birds of Minnesota")
У наступному фрагменті ми встановлюємо пакети dplyr та lubridate, щоб допомогти маніпулювати та групувати дані для побудови складеної стовпчастої діаграми. Спочатку ви групуєте дані за Category
птахів, а потім підсумовуєте стовпці MinLength
, MaxLength
, MinBodyMass
, MaxBodyMass
, MinWingspan
, MaxWingspan
. Потім будуєте стовпчасту діаграму за допомогою пакета ggplot2
, вказуючи кольори для різних категорій і підписи.
Ця стовпчаста діаграма, однак, є нечитаємою через надто багато негрупованих даних. Вам потрібно вибрати лише ті дані, які ви хочете відобразити, тому давайте подивимося на довжину птахів залежно від їхньої категорії.
Відфільтруйте ваші дані, щоб включити лише категорію птахів.
Оскільки категорій багато, ви можете відобразити цю діаграму вертикально та налаштувати її висоту, щоб врахувати всі дані:
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
Спочатку ви рахуєте унікальні значення в стовпці Category
, а потім сортуєте їх у новий датафрейм birds_count
. Ці відсортовані дані потім враховуються на тому ж рівні, щоб вони були відображені у відсортованому вигляді. Використовуючи ggplot2
, ви потім будуєте дані у вигляді стовпчастої діаграми. coord_flip()
відображає горизонтальні стовпці.
Ця стовпчаста діаграма дає гарний огляд кількості птахів у кожній категорії. Одним поглядом ви бачите, що найбільша кількість птахів у цьому регіоні належить до категорії Качки/Гуси/Водоплавні. Міннесота — це "країна 10 000 озер", тому це не дивно!
✅ Спробуйте інші підрахунки в цьому наборі даних. Чи щось вас здивувало?
Порівняння даних
Ви можете спробувати різні порівняння згрупованих даних, створюючи нові осі. Спробуйте порівняти MaxLength птаха залежно від його категорії:
birds_grouped <- birds_filtered %>%
group_by(Category) %>%
summarise(
MaxLength = max(MaxLength, na.rm = T),
MinLength = max(MinLength, na.rm = T)
) %>%
arrange(Category)
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
Ми групуємо дані birds_filtered
за Category
, а потім будуємо стовпчасту діаграму.
Тут нічого дивного: колібрі мають найменший MaxLength у порівнянні з пеліканами чи гусьми. Добре, коли дані мають логічний сенс!
Ви можете створювати цікавіші візуалізації стовпчастих діаграм, накладаючи дані. Давайте накладемо мінімальну та максимальну довжину на певну категорію птахів:
ggplot(data=birds_grouped, aes(x=Category)) +
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
coord_flip()
🚀 Виклик
Цей набір даних про птахів пропонує багатство інформації про різні види птахів у певній екосистемі. Пошукайте в інтернеті інші набори даних, орієнтовані на птахів. Практикуйте створення графіків і діаграм навколо цих птахів, щоб дізнатися факти, про які ви не здогадувалися.
Тест після лекції
Огляд і самостійне навчання
Цей перший урок дав вам деяку інформацію про те, як використовувати ggplot2
для візуалізації кількісних даних. Проведіть дослідження інших способів роботи з наборами даних для візуалізації. Досліджуйте та шукайте набори даних, які ви могли б візуалізувати за допомогою інших пакетів, таких як Lattice та Plotly.
Завдання
Відмова від відповідальності:
Цей документ було перекладено за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ мовою оригіналу слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний переклад людиною. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.