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:
Data mencakup beberapa kelompok informasi: (1) Lokasi & Identifikasi seperti koordinat geografis (long, lat), ID unik tupai, area hektar, serta informasi wilayah administratif (zip code, district, borough, police precinct); (2) Waktu pengamatan berupa tanggal sekitar Oktober 2018 dan shift (pagi/sore); (3) Karakteristik Fisik tupai meliputi usia, warna bulu utama, warna aksen, kombinasi warna, dan catatan warna tambahan; (4) Perilaku tupai yang dicatat dalam format logical (TRUE/FALSE) mencakup aktivitas seperti berlari, mengejar, memanjat, makan, mencari makan, suara yang dikeluarkan (kuks, quaas, moans), gerakan ekor, serta reaksi terhadap manusia (mendekat, acuh, atau lari); dan (5) Deskripsi Teks Bebas seperti lokasi spesifik, aktivitas lain, dan interaksi lain. Perlu diperhatikan bahwa beberapa kolom memiliki missing values (NA) yang cukup banyak, terutama pada kolom color_notes (2.841 NA), other_interactions (2.783 NA), other_activities (2.586 NA), dan specific_location (2.547 NA).
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:
Warna bulu yang dominan berdasarkan grafik diatas adalah abu abu
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:
Dari histogram diatas, lokasi tupai terkonsentrasi pada sekitar koordinat x(-73.97) dan sekitar x(-73.96)
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:
Pola sebaran tupai secara spasial mendapati kekosongan pada titik tertentu, yaitu pada sekitar (-73.965 , 40.785)
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:
Warna bulu Gray mendominasi persebaran spasial tupai, hampir tersebar merata. Untuk warna cinnamon cenderung tersebar disekitar koordinat x(-73.98) hingga x(-73.965)
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:
Perilaku chasing pada warna bulu Gray menunjukkan proporsi yang lebih banyak dibanding lainnya, namun sebenarnya hal ini disebabkan karena tupai gray memiliki jumlah yang jauh lebih banyak, sehingga sebenarnya tidak memiliki perbedaan proporsi yang signifikan
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:
Eating behavior pada tupai juvenile menunjukkan proporsi yang lebih banyak dibandingkan tupai adult
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()
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:
Pola lokasi tupai adult tersebar merata di seluruh lokasi, sedangkan tupai juvenile terdapat titik putus putus yang berarti tidak tersebar secara merata. Tapi menurut saya terdapat kesalahan kode, pada grafik itu membandingkan antara long dan long sehingga grafik terlihat hanya garis lurus. Lalu saya menambahkan blok kode ggplot baru dengan membandingkan long dan lat nya dengan hasil interpretasi bahwa tupai adult memiliki persebaran yang lebih padat dibanding lainnya. Sedangkan tupai Juvenile memliki persebaran yang jarang dan cederung tersebar di daerah kiri bawah
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:
Tupai berbulu Gray dan berusia adult merupakan tupai yang mendominasi hampir di semua lokasi.
Buat satu visualisasi tambahan berdasarkan pertanyaan analitis yang Anda susun sendiri.
Contoh pertanyaan:
ggplot(squirrel, aes(x = location, fill = running)) +
geom_bar(position = "fill") +
labs(
title = "Running Behavior by Location",
x = "Location",
y = "Proportion",
fill = "Running"
) +
theme_minimal()
Pertanyaan Analitis:
Apakah perilaku running berbeda antara tupai yang berada di atas tanah (above ground) dan di tanah (ground)?
Interpretasi:
Tupai yang berada di permukaan tanah (ground) menunjukkan proporsi perilaku berlari (running) yang lebih tinggi dibandingkan tupai yang berada di atas tanah (above ground). Hal ini cukup logis karena tupai yang berada di atas tanah — misalnya di atas pohon atau cabang — cenderung lebih diam atau sedang memanjat, bukan berlari. Sebaliknya, tupai di permukaan tanah memiliki ruang gerak yang lebih luas sehingga lebih sering teramati dalam kondisi berlari.
Tuliskan 3–5 insight utama yang diperoleh dari visualisasi squirrel data.
Kesimpulan:
Kumpulkan file dalam format HTML. Pastikan dokumen memuat: