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: