Package

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
library(dplyr)
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths
library(ggforce)
library(ggplot2)            
library(tidyverse) 
library(reshape2)
library(ggcorrplot)
library(readxl)

8. Visualisasi Antar Peubah Numerik

data1 <- read.csv("C:/Users/ASUS/Documents/Nita/SEMESTER 4/Visdat/PRAKTIKUM 8, 9, 10/university_admission.csv", header = TRUE, sep=",")
str(data1)
## 'data.frame':    1000 obs. of  8 variables:
##  $ GRE_Score          : int  337 324 316 322 314 330 321 308 302 323 ...
##  $ TOEFL_Score        : int  118 107 104 110 103 115 109 101 102 108 ...
##  $ University_Rating  : int  4 4 3 3 2 5 3 2 1 3 ...
##  $ SOP                : num  4.5 4 3 3.5 2 4.5 3 3 2 3.5 ...
##  $ LOR                : num  4.5 4.5 3.5 2.5 3 3 4 4 1.5 3 ...
##  $ CGPA               : num  9.65 8.87 8 8.67 8.21 9.34 8.2 7.9 8 8.6 ...
##  $ Research           : int  1 1 1 1 0 1 1 0 0 0 ...
##  $ Chance_of_Admission: num  0.92 0.76 0.72 0.8 0.65 0.9 0.75 0.68 0.5 0.45 ...

Heatmap correlation

data_numerik <- select_if(data1, is.numeric)
str(data_numerik)
## 'data.frame':    1000 obs. of  8 variables:
##  $ GRE_Score          : int  337 324 316 322 314 330 321 308 302 323 ...
##  $ TOEFL_Score        : int  118 107 104 110 103 115 109 101 102 108 ...
##  $ University_Rating  : int  4 4 3 3 2 5 3 2 1 3 ...
##  $ SOP                : num  4.5 4 3 3.5 2 4.5 3 3 2 3.5 ...
##  $ LOR                : num  4.5 4.5 3.5 2.5 3 3 4 4 1.5 3 ...
##  $ CGPA               : num  9.65 8.87 8 8.67 8.21 9.34 8.2 7.9 8 8.6 ...
##  $ Research           : int  1 1 1 1 0 1 1 0 0 0 ...
##  $ Chance_of_Admission: num  0.92 0.76 0.72 0.8 0.65 0.9 0.75 0.68 0.5 0.45 ...
data_melt <- cor(data_numerik[sapply(data_numerik,is.numeric)])
data_melt <- melt(data_melt) 

ggplot(data_melt, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradientn(colors = c("#BCCC8A", "darkgreen")) + 
  labs(title = "Correlation Heatmap")

Interpretasi

Heatmap correlation ini menampilkan korelasi antar peubah numerik pada data1. Warna pada heatmap menunjukan nilai atau value dari korelasi tersebut, yang mana semakin pekat atau gelap warna petak heatmap maka menandakan korelasi yang semakin kuat, serta semakin terang warna petak heatmap maka menandakan korelasi yang semakin lemah.

Corellogram Matrix

data_corrl <- round(cor(data1), 1)
data_corrl <- cor  (data_corrl)

ggcorrplot(data_corrl, lab = TRUE, lab_size = 2) +
  ggtitle("Corellogram") +
  theme(axis.text.x = element_text(size = 8),
        axis.text.y = element_text(size = 8))

Interpretasi

Hampir sama dengan heatmap correlation, Correlogram matrix juga menampilkan korelasi antar peubah numerik pada data1. Correlogram matrix menampilkan warna dari terang ke gelap yang menunjukkan kekuatan dari hubungan atau korelasi antar peubah, selain itu correlation matrix juga menampilkan nilai dari korelasinya pada setiap petak. Pada correlation matrix ini juga diatur ukuran huruf di sumbu x dan sumbu y sebesar 8 dan ukuran huruf pada korelasi peubah sebesar 2.

ggcorrplot(data_corrl, method = "circle", lab = TRUE, lab_size = 2) +
  ggtitle("Corellogram")+
  theme(axis.text.x = element_text(size = 8), axis.text.y = element_text(size = 8))

Interpretasi

Correlogram matrix ini merupakan modifikasi dari correlogram matrix sebelumnya. Insight tambahan dari correlogram ini adalah setiap korelasi antar peubah diwakili bentuk lingkaran dengan ukuran lingkaran mewakili besar kecilnya korelasi, atau semakin besar ukuran lingkaran maka semakin besar korelasi peubah tersebut.

Scatter Plot

data1$University_Rating <- factor(ifelse(data1$University_Rating >= 3, "Lebih dari 3", "Kurang dari sama dengan 3"), levels = c("Lebih dari 3", "Kurang dari sama dengan 3"))

ggplot(data1, aes(x = GRE_Score, y = TOEFL_Score, color = University_Rating)) +
  geom_point() +
  labs(title = "Skor TOEFL dan Skor GRE berdasarkan Nilai Universitas", x = "Skor GRE", y = "Skor TOEFL", color = "Nilai Univ") +
  scale_color_manual(values = c("blue", "green")) + 
  theme_minimal()

ggplot(data1, aes(x = GRE_Score, y = TOEFL_Score, color = University_Rating)) +
  geom_point() +
  labs(title = "Skor TOEFL dan Skor GRE berdasarkan Nilai Universitas", x = "Skor GRE", y = "Skor TOEFL", color = "Nilai Univ") +
  facet_wrap(~ University_Rating) +
    scale_color_manual(values = c("blue", "green")) + 
  theme_minimal()

Interpretasi

Scatter plot menampilkan hubungan antar dua peubah, yaitu Skor GRE sebagai peubah bebas dan Skor TOEFL sebagai peubah tak bebas atau peubah respon. Dari data1 dibuat kolom baru dengan mengelompokkan data tersebut berdasarkan nilai universitas, untuk nilai universitas 1 sampai 3 diwakili oleh warna hijau dan untuk nilai 4 dan 5 diwakili dengan warna biru. Pada scatter plot kedua, dilakukan pemisahan visualisasi sehingga lebih mudah untuk melihat bentuk hubungannya. Insight yang dapat diambil yaitu, skor GRE memiliki pengaruh atau hubungan positif terhadap skor TOEFL, serta universitas dengan nilai yang lebih tinggi menghasilkan skor TOEFL yang lebih tinggi dibandingkan dengan nilai universitas di bawahnya.

9. Visualisasi Time Series

dataset <- read_excel("C:/Users/ASUS/Documents/Nita/SEMESTER 4/Visdat/PRAKTIKUM 8, 9, 10/time series suhu.xlsx", sheet = 1)
str(dataset)
## tibble [36 × 1] (S3: tbl_df/tbl/data.frame)
##  $ suhu: num [1:36] 21.6 22.5 22.4 21.9 22.4 20.3 22 22 22.2 22.5 ...
data2 <- dataset$suhu
data.ts <- ts(data2)

plot(data.ts, xlab = "Bulan", ylab ="Rata-rata suhu (celcius)", col="red", main = "Rata-rata Suhu Minimum")
points(data.ts, col = "blue")

Interpretasi

Visualisasi deret waktu atau time series ini menampilkan trend rata-rata suhu minimum dalam kurun waktu 36 bulan. Data yang digunakan merupakan data rata-rata suhu minimun di Indonesia selama 36 bulan atau 3 tahun, terhitung dari Bulan Januari tahun 2021 sampai dengan Bulan Desember tahun 2023. Points atau titik lingkaran yang diberi warna biru menunjukkan titik suatu nilai suhu, serta garis yang diberi warna merah menjadi penanda bahwa itu adalah data time series dengan menghubungkan titik-titik pada plot tersebut. Dapat dilihat bahwa rata-rata suhu minimum relatif naik turun dan tidak konstan dengan suhu terendah berada pada rentang waktu bulan kelima sampai dengan bulan kesepuluh atau lebih tepatnya pada bulan keenam (Juni 2021), serta rata-rata suhu minimum tertinggi terdapat pada titik 35 atau Bulan November 2023.

data.train <- ts(data2[1:12])
data.test <- ts(data2[13:24], start = 13)
data.valid <- ts(data2[25:36], start = 25)

#Time Series Data
training.ts<-ts(data.train)
testing.ts<-ts(data.test)
valid.ts<-ts(data.valid)

ts.plot(data.ts, xlab = "Bulan", ylab ="Rata-rata suhu (celcius)", 
        main = "Rata-Rata Suhu Minimum dalam Rentang 36 Bulan")
lines(data.train, col = "red")
lines(data.test, col="yellow")
lines(data.valid, col="green")
points(data.ts, col = "blue")

abline(v=13, col=c("black"), lty=2, lwd=0.1)
abline(v=25, col=c("black"), lty=2, lwd=0.1)

Interpretasi

Visualisasi deret waktu atau time series ini merupakan modifikasi dari visualisasi time series sebelumnya. Visualisasi ini juga menampilkan trend rata-rata suhu minimum di Indonesia dalam kurun waktu 36 bulan, dengan data yang digunakan merupakan data rata-rata suhu minimun selama 36 bulan atau 3 tahun terhitung dari Bulan Januari tahun 2021 sampai dengan Bulan Desember tahun 2023. Points atau titik lingkaran yang diberi warna biru menunjukkan titik nilai suhu. Pada Visualisasi ini, terdapat tiga warna garis yang mana masing-masing warna mewakili masing-masih tahun, seperti merah untuk tahun 2021, kuning untuk tahun 2022, serta hijau untuk tahun 2023. Pada garis atau line tiga warna berwarna, terdapat garis pembatas atau abline. Fungsi dari abline ini adalah untuk membatasi data setiap tahunnya agar lebih mudah untuk dibaca oleh audiens. Abline ini diberi warna hitam (black), dengan lty=2 atau garis putus-putus, dan lwd=0.1 atau ukuran garis diatur sebesar 0.1. Pada visualisasi time series tersebut, dapat dilihat bahwa rata-rata suhu minimum relatif naik turun dan tidak konstan pada rentang waktu 36 bulan. Pada visualisasi sebelumnya diketahui terdapat suhu terendah dan tertinggi, kemudian pada visualisasi ini kita dapat dengan mudah melihat suhu terendah terjadi pada tahun 2021 yang diwakili oleh warna merah dengan suhu di bawah 20.5 °C, serta suhu tertinggi terjadi pada tahun 2023 yang diwakili oleh warna hijau dengan suhu di atas 22.5 °C. Terdapat kenaikan rata-rata suhu secara berkelanjutan (kurun waktu 2 bulan) yaitu pada Bulan Agustus sampai Bulan Oktober 2021, serta pada Bulan September sampai Bulan November 2023.

10 Visualisasi Geospasial

dataworld <- map_data("world") 
data3 <- read.csv("C:/Users/ASUS/Documents/Nita/SEMESTER 4/Visdat/PRAKTIKUM 8, 9, 10/world_population.csv",header = TRUE, sep=",")
data3 <- data3 %>% rename(region = CountryOrTerritory)
data4 <- left_join(dataworld, data3, by = "region")
data4_vac <- data4 %>% filter(!is.na(population))
head (data4_vac)
##        long      lat group order region subregion Rank CCA3    Capital
## 1 -69.89912 12.45200     1     1  Aruba      <NA>  198  ABW Oranjestad
## 2 -69.89571 12.42300     1     2  Aruba      <NA>  198  ABW Oranjestad
## 3 -69.94219 12.43853     1     3  Aruba      <NA>  198  ABW Oranjestad
## 4 -70.00415 12.50049     1     4  Aruba      <NA>  198  ABW Oranjestad
## 5 -70.06612 12.54697     1     5  Aruba      <NA>  198  ABW Oranjestad
## 6 -70.05088 12.59707     1     6  Aruba      <NA>  198  ABW Oranjestad
##       Continent population X2020.Population X2015.Population X2010.Population
## 1 North America     106445           106585           104257           100341
## 2 North America     106445           106585           104257           100341
## 3 North America     106445           106585           104257           100341
## 4 North America     106445           106585           104257           100341
## 5 North America     106445           106585           104257           100341
## 6 North America     106445           106585           104257           100341
##   X2000.Population X1990.Population X1980.Population X1970.Population
## 1            89101            65712            62267            59106
## 2            89101            65712            62267            59106
## 3            89101            65712            62267            59106
## 4            89101            65712            62267            59106
## 5            89101            65712            62267            59106
## 6            89101            65712            62267            59106
##   Area..km.. Density..per.km.. Growth.Rate World.Population.Percentage
## 1        180          591.3611      0.9991                           0
## 2        180          591.3611      0.9991                           0
## 3        180          591.3611      0.9991                           0
## 4        180          591.3611      0.9991                           0
## 5        180          591.3611      0.9991                           0
## 6        180          591.3611      0.9991                           0
ggplot(data4_vac, aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = population), color = "black") + 
  scale_fill_gradient(name = "population", low = "lightgreen", high =  "darkgreen", na.value = "yellow") +
  labs(title = "Population Distribution") +
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        rect = element_blank())

Interpretasi

Visualisasi geospasial ini menampilkan visualisasi sebaran populasi penduduk di dunia pada tahun 2022. Warna pada plot tersebut menunjukkan banyaknya populasi dari wilayah tersebut. Warna yang digunakan adalah warna hijau dengan semakin pekat warna hijaunya menunjukkan populasi yang semakin banyak, begitu pula sebaliknya.