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 berisi 3.023 baris dan 36 kolom hasil pengamatan tupai di Central Park, New York City pada tahun 2018. Setiap baris merepresentasikan satu pengamatan tupai. Variabel yang tersedia mencakup:

Beberapa kolom memiliki nilai kosong (NA), seperti primary_fur_color dan age, yang perlu diperhatikan saat visualisasi.


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:

Warna bulu Gray (abu-abu) adalah yang paling dominan, dengan jumlah observasi jauh melampaui warna lainnya (sekitar 2.400+ ekor). Warna Cinnamon (coklat kemerahan) berada di posisi kedua dengan jumlah yang jauh lebih sedikit, diikuti oleh Black (hitam) yang paling jarang ditemukan. Terdapat juga beberapa data dengan nilai kosong (NA) yang menunjukkan warna bulu tidak tercatat. Dominasi tupai abu-abu ini konsisten dengan pengetahuan umum bahwa Eastern Gray Squirrel adalah spesies paling umum di Central Park.


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 = "coral", color = "white") +
  labs(
    title = "Distribution of Squirrel Location Based on X Coordinate",
    x = "Longitude",
    y = "Frequency"
  ) +
  theme_minimal()

Pertanyaan:

Apakah lokasi pengamatan tupai terkonsentrasi pada area tertentu?

Interpretasi:

Ya, pengamatan tupai terkonsentrasi pada area tertentu. Histogram menunjukkan distribusi yang tidak merata sepanjang sumbu longitude (koordinat X). Terdapat beberapa puncak (peaks) yang menandakan area dengan kepadatan pengamatan yang lebih tinggi, sementara beberapa area lainnya relatif jarang. Ini bisa mencerminkan pola alami habitat tupai di dalam Central Park — misalnya, area berpohon lebat atau taman tertentu yang lebih sering dikunjungi dan lebih mudah dijangkau oleh pencatat data.


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, color = "darkgreen", size = 1) +
  labs(
    title = "Spatial Distribution of Squirrels",
    x = "Longitude",
    y = "Latitude"
  ) +
  theme_minimal()

Pertanyaan:

Bagaimana pola sebaran tupai secara spasial?

Interpretasi:

Scatter plot menunjukkan bahwa sebaran tupai mengikuti bentuk memanjang dari utara ke selatan, yang sesuai dengan bentuk fisik Central Park. Tupai tersebar di seluruh area taman, namun dengan kepadatan yang bervariasi — terlihat dari penumpukan titik (clustering) di beberapa lokasi tertentu. Ini menunjukkan bahwa tupai tidak tersebar secara acak dan merata, melainkan cenderung berkumpul di area tertentu yang mungkin memiliki lebih banyak pohon atau sumber makanan.


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.2) +
  scale_color_manual(
    values = c("Gray" = "gray50", "Cinnamon" = "chocolate", "Black" = "black"),
    na.value = "lightblue"
  ) +
  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:

Secara umum, tidak ada pola geografis yang jelas berdasarkan warna bulu. Tupai abu-abu (Gray) mendominasi hampir di seluruh area Central Park karena jumlahnya memang jauh lebih banyak. Tupai berwarna Cinnamon dan Black tersebar di berbagai lokasi tanpa terkonsentrasi secara khusus di satu area tertentu. Hal ini menunjukkan bahwa warna bulu bukan faktor yang menentukan preferensi lokasi tupai — semua warna bulu dapat ditemukan di berbagai penjuru taman.


9 5. Perbandingan Perilaku Chasing Berdasarkan Warna Bulu

Gunakan stacked proportional bar chart untuk melihat proporsi perilaku chasing berdasarkan warna bulu.

# Filter data agar hanya menyertakan baris dengan fur color yang valid
squirrel_clean <- squirrel %>%
  filter(!is.na(primary_fur_color))

ggplot(squirrel_clean, aes(x = primary_fur_color, fill = chasing)) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c("TRUE" = "tomato", "FALSE" = "steelblue"),
                    labels = c("TRUE" = "Chasing", "FALSE" = "Not Chasing")) +
  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:

Terdapat sedikit perbedaan proporsi perilaku chasing antar warna bulu, namun perbedaannya tidak terlalu besar. Secara keseluruhan, sebagian besar tupai — dari semua warna bulu — tidak menunjukkan perilaku chasing (proporsi merah/chasing relatif kecil pada semua kelompok). Tupai Cinnamon dan Black mungkin menunjukkan proporsi chasing yang sedikit berbeda dari Gray, namun karena jumlah data Cinnamon dan Black jauh lebih sedikit, perbedaan ini harus diinterpretasikan dengan hati-hati.


10 6. Perilaku Eating Berdasarkan Kelompok Umur

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

# Filter agar age tidak NA
squirrel_age <- squirrel %>%
  filter(!is.na(age), age != "?")

ggplot(squirrel_age, aes(x = age, fill = eating)) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c("TRUE" = "orange", "FALSE" = "gray70"),
                    labels = c("TRUE" = "Eating", "FALSE" = "Not Eating")) +
  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 bahwa proporsi perilaku makan antara Adult dan Juvenile tidak berbeda secara dramatis. Kedua kelompok umur tampaknya memiliki proporsi “eating” yang relatif serupa. Namun jika terdapat perbedaan kecil, ini bisa disebabkan oleh fakta bahwa tupai muda (Juvenile) mungkin lebih banyak menghabiskan waktu mencari dan belajar menemukan makanan, sedangkan tupai dewasa (Adult) lebih efisien. Perlu dicatat bahwa jumlah data Juvenile jauh lebih sedikit dibanding Adult, sehingga proporsinya kurang stabil secara statistik.


11 7. Faceting: Sebaran Spasial Berdasarkan Kelompok Umur

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

Catatan: Kode asli terdapat bug — sumbu Y menggunakan long (bukan lat), sehingga plot tidak menunjukkan koordinat spasial yang benar. Kode di bawah ini sudah diperbaiki menggunakan y = lat.

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

ggplot(squirrel_age, aes(x = long, y = lat)) +  # PERBAIKAN: y = lat (bukan long)
  geom_point(alpha = 0.4, size = 0.8, color = "purple") +
  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 lokasi Adult dan Juvenile tidak berbeda secara mencolok — keduanya tersebar di seluruh area Central Park dengan pola yang mirip. Perbedaan yang terlihat adalah jumlah titik: panel Adult jauh lebih padat dibanding Juvenile, yang mencerminkan proporsi data, bukan preferensi lokasi. Ini mengindikasikan bahwa tupai muda dan dewasa menggunakan area yang sama di dalam taman, tidak ada segregasi spasial berdasarkan umur.


12 8. Aesthetic Mapping: Warna dan Bentuk

Gunakan color untuk warna bulu dan shape untuk kelompok umur.

# Filter data agar shape dan color valid (tidak NA)
squirrel_valid <- squirrel %>%
  filter(!is.na(primary_fur_color), !is.na(age), age != "?")

ggplot(squirrel_valid, 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" = "chocolate", "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 jenis bulu, bentuk untuk umur), kita dapat membandingkan dua dimensi informasi dalam satu grafik. Hasilnya menunjukkan bahwa tidak ada kombinasi warna bulu + kelompok umur yang mendominasi lokasi tertentu secara eksklusif. Tupai abu-abu dewasa (Gray + Adult) paling banyak ditemukan karena memang mendominasi dataset. Penting untuk diingat bahwa terlalu banyak aesthetic dapat membuat plot sulit dibaca, terutama jika jumlah kategorinya besar — dalam kasus ini, kombinasinya masih cukup terbaca karena hanya ada 3 warna bulu dan 2 kelompok umur.


13 9. Visualisasi Pilihan Mahasiswa

Pertanyaan Analitis:

Apakah tupai yang sedang melakukan foraging (mencari makan) memiliki distribusi lokasi yang berbeda berdasarkan waktu pengamatan (pagi vs sore)?

# Membuat variabel shift (pagi/sore) dari kolom 'shift'
# Kolom 'shift' berisi "AM" (pagi) dan "PM" (sore)
squirrel_foraging <- squirrel %>%
  filter(!is.na(shift), foraging == TRUE)

ggplot(squirrel_foraging, aes(x = long, y = lat, color = shift)) +
  geom_point(alpha = 0.5, size = 1.5) +
  scale_color_manual(
    values = c("AM" = "gold3", "PM" = "steelblue"),
    labels = c("AM" = "Pagi (AM)", "PM" = "Sore (PM)")
  ) +
  facet_wrap(~ shift) +
  labs(
    title = "Lokasi Tupai yang Sedang Foraging: Pagi vs Sore",
    subtitle = "Hanya tupai dengan perilaku foraging = TRUE",
    x = "Longitude",
    y = "Latitude",
    color = "Waktu Pengamatan"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")

Interpretasi:

Visualisasi ini membandingkan lokasi tupai yang sedang foraging (mencari makan) antara sesi pagi (AM) dan sore (PM). Hasilnya menunjukkan bahwa tupai yang foraging ditemukan di seluruh area Central Park pada kedua sesi waktu, dengan pola distribusi yang serupa. Tidak terlihat perbedaan lokasi yang dramatis antara AM dan PM. Namun, jumlah titik pada masing-masing sesi dapat berbeda, yang mencerminkan aktivitas mencari makan yang mungkin lebih tinggi di salah satu waktu. Ini memberikan wawasan bahwa perilaku foraging tidak terikat pada lokasi tertentu di dalam taman.


14 10. Kesimpulan

Kesimpulan:

  1. Dominasi tupai abu-abu: Warna bulu Gray (abu-abu) jauh mendominasi populasi tupai di Central Park, mencerminkan karakteristik spesies Eastern Gray Squirrel yang memang paling umum di kota New York.

  2. Sebaran spasial mengikuti bentuk taman: Distribusi lokasi tupai secara keseluruhan mengikuti pola memanjang utara-selatan sesuai bentuk fisik Central Park, dengan kepadatan bervariasi di beberapa area tertentu.

  3. Warna bulu tidak menentukan preferensi lokasi: Tidak ada bukti bahwa warna bulu tertentu (Gray, Cinnamon, atau Black) cenderung menempati area spasial yang berbeda — semua warna tersebar merata di seluruh taman.

  4. Perbedaan perilaku antar kelompok umur tidak signifikan secara visual: Baik perilaku makan (eating) maupun sebaran spasial antara Adult dan Juvenile tidak menunjukkan perbedaan yang mencolok, meskipun data Adult jauh lebih banyak.

  5. Perilaku foraging tidak terikat waktu maupun lokasi tertentu: Tupai yang sedang mencari makan ditemukan di berbagai lokasi dan pada kedua sesi waktu pengamatan (AM dan PM), menunjukkan fleksibilitas perilaku foraging tupai di lingkungan urban.


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.