[역할분담]
기획서 작성 : 박현종, 김수연
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로 내보내기
'Database & Bigdata > 공공 빅데이터 청년 인턴십' 카테고리의 다른 글
[ 최종 프로젝트 - 시각화 ] 교통안전시설물 대체 및 추가 입지 선정 빅데이터 분석 (0) | 2020.09.24 |
---|---|
[ DAY 18 ] 표준모델분석실습 - 관광축제 (1) | 2020.09.16 |
[ DAY 17 ] 표준분석모델실습 - 민원분야 (0) | 2020.09.15 |
[ DAY 16 ] 표준분석모델실습 - 전기차 충전 인프라 설치 입지 선정(천안) (0) | 2020.09.14 |
[ DAY 15 ] 빅데이터 분석Tool을 이용한 분석 ( BigZAMi, QGIS 분석 실습 ) (2) | 2020.09.11 |
댓글