Prestasi Indonesia di Olimpiade

Indonesia menyabet dua emas dan satu perunggu di Olimpiade Paris 2024. Prestasi itu diraih berkat performa ciamik Veddriq Leonardo, Rizki Juniansyah, dan Gregoria Mariska Tunjung. Bagaimana dengan performa Indonesia di semua perhelatan olimpiade yang pernah diikutinya?
olahraga
statistik dunia
tutorial
visualisasi data
Pengarang
Afiliasi
Terbit

August 17, 2024

Kata kunci

kemerdekaan, Republik Indonesia, nusantara, olimpiade, Olimpiade Musim Panas 2024, Olimpiade Paris 2024, diagram batang, diagram garis, diagram alir

Olimpiade Musim Panas 2024 telah usai. Olimpiade itu meninggalkan banyak cerita menarik. Salah satu yang banyak diperbincangkan adalah Kim Yeji dan Yusuf Dikeç. Atlet yang secara berturut-turut membela negara Turki dan Korea Selatan tersebut tidak hanya mengukir prestasi, tetapi juga meninggalkan bekas karena gaya dan penampilannya.

Akan tetapi, kita tidak akan memperbincangkan kedua atlet itu. Di suasana peringatan kemerdekaan Republik Indonesia ini, kita akan melihat prestasi atlet-atlet Indonesia di Olimpiade Musim Panas. Pada Olimpiade Paris 2024, Indonesia berhasil menyabet dua medali emas dan satu perunggu. Dua medali emas tersebut disabet oleh Veddriq Leonardo (panjat tebing) dan Rizki Juniansyah (angkat besi) sedangkan medali perunggunya diraih oleh Gregoria Mariska Tunjung (bulu tangkis).

Bagaimana dengan pagelaran olimpiade-olimpiade sebelumnya? Kita akan menjawab pertanyaan ini dengan menggunakan data yang tersedia di laman Wikipedia.

Mempersiapkan Data

Kita akan melakukan analisis dan visualisasi data dengan pemrograman R. Pertama, kita panggil paket-paket yang diperlukan. Kita gunakan {rvest} untuk mengimpor data dari sebuah laman web, {tidyverse} untuk menganalisis dan memvisualisasikan data, dan {ggstream} untuk membuat diagram alir.

library(rvest)
library(tidyverse)
library(ggstream)

Mengimpor Data

Sekarang kita mengimpor datanya. Data tersebut berasal dari laman Wikipedia. Data yang kita impor adalah data jumlah medali berdasarkan olimpiade dan cabang olahraganya. Untuk melakukannya, kita menggunakan baris kode seperti berikut.

html <- read_html("https://id.wikipedia.org/w/index.php?title=Indonesia_pada_Olimpiade&oldid=26147360")

daftar_tabel <- html |> 
  html_elements(".wikitable") |> 
  html_table()

print(daftar_tabel)
[[1]]
# A tibble: 50 × 5
   Medali       Nama                                    Olimpiade Olahraga Nomor
   <chr>        <chr>                                   <chr>     <chr>    <chr>
 1 01  Emas     Hartono, RudyRudy Hartono               Munich 1… Bulu ta… Tung…
 2 01  Emas     Chandra, AdeAde Chandra dan Christian … Munich 1… Bulu ta… Tung…
 3 02  Perak    Dewi, UtamiUtami Dewi                   Munich 1… Bulu ta… Tung…
 4 03  Perunggu Hadinata, ChristianChristian Hadinata … Munich 1… Bulu ta… Gand…
 5 02  Perak    Sugiarto, IcukIcuk Sugiarto             Seoul 19… Bulu ta… Tung…
 6 02  Perak    Handayani, LiliesLilies Handayani, Nur… Seoul 19… Panahan  Tim …
 7 02  Perak    Dirc Talumewo                           Barcelon… Taekwon… Putr…
 8 02  Perak    Rahmi Kurnia                            Barcelon… Taekwon… Putr…
 9 02  Perak    Susilawati                              Barcelon… Taekwon… Putr…
10 03  Perunggu Jefi Tri Aji                            Barcelon… Taekwon… Putr…
# ℹ 40 more rows

[[2]]
# A tibble: 22 × 9
   Olimpiade  `Jumlah atlet` `Pembawa bendera` Jumlah cabangolahrag…¹ `01  Emas`
   <chr>      <chr>          <chr>             <chr>                  <chr>     
 1 Helsinki … 3              ""                3                      0         
 2 Melbourne… 22             ""                6                      0         
 3 Roma 1960  22             ""                8                      0         
 4 Tokyo 1964 Tidak ikut     "Tidak ikut"      Tidak ikut             Tidak ikut
 5 Mexico Ci… 6              ""                2                      0         
 6 München 1… 6              "Wiem Gommies"    5                      0         
 7 Montreal … 7              "Donald Pandiang… 5                      0         
 8 Moskwa 19… Tidak ikut     "Tidak ikut"      Tidak ikut             Tidak ikut
 9 Los Angel… 16             "Luki Niode"      6                      0         
10 Seoul 1988 29             "Tonny Maringgi"  11                     0         
# ℹ 12 more rows
# ℹ abbreviated name: ¹​`Jumlah cabangolahraga yang diikuti`
# ℹ 4 more variables: `02  Perak` <chr>, `03  Perunggu` <chr>, Total <chr>,
#   Peringkat <chr>

[[3]]
# A tibble: 5 × 5
  Cabang                   Emas Perak Perunggu Total
  <chr>                   <int> <int>    <int> <int>
1 Bulu tangkis  (detail)      8     6        8    22
2 Angkat besi  (detail)       1     7        8    16
3 Panjat tebing  (detail)     1     0        0     1
4 Panahan  (detail)           0     1        0     1
5 Total (4 cabang)           10    14       16    40

Apa yang dilakukan baris kode di atas? Pertama, kita membaca html pada laman Wikipedia tersebut dan menyimpannya sebagai sebuah objek dengan nama html. Setelah itu, objek html tersebut kita cari elemennya yang bernama .wikitable.1 Setelah elemen tersebut ditemukan, kita baca elemen tersebut sebagai tabel dengan fungsi html_table(). Hasil dari proses ini kemudian kita namai sebagai daftar_tabel. Untuk melihat apa isi daftar_tabel tersebut, kita dapat menggunakan fungsi print().

Setelah kita lihat dengan print(), ternyata daftar_tabel merupakan sebuah daftar (list). Data yang kita inginkan, yaitu data jumlah medali berdasarkan olimpiade dan cabang olahraganya, merupakan elemen kedua dan ketiga dari daftar_tabel. Untuk itu, kita dapat mengekstrak kedua data tersebut dengan daftar_tabel[[1]] dan daftar_tabel[[2]]. Kita namai hasilnya dengan data_dsr_olimpiade dan data_dsr_cabang.

data_dsr_olimpiade <- daftar_tabel[[2]]
data_dsr_cabang <- daftar_tabel[[3]]

Merapikan Data

Saat ini kita telah memiliki dua data, yaitu data_dsr_olimpiade (data jumlah medali berdasarkan penyelenggaraan olimpiade) dan data_dsr_cabang (data jumlah medali berdasarkan cabang olahraga). Kita rapikan kedua data tersebut. Untuk merapikan data_dsr_olimpiade, kita lihat isi data tersebut dengan fungsi print().

print(data_dsr_olimpiade)
# A tibble: 22 × 9
   Olimpiade  `Jumlah atlet` `Pembawa bendera` Jumlah cabangolahrag…¹ `01  Emas`
   <chr>      <chr>          <chr>             <chr>                  <chr>     
 1 Helsinki … 3              ""                3                      0         
 2 Melbourne… 22             ""                6                      0         
 3 Roma 1960  22             ""                8                      0         
 4 Tokyo 1964 Tidak ikut     "Tidak ikut"      Tidak ikut             Tidak ikut
 5 Mexico Ci… 6              ""                2                      0         
 6 München 1… 6              "Wiem Gommies"    5                      0         
 7 Montreal … 7              "Donald Pandiang… 5                      0         
 8 Moskwa 19… Tidak ikut     "Tidak ikut"      Tidak ikut             Tidak ikut
 9 Los Angel… 16             "Luki Niode"      6                      0         
