Eksplorasi Data

Eksplorasi Data (1)

PENGANTAR

Postingan ini adalah edisi spesial. Aha. Spesial persiapan Ujian Tengah Semester mata kuliah analisis data eksplorasi. Yashhh. Selama setengah semester ini banyak banget yang dibahas, mulai dari summary statistik yg meliputi mean, median dll, terus ada visualisasi data menggunakan ggplot2, terus ada subset data dll. Postingan ini dibuat saat mengisi masa-masa gabut ngerjain skripsi xD. Oke masuk ke materi! Outlinenya : summary statistics, subsetting data, vizualitation with ggplot2 & lattice packages.

MEMBANGKITKAN DATA

Karena bingung mau ambil sumber data darimana, jadi saya kepikiran buat membangkitkan data aja ya.. jadi data ini bukan hasil survey melainkan simulasi aja hehe. Kasus yang diambil terdiri dari 7 variabel, antara lain : jenis kelamin, kelas, pengeluaran tiap hari, jarak kamus dengan tempat tinggal (km), status organisasi, waktu belajar per minggu, nilai akhir.

setwd("E:\\AKADEMIK\\Belajar R\\UTS ADE")

################ generete data
rtnorm <- function(n, mean, sd, a = -Inf, b = Inf){
  qnorm(runif(n, pnorm(a, mean, sd), pnorm(b, mean, sd)), mean, sd)
}

set.seed(1)
nilai <- rtnorm(n=160, mean=82, sd=100, a=60, b=100)
set.seed(2)
jarak <- rtnorm(n=160, mean=5, sd=100, a=0.5, b=15)
set.seed(3)
waktu.belajar <- rtnorm(n=160, mean=15, sd=100, a=0, b=21)
kelas <- rep(c("a","b","c","d"), each = 40)
set.seed(4)
jk <- sample(factor(c(rep("perempuan",0.6*160), rep("laki-laki",0.4*160))))
set.seed(5)
pengeluaran <- sample(factor(c(rep("50k",0.6*160), rep("100k",0.35*160), rep("150k",0.05*160))))
set.seed(6)
organisasi <- sample(factor(c(rep("ya",0.3*160), rep("tidak",0.7*160))))

data.simu <- data.frame(jk,kelas,pengeluaran,jarak,organisasi,waktu.belajar,nilai)
write.csv(data.simu, file = "datasimulasiuts.csv", row.names = FALSE)

Perintah setwd() adalah untuk megatur direktori kerja yang akan digunakan. Penjelasan lengkapnya sudah dibahas di materi ini Direktori Kerja R. Kemudian saya membuat fungsi untuk membangktkann data berdistribusi normal dengan batas bawah dan batas atas yang disimbolkan hurup a dan b. Karena kita membangkitkan data secara acak, maka perintah set.seed penting digunakan untuk memberikan hasil yang konsisten. Jika tidak menggunakan perintah tersebut, hasil yang akan keluar selalu berbeda setiap kali di eksekusi. tidak ada aturan khusus atau efek saat menentukan nilai seed. Jika perintah diatas dieksekusi hingga selesai, maka akan data akan tersimpan pada direktori kerja yang telah kita atur diawal. Untuk meminimalisir kebingungan, teman-teman dapat juga mengunduh file tersebut di tautaan ini download data.

STATISTIKA DESKRIPTIF

Pada bagian ini akan dibahas ringkasan hasil statistika deskriptif. Menggunakan packages Hmisc dan base.

