본문 바로가기
Database & Bigdata/공공 빅데이터 청년 인턴십

[ 최종 프로젝트 - 개요 및 데이터 전처리 ] 교통안전시설물 대체 및 추가 입지 선정 빅데이터 분석

by jionee 2020. 9. 16.
SMALL

 

[역할분담]

 

기획서 작성 : 박현종, 김수연

 

EDA 및 시각화 통계 : 김주리, 김지원, 소다영

+ 수학적 자문 : 서혜령, 권성훈

 

PPT : 김주리, 김지원, 김수연

 

최종보고서 : 경윤록, 서혜령, 김수연

 

발표 : 미정

 

 

[애자일 프로세스 기반]

 

 

[알고리즘]

 

 

 

 

[ 교통 시설물 및 사고 데이터 전처리 ]

 

  •  교통 시설물 데이터 필터링 ( 서울시 )

필터링 전 전국 과속 방지턱 표준 데이터

 

 

"소재지도로명주소" LIKE '%서울%'

쿼리문으로 필터링

 

 

전국 과속 방지턱 표준 데이터 -> 서울특별시로 필터링 후

 

 

서울시_과속방지턱위치.csv로 저장

 

-> 다른 데이터도 같은 방법으로 필터링

 

 

 

  • 구별 무인교통단속카메라 병합 (서울시)

병합전 분리되어 있는 서울시 무인교통단속카메라 데이터

 

 

벡터 -> 데이터 관리 도구 -> 벡터 레이어 병합

 

 

병합 후 서울시 무인교통단속카메라 데이터

 

-> 다른 데이터도 같은 방법으로 병합

 

 

  • 전처리 완료

전처리 완료된 교통안전시설물 데이터셋

 

 

 

 

[ 반경 n미터 를 가진 벡터 생성 ]

 

  • 레이어 재투영

레이어 선택 -> 벡터 -> 데이터 관리 도구 -> 레이어 재투영

m단위 버퍼 생성을 위해 대상 좌표계를 EPSH:5186 - Korea 2000으로 레이어 재투영

 

 

  • 투영한 레이어에 버퍼 생성

재투영된 출력물 선택 -> 벡터 -> 공간 처리 도구 -> 버퍼

재투영된 출력물로 거리 75m인 버퍼 생성 (과속방지턱 기준 범위)

 

 

과속방지턱 좌표 기준 반경 75m의 원을 그리는 벡터 생성

 

-> 다른 데이터도 같은 방법으로 벡터 생성

시설물별 반경 설정은 논문 등 자료에 근거

 

 

  • 벡터 생성 완료

반경 벡터 생성 완료 

 

 

 

[ 사고지점별 사고건수, 교통안전시설물 수 관계 테이블 ]

 

  • Primary Key 지정

서울시 사고 다발지 데이터 불러오기

 

 

 

 

사고다발지 레이어 선택 -> 속성 -> 필드 -> 필드 계산기

 

사고 다발지, 교통안전시설물에 Primary Key 부여 필요($id) 

-> 현재 데이터상에서는 한 지점을 구분할 수 있는 기본키 부재

-> 지점별 교통안전시설물 갯수 조회를 위해 기본키 추가해 서울시_사고로 저장

 

 

  • 사고 데이터와 과속방지턱 벡터의 교차 영역 생성

사고 데이터 레이어 선택 -> 벡터 -> 공간 처리 도구 -> 교차 영역

사고 지점과 과속 방지턱 벡터의 교차 조회

-> 서울시_사고 취합데이터에 과속방지턱 관리 번호를 포함해 데이터 생성

 

 

 

과속 방지턱 반경 벡터와 생성 교차하는 사고 지점 조회 가능

(노란색 - 사고 지점, 회색 - 방지턱 반경과 교차하는 사고 지점)

 

 

해당 사고 지점이 몇개의 과속방지턱 반경과 일치하는지 조회 가능

 

 

 

사고별_과속방지턱 전체데이터 테이블

 

과속방지턱관리번호가 NULL값

-> 해당 과속방지턱관리번호가 결측, 추후 조인 전에 결측치 처리 필요

 

한 사고지점번호에 과속방지턱 관리번호가 여러개 조회 되는 경우

-> 사고 지점과 일치하는 과속 방지턱 반경이 여러개

 

 

  • 교차 영역 생성 완료

나머지 교통안전시설물들에 대해서도 다음과 같은 과정을 반복해

교차하는 사고 지점 데이터 생성

 

 

 

 

[ 데이터 오류 발견 ]

문제 1 :  [신호등, 노면숫자] 데이터와 [교통단속카메라, 과속방지턱, 횡단보도]의 많게는 데이터가 10배 가량 차이남

-> 한 사고지점에 연결된 교통단속 카메라가 2개 정도라면 신호등은 46개 가량

-> 이대로 데이터가 생성되면 회귀식과 결과에 큰 오류가 생길 것으로 예상됨

해결 방안 신호등, 노면숫자 데이터 분석 제외 결정

 

 

문제 2 :  [교통단속카메라, 과속방지턱] 데이터에 데이터가 존재하지 않는 구 존재

사고 다발지 데이터, 과속방지턱 반경 벡터, 교통 단속 카메라 반경 벡터 레이어를 겹침

-> 특정 지역에 데이터가 존재하지 않음

-> 데이터 부재 지역의 결측값이 무수히 존재

해결 방안 : 데이터값이 충분한 관악구/금천구/은평구/강동구의 데이터만을 조회

 

 

 

  • 관악구/금천구/은평구/강동구 필터링

"지점명" LIKE '%관악구%'  OR 
"지점명" LIKE '%금천구%'  OR 
"지점명" LIKE '%은평구%'  OR 
"지점명" LIKE '%강동구%'  

생성한 교차영역 레이어 우클릭 -> 필터 설정

교통단속카메라, 과속방지턱, 횡단보도, 사고데이터 네개 모두에 필터링

 

 

  • 필터링 완료

 

 

필요한 필드만 체크해서 최종 파일로 저장 

-> 나머지 세 파일도 저장(R로 데이터 처리가 필요하므로 영어로 저장 권장)

 

 

 

[ 사고 지점별 교통안전시설물 개수 데이터 ]

 

  • speed_dump.csv 데이터 불러오기
setwd('/Users/jione/Desktop/dataset')

speed_dump <- read.csv("speed_dump.csv",header=T, stringsAsFactor=F, fileEncoding = 'euc-kr')

View(speed_dump)

 

 

 

  • 사고별 과속방지턱 개수
library(dplyr)

speed_dump_count <- speed_dump %>% 
  group_by(사고지점번호) %>% 
  summarise(과속방지턱개수 = n())

View(speed_dump_count)

사고별 과속방지턱 개수로 요약

n() : 그룹내 행 개수 반환

 

write.csv(speed_dump_count,file="speed_dump_count.csv", fileEncoding = 'euc-kr')

데이터 파일 csv로 내보내기

-> 모든 시설물들에 반복

 

 

사고지점별 안전시설물 개수 csv파일 생성 완료

 

 

 

 

[ 데이터 조인 ]

  • 사고 데이터 불러오기
accident <- read.csv("acciendt.csv",header=T, stringsAsFactor=F, fileEncoding = 'euc-kr')

View(accident)

 

 

  • 사고 데이터 정제
accident <- select(accident,사고지점번호,지점명, 발생건수)

View(accident)

accident에서 필요한 열만 불러와서 대체

 

 

 

  • 사고지점별 교통안전시설물 개수로 조인
final_1 <- left_join(accident,speed_dump_count,by='사고지점번호')
final_2 <- left_join(accident,cctv_count,by='사고지점번호')
final_3 <- left_join(accident,cross_walk_count,by='사고지점번호')

final_accident <- cbind(final_1,'교통단속카메라개수'=final_2$교통단속카메라개수,'횡단보도개수'=final_3$횡단보도개수)

View(final_accident)

사고 데이터 테이블을 기준으로 교통안전시설물 개수 데이터를 Left Join함

-> 교통안전시설물이 존재하지 않는 사고데이터에 대해서도 데이터가 나와야하기 때문에 Left Join 필요

 

cbind로 final_1 데이터에 나머지 데이터의 ( 개수 ) 열만 뽑아서 합침

 

 

 

  • 결측치 처리
final_accident$과속방지턱개수[is.na(final_accident$과속방지턱개수)] <- 0
final_accident$교통단속카메라개수[is.na(final_accident$교통단속카메라개수)] <- 0
final_accident$횡단보도개수[is.na(final_accident$횡단보도개수)] <- 0

View(final_accident)

해당 열에서 na인 값을 0으로 대체

 

final_accident <- na.omit(final_accident)

발생건수열 na인 행을 제거

 

 

  • 최종 import
write.csv(final_accident,file="final_accident.csv", fileEncoding = 'euc-kr')

데이터 파일 csv로 내보내기

 

 

 

 

 

댓글