10 Seoul 1988 29             "Tonny Maringgi"  11                     0         
# ℹ 12 more rows
# ℹ abbreviated name: ¹​`Jumlah cabangolahraga yang diikuti`
# ℹ 4 more variables: `02  Perak` <chr>, `03  Perunggu` <chr>, Total <chr>,
#   Peringkat <chr>

Data tersebut memiliki 22 baris dan 9 variabel/kolom. Kita dapat melihat beberapa baris terakhirnya dengan fungsi tail().

tail(data_dsr_olimpiade)
# A tibble: 6 × 9
  Olimpiade   `Jumlah atlet` `Pembawa bendera` Jumlah cabangolahrag…¹ `01  Emas`
  <chr>       <chr>          <chr>             <chr>                  <chr>     
1 Rio de Jan… 28             "Maria Natalia L… "7"                    "1"       
2 Tokyo 2020  28             "Rio Waida"       "8"                    "1"       
3 Paris 2024  29             "Maryam March Ma… "12"                   "2"       
4 Los Angele… Pertandingan … ""                ""                     ""        
5 Brisbane 2… Pertandingan … ""                ""                     ""        
6 Total       Total          "Total"           "Total"                "9"       
# ℹ abbreviated name: ¹​`Jumlah cabangolahraga yang diikuti`
# ℹ 4 more variables: `02  Perak` <chr>, `03  Perunggu` <chr>, Total <chr>,
#   Peringkat <chr>

Ternyata, data_dsr_olimpiade tersebut juga memuat dua olimpiade yang belum terlaksana dan satu baris total. Kita hilangkan ketiga baris tersebut dengan menggunakan slice_head(). Dengan demikian, kita hanya menggunakan 22 - 3 = 19 barisnya saja.

data_dsr_olimpiade <- data_dsr_olimpiade |> 
  slice_head(n = 19)

Untuk mengeceknya lagi, kita dapat menggunakan tail() lagi.

tail(data_dsr_olimpiade)
# A tibble: 6 × 9
  Olimpiade   `Jumlah atlet` `Pembawa bendera` Jumlah cabangolahrag…¹ `01  Emas`
  <chr>       <chr>          <chr>             <chr>                  <chr>     
1 Athena 2004 38             Christian Hadina… 14                     1         
2 Beijing 20… 24             Oka Sulaksana     7                      1         
3 London 2012 22             I Gede Siman Sud… 8                      0         
4 Rio de Jan… 28             Maria Natalia Lo… 7                      1         
5 Tokyo 2020  28             Rio Waida         8                      1         
6 Paris 2024  29             Maryam March Mah… 12                     2         
# ℹ abbreviated name: ¹​`Jumlah cabangolahraga yang diikuti`
# ℹ 4 more variables: `02  Perak` <chr>, `03  Perunggu` <chr>, Total <chr>,
#   Peringkat <chr>

Kita telah mengkonfirmasi bahwa data_dsr_olimpiade sudah berisi baris-baris yang kita butuhkan saja. Selanjutnya, kita lihat gambaran umum data tersebut dengan fungsi glimpse().

glimpse(data_dsr_olimpiade)
Rows: 19
Columns: 9
$ Olimpiade                            <chr> "Helsinki 1952", "Melbourne 1956"…
$ `Jumlah atlet`                       <chr> "3", "22", "22", "Tidak ikut", "6…
$ `Pembawa bendera`                    <chr> "", "", "", "Tidak ikut", "", "Wi…
$ `Jumlah cabangolahraga yang diikuti` <chr> "3", "6", "8", "Tidak ikut", "2",…
$ `01  Emas`                           <chr> "0", "0", "0", "Tidak ikut", "0",…
$ `02  Perak`                          <chr> "0", "0", "0", "Tidak ikut", "0",…
$ `03  Perunggu`                       <chr> "0", "0", "0", "Tidak ikut", "0",…
$ Total                                <chr> "0", "0", "0", "Tidak ikut", "0",…
$ Peringkat                            <chr> "", "", "", "Tidak ikut", "", "",…

Setelah melihat hasilnya, kita gunakan lima variabel dari data_dsr_olimpiade saja, yaitu Olimpiade, 01  Emas, 02  Perak, 03  Perunggu, dan Peringkat. Setelah itu kita buat data tersebut menjadi data yang memanjang dengan pivot_longer() dan kita rapikan isinya. Untuk memudahkan analisis data selanjutnya, kita tambahkan variabel tahun. Variabel ini kita ekstrak dari variabel Olimpiade karena nilai-nilai variabel tersebut memuat tahun, misalnya “Helsinki 1952” dan “Melbourne 1956”.

data_dsr_olimpiade <- data_dsr_olimpiade |> 
  select(Olimpiade, `01  Emas`, `02  Perak`, `03  Perunggu`, Peringkat) |> 
  pivot_longer(
    cols = contains("0"),
    names_to = "medali",
    values_to = "banyak"
  ) |> 
  rename(
    olimpiade = Olimpiade,
    peringkat = Peringkat
  ) |> 
  mutate(
    tahun = as.integer(str_extract(olimpiade, "\\d{4}")),
    peringkat = ifelse(
      peringkat == "" | peringkat == "Tidak ikut",
      NA, as.integer(peringkat)
    ),
    medali = substr(medali, 5, nchar(medali)),
    banyak = ifelse(
      banyak == "Tidak ikut",
      NA, as.integer(banyak)
    )
  ) |> 
  select(
    tahun, olimpiade, medali, banyak, peringkat
  )

print(data_dsr_olimpiade)
# A tibble: 57 × 5
   tahun olimpiade      medali   banyak peringkat
   <int> <chr>          <chr>     <int>     <int>
 1  1952 Helsinki 1952  Emas          0        NA
 2  1952 Helsinki 1952  Perak         0        NA
 3  1952 Helsinki 1952  Perunggu      0        NA
 4  1956 Melbourne 1956 Emas          0        NA
 5  1956 Melbourne 1956 Perak         0        NA
 6  1956 Melbourne 1956 Perunggu      0        NA
 7  1960 Roma 1960      Emas          0        NA
 8  1960 Roma 1960      Perak         0        NA
 9  1960 Roma 1960      Perunggu      0        NA
10  1964 Tokyo 1964     Emas         NA        NA
# ℹ 47 more rows

data_dsr_olimpiade telah siap tersaji. Sekarang saatnya kita beralih ke data_dsr_cabang. Sebelum merapikan data ini, kita lihat datanya terlebih dahulu.

print(data_dsr_cabang)
# A tibble: 5 × 5
  Cabang                   Emas Perak Perunggu Total
  <chr>                   <int> <int>    <int> <int>
1 Bulu tangkis  (detail)      8     6        8    22
2 Angkat besi  (detail)       1     7        8    16
3 Panjat tebing  (detail)     1     0        0     1
4 Panahan  (detail)           0     1        0     1
5 Total (4 cabang)           10    14       16    40

Untuk merapikan data tersebut, kita dapat melakukan beberapa hal. Pertama, kita hapus baris dan kolom terakhirnya (baris dan kolom total). Kedua, kita rapikan isi dari variabel Cabang. Ketiga, kita buat data tersebut menjadi data yang memanjang. Terakhir, kita konsistenkan nama variabelnya.

data_dsr_cabang <- data_dsr_cabang |> 
  select(-Total) |> 
  filter(Cabang != "Total (4 cabang)") |> 
  mutate(
    Cabang = str_trim(str_remove(Cabang, " \\(detail\\)"))
  ) |> 
  pivot_longer(
    cols = -Cabang,
    names_to = "medali",
    values_to = "banyak"
  ) |> 
  rename(cabang = Cabang)

print(data_dsr_cabang)
# A tibble: 12 × 3
   cabang        medali   banyak
   <chr>         <chr>     <int>
 1 Bulu tangkis  Emas          8
 2 Bulu tangkis  Perak         6
 3 Bulu tangkis  Perunggu      8
 4 Angkat besi   Emas          1
 5 Angkat besi   Perak         7
 6 Angkat besi   Perunggu      8
 7 Panjat tebing Emas          1
 8 Panjat tebing Perak         0
 9 Panjat tebing Perunggu      0
10 Panahan       Emas          0
11 Panahan       Perak         1
12 Panahan       Perunggu      0

data_dsr_cabang sekarang sudah rapi. Saatnya kita lanjut ke tahapan berikutnya—visualisasi data.

Visualisasi Data

Pada Bagian 1 kita telah mengimpor dan merapikan data tentang banyaknya medali yang diperoleh Indonesia berdasarkan perhelatan olimpiade dan cabang-cabang olahraganya. Selanjutnya, kita akan memvisualisasikan kedua data tersebut.

Medali dan Perhelatan Olimpiade

Bagaimana perolehan medali Indonesia di setiap keikutsertaannya di olimpiade? Untuk menjawab pertanyaan ini, kita dapat membuat diagram batang dengan menggunakan data_dsr_olimpiade. Perhatikan Gambar 1!

data_dsr_olimpiade |> 
  ggplot(aes(x = tahun, y = banyak, fill = medali)) + 
  geom_col(position = "dodge") + 
  scale_x_continuous(
    breaks = seq(1952, 2024, 4)
  ) + 
  scale_y_continuous(
    limits = c(0, 4.2),
    expand = c(0, 0)
  ) + 
  scale_fill_manual(
    name = "Medali",
    values = c(
      "Emas" = "#FCC861",
      "Perak" = "#E5E5E5",
      "Perunggu" = "#DCB386"
    )
  ) + 
  theme_minimal() + 
  theme(
    legend.position = "bottom",
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank(),
    axis.line.x = element_line(),
    axis.ticks.x = element_line(),
    axis.text.x = element_text(
      angle = 90,
      vjust = .5
    ),
    axis.title.x = element_blank()
  ) + 
  labs(
    y = "Banyak perolehan medali"
  )
Gambar 1: Banyaknya medali yang diperoleh Indonesia di setiap olimpiade yang diikutinya

Berdasarkan Gambar 1 tersebut, Indonesia pertama kali meraih medali pada tahun 1988 meskipun telah ikut olimpiade sejak 1952. Selain itu, Indonesia dapat meraih medali emas sebanyak dua kali untuk pertama kalinya pada tahun 1992. Capaian ini diulang kembali pada olimpiade terakhir, yaitu pada tahun 2024.

Bagaimana kalau kita ingin melihat tren perolehan medali emas, perak, dan perunggu setiap penyelenggaraan olimpiadenya? Perhatikan Gambar 2!

data_dsr_olimpiade |> 
  ggplot(aes(x = tahun, y = banyak, col = medali)) + 
  geom_line(
    linewidth = 1
  ) + 
  scale_y_continuous(
    limits = c(0, 4.2),
    expand = c(0, 0)
  ) + 
  scale_color_manual(
    name = "Medali",
    values = c(
      "Emas" = "#FCC861",
      "Perak" = "#E5E5E5",
      "Perunggu" = "#DCB386"
    )
  ) + 
  facet_grid(~medali) + 
  theme_minimal() + 
  theme(
    legend.position = "none",
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank(),
    panel.grid.minor.y = element_blank()
  ) + 
  labs(
    x = "Tahun",
    y = "Banyak perolehan medali"
  )
Gambar 2: Tren perolehan medali Indonesia di setiap olimpiade yang diikutinya

Kita dapat menggabungkan fokus informasi yang disampaikan diagram batang pada Gambar 1 dan diagram garis pada Gambar 2 dengan menggunakan diagram alir.

