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

Tuliskan penjelasan singkat mengenai struktur data.

Interpretasi:

Dataset ini merupakan data hasil survei tupai di Central Park, New York City, yang dikumpulkan pada tahun 2018. Dataset memiliki 3.023 baris dan 36 kolom yang mencakup berbagai informasi, antara lain:

Secara keseluruhan, data cukup lengkap namun terdapat beberapa nilai kosong (NA) terutama pada kolom primary_fur_color dan age. # 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:

Warna yang paling dominan adalah Gray dengan jumlah lebih dari 2.000 ekor. Warna bulu Cinnamon berada di posisi kedua dengan jumlah yang jauh lebih sedikit, sementara warna Black merupakan yang paling jarang ditemukan. Selain itu, terdapat sebagian kecil observasi dengan nilai NA (tidak tercatat).

5 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 koordinat X (longitude) tupai tidak merata secara seragam, melainkan terdapat beberapa puncak (pola multimodal) yang menunjukkan adanya area-area dengan kepadatan pengamatan yang lebih tinggi. Konsentrasi terbesar terlihat pada kisaran longitude -73.97 hingga -73.96, yang sesuai dengan area tengah hingga selatan Central Park. Hal ini menunjukkan bahwa pengamat cenderung menemukan atau mencatat tupai lebih banyak di jalur-jalur atau area terbuka tertentu dalam taman, kemungkinan karena kebiasaan tupai berkumpul di sekitar sumber makanan.

6 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 memperlihatkan bahwa tupai tersebar di seluruh area Central Park, mengikuti bentuk memanjang dari bawah ke atas yang sesuai dengan bentuk geografis taman tersebut. Titik-titik pengamatan relatif tersebar merata, tetapi terlihat sedikit lebih padat di bagian tengah dan selatan taman. Tidak ada kluster yang sangat terisolasi, yang berarti tupai hadir di hampir semua bagian taman. Pola ini menunjukkan bahwa habitat Central Park secara keseluruhan sesuai untuk kehidupan tupai, tanpa ada zona eksklusif yang sangat mendominasi.

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

Grafik scatter plot menunjukkan bahwa tupai abu-abu, cinnamon, dan hitam tersebar merata dan saling membaur di Central Park. Tidak ada zona khusus untuk warna bulu tertentu. Dimana hal ini wajar karena perbedaan warna bulu ini cuma faktor genetik dan sama sekali tidak memengaruhi selera tempat tinggal mereka di dalam taman.

8 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 relatif kecil pada semua kelompok warna bulu (sebagian besar nilai adalah FALSE). Secara keseluruhan, perbedaan proporsi perilaku chasing antar kelompok warna bulu tidak terlalu signifikan secara visual. Tupai dengan warna bulu Cinnamon terlihat sedikit memiliki proporsi chasing yang lebih tinggi dibandingkan Black, namun perbedaannya sangat kecil. Hal ini menunjukkan bahwa warna bulu kemungkinan bukan faktor penentu perilaku chasing. Perilaku ini lebih mungkin dipengaruhi oleh faktor situasional seperti ketersediaan makanan atau kehadiran individu lain.

9 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 bahwa proporsi perilaku makan (eating = TRUE) sedikit lebih tinggi pada kelompok Juvenile dibanding Adult. Dimana hal ini wajar karena tupai muda kemungkinan butuh energi lebih banyak untuk masa pertumbuhan. Meski begitu, selisihnya tidak terlalu besar. Di sisi lain, masih ada data yang kurang lengkap dengan munculnya kategori ? dan NA pada kolom age. Secara keseluruhan, aktivitas makan ini memang biasanya dilakukan oleh tupai dari semua kelompok umur.

10 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:

