시간-속도 사고율 표 검토 20180131
# 서론
저번 주에 만들어놓은 표에서 정말로 저 속도, 시간대에 졸음사고 확률이 높은지
아니면 걍 교통량이 많은 건지를 확인해볼 필요를 느낌
표는 사고건수/해당 속성의 콘존 수
집에서 뚝딱해서 만든 표인데 딱히 뭐가 위험한 수준인지 몰라서
내가 결정한 5% 이상의 시간-속도를 골랐다. 이는 아래와 같다.
50km/h - 10시, 11시, 13시
70km/h - 12시
90km/h - 1시, 2시
120km/h - 5시
위에 해당하는 졸음사고 row를 뽑아 특성을 한번 보고
교통량을 어떻게 적용할지 생각해보자.
# R에 raw 데이터 불러오기
이거 개쉬움
install.packages("readxl")
library(readxl)
rawdata<-read_excel(path="파일이름", sheet="시트이름") 하면 끝
header의 여부는 까먹음 걍 적용하면 header 있게 나옴
다음은 dplyr 패키지를 통하여 filter를 먹여줄 것이다.
dplyr 패키지에서 chain 어쩌고 가 지린다고 하지만 나는 알린이기 때문에
담학기 통자처에서 배우도록 한다.
wantdata<-filter(.data=rawdata, rawdata$원인=="졸음")
rawdata$속도<-10*(ceiling(rawdata$속도/10))
두 번째 줄은 속도를 10단위로 계급을 만드는 것이다. if문을 쓰면 너무 길어져서 걍 올림을 사용하였고
floor에 digit을 결정하는 인자가 없어 10으로 나뉜 뒤 floor를 먹이고 10을 다시 곱하였다. zl존
wantdata가 졸음사고이니 여기서 위에서 말했던 것들을 뽑아낼 것이다.
# 원하는 사고데이터 추출
위와 같이 filter를 사용하여 할 건데 or 연산자 || 와 and 연산자 &&를 적극적으로 사용하여
(원소들의 비교는 |, 벡터자체의 비교는 ||)
지상전의 승리자가 될 것이다.
근데 생각해보니까 pipefunction 도 써야 승리할 수 있을 것 같다.
근데 또 실패했다.
newdata<-rbind(
wantdata%>%filter(속도==50, 시간==10),
wantdata%>%filter(속도==50, 시간==11),
wantdata%>%filter(속도==50, 시간==13),
wantdata%>%filter(속도==70, 시간==12),
wantdata%>%filter(속도==90, 시간==1),
wantdata%>%filter(속도==90, 시간==2),
wantdata%>%filter(속도==120, 시간==5)
)
나는 허접이라 이렇게 했다. 매우 허접해 보인다.
이럴 거면 wantdata를 안 만들어도 됐을 텐데;;;
근데 만들어보니 데이터가 이상하다 표에는 사고가 있다고 나오는데 raw데이터에는 사고가 없다..
표를 다시 가공한다..
코드... 최초 공개할게요
for (i in 1:13) {
for (j in 1:24){
acc[i,j+1]<-nrow(rawdata%>%filter(속도==20+10*i, 시간==j-1))
}
}
table 형태는 귀차나서 엑셀로 만든 다음에 썼다. 하나의 프로그램에 의존하면 안되? 안돼?
테이블 다시 만듬 ;;
또 나만의 기준으로 3% 이상의 경우만 살필거임
속도가 낮거나 높은 구간은 표본이 적어서 저 확률이 신빙성이 부족
그래도 뭐 해야지 뭐 어쩌겠어 나는 소시민이야
50km/h - 12시, 13시, 15시
70km/h - 11시
90km/h - 3시, 4시, 5시,
140km/h - 1시, 3시
이제 다시 시작이다
# 원하는 사고데이터 추출 (2)
아까와 같은 코드이지만 다른 내용으로 원하는 졸음사고 데이터 추출
newdata<-rbind(
rawdata%>%filter(속도==50, 시간==12, 원인=="졸음"),
rawdata%>%filter(속도==50, 시간==13, 원인=="졸음"),
rawdata%>%filter(속도==50, 시간==15, 원인=="졸음"),
rawdata%>%filter(속도==70, 시간==11, 원인=="졸음"),
rawdata%>%filter(속도==90, 시간==3, 원인=="졸음"),
rawdata%>%filter(속도==90, 시간==4, 원인=="졸음"),
rawdata%>%filter(속도==90, 시간==5, 원인=="졸음"),
rawdata%>%filter(속도==140, 시간==1, 원인=="졸음"),
rawdata%>%filter(속도==140, 시간==3, 원인=="졸음")
)
해당되는 졸음사고건수 149건으로 넘모 많아서 교통량은 평균으로 퉁친다
반박시 통잘알
tapply를 쓰고 싶었지만 인덱스가 두개인 경우 사용법을 몰라서 위에 코드 응용
근데 생각해보니 테이블 또 만들어야함;;
# 원하는 사고데이터 추출 (3)
이번에는 사고건수에다가 해당 특성을 가지는 콘존들의 평균 교통량을 쓸거임
인내를 가지고 시작해보자.
물 한잔을 들이키며 생각해보니
내가 지금 R 위에 올려논 테이블에 교통량을 나누어 주면 될 것 같다.
그리고 다시 csv로 출력해 엑셀로 잡을 하면 끝
for (i in 1:13) {
for (j in 1:24){
all[i,j+1]<-nrow(rawcz%>%filter(속도==20+10*i, X__1==j-1))
k<-rawcz%>%filter(속도==20+10*i, X__1==j-1)
k<-mean(k$교통량)
all[i,j+1]<-k*all[i,j+1]
rm(list="k)
}
}
이걸 활용해 sleep/all 을 해서 1000대당 졸음사고 건수로 바꿨습니다...
마지막 표...
이로써 교통량을 고려했다. 이제 기준이 상당히 선정하기 힘들어졌다.
아마 새벽시간과 낮시간의 갭이 너무 커서 그럴 것이라 생각해서
기존에 선정했던 23~6시를 새벽시간으로 낮과 새벽으로 나눠서 색칠을 다시 해봤다.
오늘의 결론임
# 결론
큰 데이터를 알로 다루고 정리해서 걍 엑셀로 꾸미는 게 더 좋은 거 같은데
ggplot이나 이런거 공부할 필요가 있을까???
글고 오늘 같은 일 3번해서 가성비 넘 구림