Title: Final Project STIS3023 - Perlombongan Data Kemalangan Jalanraya di Malaysia
Author: Azman Ta’a
Date: October 25, 2016
output: html_document

2.0 PROJECT REQUIREMENTS

Projek “Perlombongan Data Kemalangan Jalanraya di Malaysia” dibangun berasaskan angka kematian di jalan raya yang terus meningkat walaupun “Ops Sikap” dilaksanakan setiap tahun. Slogan “kelajuan itu membunuh” ternyata tidak memberi ikhtibar kepada pemandu. Kajian kajian Forum Pengangkutan Antarabangsa Paris mendapati, Malaysia berada dikedudukan paling atas dengan kadar kematian tertinggi iaitu seorang bagi 100,000 penduduk. Berdasarkan 23.8 kematian bagi setiap 100,000 penduduk tahun 2007, kadar kematian akibat kemalangan di Malaysia adalah 6.3 kali lebih tinggi berbanding dengan United Kingdom (UK), Sweden dan Belanda. Tahun lalu berlaku 6,640 kemalangan jalan raya atau 18.2 kematian sehari, bermakna setiap 1 jam 20 minit seorang rakyat Malaysia terbunuh di jalan raya.

Walaupun Kementerian Pengangkutan telahpun melaksanakan sistem penguatkuasaan automatik yang melibatkan penggunaan kamera dalam usaha menambah baik dan meningkatkan penguatkuasaan di kawasan mudah berlaku kemalangan, namun usaha ini masih dilihat kurang berkesan kerana trend kemalangan masih meningkat saban tahun. Penguatkuasaan undang-undang trafik dan saman dilihat masih kurang berkesan dalam mendisiplinkan pemandu Malaysia. Sehubungan itu, projek ini telah dibangunkan untuk membuat analisis deskriptif tentang kematian akibat kemalangan jalan raya, trend kemalangan, mengira indeks kematian dan membuat ramalan (prediction) kebarangkalian kemalangan yang akan berlaku di setiap negeri di Malaysia. Maklumat daripada analisis data yang sebenar akan dapat memberi kesedaran dan amaran kepada pengguna agar lebih berhati-hati ketika memandu di jalan raya serta sentiasa “beringat” akan risiko kemalangan di kawasan-kawasan yang tertentu.

Projek ini telah tersenarai dalam lima projek terbaik dari sejumlah 15 projek dari kategori universiti awam yang menyertai pertandingan Hackhaton 2016 anjuran MAMPU.

Latar Belakang Projek

Fungsi Sistem

Sumber Data

Diambil daripada laman web sumber data terbuka Malaysia untuk data kemalangan dikeluarkan oleh kementerian berikut:

Platform Pembangunan Aplikasi

3.0 DATA PREPARATION

Dalam proses penyediaan data untuk dianalisis, beberapa tugas perlu dijalankan seperti pembacaan data, penggabungan data, pembersihan data, dan pemilihan data.

Pembacaan Data:

3.1 Paparan data Kemalangan

head(Xcident, 5)
##   X year JOHOR KEDAH KELANTAN MELAKA NEGERI_SEMBILAN PAHANG PERAK PERLIS
## 1 1 2003 36445 12456     6882  10122           13868  12303 25948   1101
## 2 2 2004 41854 14196     7253  11020           14505  13349 27542   1073
## 3 3 2005 42606 14484     7126  10321           14461  13381 27225   1037
## 4 4 2006 43757 15505     7337  10707           15197  13242 27432   1160
## 5 5 2007 46584 16172     8116  11720           16079  13982 29203   1364
##   PULAU_PINANG SABAH SARAWAK SELANGOR TERENGGANU WILAYAH_PERSEKUTUAN MALAYSIA
## 1        27817 11071   12483    80074       6589               41492 33681.43
## 2        31008 12018   13865    87891       7003               44240 36355.49
## 3        30934 12760   14209    87705       7078               45000 36597.93
## 4        32573 13550   14808    90632       7098               46254 37793.39
## 5        33881 14256   15196    99157       8155               49454 40794.90

3.2 Paparan data Kemalangan membawa kematian

head(Xcidentmaut, 5)
##   X year JOHOR KEDAH KELANTAN MELAKA NEGERI_SEMBILAN PAHANG PERAK PERLIS
## 1 1 2003   983   534      314    228             337    438   739     54
## 2 2 2004  1014   474      279    259             323    445   798     34
## 3 3 2005  1022   482      292    227             351    448   713     63
## 4 4 2006  1017   494      331    232             337    451   726     63
## 5 5 2007  1023   492      374    227             320    437   811     41
##   PULAU_PINANG SABAH SARAWAK SELANGOR TERENGGANU WILAYAH_PERSEKUTUAN MALAYSIA
## 1          389   310     290     1083        311                 273     6283
## 2          403   300     294     1050        301                 249     6223
## 3          371   319     346     1064        271                 231     6200
## 4          381   296     347     1050        307                 255     6287
## 5          376   316     316     1025        290                 234     6282

Menyalin data untuk proses seterusnya

Xycidentmaut<-Xcidentmaut[]
Xykenderaan<-Xkenderaan[]

Penyediaan data seterusnya berlaku sebelum analisis data dijalankan sepertu yang ditunjukkan dalam para berikutnya.

4.0 DATA ANALYSIS

Analisis data dibuat mengikut keperluan projek yang bertujuan untuk melihat kadar dan trend kemalangan jalan raya serta kaitannya dengan kadar dan trend kematian akibat kemalangan di seluruh Malaysia. Peringkat analisis ini boleh dikategorikan kepada paras berikut:

Berikut adalah beberapa contoh analisis data yang telah dibuat:

4.1 Data Kemalangan Jalan Raya Di Malaysia 2003-2013

Data Kemalangan Negeri Johor

johor<-subset(Xcident, select = c("year", "JOHOR"))
head(johor)
##   year JOHOR
## 1 2003 36445
## 2 2004 41854
## 3 2005 42606
## 4 2006 43757
## 5 2007 46584
## 6 2008 48667

Data Kemalangan Negeri Kedah

kedah<-subset(Xcident, select = c("year", "KEDAH"))
head(kedah)
##   year KEDAH
## 1 2003 12456
## 2 2004 14196
## 3 2005 14484
## 4 2006 15505
## 5 2007 16172
## 6 2008 16520

4.2 Carta Kemalangan 2003-2013 Seluruh Malaysia

Xycident<-subset(Xcident, select = c(3:16))
sumxycident=sum(Xycident)
XcidentGraf <- t(data.matrix(Xycident/sumxycident*100))
barplot(XcidentGraf, xlab="Tahun Kemalangan 2003-2013", ylab="Peratusan (%)", col=c("coral","violet","darkblue","green", "red","yellow","black","white","aliceblue","aquamarine","yellowgreen"), names.arg=c("2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013"),legend.text=TRUE, args.legend=list(title="Negeri-Negeri",cex=.5,pch=1))

4.3 Trend Kemalangan Dan Kematian Akibat Kemalangan 2003-2013

# Merge both accident and accident death datasets
Tragis <- Xcident
# Add new column for total death
Tragis["tDeath"] <- Xcidentmaut$MALAYSIA 
Tragis["JOHORx"] <- Xcidentmaut$JOHOR
Tragis["KEDAHx"] <- Xcidentmaut$KEDAH
Tragis["KELANTANx"] <- Xcidentmaut$KELANTAN
Tragis["MELAKAx"] <- Xcidentmaut$MELAKA
Tragis["NEGERI_SEMBILANx"] <- Xcidentmaut$NEGERI_SEMBILAN
Tragis["PAHANGx"] <- Xcidentmaut$PAHANG
Tragis["PERAKx"] <- Xcidentmaut$PERAK
Tragis["PERLISx"] <- Xcidentmaut$PERLIS
Tragis["PULAU_PINANGx"] <- Xcidentmaut$PULAU_PINANG
Tragis["SABAHx"] <- Xcidentmaut$SABAH
Tragis["SARAWAKx"] <- Xcidentmaut$SARAWAK
Tragis["SELANGORx"] <- Xcidentmaut$SELANGOR
Tragis["TERENGGANUx"] <- Xcidentmaut$TERENGGANU
Tragis["WILAYAH_PERSEKUTUANx"] <- Xcidentmaut$WILAYAH_PERSEKUTUAN
# Enquiries r <- which(dfd$JOHOR == max(dfd$JOHOR))# returns row index for highest incidence
# as.vector(dfd$year[r])# get the year with highest incidence
# Tren Kemalangan dan kematian di Malaysia
years <- c("2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013")
# Perbandingan Kematian dalam Kemalangan
peratus2 <- data.frame(tahun=years, negara=Tragis$MALAYSIA, pNegara=Tragis$MALAYSIA/sum(Tragis$MALAYSIA)*100, mati=Tragis$tDeath, pMati2=Tragis$tDeath/Tragis$MALAYSIA*100)

old.par <- par(mfrow=c(1, 2))
plot(years, peratus2$pNegara, type="l", col="red", lwd=1,
     ylab="% Kemalangan", xlab="Tahun",
     main="Trend Kemalangan Di Malaysia")
    
plot(years, peratus2$pMati2, type="l", col="red", lwd=1,
     ylab="% kematian", xlab="Tahun",  
     main="Trend Kematian Akibat Kemalangan")

     par(old.par)         

4.4 Trend Kemalangan Dan Kematian Akibat Kemalangan Negeri Johor

# add new column for total death
Tragis <- Xcident
Tragis["tDeath"] <- Xcidentmaut$MALAYSIA
Tragis["JOHORx"] <- Xcidentmaut$JOHOR

years <- c("2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013")
peratus2 <- data.frame(tahun=years, negara=Tragis$MALAYSIA, pNegara=Tragis$MALAYSIA/sum(Tragis$MALAYSIA)*100, mati=Tragis$tDeath, pMati2=Tragis$tDeath/Tragis$MALAYSIA*100)

# Plot graf for accident trend in Johor
old.par <- par(mfrow=c(1, 2))
plot(years, Tragis$JOHOR/sum(Tragis$JOHOR)*100, 
    type="l", col="red", lwd=1, ylab="% Kemalangan",
         xlab="Tahun", main="Trend Kemalangan Di Johor")
    par(new=T)
    plot(peratus2$pNegara, type = "l", col="blue", xlab = "x", ylab ="y", axes = FALSE)
    par(new=F)

# Plot graf for death of accident trend in Johor
plot(years, Tragis$JOHORx/Tragis$JOHOR, 
     type="l", col="red", lwd=1, ylab="% kematian",
         xlab="Tahun", main="Trend Kematian Kemalangan")
    par(new=T)
    plot(peratus2$pMati2, type = "l", col="blue", xlab = "", ylab = "", axes = FALSE)

    par(new=F)
    par(old.par)    

4.5 Trend Kemalangan Dan Kematian Akibat Kemalangan Negeri Kedah

# add new column for total death
Tragis <- Xcident
Tragis["tDeath"] <- Xcidentmaut$MALAYSIA
Tragis["KEDAHx"] <- Xcidentmaut$KEDAH

years <- c("2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013")
peratus2 <- data.frame(tahun=years, negara=Tragis$MALAYSIA, pNegara=Tragis$MALAYSIA/sum(Tragis$MALAYSIA)*100, mati=Tragis$tDeath, pMati2=Tragis$tDeath/Tragis$MALAYSIA*100)

# Plot graf for accident trend in Kedah
old.par <- par(mfrow=c(1, 2))
plot(years, Tragis$KEDAH/sum(Tragis$KEDAH)*100, 
    type="l", col="red", lwd=1, ylab="% Kemalangan",
         xlab="Tahun", main="Trend Kemalangan Di Kedah")
    par(new=T)
    plot(peratus2$pNegara, type = "l", col="blue", xlab = "x", ylab ="y", axes = FALSE)
    par(new=F)
    
# Plot graf for death of accident trend in Kedah
plot(years, Tragis$KEDAHx/Tragis$KEDAH, 
     type="l", col="red", lwd=1, ylab="% kematian",
         xlab="Tahun", main="Trend Kematian Kemalangan")
    par(new=T)
    plot(peratus2$pMati2, type = "l", col="blue", xlab = "", ylab = "", axes = FALSE)

    par(new=F)
    par(old.par)    

4.6 Korelasi Kemalangan Yang Menyumbang Kepada Kematian Di Johor Dan Kedah

# Multiple Linear Regression untuk meramal jumlah kematian berdasarkan kemalangan
# Merge both accident and accident death datasets
Tragis <- Xcident
Tragis["tDeath"] <- Xcidentmaut$MALAYSIA 
# add new column for total death
Tragis["JOHORx"] <- Xcidentmaut$JOHOR
Tragis["KEDAHx"] <- Xcidentmaut$KEDAH
Tragis["KELANTANx"] <- Xcidentmaut$KELANTAN
Tragis["MELAKAx"] <- Xcidentmaut$MELAKA
Tragis["NEGERI_SEMBILANx"] <- Xcidentmaut$NEGERI_SEMBILAN
Tragis["PAHANGx"] <- Xcidentmaut$PAHANG
Tragis["PERAKx"] <- Xcidentmaut$PERAK
Tragis["PERLISx"] <- Xcidentmaut$PERLIS
Tragis["PULAU_PINANGx"] <- Xcidentmaut$PULAU_PINANG
Tragis["SABAHx"] <- Xcidentmaut$SABAH
Tragis["SARAWAKx"] <- Xcidentmaut$SARAWAK
Tragis["SELANGORx"] <- Xcidentmaut$SELANGOR
Tragis["TERENGGANUx"] <- Xcidentmaut$TERENGGANU
Tragis["WILAYAH_PERSEKUTUANx"] <- Xcidentmaut$WILAYAH_PERSEKUTUAN
      
J <- Tragis$JOHOR
years <- c("2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013")

# Plot the analysis
par(mfrow=c(1, 2))
plot(Tragis$JOHOR, Tragis$tDeath, 
     type="l", col="red", lwd=1,
           ylab="Insiden Kematian",
           xlab="Insiden Kemalangan",
           main="Kemalangan membawa Kematian", sub = "Di Negeri Johor")
fit1<-lm(formula=Tragis$JOHOR ~ Tragis$tDeath)
abline(fit1, lty="dashed")
# to determine p-value and r-squared
summary(fit1)
## 
## Call:
## lm(formula = Tragis$JOHOR ~ Tragis$tDeath)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6299.8 -2223.2   766.2  2107.7  4401.3 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -130771.62   23694.21  -5.519 0.000371 ***
## Tragis$tDeath      27.62       3.61   7.650 3.16e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3534 on 9 degrees of freedom
## Multiple R-squared:  0.8667, Adjusted R-squared:  0.8519 
## F-statistic: 58.53 on 1 and 9 DF,  p-value: 3.158e-05
text(x=40000, y=6800, labels="R2=0.867\n P=3.158-05")
      
K <- Tragis$KEDAH
plot(Tragis$KEDAH, Tragis$tDeath, 
           type="l", col="red", lwd=1,
           ylab="Insiden Kematian",
           xlab="Insiden Kemalangan",
           main="Kemalangan membawa Kematian", sub = "Di Negeri Kedah")
fit1<-lm(formula= Tragis$KEDAH ~ Tragis$tDeath)
abline(fit1, lty="dashed")
# to determine p-value and r-squared 
summary(fit1)
## 
## Call:
## lm(formula = Tragis$KEDAH ~ Tragis$tDeath)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2279.4  -305.1   375.5   598.0  1444.2 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -32721.111   7294.613  -4.486  0.00152 ** 
## Tragis$tDeath      7.553      1.111   6.796 7.94e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1088 on 9 degrees of freedom
## Multiple R-squared:  0.8369, Adjusted R-squared:  0.8188 
## F-statistic: 46.19 on 1 and 9 DF,  p-value: 7.938e-05
text(x=13000, y=6800, labels="R2=0.837\n P=7.938e-05")

4.7 Ramalan Kematian Mengikut Kenderaan, Kemalangan, Populasi (Multiple Regression)

ramal <- read.csv2("pkem/data/fulldataVer3.csv")
head(ramal)
##   Negeri Tahun Motosikal Motokar Bas Teksi Kereta.Sewa..Pandu.Sendiri
## 1 Perlis  2013    69,018  21,229 173   126                         79
## 2 Perlis  2012    66,684  21,055 208   199                          5
## 3 Perlis  2011    63,152  19,197 208   196                          5
## 4 Perlis  2010    60,200  17,979 206   196                          2
## 5 Perlis  2009    56,676  16,137 205   197                          3
## 6 Perlis  2008    53,310  14,944 194   194                          3
##   Kenderaan.Barang.Barang Lain.Lain JumlahTerkumpulKenderaan
## 1                   1.949     2.242                    94816
## 2                   1.865     1.430                    91446
## 3                   1.834     1.399                    85991
## 4                   1.826     1.379                    81788
## 5                   1.789     1.348                    76355
## 6                   1.773     1.330                    71748
##   JumlahDaftarTahunSemasa Populasi JumlahKemalangan JumlahKenderaanTerlibat
## 1                    3627   241400             1895                      NA
## 2                    5475   239400             1881                      NA
## 3                    4202   237500             1791                      NA
## 4                    5434   231541             1548                      NA
## 5                    4666   240700             1633                      NA
## 6                    5602   236200             1417                      NA
##   JumlahKematian IndeksKematian  X X.1 X.2 X.3 X.4 X.5
## 1             72              8 NA  NA  NA  NA  NA  NA
## 2             71              8 NA  NA  NA  NA  NA  NA
## 3             79              9 NA  NA  NA  NA  NA  NA
## 4             66              8 NA  NA  NA  NA  NA  NA
## 5             90             12 NA  NA  NA  NA  NA  NA
## 6             69             10 NA  NA  NA  NA  NA  NA
# Run the linear modeling to predict the death by accident    
fit1 <- lm(ramal$JumlahKematian ~ ramal$Negeri+ramal$JumlahTerkumpulKenderaan+ramal$JumlahDaftarTahunSemasa+ramal$Populasi+ramal$JumlahKemalangan)
summary(fit1)
## 
## Call:
## lm(formula = ramal$JumlahKematian ~ ramal$Negeri + ramal$JumlahTerkumpulKenderaan + 
##     ramal$JumlahDaftarTahunSemasa + ramal$Populasi + ramal$JumlahKemalangan)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -101.460  -13.880   -2.406   16.851   66.655 
## 
## Coefficients:
##                                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      3.837e+02  2.201e+02   1.743 0.085979 .  
## ramal$NegeriKedah               -2.860e+02  7.967e+01  -3.590 0.000629 ***
## ramal$NegeriKelantan            -3.577e+02  9.864e+01  -3.626 0.000561 ***
## ramal$NegeriMelaka              -2.967e+02  1.693e+02  -1.753 0.084305 .  
## ramal$NegeriNegeri_Sembilan     -1.864e+02  1.600e+02  -1.166 0.247982    
## ramal$NegeriPahang              -1.633e+02  1.156e+02  -1.413 0.162480    
## ramal$NegeriPerak               -7.190e+01  6.082e+01  -1.182 0.241413    
## ramal$NegeriPerlis              -3.610e+02  2.029e+02  -1.779 0.079827 .  
## ramal$NegeriPulau_Pinang        -3.113e+02  1.257e+02  -2.477 0.015801 *  
## ramal$NegeriSabah               -7.298e+02  5.971e+01 -12.222  < 2e-16 ***
## ramal$NegeriSarawak             -5.753e+02  4.246e+01 -13.550  < 2e-16 ***
## ramal$NegeriSelangor            -1.686e+02  1.023e+02  -1.647 0.104258    
## ramal$NegeriTerengganu          -3.072e+02  1.427e+02  -2.153 0.034949 *  
## ramal$NegeriWilayah_Persekutuan -5.763e+02  1.384e+02  -4.164 9.25e-05 ***
## ramal$JumlahTerkumpulKenderaan   9.672e-06  3.569e-05   0.271 0.787235    
## ramal$JumlahDaftarTahunSemasa    7.414e-04  4.789e-04   1.548 0.126364    
## ramal$Populasi                   2.292e-04  8.425e-05   2.721 0.008319 ** 
## ramal$JumlahKemalangan          -4.220e-03  2.105e-03  -2.004 0.049126 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 30.82 on 66 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.9908, Adjusted R-squared:  0.9884 
## F-statistic: 418.4 on 17 and 66 DF,  p-value: < 2.2e-16

5.0 DATA VISUALIZATION

Visualisi data analisis yang telah dibuat dapat dicapai melalui aplikasi PKEM telah dibangun dengan menggunakan perisian dan teknologi analitik data yang terkini (R, RStudio, dan Shiny) serta berupaya dicapai melalui pelayar web dan telefon bimbit di alamat berikut PKEM.

6.0 PROJECT REPORT AND PRESENTATION

Laporan projek ini telah dihasilkan melalui fungsi R Markdown, dan ia boleh dicapai di alamat berikut: https://rpubs.com/ahlulwulus/902283

7.0 CONCLUSION

Projek ini dapat memberi kesedaran tentang pentingnya maklumat mengenai kemalangan dan kematian di jalan raya. Perkongsian maklumat yang lebih mesra/mudah difahami dan telus kepada rakyat adalah penting untuk memberi keyakinan terhadap sistem penyampaian kerajaan terutamanya keselamatan jalan raya. Secara langsung, ia dapat membantu pihak-pihak yang berkenaan (contoh: PLUS, MIROS, pembuat kenderaan) untuk menambahbaik ciri-ciri keselamatan di jalan raya. Berikut adalah beberapa kesimpulan yang boleh dibuat terhadap projek ini: