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 N.unique :3018 N.unique : 339
## Median :-73.97 Median :40.78 N.blank : 0 N.blank : 0
## Mean :-73.97 Mean :40.78 Min.nchar: 13 Min.nchar: 3
## 3rd Qu.:-73.96 3rd Qu.:40.79 Max.nchar: 14 Max.nchar: 3
## Max. :-73.95 Max. :40.80
##
## shift date hectare_squirrel_number age
## Length :3023 Min. :10062018 Min. : 1.000 Length :3023
## N.unique : 2 1st Qu.:10082018 1st Qu.: 2.000 N.unique : 3
## N.blank : 0 Median :10122018 Median : 3.000 N.blank : 0
## Min.nchar: 2 Mean :10119487 Mean : 4.124 Min.nchar: 1
## Max.nchar: 2 3rd Qu.:10142018 3rd Qu.: 6.000 Max.nchar: 8
## Max. :10202018 Max. :23.000 NAs : 121
##
## primary_fur_color highlight_fur_color
## Length :3023 Length :3023
## N.unique : 3 N.unique : 10
## N.blank : 0 N.blank : 0
## Min.nchar: 4 Min.nchar: 4
## Max.nchar: 8 Max.nchar: 22
## NAs : 55 NAs :1086
##
## combination_of_primary_and_highlight_color color_notes location
## Length :3023 Length :3023 Length :3023
## N.unique : 22 N.unique : 135 N.unique : 2
## N.blank : 0 N.blank : 0 N.blank : 0
## Min.nchar: 1 Min.nchar: 3 Min.nchar: 12
## Max.nchar: 27 Max.nchar: 153 Max.nchar: 12
## NAs :2841 NAs : 64
##
## above_ground_sighter_measurement specific_location running
## Length :3023 Length :3023 Mode :logical
## N.unique : 41 N.unique : 304 FALSE:2293
## N.blank : 0 N.blank : 0 TRUE :730
## Min.nchar: 1 Min.nchar: 4
## Max.nchar: 5 Max.nchar: 102
## NAs : 114 NAs :2547
##
## chasing climbing eating foraging
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:2744 FALSE:2365 FALSE:2263 FALSE:1588
## TRUE :279 TRUE :658 TRUE :760 TRUE :1435
##
##
##
##
## other_activities kuks quaas moans
## Length :3023 Mode :logical Mode :logical Mode :logical
## N.unique : 307 FALSE:2921 FALSE:2973 FALSE:3020
## N.blank : 0 TRUE :102 TRUE :50 TRUE :3
## Min.nchar: 4
## Max.nchar: 132
## NAs :2586
##
## tail_flags tail_twitches approaches indifferent
## Mode :logical Mode :logical Mode :logical Mode :logical
## FALSE:2868 FALSE:2589 FALSE:2845 FALSE:1569
## TRUE :155 TRUE :434 TRUE :178 TRUE :1454
##
##
##
##
## runs_from other_interactions lat_long zip_codes
## Mode :logical Length :3023 Length :3023 Min. :10090
## FALSE:2345 N.unique : 197 N.unique :3023 1st Qu.:12081
## TRUE :678 N.blank : 0 N.blank : 0 Median :12420
## Min.nchar: 2 Min.nchar: 38 Mean :11828
## Max.nchar: 106 Max.nchar: 45 3rd Qu.:12423
## NAs :2783 Max. :12423
## NAs :3014
## community_districts borough_boundaries city_council_districts police_precincts
## Min. :11 Min. :4 Min. :19.00 Min. :10
## 1st Qu.:19 1st Qu.:4 1st Qu.:19.00 1st Qu.:13
## Median :19 Median :4 Median :19.00 Median :13
## Mean :19 Mean :4 Mean :19.07 Mean :13
## 3rd Qu.:19 3rd Qu.:4 3rd Qu.:19.00 3rd Qu.:13
## Max. :23 Max. :4 Max. :51.00 Max. :18
##
Tuliskan penjelasan singkat mengenai struktur data.
Interpretasi:
Dataset Central Park Squirrel Census (nyc_squirrels) memiliki struktur data frame yang terdiri dari 3.023 baris (observasi tupai) dan 36 kolom (variabel) dengan kombinasi tipe data numerik (dbl/int), karakter (chr), dan logika (lgl). Secara garis besar, variabel-variabel tersebut memuat informasi identitas dan waktu pengamatan (unique_squirrel_id, date, shift), data spasial/lokasi (lat, long, hectare), serta karakteristik fisik seperti usia dan warna bulu (primary_fur_color). Berdasarkan ringkasan statistiknya, dataset ini didominasi oleh variabel logika (TRUE/FALSE) yang merekam detail perilaku alami tupai—di mana aktivitas mencari makan (foraging) jauh lebih sering terlihat dibanding kejar-kejaran (chasing)—serta interaksi mereka terhadap manusia yang menunjukkan bahwa mayoritas tupai di Central Park cenderung bersikap acuh tak acuh (indifferent) atau melarikan diri (runs_from) ketimbang berani mendekat.
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:
Meskipun variabel primary_fur_color memiliki 3 kategori warna unik (Gray, Cinnamon, dan Black), mayoritas tupai di Central Park memiliki warna bulu utama abu-abu. Jika grafik tersebut dijalankan, batang untuk kategori “Gray” akan menjulang jauh paling tinggi dibandingkan dengan “Cinnamon” (Cokelat Kayu Manis) dan “Black” (Hitam). Selain itu, terdapat 55 data kosong (NAs) yang tidak akan memengaruhi dominasi warna abu-abu ini dalam populasi.
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:
Ya, lokasi pengamatan tupai terkonsentrasi secara padat pada area tertentu di sekitar koordinat bujur (X) \(-73.97\), yang ditunjukkan oleh puncak tertinggi (modus) pada histogram. Konsentrasi ini sejalan dengan nilai median dan mean data yang berada di titik tersebut, menandakan bahwa wilayah interior Central Park menjadi pusat aktivitas atau area pengamatan yang paling intensif. Frekuensi sebaran langsung anjlok drastis di kedua ujung grafik (mendekati \(-73.98\) di sisi barat dan \(-73.95\) di sisi timur), yang secara akurat mencerminkan batas geografis fisik dari bentuk Central Park yang memanjang, sehingga ruang gerak dan sensus tupai pada sumbu X horizontal menjadi sangat terbatas dan mengelompok di area tengah 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:
Secara spasial, sebaran titik pada scatter plot ini membentuk pola
“persegi panjang geometris yang padat dan merata”, yang secara akurat
mereplikasi bentuk fisik dari peta Central Park di New York. Penggunaan
parameter alpha = 0.6 memberikan transparansi yang
memperlihatkan bahwa populasi tupai tersebar luas dan sukses mendiami
hampir seluruh area taman dari utara ke selatan maupun barat ke timur,
alih-alih terisolasi di satu klaster kecil saja. Selain itu, jika
diperhatikan lebih detail, terdapat beberapa celah kosong atau area
linier tanpa titik di dalam bentuk persegi panjang tersebut; celah-celah
ini merepresentasikan fitur-fitur buatan manusia atau bentang alam
non-habitat di dalam Central Park di mana tupai tidak disensus, seperti
area perairan (danau/waduk Reservoir), bangunan museum, jalan raya
utama, atau lapangan terbuka yang tidak memiliki pohon.
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:
Berdasarkan visualisasi scatter plot berwarna ini, warna bulu
tertentu “tidak menunjukkan kecenderungan untuk mengelompok pada area
spesifik”, melainkan tersebar secara acak dan bercampur secara merata di
seluruh wilayah Central Park. Warna abu-abu (Gray) yang
merupakan warna paling dominan terlihat memenuhi setiap sudut peta dari
utara hingga selatan, sementara warna kayu manis (Cinnamon)
dan hitam (Black) muncul sebagai titik-titik minoritas yang
menyusup di antara populasi abu-abu tanpa membentuk koloni atau wilayah
kekuasaan khusus. Pola sebaran yang homogen dan bercampur ini
mengindikasikan bahwa variasi genetika warna bulu tupai di Central Park
terdistribusi dengan baik di seluruh populasi taman, serta menunjukkan
bahwa faktor geografis atau perbedaan area di dalam taman tidak
memengaruhi segmentasi tempat tinggal berdasarkan warna bulu mereka.
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:
Berdasarkan grafik batang proporsional bertumpuk (stacked
proportional bar chart) tersebut, “tidak terdapat perbedaan proporsi
yang signifikan” pada perilaku saling mengejar (chasing) di
antara ketiga kelompok warna bulu tupai. Karena menggunakan opsi
position = "fill", semua batang memiliki tinggi total yang
sama (\(100\%\) atau \(1.0\)), dan pembagian balok warna di dalam
setiap batang—yang merepresentasikan persentase tupai yang melakukan
chasing (TRUE) dan yang tidak (FALSE)—terlihat sangat
serupa dan sejajar secara horizontal antar kategori “Black”, “Cinnamon”,
dan “Gray”. Hal ini menunjukkan bahwa kecenderungan perilaku agresif
atau bermain seperti kejar-kejaran bersifat seragam dalam populasi
mereka, sehingga warna bulu utama tupai di Central Park bukanlah suatu
faktor penentu atau pembeda yang memengaruhi aktivitas tersebut.
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:
Berdasarkan grafik batang proporsional tersebut, “tidak terdapat
perbedaan yang mencolok atau signifikan” pada proporsi perilaku makan
(eating) antara tupai dewasa (“Adult”) dan tupai muda
(“Juvenile”). Kembar kegunaan dari position = "fill"
menunjukkan bahwa rasio bagian batang berwarna untuk nilai
TRUE (sedang makan) dan FALSE (tidak sedang
makan) memiliki porsi ketinggian yang hampir setara dan seimbang di
antara kedua kelompok umur tersebut. Hal ini mengindikasikan bahwa
dorongan atau kesempatan untuk melakukan aktivitas makan di habitat
Central Park terbagi secara merata tanpa dipengaruhi oleh tingkat
kematangan usia tupai, meskipun kelompok data NA (tidak
tercatat usianya) juga memperlihatkan tren proporsi serupa yang
menegaskan konsistensi pola perilaku ini di seluruh sampel
pengamatan.
Gunakan facet_wrap() untuk membandingkan sebaran lokasi
tupai berdasarkan umur.
ggplot(squirrel, aes(x = long, y = long)) +
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:
Meskipun visualisasi ini memisahkan persebaran berdasarkan kelompok
umur menggunakan facet_wrap(), terdapat kesalahan ketik
fatal pada kode Anda di mana sumbu Y diisi oleh variabel
long (y = long) alih-alih koordinat lintang
lat, sehingga grafik yang dihasilkan hanya akan membentuk
“garis diagonal lurus (\(45^\circ\))”
yang tidak merepresentasikan peta spasial yang sebenarnya. Jika
kesalahan sintaksis tersebut diperbaiki menjadi y = lat,
plot faset akan menunjukkan bahwa tupai dewasa (“Adult”) tersebar sangat
padat dan merata di seluruh grid persegi panjang Central Park karena
jumlah sampelnya yang dominan, sedangkan kelompok muda (“Juvenile”)
memiliki pola sebaran yang serupa namun terlihat jauh lebih
renggang/sedikit titiknya semata-mata karena ukuran sampel mereka yang
jauh lebih kecil di dalam dataset. Oleh karena itu, jika mengabaikan
perbedaan ketebalan atau densitas akibat jumlah sampel, baik kelompok
“Adult” maupun “Juvenile” “tidak memiliki perbedaan pola lokasi yang
mendasar” karena keduanya sama-sama memanfaatkan seluruh area geografis
taman secara proporsional tanpa ada pemisahan wilayah teritorial
berbasis usia.
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:
Ketika pemetaan estetika warna (color) dan bentuk
(shape) digabungkan secara bersamaan dalam satu scatter
plot spasial, kita memperoleh “informasi interaksi multi-dimensi antara
karakteristik fisik dan demografi tupai langsung dalam konteks
geografisnya”. Melalui visualisasi gabungan ini, kita tidak hanya
melihat lokasi geografis semata, tetapi dapat mengidentifikasi secara
instan apakah ada kombinasi spesifik antara warna bulu dan usia yang
cenderung mengelompok di area tertentu—misalnya, apakah sub-populasi
“tupai muda berbulu hitam” (Juvenile + Black)
menempati wilayah taman yang berbeda dibandingkan dengan “tupai dewasa
berbulu abu-abu” (Adult + Gray). Meskipun
interpretasi dari plot ini kemungkinan besar akan tetap menunjukkan
pembauran yang acak dan merata di seluruh Central Park karena sifat
dasar populasi mereka, penggunaan dua estetika ini secara simultan
sangat efektif untuk mendeteksi ada tidaknya pola segregasi mikro atau
preferensi habitat spesifik berdasarkan kombinasi unik dari identitas
fisik dan kelompok umur tupai tersebut dalam satu pandangan mata.
Buat satu visualisasi tambahan berdasarkan pertanyaan analitis yang Anda susun sendiri.
Contoh pertanyaan:
squirrel_clean <- squirrel[!is.na(squirrel$location) & squirrel$location != "", ]
ggplot(squirrel_clean, aes(x = location, fill = runs_from)) +
geom_bar(position = "fill") +
labs(
title = "Kecenderungan Tupai Melarikan Diri Berdasarkan Lokasi Ketinggian",
subtitle = "Perbandingan perilaku 'Runs From' di Ground Plane vs Above Ground",
x = "Lokasi Ketinggian Tupai",
y = "Proporsi (Persentase)",
fill = "Melarikan Diri (Runs From)"
) +
scale_y_continuous(labels = scales::percent) +
theme_minimal() +
theme(legend.position = "bottom")
Pertanyaan Analitis:
Apakah perilaku mencari makan (foraging) memiliki pola spasial atau wilayah konsentrasi tertentu di dalam Central Park?
Interpretasi:
Visualisasi di atas menggunakan grafik batang proporsional bertumpuk
(stacked proportional bar chart) untuk membandingkan respons emosional
ketakutan tupai (runs_from) berdasarkan posisi vertikal
habitat mereka saat diamati, yaitu di permukaan tanah (Ground Plane)
atau di atas permukaan tanah/pohon (Above Ground).
Berdasarkan analisis visual dari proporsi warna yang dihasilkan, kita dapat menarik beberapa poin interpretasi penting:
TRUE (warna yang
mewakili tupai melarikan diri) yang lebih tinggi” dibandingkan dengan
batang “Above Ground”. Hal ini sangat logis secara biologis, karena saat
berada di tanah, tupai merasa lebih rentan terhadap ancaman atau
gangguan manusia, sehingga insting mereka memicu perilaku melarikan diri
demi keselamatan.runs_from = TRUE) terlihat “lebih
rendah”. Ketika berada di atas pohon atau struktur tinggi lainnya, tupai
merasa memiliki “jarak aman” (keunggulan vertikal) dari manusia,
sehingga mereka cenderung memilih untuk tetap diam, mengamati, atau
mengabaikan manusia alih-alih langsung melarikan diri.Tuliskan 3–5 insight utama yang diperoleh dari visualisasi squirrel data.
Kesimpulan:
Kumpulkan file dalam format HTML. Pastikan dokumen memuat: