1 Tujuan Latihan

Latihan ini bertujuan untuk memperkenalkan dasar-dasar visualisasi data menggunakan ggplot2 melalui studi kasus squirrel data. Mahasiswa diharapkan mampu:

  1. Membaca dan memahami struktur data.
  2. Membuat visualisasi sederhana menggunakan ggplot2.
  3. Menggunakan aesthetic mapping seperti x, y, color, fill, dan shape.
  4. Membandingkan pola antar kelompok menggunakan visualisasi.
  5. Menulis interpretasi berdasarkan grafik.

2 Persiapan Package

library(tidyverse)

3 Membaca Data

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,…

4 Pemeriksaan Awal Data

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 nyc_squirrels merupakan hasil survei tupai di Central Park, New York City pada tahun 2018. Dataset ini memiliki 3.023 baris observasi dan 36 kolom variabel. Variabel-variabel yang tersedia mencakup: koordinat geografis (long, lat), karakteristik fisik tupai seperti warna bulu utama (primary_fur_color) dan warna bulu bagian atas (highlight_fur_color), kelompok umur (age), serta perilaku yang diamati seperti running, chasing, climbing, eating, dan foraging. Terdapat pula variabel terkait interaksi dengan manusia seperti approaches, indifferent, dan runs_from. Beberapa variabel bertipe logis (TRUE/FALSE) dan ada beberapa nilai kosong (NA) pada kolom seperti primary_fur_color dan age.

5 1. Distribusi Warna Bulu Tupai

Buat grafik batang untuk melihat warna bulu tupai yang paling banyak ditemukan.

ggplot(squirrel, aes(x = primary_fur_color)) +
  geom_bar(fill = "steelblue") +
  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 pada populasi tupai di Central Park, dengan jumlah observasi yang jauh lebih banyak dibandingkan warna lainnya. Warna Cinnamon (coklat kemerahan) menempati posisi kedua, sementara warna Black (hitam) adalah yang paling sedikit ditemukan. Terdapat juga sejumlah kecil observasi tanpa data warna bulu (NA).

6 2. Distribusi Lokasi Berdasarkan Koordinat X

Gunakan histogram untuk melihat penyebaran tupai berdasarkan koordinat X.

ggplot(squirrel, aes(x = long)) +
  geom_histogram(bins = 30, fill = "darkorange", color = "white") +
  labs(
    title = "Distribution of Squirrel Location Based on X Coordinate",
    x = "X Coordinate (Longitude)",
    y = "Frequency"
  ) +
  theme_minimal()

Pertanyaan:

Apakah lokasi pengamatan tupai terkonsentrasi pada area tertentu?

Interpretasi:

Ya, lokasi pengamatan tupai tidak tersebar merata. Berdasarkan histogram, terlihat adanya beberapa puncak frekuensi yang menunjukkan konsentrasi lokasi pengamatan pada rentang longitude tertentu, yaitu sekitar -73.97 hingga -73.96. Hal ini mengindikasikan bahwa terdapat area-area tertentu di Central Park yang menjadi lokasi favorit atau lebih mudah diakses untuk pengamatan tupai, kemungkinan besar karena ketersediaan makanan atau vegetasi yang lebih lebat di area tersebut.

7 3. Sebaran Spasial Tupai

Buat scatter plot untuk menggambarkan lokasi tupai berdasarkan koordinat x dan y.

ggplot(squirrel, aes(x = long, y = lat)) +
  geom_point(alpha = 0.4, size = 1, color = "steelblue") +
  labs(
    title = "Spatial Distribution of Squirrels",
    x = "Longitude",
    y = "Latitude"
  ) +
  theme_minimal()

Pertanyaan:

Bagaimana pola sebaran tupai secara spasial?

Interpretasi:

Pola sebaran tupai secara spasial mengikuti bentuk memanjang dari selatan ke utara, yang mencerminkan bentuk geografis Central Park itu sendiri. Titik-titik pengamatan tersebar di seluruh area taman, namun terdapat beberapa klaster (kelompok) yang lebih padat di area tertentu. Sebaran ini tidak sepenuhnya merata — beberapa zona lebih jarang ditemukan tupai, kemungkinan karena area tersebut lebih terbuka (seperti lapangan atau danau) yang kurang cocok sebagai habitat tupai.

8 4. Sebaran Spasial Berdasarkan Warna Bulu

Tambahkan warna pada scatter plot berdasarkan primary_fur_color.

ggplot(squirrel, aes(x = long, y = lat, color = primary_fur_color)) +
  geom_point(alpha = 0.5, size = 1) +
  scale_color_manual(
    values = c("Gray" = "gray50", "Cinnamon" = "chocolate3", "Black" = "black"),
    na.value = "lightpink"
  ) +
  labs(
    title = "Spatial Distribution of Squirrels by Fur Color",
    x = "Longitude",
    y = "Latitude",
    color = "Fur Color"
  ) +
  theme_minimal()

Pertanyaan:

Apakah warna bulu tertentu cenderung muncul pada area tertentu?

Interpretasi:

Berdasarkan scatter plot berwarna ini, warna bulu Gray mendominasi hampir di seluruh area Central Park secara merata, konsisten dengan jumlahnya yang terbanyak. Warna Cinnamon dan Black tersebar di antara tupai abu-abu tanpa pola lokasi yang sangat jelas. Dengan demikian, tidak terdapat bukti kuat bahwa warna bulu tertentu secara konsisten mengelompok di area geografis yang berbeda — ketiga warna bulu tampak bercampur di seluruh kawasan taman.

9 5. Perbandingan Perilaku Chasing Berdasarkan Warna Bulu

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") +
  scale_fill_manual(values = c("TRUE" = "tomato", "FALSE" = "steelblue"),
                    na.value = "gray80") +
  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, proporsi perilaku chasing (mengejar) relatif kecil pada semua kelompok warna bulu. Secara visual, tidak terdapat perbedaan yang sangat mencolok antar kelompok warna bulu — ketiganya menunjukkan proporsi chasing yang serupa dan rendah (sekitar 5–10%). Hal ini mengindikasikan bahwa warna bulu tidak berkaitan kuat dengan kecenderungan tupai untuk mengejar satu sama lain.

10 6. Perilaku Eating Berdasarkan Kelompok Umur

Gunakan grafik batang proporsional untuk melihat perilaku makan berdasarkan kelompok umur.

squirrel_age_clean <- squirrel %>%
  filter(!is.na(age), age != "?")

ggplot(squirrel_age_clean, aes(x = age, fill = eating)) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c("TRUE" = "forestgreen", "FALSE" = "gray70"),
                    na.value = "gray90") +
  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, terdapat sedikit perbedaan proporsi perilaku makan antara tupai dewasa (Adult) dan tupai muda (Juvenile). Tupai dewasa menunjukkan proporsi perilaku makan yang sedikit lebih tinggi dibandingkan tupai muda. Ini mungkin dapat dijelaskan oleh fakta bahwa tupai dewasa memiliki kebutuhan energi yang lebih besar dan lebih berpengalaman dalam mencari makan, sedangkan tupai muda mungkin lebih banyak menghabiskan waktu untuk eksplorasi dan bermain.

11 7. Faceting: Sebaran Spasial Berdasarkan Kelompok Umur

Gunakan facet_wrap() untuk membandingkan sebaran lokasi tupai berdasarkan umur.

squirrel_age_clean <- squirrel %>%
  filter(!is.na(age), age != "?")

ggplot(squirrel_age_clean, aes(x = long, y = lat)) +
  geom_point(alpha = 0.4, size = 1, color = "darkorchid") +
  facet_wrap(~ age) +
  labs(
    title = "Spatial Distribution of Squirrels by Age Group",
    x = "Longitude",
    y = "Latitude"
  ) +
  theme_minimal()

Pertanyaan:

Apakah adult dan juvenile squirrels memiliki pola lokasi yang berbeda?

Interpretasi:

Berdasarkan facet plot, pola sebaran spasial antara tupai dewasa (Adult) dan tupai muda (Juvenile) terlihat serupa — keduanya tersebar di seluruh area Central Park mengikuti pola memanjang taman. Namun, jumlah observasi untuk tupai dewasa jauh lebih banyak dibandingkan juvenile, sehingga panel Adult terlihat lebih padat. Tidak terdapat indikasi kuat bahwa tupai muda terpusat di area khusus yang berbeda dari tupai dewasa, meskipun kepadatan di beberapa sub-area mungkin sedikit berbeda.

12 8. Aesthetic Mapping: Warna dan Bentuk

Gunakan color untuk warna bulu dan shape untuk kelompok umur.

squirrel_clean <- squirrel %>%
  filter(!is.na(primary_fur_color), !is.na(age), age != "?")

ggplot(squirrel_clean, aes(
  x = long,
  y = lat,
  color = primary_fur_color,
  shape = age
)) +
  geom_point(size = 2, alpha = 0.6) +
  scale_color_manual(values = c("Gray" = "gray50", "Cinnamon" = "chocolate3", "Black" = "black")) +
  labs(
    title = "Squirrel Location by Fur Color and Age",
    x = "Longitude",
    y = "Latitude",
    color = "Fur Color",
    shape = "Age"
  ) +
  theme_minimal()

Pertanyaan:

Informasi tambahan apa yang diperoleh ketika warna dan bentuk digunakan secara bersamaan?

Interpretasi:

Dengan menggunakan dua aesthetic sekaligus — warna untuk warna bulu dan bentuk untuk kelompok umur — kita dapat membaca dua dimensi informasi dari satu grafik. Hasilnya menunjukkan bahwa distribusi spasial tupai dewasa dan muda tampak tumpang tindih di hampir seluruh area, dan tidak ada warna bulu tertentu yang eksklusif muncul pada kelompok umur tertentu. Pendekatan multi-aesthetic ini sangat berguna untuk mendeteksi interaksi antar variabel kategorik dalam konteks spasial secara efisien.

13 9. Visualisasi Pilihan Mahasiswa

Pertanyaan Analitis:

Apakah tupai yang sedang mencari makan (foraging) cenderung ditemukan pada area spasial yang berbeda dibandingkan tupai yang tidak sedang foraging?

ggplot(squirrel, aes(x = long, y = lat, color = foraging)) +
  geom_point(alpha = 0.4, size = 1) +
  scale_color_manual(
    values = c("TRUE" = "darkorange", "FALSE" = "lightblue"),
    labels = c("TRUE" = "Foraging", "FALSE" = "Not Foraging"),
    na.value = "gray80"
  ) +
  labs(
    title = "Spatial Distribution of Squirrels by Foraging Behavior",
    subtitle = "Orange = sedang foraging, Biru = tidak foraging",
    x = "Longitude",
    y = "Latitude",
    color = "Foraging"
  ) +
  theme_minimal()

Interpretasi:

Berdasarkan visualisasi ini, tupai yang sedang melakukan foraging (mencari makan) tersebar hampir di seluruh area Central Park, tidak terpusat pada satu zona saja. Titik-titik oranye (foraging) bercampur dengan titik biru di semua bagian taman, yang mengindikasikan bahwa aktivitas mencari makan terjadi secara merata di seluruh kawasan. Ini mungkin mencerminkan bahwa sumber makanan (biji-bijian, kacang, dll.) tersedia secara luas di taman, sehingga perilaku foraging tidak terikat pada lokasi spesifik.

14 10. Kesimpulan

Kesimpulan:

  1. Dominasi tupai abu-abu: Warna bulu Gray (abu-abu) merupakan yang paling umum ditemukan di Central Park, jauh melampaui warna Cinnamon dan Black, yang mencerminkan komposisi genetik populasi tupai di kawasan tersebut.

  2. Distribusi spasial mengikuti bentuk taman: Sebaran geografis tupai secara keseluruhan mengikuti bentuk memanjang Central Park dari selatan ke utara, dengan beberapa area yang lebih padat populasinya, kemungkinan terkait ketersediaan habitat dan makanan.

  3. Warna bulu tidak menentukan lokasi atau perilaku dominan: Tidak ditemukan bukti kuat bahwa warna bulu tertentu cenderung mengelompok di area geografis tertentu, maupun memiliki perbedaan mencolok dalam perilaku seperti chasing atau foraging.

  4. Perbedaan perilaku makan antar kelompok umur bersifat marginal: Tupai dewasa sedikit lebih sering terlihat makan dibandingkan tupai muda, namun perbedaannya tidak dramatis, kemungkinan karena keduanya sama-sama aktif mencari makanan di lingkungan yang sama.

  5. Perilaku foraging tersebar merata: Aktivitas mencari makan (foraging) tidak terpusat di lokasi tertentu, melainkan terjadi di seluruh penjuru taman, yang menunjukkan bahwa sumber daya makanan terdistribusi secara relatif merata di Central Park.

15 Catatan Pengumpulan

Kumpulkan file dalam format HTML. Pastikan dokumen memuat:

  1. Kode R.
  2. Output grafik.
  3. Interpretasi setiap grafik.
  4. Kesimpulan akhir.
  5. [BONUS] Publish di Rpubs! Berikan link Rpubs Anda, dan saya akan berkunjung untuk melihat-lihat. Kalian bisa mulai dari sini: https://rpubs.com/about/getting-started.