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 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.

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() +
  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.

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) +
  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.

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.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.

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.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.

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") +
  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.

10 6. Perilaku Eating Berdasarkan Kelompok Umur

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.

11 7. Faceting: Sebaran Spasial Berdasarkan Kelompok Umur

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.

12 8. Aesthetic Mapping: Warna dan Bentuk

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.

13 9. Visualisasi Pilihan Mahasiswa

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.

14 10. Kesimpulan

Kesimpulan:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

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.