Tren Suhu Planet Bumi

Bagaimana tren suhu planet bumi dari tahun ke tahun? Artikel ini mendemonstrasikan bagaimana mengimpor data tentang perubahan iklim dari sebuah situs web, mengolahnya, dan memvisualisasikannya ke dalam diagram garis. Proses seperti ini dapat diterapkan dalam menyusun desain pembelajaran Matematika yang ramah akan peserta didik dan relevan terhadap isu-isu penting planet bumi.

matematika membumi
pendidikan
perubahan iklim
tutorial
Pengarang
Afiliasi
Terbit

July 31, 2024

Kata kunci

anomali suhu, perubahan iklim, pemanasan global, tidyverse, visualisasi data, diagram garis, Tujuan Pembangunan Berkelanjutan

Beberapa waktu lalu aku mendiskusikan ide Matematika Membumi. Diskusi dalam webinar YPMIPA tersebut membahas sebuah desain pembelajaran yang menggunakan data riil, yaitu data tren suhu global planet bumi dari tahun ke tahun.

Ide seperti itu sebenarnya sudah aku pikirkan dan implementasikan kurang lebih pada tahun 2019. Pada tahun itu, aku mencoba mengajak para mahasiswa calon pendidik matematika tak hanya untuk bermatematika saja, tetapi juga memiliki kesadaran akan pembangunan berkelanjutan. Keseruannya dapat dilihat pada pos media sosial berikut.

Di artikel ini, kita tidak akan membahas desain pembelajaran tersebut. Melainkan, kita akan mengetahui bagaimana mendapatkan data tren suhu planet bumi tersebut, mengolahnya, dan memvisualisasikannya. Seluruh proses ini akan kita lakukan dengan menggunakan R.

Data Tren Suhu Global

Banyak situs web yang menyediakan data tren suhu global. Salah satunya adalah GISTEMP. Dari situs web itu, kita memilih data gabungan antara anomali suhu udara daratan dan anomali suhu air lautan. Apa itu anomali suhu? Anomali suhu merupakan selisih terhadap suhu rata-rata atau garis dasar. Di situs GISTEMP, garis dasar yang digunakan adalah rata-rata suhu pada periode 1951 - 1980.

Langkah awal sebelum kita melakukan proses berikutnya adalah memanggil paket {tidyverse}. Paket tersebut menyediakan berbagai macam fungsi yang akan kita gunakan untuk mencapai tujuan kita.

library(tidyverse)

Tak perlu berlama-lama, mari kita impor data tersebut dengan fungsi read_csv() dari paket {tidyverse}. Alamat fail yang akan kita impor adalah https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv. Baris pertama dalam fail tersebut merupakan keterangan “Land-Ocean: Global Means”. Dengan demikian, kita perlu menambahkan argumen skip = 1 dalam fungsi read_csv() agar data kita tidak memuat baris tersebut. Fail tersebut juga menggunakan simbol *** sebagai penanda NA. Untuk itu, kita juga perlu menambahkan argumen na = "***" ke dalam fungsi tersebut. Kita namai data kita tersebut dengan tren_suhu_global.

tren_suhu_global <- read_csv(
  "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv",
  skip = 1,
  na = "***"
)

Sekarang kita memiliki data tren_suhu_global. Untuk melihat beberapa baris awal data tersebut, kita dapat menggunakan fungsi head().

head(tren_suhu_global)
# A tibble: 6 × 19
   Year   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  1880 -0.2  -0.25 -0.09 -0.16 -0.09 -0.22 -0.2  -0.1  -0.15 -0.22 -0.22 -0.19
2  1881 -0.2  -0.15  0.02  0.04  0.07 -0.19  0.01 -0.04 -0.16 -0.22 -0.19 -0.07
3  1882  0.16  0.14  0.05 -0.16 -0.14 -0.22 -0.16 -0.07 -0.14 -0.23 -0.17 -0.36
4  1883 -0.29 -0.37 -0.12 -0.18 -0.18 -0.07 -0.07 -0.14 -0.22 -0.11 -0.24 -0.11
5  1884 -0.13 -0.08 -0.36 -0.4  -0.33 -0.35 -0.31 -0.28 -0.27 -0.25 -0.33 -0.31
6  1885 -0.59 -0.34 -0.26 -0.42 -0.45 -0.43 -0.33 -0.31 -0.28 -0.23 -0.24 -0.1 
# ℹ 6 more variables: `J-D` <dbl>, `D-N` <dbl>, DJF <dbl>, MAM <dbl>,
#   JJA <dbl>, SON <dbl>

Kita juga dapat menggunakan fungsi glimpse() dari {tidyverse} untuk melihat gambaran umum dari data tersebut.

glimpse(tren_suhu_global)
Rows: 145
Columns: 19
$ Year  <dbl> 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890…
$ Jan   <dbl> -0.20, -0.20, 0.16, -0.29, -0.13, -0.59, -0.44, -0.72, -0.34, -0…
$ Feb   <dbl> -0.25, -0.15, 0.14, -0.37, -0.08, -0.34, -0.51, -0.57, -0.36, 0.…
$ Mar   <dbl> -0.09, 0.02, 0.05, -0.12, -0.36, -0.26, -0.43, -0.36, -0.41, 0.0…
$ Apr   <dbl> -0.16, 0.04, -0.16, -0.18, -0.40, -0.42, -0.28, -0.35, -0.20, 0.…
$ May   <dbl> -0.09, 0.07, -0.14, -0.18, -0.33, -0.45, -0.24, -0.31, -0.22, -0…
$ Jun   <dbl> -0.22, -0.19, -0.22, -0.07, -0.35, -0.43, -0.35, -0.25, -0.17, -…
$ Jul   <dbl> -0.20, 0.01, -0.16, -0.07, -0.31, -0.33, -0.18, -0.26, -0.10, -0…
$ Aug   <dbl> -0.10, -0.04, -0.07, -0.14, -0.28, -0.31, -0.31, -0.36, -0.16, -…
$ Sep   <dbl> -0.15, -0.16, -0.14, -0.22, -0.27, -0.28, -0.24, -0.26, -0.12, -…
$ Oct   <dbl> -0.22, -0.22, -0.23, -0.11, -0.25, -0.23, -0.28, -0.36, 0.01, -0…
$ Nov   <dbl> -0.22, -0.19, -0.17, -0.24, -0.33, -0.24, -0.28, -0.26, 0.03, -0…
$ Dec   <dbl> -0.19, -0.07, -0.36, -0.11, -0.31, -0.10, -0.26, -0.33, -0.04, -…
$ `J-D` <dbl> -0.18, -0.09, -0.11, -0.18, -0.28, -0.33, -0.32, -0.37, -0.17, -…
$ `D-N` <dbl> NA, -0.10, -0.09, -0.20, -0.27, -0.35, -0.30, -0.36, -0.20, -0.0…
$ DJF   <dbl> NA, -0.18, 0.07, -0.34, -0.11, -0.41, -0.35, -0.52, -0.34, 0.01,…
$ MAM   <dbl> -0.12, 0.04, -0.08, -0.16, -0.36, -0.38, -0.32, -0.34, -0.28, 0.…
$ JJA   <dbl> -0.17, -0.07, -0.15, -0.10, -0.31, -0.36, -0.28, -0.29, -0.14, -…
$ SON   <dbl> -0.20, -0.19, -0.18, -0.19, -0.28, -0.25, -0.27, -0.29, -0.03, -…

Dari luaran fungsi tersebut, kita dapat melihat bahwa data kita memuat 145 baris dan 19 kolom. Informasi ini berguna untuk proses berikutnya.

Bergulat dengan Data

Gulat tidak hanya dilombakan di olimpiade #Paris2024, tetapi juga umum dilakukan terhadap data. Sekarang kita akan bergulat dengan data. Seperti olahraga gulat yang menantang, bergulat dengan data juga tak kalah menantang. Akan tetapi, tantangan itu akan menghasilkan data yang rapi. Kita lakukan pergulatan ini setahap demi setahap.

Ketika kita menggunakan fungsi glimpse() sebelumnya, kita tahu bahwa data kita memuat 19 kolom. Kolom yang akan kita olah di sini adalah 13 kolom pertama. Untuk itu, pada tahap pertama, kita gunakan fungsi select() dari {tidyverse} untuk memilih ketigabelas kolom tersebut. Kita juga dapat mengganti nama kolom pertama yang awalnya Year menjadi tahun dengan menggunakan rename() dari {tidyverse}. Untuk melihat hasilnya kita dapat menggunakan fungsi head() lagi.

tren_suhu_global <- tren_suhu_global |> 
  select(1:13) |> 
  rename(tahun = Year)

head(tren_suhu_global)
# A tibble: 6 × 13
  tahun   Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  1880 -0.2  -0.25 -0.09 -0.16 -0.09 -0.22 -0.2  -0.1  -0.15 -0.22 -0.22 -0.19
2  1881 -0.2  -0.15  0.02  0.04  0.07 -0.19  0.01 -0.04 -0.16 -0.22 -0.19 -0.07
3  1882  0.16  0.14  0.05 -0.16 -0.14 -0.22 -0.16 -0.07 -0.14 -0.23 -0.17 -0.36
4  1883 -0.29 -0.37 -0.12 -0.18 -0.18 -0.07 -0.07 -0.14 -0.22 -0.11 -0.24 -0.11
5  1884 -0.13 -0.08 -0.36 -0.4  -0.33 -0.35 -0.31 -0.28 -0.27 -0.25 -0.33 -0.31
6  1885 -0.59 -0.34 -0.26 -0.42 -0.45 -0.43 -0.33 -0.31 -0.28 -0.23 -0.24 -0.1 

Sekarang kita mendapatkan data yang memuat 13 kolom. Kolom pertama merupakan tahun, kolom kedua sampai ketiga belas merupakan bulan Januari sampai Desember. Isi sel kolom kedua sampai ketigabelas merupakan anomali suhu.

Sampai di sini, aku teringat terhadap salah satu adegan di sebuah serial TV yang berjudul Friends. Dalam episode yang berjudul “The One with the Cop”, Ross meminta Chandler untuk mem-pivot sofa yang mereka angkat.

Perintah Ross tersebut juga dapat diterapkan terhadap data kita. Kita dapat mem-pivot (memutar) data kita dengan menggunakan fungsi pivot_longer(). Dengan fungsi tersebut, data kita yang awalnya melebar akan berubah bentuknya menjadi data yang memanjang. Oleh karena itu, di tahap kedua, kita perlu memutar data kita agar menjadi data yang memanjang.

tren_suhu_global <- tren_suhu_global |> 
  pivot_longer(
    cols = 2:13,
    names_to = "bulan",
    values_to = "anomali_suhu"
  )

head(tren_suhu_global)
# A tibble: 6 × 3
  tahun bulan anomali_suhu
  <dbl> <chr>        <dbl>
1  1880 Jan          -0.2 
2  1880 Feb          -0.25
3  1880 Mar          -0.09
4  1880 Apr          -0.16
5  1880 May          -0.09
6  1880 Jun          -0.22

Mengapa kita memerlukan data yang memanjang? Data memanjang tersebut akan memudahkan kita untuk mengolahnya pada tahapan berikutnya.

Tahap ketiga, kita perlu menggabungkan nilai sel dalam kolom pertama dan kedua untuk membuat sebuah kolom baru, yaitu tanggal, yang formatnya Date.

pemetaan_bulan <- c(
  "Jan" = "01",
  "Feb" = "02",
  "Mar" = "03",
  "Apr" = "04",
  "May" = "05",
  "Jun" = "06",
  "Jul" = "07",
  "Aug" = "08",
  "Sep" = "09",
  "Oct" = "10",
  "Nov" = "11",
  "Dec" = "12"
)

tren_suhu_global <- tren_suhu_global |> 
  mutate(
    tanggal = as.Date(
      paste(tahun, pemetaan_bulan[bulan], "01", sep = "-")
    )
  )

head(tren_suhu_global)
# A tibble: 6 × 4
  tahun bulan anomali_suhu tanggal   
  <dbl> <chr>        <dbl> <date>    
1  1880 Jan          -0.2  1880-01-01
2  1880 Feb          -0.25 1880-02-01
3  1880 Mar          -0.09 1880-03-01
4  1880 Apr          -0.16 1880-04-01
5  1880 May          -0.09 1880-05-01
6  1880 Jun          -0.22 1880-06-01

Karena kolom tahun dan bulan sudah diwakili oleh kolom tanggal, kita dapat mengabaikan kedua kolom tersebut.

tren_suhu_global <- tren_suhu_global |> 
  select(tanggal, anomali_suhu)

head(tren_suhu_global)
# A tibble: 6 × 2
  tanggal    anomali_suhu
  <date>            <dbl>
1 1880-01-01        -0.2 
2 1880-02-01        -0.25
3 1880-03-01        -0.09
4 1880-04-01        -0.16
5 1880-05-01        -0.09
6 1880-06-01        -0.22

Nah, sekarang kita mendapatkan data yang rapi. Data kita sekarang hanya memuat dua variabel, yaitu tanggal dan anomali_suhu. Selanjutnya kita akan memvisualisasikan anomali_suhu setiap tanggal-nya.

Visualisasi Data

Data yang rapi yang sudah di tangan. Selanjutnya, kita visualisasikan data tersebut ke dalam diagram garis untuk melihat tren anomali_suhu setiap tanggal-nya. Untuk melakukannya, kita dapat menggunakan fungsi ggplot() dan peranakannya. Hasilnya disajikan pada Gambar 1.

diagram_garis <- tren_suhu_global |> 
  ggplot(aes(x = tanggal, y = anomali_suhu)) + 
  geom_line()

print(diagram_garis)
Gambar 1: Tren anomali_suhu setiap tanggal-nya.

Diagram pada Gambar 1 dapat kita modifikasi. Misalnya, kita dapat mengubah judul sumbu-x dan y pada diagram tersebut. Kita juga dapat mengubah warna garis serta memberikan judul, anak judul, dan takarir pada diagram tersebut. Sentuhan terakhir, kita dapat memilih tema theme_minimal() dan menambahkan pola tren tersebut dengan geom_smooth(). Hasilnya ditunjukkan pada Gambar 2.

diagram_garis + 
  geom_line(color = "#427D9D") + 
  geom_smooth(
    method = "gam",
    formula = y ~ s(x, bs = "cs"),
    color = "#164863"
  ) + 
  theme_minimal() + 
  labs(
    title = "Tren Anomali Suhu Setiap Waktunya",
    subtitle = "Anomali suhu relatif terhadap rerata suhu pada 1951 - 1980",
    x = "Waktu",
    y = "Anomali Suhu (°C)",
    caption = "Data: GISTEMP"
  )
Gambar 2: Tren anomali_suhu setiap tanggal-nya yang sudah diperbaiki.

Catatan Akhir

Kita telah memvisualisasikan tren suhu planet bumi dari tahun ke tahun, yaitu mulai 1880 sampai 2024. Untuk mendapatkan visualisasi pada Gambar 2, pertama kita impor data dari situs web GISTEMP. Hal ini telah dipaparkan pada Bagian 1. Kedua, kita telah bergulat dengan data tersebut pada Bagian 2 untuk mendapatkan data yang rapi. Ketiga, data yang rapi tersebut selanjutnya kita gunakan untuk memvisualisasikan tren suhu planet bumi setiap waktunya pada Bagian 3.

Proses yang didemonstrasikan pada artikel ini dapat digunakan untuk menyusun desain pembelajaran Matematika yang menggunakan data riil, khususnya data tentang tema perubahan iklim. Penggunaan data perubahan iklim tersebut tidak hanya dapat memupuk kesadaran peserta didik akan isu planet bumi yang ditinggalinya, tetapi juga memudahkan mereka untuk bermatematika menggunakan konteks di sekitarnya.

Penggunaan Kembali