Berdasarkan facet plot, jumlah tupai Adult jauh lebih mendominasi dan tersebar luas di seluruh Central Park dibandingkan kelompok Juvenile. Meski jumlahnya beda jauh, pola sebaran keduanya mirip yaitu memanjang dari bawah ke atas mengikuti bentuk taman tanpa ada wilayah eksklusif untuk umur tertentu. Sedikitnya data kelompok Juvenile bisa jadi karena tupai muda memang lebih sulit diidentifikasi di lapangan, atau populasi dewasa saat survei memang sedang dominan. Sementara itu, kategori ? dan NA tampak tersebar acak di seluruh area.

11 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:

  1. Semua variasi warna dan umur tersebar merata di seluruh taman, memperkuat bukti bahwa tidak ada pembagian wilayah berdasarkan kedua faktor ini.

  2. Titik segitiga (Juvenile) jumlahnya lebih sedikit dan menyebar di antara titik lingkaran (Adult) tanpa membentuk kelompok khusus.

  3. Peta ini dengan jelas menggambarkan keragaman populasi tupai di Central Park yang hidup membaur di satu wilayah yang sama.

  4. Kekurangannya, grafik ini terasa agak penuh (cluttered) karena padatnya titik. Oleh karena itu, pengaturan nilai alpha sangat penting supaya titik-titik yang tumpang tindih tetap bisa terbaca dengan jelas.

12 9. Visualisasi Pilihan Mahasiswa

Buat satu visualisasi tambahan berdasarkan pertanyaan analitis yang Anda susun sendiri.

Contoh pertanyaan:

squirrel_clean <- squirrel %>%
  filter(age %in% c("Adult", "Juvenile")) %>%
  mutate(
    human_response = case_when(
      approaches == TRUE ~ "Approaches Human",
      runs_from == TRUE ~ "Runs From Human",
      TRUE ~ "Indifferent"
    )
  )

ggplot(squirrel_clean, aes(x = human_response, fill = running)) +
  geom_bar(position = "fill") +
  facet_wrap(~ age) +
  labs(
    title = "Running Behavior by Human Interaction Type and Age Group",
    x = "Response to Human",
    y = "Proportion",
    fill = "Running"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 15, hjust = 1))

Pertanyaan Analitis:

Apakah perilaku running berbeda antara tupai yang berinteraksi (mendekati manusia) dan yang menghindar (runs_from) berdasarkan kelompok umur?

Interpretasi:

  1. Tupai yang kabur (runs_from) punya proporsi berlari (running = TRUE) yang jauh lebih tinggi dibanding kelompok lain, baik pada Adult maupun Juvenile. Ini sangat masuk akal, karena tupai yang takut atau menghindar pasti dalam posisi berlari.

  2. Tupai yang mendekati manusia (Approaches) atau yang cuek (Indifferent) cenderung jarang berlari. Ini menunjukkan kalau tupai yang tenang atau percaya diri biasanya bergerak lebih santai.

  3. Pola ini konsisten di kedua kelompok umur, artinya respons tupai terhadap manusia tidak terlalu dipengaruhi oleh faktor usia.

13 10. Kesimpulan

Tuliskan 3–5 insight utama yang diperoleh dari visualisasi squirrel data.

Kesimpulan:

  1. Tupai abu-abu menjadi warna yang paling dominan di Central Park karena jumlahnya jauh mengalahkan warna Cinnamon dan Black sebagai ciri genetik utama spesies di sana.
  2. Semua jenis tupai membaur di seluruh taman secara merata tanpa ada pembagian wilayah khusus berdasarkan warna bulu maupun faktor usia mereka.
  3. Aktivitas kejar-kejaran sangat jarang ditemukan sementara tupai muda terlihat sedikit lebih aktif makan karena kemungkinan butuh energi ekstra untuk pertumbuhan.
  4. Data tupai dewasa jauh lebih mendominasi karena populasinya memang lebih banyak atau bisa jadi karena tupai muda cenderung lebih sulit diidentifikasi di lapangan.
  5. Respons ketakutan pada manusia membuat tupai lebih banyak berlari dibandingkan dengan tupai yang memilih untuk mendekat atau sekadar bersikap cuek.

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