data_dsr_olimpiade |> 
  ggplot(aes(x = tahun, y = banyak, fill = medali)) + 
  geom_vline(
    aes(xintercept = tahun),
    color = "grey",
    linewidth = .25
  ) + 
  geom_stream() + 
  geom_stream_label(aes(label = medali)) + 
  geom_text(
    aes(label = olimpiade),
    y = -4.9,
    angle = 90,
    hjust = 0,
    nudge_x = -1.2,
    color = "grey"
  ) + 
  scale_fill_manual(
    name = "Medali",
    values = c(
      "Emas" = "#FCC861",
      "Perak" = "#E5E5E5",
      "Perunggu" = "#DCB386"
    )
  ) + 
  scale_x_continuous(
    limits = c(1948, 2026),
    expand = c(0, 0)
  ) + 
  scale_y_continuous(
    limits = c(-5, 3),
    expand = c(0, 0)
  ) + 
  theme_void() + 
  theme(
    legend.position = "none"
  )
Gambar 3: Tren perolehan medali emas, perak, dan perunggu Indonesia di setiap olimpiade yang diikutinya

Kita telah memvisualisasikan perolehan medali Indonesia di olimpiade. Selanjutnya kita akan memvisualisasikan distribusi medali untuk cabang-cabang olahraganya.

Medali dan Cabang Olahraga

Cabang olahraga apa saja yang menyumbangkan medali bagi Indonesia? Bagaimana distribusinya? Untuk menjawab pertanyaan-pertanyaan ini, kita dapat menggambarkan distribusinya dengan diagram batang.

data_dsr_cabang |> 
  mutate(
    cabang = fct_relevel(
      cabang,
      "Bulu tangkis", "Angkat besi", "Panjat tebing", "Panahan"
    )
  ) |> 
  ggplot(aes(x = cabang, y = banyak)) + 
  geom_col(aes(fill = medali)) + 
  scale_y_continuous(
    expand = c(0, 0)
  ) + 
  scale_fill_manual(
    name = "Medali",
    values = c(
      "Emas" = "#FCC861",
      "Perak" = "#E5E5E5",
      "Perunggu" = "#DCB386"
    )
  ) + 
  theme_minimal() + 
  theme(
    legend.position = "bottom",
    axis.line.x = element_line(),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank()
  ) + 
  labs(
    x = "Cabang olahraga",
    y = "Banyak perolehan medali"
  )
Gambar 4: Distribusi medali olimpiade yang diperoleh Indonesia berdasarkan cabang olahraganya

Berdasarkan Gambar 4, kita dapat melihat bahwa ada empat cabang olahraga yang berkontribusi bagi perolehan medali Indonesia. Keempat cabang olahraga tersebut jika diurutkan berdasarkan perolehan medalinya adalah bulu tangkis, angkat besi, panjat tebing, dan panahan.

Catatan Akhir

Di suasana riuh rendah peringatan HUT ke-79 kemerdekaan Republik Indonesia dan Olimpiade Paris 2024 ini, bersama-sama kita telah melihat prestasi Indonesia di perhelatan olimpiade mulai tahun 1952 sampai 2024. Untuk melihatnya, kita awali dengan mempersiapkan data pada Bagian 1. Di tahapan ini, kita melakukan impor data dari Wikipedia pada Bagian 1.1 dan merapikan datanya pada Bagian 1.2.

Setelah data rapi, kita melakukan visualisasi data pada Bagian 2. Terdapat dua macam informasi yang kita visualisasikan. Pertama adalah banyak medali di setiap pagelaran olimpiade yang Indonesia ikuti (Bagian 2.1). Kedua adalah distribusi medali berdasarkan cabang olahraganya (Bagian 2.2).

Catatan Kaki

  1. Bagaimana cara menemukan nama elemen dari objek yang ingin kita impor? Salah satunya adalah dengan membaca kode sumber laman webnya. Selain itu, jika kita menggunakan Google Chrome, kita juga dapat memanfaatkan Developer tools-nya.↩︎

Penggunaan Kembali