Latihan ini bertujuan untuk memperkenalkan dasar-dasar visualisasi
data menggunakan ggplot2 melalui studi kasus
squirrel data. Mahasiswa diharapkan mampu:
ggplot2.x,
y, color, fill, dan
shape.library(tidyverse)
Gunakan file data squirrel dalam format .csv. Pastikan
file berada pada folder kerja yang sama dengan file R Markdown ini.
squirrels_url <- paste0("https://raw.githubusercontent.com/rfordatascience/tidytuesday/","master/data/2019/2019-10-29/nyc_squirrels.csv")
squirrel <- read.csv(squirrels_url)
glimpse(squirrel)
## Rows: 3,023
## Columns: 36
## $ long <dbl> -73.95613, -73.95704, -73.9…
## $ lat <dbl> 40.79408, 40.79485, 40.7667…
## $ unique_squirrel_id <chr> "37F-PM-1014-03", "37E-PM-1…
## $ hectare <chr> "37F", "37E", "02E", "05D",…
## $ shift <chr> "PM", "PM", "AM", "PM", "AM…
## $ date <int> 10142018, 10062018, 1010201…
## $ hectare_squirrel_number <int> 3, 3, 3, 5, 1, 2, 2, 3, 9, …
## $ age <chr> NA, "Adult", "Adult", "Juve…
## $ primary_fur_color <chr> NA, "Gray", "Cinnamon", "Gr…
## $ highlight_fur_color <chr> NA, "Cinnamon", NA, NA, NA,…
## $ combination_of_primary_and_highlight_color <chr> "+", "Gray+Cinnamon", "Cinn…
## $ color_notes <chr> NA, NA, NA, NA, NA, NA, NA,…
## $ location <chr> NA, "Ground Plane", "Above …
## $ above_ground_sighter_measurement <chr> NA, "FALSE", "4", "3", NA, …
## $ specific_location <chr> NA, NA, NA, NA, NA, NA, NA,…
## $ running <lgl> FALSE, TRUE, FALSE, FALSE, …
## $ chasing <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ climbing <lgl> FALSE, FALSE, TRUE, TRUE, F…
## $ eating <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ foraging <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ other_activities <chr> NA, NA, NA, NA, "unknown", …
## $ kuks <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ quaas <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ moans <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ tail_flags <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ tail_twitches <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ approaches <lgl> FALSE, FALSE, FALSE, FALSE,…
## $ indifferent <lgl> FALSE, FALSE, TRUE, FALSE, …
## $ runs_from <lgl> FALSE, TRUE, FALSE, TRUE, F…
## $ other_interactions <chr> NA, "me", NA, NA, NA, NA, N…
## $ lat_long <chr> "POINT (-73.9561344937861 4…
## $ zip_codes <int> NA, NA, NA, NA, NA, NA, NA,…
## $ community_districts <int> 19, 19, 19, 19, 19, 19, 19,…
## $ borough_boundaries <int> 4, 4, 4, 4, 4, 4, 4, 4, 4, …
## $ city_council_districts <int> 19, 19, 19, 19, 19, 19, 19,…
## $ police_precincts <int> 13, 13, 13, 13, 13, 13, 13,…
names(squirrel)
## [1] "long"
## [2] "lat"
## [3] "unique_squirrel_id"
## [4] "hectare"
## [5] "shift"
## [6] "date"
## [7] "hectare_squirrel_number"
## [8] "age"
## [9] "primary_fur_color"
## [10] "highlight_fur_color"
## [11] "combination_of_primary_and_highlight_color"
## [12] "color_notes"
## [13] "location"
## [14] "above_ground_sighter_measurement"
## [15] "specific_location"
## [16] "running"
## [17] "chasing"
## [18] "climbing"
## [19] "eating"
## [20] "foraging"
## [21] "other_activities"
## [22] "kuks"
## [23] "quaas"
## [24] "moans"
## [25] "tail_flags"
## [26] "tail_twitches"
## [27] "approaches"
## [28] "indifferent"
## [29] "runs_from"
## [30] "other_interactions"
## [31] "lat_long"
## [32] "zip_codes"
## [33] "community_districts"
## [34] "borough_boundaries"
## [35] "city_council_districts"
## [36] "police_precincts"
summary(squirrel)
## long lat unique_squirrel_id hectare
## Min. :-73.98 Min. :40.76 Length:3023 Length:3023
## 1st Qu.:-73.97 1st Qu.:40.77 Class :character Class :character
## Median :-73.97 Median :40.78 Mode :character Mode :character
## Mean :-73.97 Mean :40.78
## 3rd Qu.:-73.96 3rd Qu.:40.79
## Max. :-73.95 Max. :40.80
##
## shift date hectare_squirrel_number
## Length:3023 Min. :10062018 Min. : 1.000
## Class :character 1st Qu.:10082018 1st Qu.: 2.000
## Mode :character Median :10122018 Median : 3.000
## Mean :10119487 Mean : 4.124
## 3rd Qu.:10142018 3rd Qu.: 6.000
## Max. :10202018 Max. :23.000
##
## age primary_fur_color highlight_fur_color
## Length:3023 Length:3023 Length:3023
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## combination_of_primary_and_highlight_color color_notes
## Length:3023 Length:3023
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
## location above_ground_sighter_measurement specific_location
## Length:3023 Length:3023 Length:3023
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## running chasing climbing eating
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:2293 FALSE:2744 FALSE:2365 FALSE:2263
## TRUE :730 TRUE :279 TRUE :658 TRUE :760
##
##
##
##
## foraging other_activities kuks quaas
## Mode :logical Length:3023 Mode :logical Mode :logical
## FALSE:1588 Class :character FALSE:2921 FALSE:2973
## TRUE :1435 Mode :character TRUE :102 TRUE :50
##
##
##
##
## moans tail_flags tail_twitches approaches
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:3020 FALSE:2868 FALSE:2589 FALSE:2845
## TRUE :3 TRUE :155 TRUE :434 TRUE :178
##
##
##
##
## indifferent runs_from other_interactions lat_long
## Mode :logical Mode :logical Length:3023 Length:3023
## FALSE:1569 FALSE:2345 Class :character Class :character
## TRUE :1454 TRUE :678 Mode :character Mode :character
##
##
##
##
## zip_codes community_districts borough_boundaries city_council_districts
## Min. :10090 Min. :11 Min. :4 Min. :19.00
## 1st Qu.:12081 1st Qu.:19 1st Qu.:4 1st Qu.:19.00
## Median :12420 Median :19 Median :4 Median :19.00
## Mean :11828 Mean :19 Mean :4 Mean :19.07
## 3rd Qu.:12423 3rd Qu.:19 3rd Qu.:4 3rd Qu.:19.00
## Max. :12423 Max. :23 Max. :4 Max. :51.00
## NA's :3014
## police_precincts
## Min. :10
## 1st Qu.:13
## Median :13
## Mean :13
## 3rd Qu.:13
## Max. :18
##
Interpretasi:
Dataset ini merupakan hasil survei tupai di Central Park, New York
City pada tahun 2018. Data memiliki 3.023 baris observasi dan 36 kolom
variabel. Variabel yang tersedia mencakup informasi lokasi (koordinat
longitude dan latitude), karakteristik fisik tupai (warna bulu primer
dan sekunder, kelompok umur), serta berbagai perilaku yang diamati
seperti eating, foraging, chasing,
climbing, dan running. Kolom bertipe karakter antara
lain primary_fur_color, age, dan
location, sementara banyak kolom perilaku bertipe logis
(TRUE/FALSE). Terdapat beberapa nilai
NA terutama pada kolom primary_fur_color dan
age yang perlu diperhatikan dalam interpretasi grafik.
Buat grafik batang untuk melihat warna bulu tupai yang paling banyak ditemukan.
ggplot(squirrel, aes(x = primary_fur_color)) +
geom_bar() +
labs(
title = "Distribution of Squirrel Fur Color",
x = "Fur Color",
y = "Count"
) +
theme_minimal()
Pertanyaan:
Warna bulu apa yang paling dominan?
Interpretasi:
Berdasarkan grafik batang di atas, warna bulu Gray
(abu-abu) merupakan warna yang paling dominan dan jauh lebih
banyak dibandingkan warna lainnya, dengan jumlah observasi mencapai
lebih dari 2.000 ekor. Warna Cinnamon (kecokelatan)
berada di posisi kedua dengan jumlah yang jauh lebih sedikit, sekitar
400-an ekor, sedangkan warna Black (hitam) paling
jarang ditemukan. Selain itu, terdapat sejumlah observasi dengan nilai
kosong (NA) yang kemungkinan terjadi karena warna bulu
tidak berhasil diidentifikasi oleh pengamat di lapangan.
Gunakan histogram untuk melihat penyebaran tupai berdasarkan koordinat X.
ggplot(squirrel, aes(x = long)) +
geom_histogram(bins = 30) +
labs(
title = "Distribution of Squirrel Location Based on X Coordinate",
x = "X Coordinate",
y = "Frequency"
) +
theme_minimal()
Pertanyaan:
Apakah lokasi pengamatan tupai terkonsentrasi pada area tertentu?
Interpretasi:
Histogram menunjukkan bahwa sebaran tupai berdasarkan koordinat X (longitude) tidak merata. Terdapat konsentrasi yang cukup jelas pada rentang longitude sekitar -73.97 hingga -73.96, yang mengindikasikan bahwa sebagian besar pengamatan dilakukan di bagian tengah hingga timur Central Park. Di luar rentang tersebut, frekuensi pengamatan menurun secara signifikan. Hal ini wajar mengingat survei dilakukan secara sistematis dengan jalur transek tertentu yang melewati area-area tertentu di dalam taman.
Buat scatter plot untuk menggambarkan lokasi tupai berdasarkan
koordinat x dan y.
ggplot(squirrel, aes(x = long, y = lat)) +
geom_point(alpha = 0.6) +
labs(
title = "Spatial Distribution of Squirrels",
x = "X Coordinate",
y = "Y Coordinate"
) +
theme_minimal()
Pertanyaan:
Bagaimana pola sebaran tupai secara spasial?
Interpretasi:
Scatter plot menggambarkan peta sebaran tupai di Central Park secara keseluruhan. Pola sebaran terlihat memanjang secara vertikal (utara-selatan) yang sesuai dengan bentuk geografis Central Park yang memang lebih panjang dari selatan ke utara. Titik-titik observasi tersebar cukup merata di hampir seluruh area taman, meskipun terlihat beberapa klaster yang lebih padat di bagian tengah taman. Secara umum, pola ini mencerminkan rute pengamatan lapangan yang dirancang untuk mencakup seluruh wilayah taman secara sistematis.
Tambahkan warna pada scatter plot berdasarkan
primary_fur_color.
ggplot(squirrel, aes(x = long, y = lat, color = primary_fur_color)) +
geom_point(alpha = 0.6) +
labs(
title = "Spatial Distribution of Squirrels by Fur Color",
x = "X Coordinate",
y = "Y Coordinate",
color = "Fur Color"
) +
theme_minimal()
Pertanyaan:
Apakah warna bulu tertentu cenderung muncul pada area tertentu?
Interpretasi:
Dari scatter plot yang sudah diberi warna berdasarkan warna bulu, terlihat bahwa tupai abu-abu (Gray) mendominasi hampir di seluruh area Central Park dan tersebar merata dari ujung selatan hingga utara. Tupai berwarna Cinnamon juga tersebar di berbagai lokasi namun jumlahnya lebih sedikit. Tupai hitam (Black) terlihat paling jarang dan muncul sporadis di beberapa titik saja. Secara umum, tidak ada pola segregasi spasial yang jelas berdasarkan warna bulu — ketiga warna tampak bercampur di area yang sama, sehingga bisa disimpulkan bahwa warna bulu tidak berkorelasi dengan preferensi lokasi habitat di dalam taman.
Gunakan stacked proportional bar chart untuk melihat proporsi
perilaku chasing berdasarkan warna bulu.
ggplot(squirrel, aes(x = primary_fur_color, fill = chasing)) +
geom_bar(position = "fill") +
labs(
title = "Chasing Behavior by Fur Color",
x = "Fur Color",
y = "Proportion",
fill = "Chasing"
) +
theme_minimal()
Pertanyaan:
Apakah terdapat perbedaan proporsi perilaku chasing antar warna bulu?
Interpretasi:
Grafik batang proporsional menunjukkan bahwa proporsi perilaku chasing (mengejar) relatif rendah dan tidak terlalu berbeda jauh antar kelompok warna bulu. Pada ketiga kelompok warna (Gray, Cinnamon, dan Black), mayoritas tupai tidak menunjukkan perilaku chasing (ditunjukkan oleh area berwarna merah/FALSE yang mendominasi). Meski demikian, tupai Cinnamon terlihat sedikit memiliki proporsi chasing yang lebih tinggi dibandingkan yang lain. Perbedaan ini tidak terlalu besar sehingga perlu kehati-hatian dalam menarik kesimpulan, mengingat jumlah sampel antar kelompok warna bulu tidak seimbang.
Gunakan grafik batang proporsional untuk melihat perilaku makan berdasarkan kelompok umur.
ggplot(squirrel, aes(x = age, fill = eating)) +
geom_bar(position = "fill") +
labs(
title = "Eating Behavior by Age Group",
x = "Age Group",
y = "Proportion",
fill = "Eating"
) +
theme_minimal()
Pertanyaan:
Apakah perilaku makan berbeda antara adult dan juvenile squirrels?
Interpretasi:
Grafik menunjukkan adanya perbedaan kecil dalam
proporsi perilaku makan antara tupai dewasa (Adult) dan tupai
muda (Juvenile). Tupai dewasa terlihat memiliki proporsi
eating yang sedikit lebih tinggi dibandingkan tupai muda. Hal
ini bisa dipahami secara biologis karena tupai dewasa umumnya lebih
aktif dalam mencari dan mengonsumsi makanan untuk memenuhi kebutuhan
energinya sehari-hari, sedangkan tupai muda mungkin masih dalam tahap
belajar mencari makan secara mandiri. Perlu dicatat pula bahwa terdapat
kelompok dengan nilai NA pada kolom age yang juga
ikut ditampilkan dalam grafik.
Gunakan facet_wrap() untuk membandingkan sebaran lokasi
tupai berdasarkan umur.
ggplot(squirrel, aes(x = long, y = lat)) +
geom_point(alpha = 0.5) +
facet_wrap(~ age) +
labs(
title = "Spatial Distribution of Squirrels by Age Group",
x = "X Coordinate",
y = "Y Coordinate"
) +
theme_minimal()
Pertanyaan:
Apakah adult dan juvenile squirrels memiliki pola lokasi yang berbeda?
Interpretasi:
Dengan menggunakan facet_wrap(), kita dapat
membandingkan sebaran spasial tupai berdasarkan kelompok umur secara
berdampingan. Hasil visualisasi menunjukkan bahwa pola sebaran
lokasi antara tupai dewasa dan tupai muda tidak berbeda secara
signifikan — keduanya tersebar di sepanjang area Central Park
dari selatan ke utara. Namun, jumlah data pada kelompok
Juvenile jauh lebih sedikit dibandingkan Adult, yang
membuat sebarannya terlihat lebih jarang. Panel dengan nilai
NA pada age juga tetap ditampilkan. Secara
keseluruhan, tidak ada indikasi bahwa kelompok umur tertentu memiliki
preferensi lokasi yang berbeda di dalam taman.
Gunakan color untuk warna bulu dan shape
untuk kelompok umur.
ggplot(squirrel, aes(
x = long,
y = lat,
color = primary_fur_color,
shape = age
)) +
geom_point(size = 2, alpha = 0.7) +
labs(
title = "Squirrel Location by Fur Color and Age",
x = "X Coordinate",
y = "Y Coordinate",
color = "Fur Color",
shape = "Age"
) +
theme_minimal()
## Warning: Removed 121 rows containing missing values or values outside the scale range
## (`geom_point()`).
Pertanyaan:
Informasi tambahan apa yang diperoleh ketika warna dan bentuk digunakan secara bersamaan?
Interpretasi:
Dengan menggabungkan dua aesthetic sekaligus — warna
untuk warna bulu dan bentuk titik untuk kelompok umur —
kita dapat mengeksplorasi dua dimensi informasi dalam satu grafik.
Hasilnya memperlihatkan bahwa baik tupai dewasa maupun muda dari
berbagai warna bulu tersebar secara bercampur di seluruh area taman,
tanpa ada klaster yang memisah secara jelas. Penggunaan dua aesthetic
secara bersamaan memberikan gambaran yang lebih kaya: kita bisa
sekaligus melihat komposisi warna bulu dan struktur umur di
tiap lokasi. Namun, saat jumlah data besar, plot ini bisa terlihat cukup
penuh (overplotting), sehingga nilai alpha perlu
disesuaikan agar titik-titik yang tumpang tindih tetap bisa
dibedakan.
Buat satu visualisasi tambahan berdasarkan pertanyaan analitis yang Anda susun sendiri.
# Pertanyaan: Apakah perilaku foraging (mencari makan) berbeda antara
# tupai yang ditemukan di atas tanah vs di pohon?
squirrel_loc <- squirrel %>%
filter(!is.na(location), !is.na(foraging))
ggplot(squirrel_loc, aes(x = location, fill = foraging)) +
geom_bar(position = "fill") +
labs(
title = "Foraging Behavior by Squirrel Location",
subtitle = "Ground Plane vs Above Ground",
x = "Location",
y = "Proportion",
fill = "Foraging"
) +
scale_fill_manual(values = c("TRUE" = "#2ecc71", "FALSE" = "#bdc3c7")) +
theme_minimal()
Pertanyaan Analitis:
Apakah tupai yang berada di atas tanah (Above Ground) memiliki proporsi perilaku foraging yang berbeda dibandingkan tupai yang ada di permukaan tanah (Ground Plane)?
Interpretasi:
Grafik menunjukkan perbedaan yang cukup menarik antara dua lokasi pengamatan. Tupai yang berada di permukaan tanah (Ground Plane) memiliki proporsi perilaku foraging yang lebih tinggi dibandingkan tupai yang berada di atas tanah (Above Ground), misalnya di dahan pohon. Hal ini masuk akal secara ekologis karena foraging — yaitu aktivitas mencari makanan seperti biji-bijian dan kacang — umumnya dilakukan di tanah. Sementara itu, tupai yang sedang berada di atas pohon kemungkinan sedang beristirahat, bersarang, atau melakukan aktivitas lain yang tidak berkaitan langsung dengan pencarian makanan di permukaan.
Kesimpulan:
Tupai berwarna abu-abu (Gray) mendominasi populasi tupai di Central Park dengan jumlah yang jauh lebih banyak dibandingkan warna Cinnamon maupun Black, sementara tupai hitam merupakan yang paling jarang ditemukan.
Sebaran spasial tupai mencerminkan bentuk geografis Central Park yang memanjang dari selatan ke utara, dengan kepadatan yang relatif merata di hampir seluruh area taman tanpa segregasi berdasarkan warna bulu maupun kelompok umur.
Perilaku eating dan foraging cenderung lebih banyak dilakukan oleh tupai dewasa dan tupai yang berada di permukaan tanah, yang konsisten dengan perilaku alami tupai dalam mencari dan mengonsumsi makanan di lingkungannya.
Warna bulu tidak berkorelasi kuat dengan pola perilaku seperti chasing — proporsi perilaku tersebut tidak berbeda secara mencolok antar kelompok warna, meskipun terdapat sedikit variasi pada tupai Cinnamon.
Penggunaan kombinasi aesthetic seperti warna dan bentuk secara bersamaan terbukti efektif untuk menyampaikan lebih banyak dimensi informasi dalam satu grafik, namun perlu diimbangi dengan pengaturan transparansi (alpha) agar visualisasi tetap mudah dibaca saat data berjumlah besar.
Kumpulkan file dalam format HTML. Pastikan dokumen memuat: