19 KiB
ויזואליזציה של כמויות
![]() |
---|
ויזואליזציה של כמויות - סקצ'נוט מאת @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 כדי להפחית עומס בגרף.
מה אתם מגלים?
סינון הנתונים
גם העיט הקירח וגם הבז הערבתי, למרות שהם כנראה ציפורים גדולות מאוד, נראים כמתויגים באופן שגוי, עם תוספת של 0 למוטת הכנפיים המקסימלית שלהם. לא סביר שתפגשו עיט קירח עם מוטת כנפיים של 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 האגמים", כך שזה לא מפתיע!
✅ נסו לספור נתונים אחרים במערך הנתונים הזה. האם משהו מפתיע אתכם?
השוואת נתונים
תוכלו לנסות השוואות שונות של נתונים מקובצים על ידי יצירת צירים חדשים. נסו השוואה של האורך המקסימלי של ציפור, בהתבסס על הקטגוריה שלה:
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
ואז שרטטנו גרף עמודות.
אין כאן הפתעות: לקוליברי יש את האורך המקסימלי הקטן ביותר בהשוואה לפליקנים או אווזים. זה טוב כאשר הנתונים הגיוניים מבחינה לוגית!
תוכלו ליצור ויזואליזציות מעניינות יותר של גרפי עמודות על ידי חפיפת נתונים. בואו נחפוף את האורך המינימלי והמקסימלי על קטגוריית ציפור נתונה:
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. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו אחראים לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.