library(Hmisc)
data <- read.csv("E:\\AKADEMIK\\Belajar R\\UTS ADE\\datasimulasiuts.csv", header = TRUE, sep = ",")
attach(data)
str(data) #Melihat struktur bentuk data
## 'data.frame':    160 obs. of  7 variables:
##  $ jk           : Factor w/ 2 levels "laki-laki","perempuan": 2 2 2 2 1 2 1 1 1 2 ...
##  $ kelas        : Factor w/ 4 levels "a","b","c","d": 1 1 1 1 1 1 1 1 1 1 ...
##  $ pengeluaran  : Factor w/ 3 levels "100k","150k",..: 3 1 1 3 3 2 3 1 1 2 ...
##  $ jarak        : num  3.18 10.68 8.81 2.94 14.18 ...
##  $ organisasi   : Factor w/ 2 levels "tidak","ya": 1 1 2 1 1 1 1 1 1 2 ...
##  $ waktu.belajar: num  3.55 16.97 8.11 6.91 12.66 ...
##  $ nilai        : num  70.7 75 82.9 96.3 68.1 ...
dim(data) #Melihat dimensi data antara baris dan kolomnya
## [1] 160   7
head(data) #Melihat 6 data teratas, lawan perintahnya yaitu tail()
##          jk kelas pengeluaran     jarak organisasi waktu.belajar    nilai
## 1 perempuan     a         50k  3.178853      tidak      3.549938 70.70007
## 2 perempuan     a        100k 10.676233      tidak     16.965856 74.95376
## 3 perempuan     a        100k  8.805257         ya      8.111441 82.93399
## 4 perempuan     a         50k  2.935073      tidak      6.910114 96.30527
## 5 laki-laki     a         50k 14.182938      tidak     12.664042 68.14421
## 6 perempuan     a        150k 14.177639      tidak     12.712079 95.91133
#deskriptif
summary(data) #packages base
##          jk     kelas  pengeluaran     jarak         organisasi 
##  laki-laki:64   a:40   100k:56     Min.   : 0.6031   tidak:112  
##  perempuan:96   b:40   150k: 8     1st Qu.: 3.9838   ya   : 48  
##                 c:40   50k :96     Median : 6.9005              
##                 d:40               Mean   : 7.6235              
##                                    3rd Qu.:11.6936              
##                                    Max.   :14.8385              
##  waktu.belajar         nilai      
##  Min.   : 0.1814   Min.   :60.53  
##  1st Qu.: 4.7972   1st Qu.:70.86  
##  Median : 9.8364   Median :79.82  
##  Mean   :10.0439   Mean   :80.16  
##  3rd Qu.:15.9020   3rd Qu.:88.75  
##  Max.   :20.8578   Max.   :99.70
describe(data) #packages Hmisc
## data 
## 
##  7  Variables      160  Observations
## ---------------------------------------------------------------------------
## jk 
##        n  missing distinct 
##      160        0        2 
##                               
## Value      laki-laki perempuan
## Frequency         64        96
## Proportion       0.4       0.6
## ---------------------------------------------------------------------------
## kelas 
##        n  missing distinct 
##      160        0        4 
##                               
## Value         a    b    c    d
## Frequency    40   40   40   40
## Proportion 0.25 0.25 0.25 0.25
## ---------------------------------------------------------------------------
## pengeluaran 
##        n  missing distinct 
##      160        0        3 
##                          
## Value      100k 150k  50k
## Frequency    56    8   96
## Proportion 0.35 0.05 0.60
## ---------------------------------------------------------------------------
## jarak 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      160        0      160        1    7.623    4.934    1.438    2.371 
##      .25      .50      .75      .90      .95 
##    3.984    6.900   11.694   13.623   14.478 
## 
## lowest :  0.6030539  0.6509692  0.7130004  0.8306769  0.8574029
## highest: 14.6617415 14.6927270 14.7176833 14.7340945 14.8384902
## ---------------------------------------------------------------------------
## organisasi 
##        n  missing distinct 
##      160        0        2 
##                       
## Value      tidak    ya
## Frequency    112    48
## Proportion   0.7   0.3
## ---------------------------------------------------------------------------
## waktu.belajar 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      160        0      160        1    10.04    6.749    1.672    2.352 
##      .25      .50      .75      .90      .95 
##    4.797    9.836   15.902   17.826   18.857 
## 
## lowest :  0.1814002  0.2486604  0.3245665  0.8152738  0.8713156
## highest: 19.1846836 19.3453959 20.0631500 20.2928222 20.8578159
## ---------------------------------------------------------------------------
## nilai 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##      160        0      160        1    80.16    12.33    63.12    65.22 
##      .25      .50      .75      .90      .95 
##    70.86    79.82    88.75    94.78    97.14 
## 
## lowest : 60.53195 60.54467 60.94861 61.44426 62.39256
## highest: 99.03869 99.39853 99.67057 99.67330 99.70469
## ---------------------------------------------------------------------------

Perintah read.csv adalah untuk memanggil data file eksetensi comma separated value. Pembahasannya sudah ada di materi Direktori Kerja R. attach() berfungsi untuk melampirkan variabel yang terdapt pada data. Sehingga objek dalam basis data dapat diakses hanya dengan memanggil nama variabel nya saja, tidak perlu menggunakan simbol $.

Perbedaan hasil pada perintah summary() dan describe() terletak pada fitul keluaran yang dihasilkan. jika pada describe() memungkinkan peneliti untuk mengetahui informasi data kategoriknya secara mendetail menurut proporso masing-masing. Selain itu untuk data numerik keluaran yang dihasilkan pun lebih lengkap dibandingkan dengan perintah summary().

SUBSETTING DATA

#hitung rata-rata nilai mahasiswa untuk kelas d yang jarak tempat tinggalnya lebih dari 5km!
solve_1 <- subset(data, kelas == "d" & jarak > 5)
summary(solve_1)
##          jk     kelas  pengeluaran     jarak        organisasi
##  laki-laki:11   a: 0   100k: 5     Min.   : 5.015   tidak:18  
##  perempuan:13   b: 0   150k: 3     1st Qu.: 6.767   ya   : 6  
##                 c: 0   50k :16     Median :10.162             
##                 d:24               Mean   : 9.788             
##                                    3rd Qu.:12.482             
##                                    Max.   :14.693             
##  waktu.belajar        nilai      
##  Min.   : 2.087   Min.   :63.13  
##  1st Qu.: 5.405   1st Qu.:72.33  
##  Median :11.326   Median :80.20  
##  Mean   :10.584   Mean   :78.54  
##  3rd Qu.:15.029   3rd Qu.:82.80  
##  Max.   :18.656   Max.   :97.12
mean(solve_1$nilai)
## [1] 78.54488

Pada kasus pertama diminta untuk menghitung rata-rata nilai mahasiswa kelas d yang jarak tempat tinggalnya lebih dari 5km. Maka perlu dilakukan pemilahan data terlebih dahulu sesuai dengan kondisi yang diminta. Karena bentuk data variabel kelas factor dengan labels a, b, c, d sehingga jangan lupakan tanda "" ketika memilih nilainya. Lain halnya ketika datanya numerik, tidak perlu menggunakan tanda "". Untuk menambahkan kondisi selanjutnya cukup menggunakan tanda & hal tersebut berlaku ketika ingin menambah kondisi selanjutnya. Berdasarkan hasil diperoleh nilai rata-rata mahasiswa kelas d yang jarak tempat tinggalnya lebih dari 5km adalah 78.54488.

#hitung rata-rata nilai mahasiswa yang aktif organisasi dengan jarak tempat tinggalnya kurang dari 5km dan pengeluaran perharinya 50k!
solve_2 <- subset(data, organisasi == "ya" & jarak < 5 & pengeluaran == "50k")
mean(solve_2$nilai)
## [1] 81.37008

Contoh kasus diatas adalah apabila kondisi yang diminta lebih dari 2.

VISUALISASI DENGAN LATTICE

#gambarkan boxplot berdasarkan status organisasi dan nilai mahasiswa tiap kelas yang memiliki pengeluaran per hari sebanyak 50k!
solve_3 <- subset(data, pengeluaran == "50k")
library(lattice)
bwplot(nilai~organisasi| kelas, data=solve_3, layout = c(4,1), xlab="organisasi", ylab = "nilai")

Kasus selanjutny yaitu diminta untuk membuat box plot berdasarkan status organisasi dan nilai mahasiswa tiap kelas yang memiliki pengeluaran per hari sebanyak 50k. Maka langkah awal yaitu melakukan subsetting data. Kondisi yang diminta yaitu mahasiswa dengan pengeluaran 50k per harinya. Selanjutnya menggunakan perintah bwplot untuk membuat boxplot packages lattice. Formulanya yaitu y~x maka kasus diatas yang menjadi variabel y adalah nilai mahasiswa, dan variabel x adalah status organisasi. Sesuai dengan perintah untuk membuat grafik tiap kelas maka perintah atau simbol yang digunakan yaitu | kelas fungsinya sebagai pemisah antar kelompok. Perintah layout() untuk menampilkan hasil grafik ke dalam bentuk (baris,kolom). Periintah xlab untuk memberi judul sumbu x dan ylab untuk judul sumbu y.

#gambarkan histogram nilai mahasiswa berdasarkan jarak tempat tinggalnya yang lebih dari 5km!
solve_4 <- subset(data, jarak > 5)
histogram(~nilai, data = solve_4)

Kasus selanjutnya diminta untuk membuat histogram nilai mahasiswa berdasarkan waktu belajar yang lebih dari 12 jam perminggunya. Perintah membuat histogram pada packages lattice dengan cara histogram(~x).

#gambarkan plot densitas nilai mahasiwa tiap kelas yang aktif organisasi! (interpretasikan)
solve_5 <- subset(data, organisasi == "ya")
densityplot(~nilai, groups = kelas, data = solve_5, plot.points = F, auto.key = T)

#gambarkan scatterplot nilai mahasiswa tiap kelas dan jarak tempat tinggal yang memiliki pengeluaran per hari sebesar 100k! gunakan batas sumbu x 5 hingga 15km!
solve_6 <- subset(data, pengeluaran == "50k")
xyplot(nilai~jarak | kelas, data = solve_6, groups = kelas, auto.key = T, type = c("p","smooth"), layout = c(4,1), xlim = c(5,15))

Berlanjut ke bagian 2….

Tidak ada komentar:

Posting Komentar

Terpopuler