Tidyverse adalah library di R yang digunakan oleh data scientist
dalam melakukan analisis data. Library ini menjadi sangat populer karena
kemudahannya dalam menangani data yang kompleks. Tidyverse terdiri dari
beberapa paket yang saling terkait dan sering digunakan bersama untuk
proses data end-to-end hingga, seperti visualisasi, seperti paket untuk
impor data (readr), visualisasi data
(ggplot2), manipulasi data
(dplyr,tidyr), pemrograman fungsi
(purrr), dan pembuatan model (tidymodels),
dll.
tidyverseBerikut adalah contoh bagaimana tidyverse digunakan
untuk mengimpor, memanipulasi, dan memvisualisasikan data. Data yang
digunakan adalah data students.csv yang bisa diunduh pada
link
berikut ini.
# load library
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# membaca data csv
data_mahasiswa <- read.csv("https://raw.githubusercontent.com/ekotwidodo/Kanwil-DJPb-Data-Analytics-2024/main/students.csv")
# menampilkan head
head(data_mahasiswa)
## id nama usia jurusan jenjang asal
## 1 1 Ari 25 Teknik Informatika S1 Jakarta
## 2 2 Budi 30 Manajemen S3 Bandung
## 3 3 Citra 35 Akuntansi S2 Bandung
## 4 4 David 40 Ilmu Komputer S3 Jakarta
## 5 5 Eko 30 Statistika S2 Surabaya
## 6 6 Farhan 28 Manajemen S2 Bogor
Memilih Kolom dengan select()
Misalnya, kita hanya ingin memilih kolom nama dan jurusan.
# Memilih kolom nama dan jurusan
data_mahasiswa_selected <- data_mahasiswa %>%
select(nama, jurusan)
data_mahasiswa_selected
## nama jurusan
## 1 Ari Teknik Informatika
## 2 Budi Manajemen
## 3 Citra Akuntansi
## 4 David Ilmu Komputer
## 5 Eko Statistika
## 6 Farhan Manajemen
## 7 Guruh Statistika
## 8 Hadi Manajemen
## 9 Irene Akuntansi
## 10 Johan Manajemen
## 11 Kalam Teknik Industri
## 12 Lisa Ilmu Komputer
## 13 Mona Bisnis
## 14 Nanda Manajemen
## 15 Opan Akuntansi
## 16 Pendi Teknik Informatika
## 17 Qonita Desain Visual
## 18 Rafinah Bisnis
## 19 Sabrina Statistika
## 20 Tariq Agribisnis
Memfilter Data dengan filter()
Misalnya, kita ingin memfilter mahasiswa yang berusia di atas 30 tahun.
# Memfilter mahasiswa dengan usia lebih dari 30 tahun
data_mahasiswa_filtered <- data_mahasiswa %>%
filter(usia > 30)
data_mahasiswa_filtered
## id nama usia jurusan jenjang asal
## 1 3 Citra 35 Akuntansi S2 Bandung
## 2 4 David 40 Ilmu Komputer S3 Jakarta
## 3 8 Hadi 34 Manajemen S3 Jogjakarta
## 4 10 Johan 42 Manajemen S3 Tangerang
## 5 16 Pendi 38 Teknik Informatika S3 Surabaya
Menambahkan Kolom Baru dengan
mutate()
Misalnya, kita ingin menambahkan kolom baru yang menunjukkan apakah mahasiswa tersebut berusia di atas 30 tahun atau tidak.
# Menambahkan kolom baru "di_atas_30" yang menunjukkan apakah usia lebih dari 30
data_mahasiswa_mutated <- data_mahasiswa %>%
mutate(usia_di_atas_30 = if_else(usia > 30, "Ya", "Tidak"))
data_mahasiswa_mutated
## id nama usia jurusan jenjang asal usia_di_atas_30
## 1 1 Ari 25 Teknik Informatika S1 Jakarta Tidak
## 2 2 Budi 30 Manajemen S3 Bandung Tidak
## 3 3 Citra 35 Akuntansi S2 Bandung Ya
## 4 4 David 40 Ilmu Komputer S3 Jakarta Ya
## 5 5 Eko 30 Statistika S2 Surabaya Tidak
## 6 6 Farhan 28 Manajemen S2 Bogor Tidak
## 7 7 Guruh 24 Statistika S1 Semarang Tidak
## 8 8 Hadi 34 Manajemen S3 Jogjakarta Ya
## 9 9 Irene 27 Akuntansi S2 Malang Tidak
## 10 10 Johan 42 Manajemen S3 Tangerang Ya
## 11 11 Kalam 25 Teknik Industri S2 Medan Tidak
## 12 12 Lisa 24 Ilmu Komputer S1 Palembang Tidak
## 13 13 Mona 28 Bisnis S3 Jambi Tidak
## 14 14 Nanda 27 Manajemen S2 Semarang Tidak
## 15 15 Opan 27 Akuntansi S2 Balikpapan Tidak
## 16 16 Pendi 38 Teknik Informatika S3 Surabaya Ya
## 17 17 Qonita 23 Desain Visual S1 Batam Tidak
## 18 18 Rafinah 26 Bisnis S2 Palembang Tidak
## 19 19 Sabrina 30 Statistika S3 Bandung Tidak
## 20 20 Tariq 26 Agribisnis S2 Jakarta Tidak
Mengelompokkan Data dan Menghitung Statistik Agregat dengan
group_by() dan summarize()
Misalnya, kita ingin menghitung rata-rata usia mahasiswa per jurusan.
# Mengelompokkan berdasarkan jurusan dan menghitung rata-rata usia
data_mahasiswa_summarized <- data_mahasiswa %>%
group_by(jurusan) %>%
summarize(rata_usia = mean(usia, na.rm = TRUE))
data_mahasiswa_summarized
## # A tibble: 9 × 2
## jurusan rata_usia
## <chr> <dbl>
## 1 Agribisnis 26
## 2 Akuntansi 29.7
## 3 Bisnis 27
## 4 Desain Visual 23
## 5 Ilmu Komputer 32
## 6 Manajemen 32.2
## 7 Statistika 28
## 8 Teknik Industri 25
## 9 Teknik Informatika 31.5
Mengurutkan Data dengan arrange()
Misalnya, kita ingin mengurutkan data berdasarkan usia secara descending.
# Mengurutkan data berdasarkan usia secara descending
data_mahasiswa_sorted <- data_mahasiswa %>%
arrange(desc(usia))
data_mahasiswa_sorted
## id nama usia jurusan jenjang asal
## 1 10 Johan 42 Manajemen S3 Tangerang
## 2 4 David 40 Ilmu Komputer S3 Jakarta
## 3 16 Pendi 38 Teknik Informatika S3 Surabaya
## 4 3 Citra 35 Akuntansi S2 Bandung
## 5 8 Hadi 34 Manajemen S3 Jogjakarta
## 6 2 Budi 30 Manajemen S3 Bandung
## 7 5 Eko 30 Statistika S2 Surabaya
## 8 19 Sabrina 30 Statistika S3 Bandung
## 9 6 Farhan 28 Manajemen S2 Bogor
## 10 13 Mona 28 Bisnis S3 Jambi
## 11 9 Irene 27 Akuntansi S2 Malang
## 12 14 Nanda 27 Manajemen S2 Semarang
## 13 15 Opan 27 Akuntansi S2 Balikpapan
## 14 18 Rafinah 26 Bisnis S2 Palembang
## 15 20 Tariq 26 Agribisnis S2 Jakarta
## 16 1 Ari 25 Teknik Informatika S1 Jakarta
## 17 11 Kalam 25 Teknik Industri S2 Medan
## 18 7 Guruh 24 Statistika S1 Semarang
## 19 12 Lisa 24 Ilmu Komputer S1 Palembang
## 20 17 Qonita 23 Desain Visual S1 Batam
Menggabungkan Data dengan
left_join()
Jika kita punya dua dataset yang berbeda dan ingin menggabungkannya
berdasarkan kolom tertentu (misalnya id), Anda bisa menggunakan
left_join().
Misalkan kita memiliki dataset lain yang berisi informasi tambahan tentang mahasiswa, seperti ipk.
# Contoh data tambahan
data_ipk_mahasiswa <- data.frame(
id = 1:20,
ipk = round(runif(20, min = 3.00, max = 4.00), 2)
)
# Menggabungkan data_mahasiswa dengan data_nilai berdasarkan id
data_mahasiswa_joined <- data_mahasiswa %>%
left_join(data_ipk_mahasiswa, by = "id")
data_mahasiswa_joined
## id nama usia jurusan jenjang asal ipk
## 1 1 Ari 25 Teknik Informatika S1 Jakarta 3.80
## 2 2 Budi 30 Manajemen S3 Bandung 3.38
## 3 3 Citra 35 Akuntansi S2 Bandung 3.88
## 4 4 David 40 Ilmu Komputer S3 Jakarta 3.36
## 5 5 Eko 30 Statistika S2 Surabaya 3.22
## 6 6 Farhan 28 Manajemen S2 Bogor 3.76
## 7 7 Guruh 24 Statistika S1 Semarang 3.64
## 8 8 Hadi 34 Manajemen S3 Jogjakarta 3.41
## 9 9 Irene 27 Akuntansi S2 Malang 3.72
## 10 10 Johan 42 Manajemen S3 Tangerang 3.34
## 11 11 Kalam 25 Teknik Industri S2 Medan 3.47
## 12 12 Lisa 24 Ilmu Komputer S1 Palembang 3.99
## 13 13 Mona 28 Bisnis S3 Jambi 3.80
## 14 14 Nanda 27 Manajemen S2 Semarang 3.86
## 15 15 Opan 27 Akuntansi S2 Balikpapan 3.61
## 16 16 Pendi 38 Teknik Informatika S3 Surabaya 3.80
## 17 17 Qonita 23 Desain Visual S1 Batam 3.40
## 18 18 Rafinah 26 Bisnis S2 Palembang 3.46
## 19 19 Sabrina 30 Statistika S3 Bandung 3.23
## 20 20 Tariq 26 Agribisnis S2 Jakarta 3.90
Menghitung Proporsi dengan count() dan
prop.table()
Kita bisa menghitung frekuensi dan proporsi kategori dalam dataset. Misalnya, menghitung berapa banyak mahasiswa dalam setiap jurusan.
# Menghitung jumlah mahasiswa per jurusan
data_mahasiswa_count_prop <- data_mahasiswa %>%
count(jurusan) %>%
mutate(proporsi = n / sum(n))
data_mahasiswa_count_prop
## jurusan n proporsi
## 1 Agribisnis 1 0.05
## 2 Akuntansi 3 0.15
## 3 Bisnis 2 0.10
## 4 Desain Visual 1 0.05
## 5 Ilmu Komputer 2 0.10
## 6 Manajemen 5 0.25
## 7 Statistika 3 0.15
## 8 Teknik Industri 1 0.05
## 9 Teknik Informatika 2 0.10
Merangkum Data dengan summarize_all() dan
summarize_at()
Kita bisa menerapkan fungsi ringkasan ke semua kolom atau subset
kolom dengan summarize_all() dan
summarize_at().
Contoh: Menghitung rata-rata, nilai minimum, dan maksimum untuk kolom usia dan ipk
# Menghitung rata-rata, nilai minimum, dan maksimum untuk kolom numerik
data_mahasiswa_summary <- data_mahasiswa_joined %>%
summarize_at(
vars(usia, ipk),
list(mean = ~mean(., na.rm = TRUE),
min = ~min(., na.rm = TRUE),
max = ~max(., na.rm = TRUE)))
data_mahasiswa_summary
## usia_mean ipk_mean usia_min ipk_min usia_max ipk_max
## 1 29.45 3.6015 23 3.22 42 3.99
Mengelompokkan dan Menghitung Ukuran Grup dengan
group_by() dan tally()
Misalnya, kita ingin mengetahui jumlah mahasiswa di setiap jurusan.
# Mengelompokkan berdasarkan asal dan menghitung jumlah mahasiswa di setiap asal
data_mahasiswa_grouped <- data_mahasiswa %>%
group_by(asal) %>%
tally()
data_mahasiswa_grouped
## # A tibble: 13 × 2
## asal n
## <chr> <int>
## 1 Balikpapan 1
## 2 Bandung 3
## 3 Batam 1
## 4 Bogor 1
## 5 Jakarta 3
## 6 Jambi 1
## 7 Jogjakarta 1
## 8 Malang 1
## 9 Medan 1
## 10 Palembang 2
## 11 Semarang 2
## 12 Surabaya 2
## 13 Tangerang 1
Menggunakan case_when() untuk Transformasi
Kondisional
Fungsi ini digunakan untuk membuat kolom baru berdasarkan beberapa kondisi.
Misalkan kita ingin mengelompokkan mahasiswa berdasarkan usia ke dalam kategori “Muda”, “Dewasa”, dan “Senior”.
# Mengelompokkan berdasarkan usia
data_mahasiswa_categorized <- data_mahasiswa %>%
mutate(kelompok_usia = case_when(
usia < 30 ~ "Muda",
usia >= 30 & usia < 40 ~ "Dewasa",
usia >= 40 ~ "Senior"
))
data_mahasiswa_categorized
## id nama usia jurusan jenjang asal kelompok_usia
## 1 1 Ari 25 Teknik Informatika S1 Jakarta Muda
## 2 2 Budi 30 Manajemen S3 Bandung Dewasa
## 3 3 Citra 35 Akuntansi S2 Bandung Dewasa
## 4 4 David 40 Ilmu Komputer S3 Jakarta Senior
## 5 5 Eko 30 Statistika S2 Surabaya Dewasa
## 6 6 Farhan 28 Manajemen S2 Bogor Muda
## 7 7 Guruh 24 Statistika S1 Semarang Muda
## 8 8 Hadi 34 Manajemen S3 Jogjakarta Dewasa
## 9 9 Irene 27 Akuntansi S2 Malang Muda
## 10 10 Johan 42 Manajemen S3 Tangerang Senior
## 11 11 Kalam 25 Teknik Industri S2 Medan Muda
## 12 12 Lisa 24 Ilmu Komputer S1 Palembang Muda
## 13 13 Mona 28 Bisnis S3 Jambi Muda
## 14 14 Nanda 27 Manajemen S2 Semarang Muda
## 15 15 Opan 27 Akuntansi S2 Balikpapan Muda
## 16 16 Pendi 38 Teknik Informatika S3 Surabaya Dewasa
## 17 17 Qonita 23 Desain Visual S1 Batam Muda
## 18 18 Rafinah 26 Bisnis S2 Palembang Muda
## 19 19 Sabrina 30 Statistika S3 Bandung Dewasa
## 20 20 Tariq 26 Agribisnis S2 Jakarta Muda
Menghilangkan Duplikasi dengan
distinct()
Kita bisa menggunakan distinct() untuk menghilangkan
baris duplikat dalam dataset.
# Menghilangkan baris duplikat berdasarkan kolom jurusan dan asal
data_mahasiswa_distinct <- data_mahasiswa %>%
distinct(jurusan, asal)
data_mahasiswa_distinct
## jurusan asal
## 1 Teknik Informatika Jakarta
## 2 Manajemen Bandung
## 3 Akuntansi Bandung
## 4 Ilmu Komputer Jakarta
## 5 Statistika Surabaya
## 6 Manajemen Bogor
## 7 Statistika Semarang
## 8 Manajemen Jogjakarta
## 9 Akuntansi Malang
## 10 Manajemen Tangerang
## 11 Teknik Industri Medan
## 12 Ilmu Komputer Palembang
## 13 Bisnis Jambi
## 14 Manajemen Semarang
## 15 Akuntansi Balikpapan
## 16 Teknik Informatika Surabaya
## 17 Desain Visual Batam
## 18 Bisnis Palembang
## 19 Statistika Bandung
## 20 Agribisnis Jakarta
Membuat Pivot Table dengan spread() dan
pivot_wider()
Mengubah data dari format long ke wide (seperti pivot table) bisa
dilakukan dengan spread() atau
pivot_wider().
Contoh: Mengubah data ke format wide berdasarkan jurusan dan ipk.
# Pivot data ke format wide
data_mahasiswa_wide <- data_mahasiswa_joined %>%
pivot_wider(names_from = jurusan, values_from = ipk)
data_mahasiswa_wide
## # A tibble: 20 × 14
## id nama usia jenjang asal `Teknik Informatika` Manajemen Akuntansi
## <int> <chr> <int> <chr> <chr> <dbl> <dbl> <dbl>
## 1 1 Ari 25 S1 Jakarta 3.8 NA NA
## 2 2 Budi 30 S3 Bandung NA 3.38 NA
## 3 3 Citra 35 S2 Bandung NA NA 3.88
## 4 4 David 40 S3 Jakarta NA NA NA
## 5 5 Eko 30 S2 Surabaya NA NA NA
## 6 6 Farhan 28 S2 Bogor NA 3.76 NA
## 7 7 Guruh 24 S1 Semarang NA NA NA
## 8 8 Hadi 34 S3 Jogjaka… NA 3.41 NA
## 9 9 Irene 27 S2 Malang NA NA 3.72
## 10 10 Johan 42 S3 Tangera… NA 3.34 NA
## 11 11 Kalam 25 S2 Medan NA NA NA
## 12 12 Lisa 24 S1 Palemba… NA NA NA
## 13 13 Mona 28 S3 Jambi NA NA NA
## 14 14 Nanda 27 S2 Semarang NA 3.86 NA
## 15 15 Opan 27 S2 Balikpa… NA NA 3.61
## 16 16 Pendi 38 S3 Surabaya 3.8 NA NA
## 17 17 Qonita 23 S1 Batam NA NA NA
## 18 18 Rafinah 26 S2 Palemba… NA NA NA
## 19 19 Sabrina 30 S3 Bandung NA NA NA
## 20 20 Tariq 26 S2 Jakarta NA NA NA
## # ℹ 6 more variables: `Ilmu Komputer` <dbl>, Statistika <dbl>,
## # `Teknik Industri` <dbl>, Bisnis <dbl>, `Desain Visual` <dbl>,
## # Agribisnis <dbl>
Merubah Data Format Wide ke Long dengan
gather()
Misalnya, kita ingin mengubah data menjadi format long untuk analisis lebih lanjut.
# Mengubah data ke format long (meskipun sederhana di sini, ini bisa berguna dalam dataset yang lebih besar)
data_mahasiswa_long <- data_mahasiswa %>%
gather(key = "variable", value = "value", usia)
data_mahasiswa_long
## id nama jurusan jenjang asal variable value
## 1 1 Ari Teknik Informatika S1 Jakarta usia 25
## 2 2 Budi Manajemen S3 Bandung usia 30
## 3 3 Citra Akuntansi S2 Bandung usia 35
## 4 4 David Ilmu Komputer S3 Jakarta usia 40
## 5 5 Eko Statistika S2 Surabaya usia 30
## 6 6 Farhan Manajemen S2 Bogor usia 28
## 7 7 Guruh Statistika S1 Semarang usia 24
## 8 8 Hadi Manajemen S3 Jogjakarta usia 34
## 9 9 Irene Akuntansi S2 Malang usia 27
## 10 10 Johan Manajemen S3 Tangerang usia 42
## 11 11 Kalam Teknik Industri S2 Medan usia 25
## 12 12 Lisa Ilmu Komputer S1 Palembang usia 24
## 13 13 Mona Bisnis S3 Jambi usia 28
## 14 14 Nanda Manajemen S2 Semarang usia 27
## 15 15 Opan Akuntansi S2 Balikpapan usia 27
## 16 16 Pendi Teknik Informatika S3 Surabaya usia 38
## 17 17 Qonita Desain Visual S1 Batam usia 23
## 18 18 Rafinah Bisnis S2 Palembang usia 26
## 19 19 Sabrina Statistika S3 Bandung usia 30
## 20 20 Tariq Agribisnis S2 Jakarta usia 26
Membuat tabulasi distribusi frekuensi
Tabel distribusi frekuensi adalah cara untuk merangkum data kategoris atau numerik dengan menunjukkan berapa kali setiap nilai atau kelompok nilai muncul dalam dataset.
Misalkan kita ingin melihat distribusi frekuensi dari kolom asal untuk mengetahui berapa banyak mahasiswa menurut asal.
# Menghitung distribusi frekuensi untuk kolom 'asal'
tabel_frekuensi_asal <- data_mahasiswa %>%
count(asal) %>%
rename(frekuensi = n)
tabel_frekuensi_asal
## asal frekuensi
## 1 Balikpapan 1
## 2 Bandung 3
## 3 Batam 1
## 4 Bogor 1
## 5 Jakarta 3
## 6 Jambi 1
## 7 Jogjakarta 1
## 8 Malang 1
## 9 Medan 1
## 10 Palembang 2
## 11 Semarang 2
## 12 Surabaya 2
## 13 Tangerang 1
Untuk data numerik, seperti kolom usia, kita mungkin
ingin membuat bin (kelompok interval) dan menghitung frekuensi
masing-masing interval.
# Membuat bin untuk kolom 'usia' dan menghitung frekuensi
tabel_frekuensi_usia <- data_mahasiswa %>%
mutate(kelompok_usia = cut(usia, breaks = seq(20, 50, by = 5), right = FALSE)) %>%
count(kelompok_usia) %>%
rename(frekuensi = n)
# Menampilkan tabel distribusi frekuensi untuk usia
print(tabel_frekuensi_usia)
## kelompok_usia frekuensi
## 1 [20,25) 3
## 2 [25,30) 9
## 3 [30,35) 4
## 4 [35,40) 2
## 5 [40,45) 2
Dari data yang ditampilkan di atas sudah benar, tapi kita ingin
membuat kelompok_usia tampilannya bukan [20, 25) tapi
20-25. Kita bisa melakukan modifikasi output dari
cut() dengan mengubah label yang dihasilkan.
# Membuat interval usia dengan label khusus
tabel_frekuensi_usia <- data_mahasiswa %>%
mutate(kelompok_usia = cut(usia,
breaks = c(20, 25, 30, 35, 40, 45, 50),
labels = c("20-25", "25-30", "30-35", "35-40", "40-45", "45-50"),
right = FALSE)) %>%
count(kelompok_usia) %>%
mutate(proporsi = n / sum(n)) %>%
rename(frekuensi = n)
# Menampilkan tabel distribusi frekuensi dengan proporsi untuk kelompok usia
print(tabel_frekuensi_usia)
## kelompok_usia frekuensi proporsi
## 1 20-25 3 0.15
## 2 25-30 9 0.45
## 3 30-35 4 0.20
## 4 35-40 2 0.10
## 5 40-45 2 0.10
Menggunakan Cross-Tabulation
Cross-tabulation adalah teknik yang sangat berguna untuk menganalisis
hubungan antara dua atau lebih variabel kategoris. Kita bisa menggunakan
table() atau ftable() untuk melakukan
cross-tabulation.
Contoh kita ingin melihat hubungan antara jurusan dan
jenjang dari data mahasiswa.
# Membuat cross tabulation antara jurusan dan jenjang
cross_tab <- table(data_mahasiswa$jurusan, data_mahasiswa$jenjang)
# Menampilkan hasil
print(cross_tab)
##
## S1 S2 S3
## Agribisnis 0 1 0
## Akuntansi 0 3 0
## Bisnis 0 1 1
## Desain Visual 1 0 0
## Ilmu Komputer 1 0 1
## Manajemen 0 2 3
## Statistika 1 1 1
## Teknik Industri 0 1 0
## Teknik Informatika 1 0 1
Kita juga bisa menggunakan kombinasi dari count(),
spread(), dan pivot_wider() dari yang sudah
kita pelajari sebelumnya.
# Menggunakan dplyr dan tidyr untuk cross tabulation
cross_tab_tidy <- data_mahasiswa %>%
count(jurusan, jenjang) %>%
pivot_wider(names_from = jenjang, values_from = n, values_fill = 0)
# Menampilkan hasil
print(cross_tab_tidy)
## # A tibble: 9 × 4
## jurusan S2 S3 S1
## <chr> <int> <int> <int>
## 1 Agribisnis 1 0 0
## 2 Akuntansi 3 0 0
## 3 Bisnis 1 1 0
## 4 Desain Visual 0 0 1
## 5 Ilmu Komputer 0 1 1
## 6 Manajemen 2 3 0
## 7 Statistika 1 1 1
## 8 Teknik Industri 1 0 0
## 9 Teknik Informatika 0 1 1
Meningat di dalam library tidyverse juga ada library
ggplot2, tentunya kita bisa mengkombinasikannya dengan
grafik dari hasil eksplorasi data kita.
Misalkan dari data cross-tabulation jurusan dan jenjang, kita bisa
kombinasikan dengan membuat stacked bar plot dari
ggplot2.
# Menghitung proporsi mahasiswa per jurusan dan jenjang
cross_tab_prop <- as.data.frame(cross_tab) %>%
rename(jurusan = Var1, jenjang = Var2, n = Freq) %>%
group_by(jurusan) %>%
mutate(proporsi = n / sum(n))
# Membuat bar plot berdasarkan proporsi
ggplot(cross_tab_prop, aes(x = jurusan, y = proporsi, fill = jenjang)) +
geom_bar(stat = "identity", position = "fill") +
labs(title = "Proporsi Mahasiswa per Jurusan dan Jenjang",
x = "Jurusan",
y = "Proporsi") +
theme_minimal()
# Menghitung jumlah mahasiswa per jenjang dan proporsinya
data_jenjang <- data_mahasiswa %>%
count(jenjang) %>%
mutate(proporsi = n / sum(n))
# Membuat pie chart proporsi berdasarkan jenjang
ggplot(data_jenjang, aes(x = "", y = proporsi, fill = jenjang)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
labs(title = "Proporsi Mahasiswa Berdasarkan Jenjang",
x = NULL,
y = NULL) +
theme_void() + # Menghapus grid dan sumbu
theme(legend.position = "right") # Menempatkan legenda di sebelah kanan