Visualisasi Data

Visualisasi data merupakan bagian yang sangat penting untuk mengkomunikasikan hasil analisa yang telah kita lakukan. R mempunyai fungsi yang sederhana untuk membuat grafik yakni seperti plot(), barplot(), lineplot(), dotchart(), pie() maupun dari library lain seperti ggplot, ggplot2 dan lattice dengan kelebihan dan kekurangannya masing-masing.

Membuat vektor data di R

a <- c(19,7,23,15,12)
b <- c(8,10,11,19,17)
x <-  c(21, 62, 10,53)
city <-  c("Jakarta","Bogor","Solo","Yogyakarta")

Line Plot

plot(a,type = "o", col = "red", xlab = "Month", ylab = "Rain fall",
   main = "Rain fall chart") #tunggal

plot(a,type = "b",col = "red", xlab = "Month", ylab = "Rain fall", 
   main = "Rain fall chart") 
lines(b, type = "b", col = "blue") #menambahkan line plot

#Pada line chart kita dapat membuat plot tunggal hingga lebih dari satu line dalam suatu plot. terdapat beberapa type line yang dapat digunakan antara lain type=c("p","l","o","b","c","s")

Pie Chart

piepercent<- round(100*x/sum(x), 1)
city <- paste(city, piepercent, sep = " ")
city <- paste(city,"%", sep = "")
pie(x,labels = city, col=rainbow(length(city)),main="Pie Chart of City") 

library(plotrix) #3D Pie Chart
pie3D(x,labels=city,explode=0.1,main="Pie Chart of City ")

#Pie chart lebih baik digunakan untuk memvisualisasikan data yang jumlah grupnya sedikit, selain itu pie char juga dapat dibuat dalam bentuk 3 dimensi dengan menginstall plotrix terlebih dahulu.

Mengimport data ke R

dataku = read.csv("E://Data Diabetes.csv", sep =",", header = TRUE)
head(dataku) #menampilkan data teratas
##   Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 1           6     148            72            35       0 33.6
## 2           1      85            66            29       0 26.6
## 3           8     183            64             0       0 23.3
## 4           1      89            66            23      94 28.1
## 5           0     137            40            35     168 43.1
## 6           5     116            74             0       0 25.6
##   DiabetesPedigreeFunction Age     keterangan
## 1                    0.627  50 Tidak Diabetes
## 2                    0.351  31 Tidak Diabetes
## 3                    0.672  32       Diabetes
## 4                    0.167  21 Tidak Diabetes
## 5                    2.288  33 Tidak Diabetes
## 6                    0.201  30 Tidak Diabetes
tail(dataku) #menampilkan data terakhir
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 763           9      89            62             0       0 22.5
## 764          10     101            76            48     180 32.9
## 765           2     122            70            27       0 36.8
## 766           5     121            72            23     112 26.2
## 767           1     126            60             0       0 30.1
## 768           1      93            70            31       0 30.4
##     DiabetesPedigreeFunction Age     keterangan
## 763                    0.142  33 Tidak Diabetes
## 764                    0.171  63 Tidak Diabetes
## 765                    0.340  27 Tidak Diabetes
## 766                    0.245  30 Tidak Diabetes
## 767                    0.349  47 Tidak Diabetes
## 768                    0.315  23 Tidak Diabetes
summary(dataku)
##   Pregnancies        Glucose      BloodPressure    SkinThickness  
##  Min.   : 0.000   Min.   :  0.0   Min.   :  0.00   Min.   : 0.00  
##  1st Qu.: 1.000   1st Qu.: 99.0   1st Qu.: 62.00   1st Qu.: 0.00  
##  Median : 3.000   Median :117.0   Median : 72.00   Median :23.00  
##  Mean   : 3.845   Mean   :120.9   Mean   : 69.11   Mean   :20.54  
##  3rd Qu.: 6.000   3rd Qu.:140.2   3rd Qu.: 80.00   3rd Qu.:32.00  
##  Max.   :17.000   Max.   :199.0   Max.   :122.00   Max.   :99.00  
##     Insulin           BMI        DiabetesPedigreeFunction      Age       
##  Min.   :  0.0   Min.   : 0.00   Min.   :0.0780           Min.   :21.00  
##  1st Qu.:  0.0   1st Qu.:27.30   1st Qu.:0.2437           1st Qu.:24.00  
##  Median : 30.5   Median :32.00   Median :0.3725           Median :29.00  
##  Mean   : 79.8   Mean   :31.99   Mean   :0.4719           Mean   :33.24  
##  3rd Qu.:127.2   3rd Qu.:36.60   3rd Qu.:0.6262           3rd Qu.:41.00  
##  Max.   :846.0   Max.   :67.10   Max.   :2.4200           Max.   :81.00  
##           keterangan 
##  Diabetes      : 41  
##  Tidak Diabetes:727  
##                      
##                      
##                      
## 
str(dataku)
## 'data.frame':    768 obs. of  9 variables:
##  $ Pregnancies             : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Glucose                 : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ BloodPressure           : int  72 66 64 66 40 74 50 0 70 96 ...
##  $ SkinThickness           : int  35 29 0 23 35 0 32 0 45 0 ...
##  $ Insulin                 : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ BMI                     : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ DiabetesPedigreeFunction: num  0.627 0.351 0.672 0.167 2.288 ...
##  $ Age                     : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ keterangan              : Factor w/ 2 levels "Diabetes","Tidak Diabetes": 2 2 1 2 2 2 2 2 1 2 ...
attach(dataku)

#Membaca data di R dari file csv. head() untuk menampilkan data teratas dan tail() menampilan data terakhir. summary() untuk melihat ringkasan datanya dan str() untuk melihat detail banyaknya parameter dan tipe data setiap parameternya.

Simple Plot

plot(Glucose~Insulin, main= "Glucose vs Insulin",
     xlab = "Insulin", ylab="Glucose",pch = 1,col=blues9)

#Sactter plot untuk melihat adanya korelasi antara dua variabel kontinyu Glucose dan Insulin

Scatter Plot Matrix

library(car)
## Loading required package: carData
scatterplotMatrix(~Glucose+Insulin+Pregnancies+BloodPressure+SkinThickness,data=dataku,
                  main="Matriks Korelasi",smooth = FALSE)

pairs(~Glucose+Insulin+Pregnancies+BloodPressure+SkinThickness,data=dataku, 
      main="Simple Scatterplot Matrix", col="purple")
library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:car':
## 
##     logit
## The following object is masked from 'package:plotrix':
## 
##     rescale

pairs.panels(dataku[1:5], method = "pearson",
             hist.col = "grey", density = TRUE,ellipses = TRUE,lm = FALSE) 

#Fungsi pairs.panels( ) yang dihasilkan akan meliputi scatter plot, histogram dan density plot variabel kontinyu, serta nilai koefisien Korelasi Pearson. Sebelumnya diperlukan install package pysch terlebih dahulu

Box Plot

boxplot(dataku$Glucose) #tunggal

boxplot(Glucose ~ keterangan, data = dataku) #grup

boxplot(Glucose ~ keterangan, data = dataku,horizontal = TRUE) # Horizontal 

#Boxplot dapat dibuat berupa boxplot tunggal maupun grup (lebih dari satu) dan bisa berbentuk horizontal maupun vertikal.

Stripchart

stripchart(Insulin ~ keterangan, data = dataku, pch=1)

stripchart(Insulin ~ keterangan, data = dataku,
           method = "jitter", 
           pch = c(21, 18), # bentuk titik berdasarkan grup
           col = c("brown", "yellow")) #warna titik

QQ Plots: qqnorm() dan qqline()

qqnorm(Glucose, pch = 1) 
qqline(Glucose, col="red", lwd = 2) # menambahkan garis 

library(car)
qqPlot(Glucose)

## [1]  76 183

Memanggil dataset dari R (VADeaths)

head(VADeaths)
##       Rural Male Rural Female Urban Male Urban Female
## 50-54       11.7          8.7       15.4          8.4
## 55-59       18.1         11.7       24.3         13.6
## 60-64       26.9         20.3       37.0         19.3
## 65-69       41.0         30.9       54.6         35.1
## 70-74       66.0         54.3       71.1         50.0
str(VADeaths)
##  num [1:5, 1:4] 11.7 18.1 26.9 41 66 8.7 11.7 20.3 30.9 54.3 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:5] "50-54" "55-59" "60-64" "65-69" ...
##   ..$ : chr [1:4] "Rural Male" "Rural Female" "Urban Male" "Urban Female"
rownames(VADeaths)
## [1] "50-54" "55-59" "60-64" "65-69" "70-74"
#VADeaths adalah salah satu dataset yang sudah tersedia dalam program R. Cara melihatnya cukup ketikan data() maka akan muncul dataset yang tersedia di R.

Barplot

R_Female <- VADeaths[,"Rural Female"]
barplot(R_Female, col = c("orange", "blue", "purple","pink","grey"), xlab = "Age", ylab = "Rates")

mycol=c("orange", "blue", "purple","pink","grey")
barplot(VADeaths,col = mycol, legend=rownames(VADeaths))

barplot(VADeaths,col = mycol,beside = TRUE )
legend("topleft", rownames(VADeaths), cex = 0.5, fill = mycol)

Memanggil dataset dari R (mtcars)

df<-mtcars
head(df)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
str(df)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
attach(df)

Histogram

hist(df$mpg, xlab = "mpg",main = "Histogram mpg",col="brown")

x <- mtcars$mpg 
h<-hist(x, breaks=10, col="orange", xlab="Miles Per Gallon", 
        main="Histogram dengan Kurva Normal") 
xfit<-seq(min(x),max(x),length=40) # parameter sumbu x
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x)) # parameter sumbu y
yfit <- yfit*diff(h$mids[1:2])*length(x) 
lines(xfit, yfit, col="blue", lwd=2) # menambahkan garis kurva norm

Density Plot

d <- density(mtcars$mpg)
plot(d, main="Density Plot MPG")
polygon(d, col="purple", border="red")

library(sm)
## Package 'sm', version 2.2-5.6: type help(sm) for summary information
sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")

Dot Chart

dotchart(mtcars$mpg, labels = row.names(mtcars),
         cex = 0.6, xlab = "mpg")

grps <- as.factor(mtcars$cyl) # mengubah cyl menjadi factor
my_cols <- c("blue", "black", "brown") 
dotchart(mtcars$mpg, labels = row.names(mtcars),
         groups = grps, gcolor = my_cols,
         color = my_cols[grps],
         cex = 0.6,  pch = 19, xlab = "mpg")