지역 별 교통사고 사건 데이터를 가지고 막대그래프도 그려보고 지역별, 주/야간별 교통사고 사건 수와 사상자의 수에 대해 분석해 보고자 한다. 데이터를 불러와 분석에 맞게 구조를 변경하는 것이 중요하므로 이 포인트에 중점을 두고 보면 좋을 것이다.
1. 지역별 교통사고 사상자수 분석
setwd("") # 디렉토리 설정(파일의 위치 경로를 확인하여 기입한다
acc_data <- read.csv("accdata2.csv", header = T)
head(acc_data, 4)
'''
발생년 주야 요일 사망자수 사상자수 발생지시도 발생지시군구 사고유형_대분류 사고유형_중분류 사고유형 법규위반_대분류
1 2012 야간 수 1 1 경남 거창군 차대차 추돌 진행중 추돌 운전자법규위반
2 2012 주간 금 1 1 경기 용인시 차대차 추돌 주정차중 추돌 운전자법규위반
3 2012 야간 금 1 2 경북 김천시 차대차 측면직각충돌 측면직각충돌 운전자법규위반
4 2012 주간 목 1 1 경기 이천시 차대차 추돌 주정차중 추돌 운전자법규위반
법규위반 경도 위도
1 안전운전 의무 불이행 127.8532 35.58072
2 안전운전 의무 불이행 127.0529 37.31761
3 안전운전 의무 불이행 128.0032 36.19092
4 안전운전 의무 불이행 127.4204 37.23896 '''
table(acc_data$발생지시도)
'''
강원 경기 경남 경북 광주 대구 대전 부산 서울 세종 울산 인천 전남 전북 제주 충남 충북
703 2777 1302 1511 311 545 310 596 1173 53 330 486 1274 1007 275 1188 783 '''
tapply() 함수로 지역별 사상자 수를 더하여 나타낸다
info <- tapply(acc_data$사상자수, acc_data$발생지시도, sum)
# tapply(data, index, function)
info
'''
강원 경기 경남 경북 광주 대구 대전 부산 서울 세종 울산 인천 전남 전북 제주 충남 충북
1339 4642 2035 2560 480 861 426 876 1781 83 493 781 2074 1707 513 2024 1280 '''
class(info)
'''
[1] "array" '''
위에서 info의 데이터 구조를 보면 array인데 추후 그래프에 활용하기 위해 데이터프레임으로 구조를 변경한다.
df <- data.frame(지역=names(info), 사상자총계=info)
df
'''
지역 사상자총계
강원 강원 1339
경기 경기 4642
경남 경남 2035
경북 경북 2560
광주 광주 480
대구 대구 861
대전 대전 426
부산 부산 876
서울 서울 1781
세종 세종 83
울산 울산 493
인천 인천 781
전남 전남 2074
전북 전북 1707
제주 제주 513
충남 충남 2024
충북 충북 1280 '''
데이터 프레임으로 구조를 변경하고 막대그래프로 데이터를 파악한다.
# 정렬
df1 <- df[order(df$사상자총계, decreasing=T), ]
df1
'''
지역 사상자총계
경기 경기 4642
경북 경북 2560
전남 전남 2074
경남 경남 2035
충남 충남 2024
서울 서울 1781
전북 전북 1707
강원 강원 1339
충북 충북 1280
부산 부산 876
대구 대구 861
인천 인천 781
제주 제주 513
울산 울산 493
광주 광주 480
대전 대전 426
세종 세종 83 '''
# 막대그래프
vcol1 <- as.vector(df1[,1]) # plot에 넣기 위해 각 열을 벡터로 추출
vcol2 <- as.vector(df1[,2])
vcol1
'''
[1] "경기" "경북" "전남" "경남" "충남" "서울" "전북" "강원" "충북" "부산" "대구" "인천" "제주" "울산" "광주" "대전" "세종" '''
vcol2
'''
[1] 4642 2560 2074 2035 2024 1781 1707 1339 1280 876 861 781 513 493 480 426 83 '''
barplot(vcol2, beside = T, names= vcol1, col=rainbow(length(vcol1)), ylim=c(0,5000), main = '지역별 교통사고 사상자 수')
2. 지역별 교통사고 사상자를 주/야간으로 분석
앞서는 지역별 교통사고 사상자수를 분석하였지만 아래에서는 더 나아가 지역별 주간과 야간에 사상자수를 분석하고자 한다.
info1 <- tapply(acc_data$사상자수, list(acc_data$발생지시도, acc_data$주야), sum)
info1
'''
야간 주간
강원 500 839
경기 2492 2150
경남 941 1094
경북 1193 1367
광주 283 197
대구 501 360
대전 245 181
부산 484 392
서울 1047 734
세종 36 47
울산 269 224
인천 450 331
전남 911 1163
전북 780 927
제주 197 316
충남 996 1028
충북 631 649 '''
# factor를 이용해 인덱스 목록 지정
info1 <- tapply(acc_data$사상자수, list(acc_data$발생지시도, factor(acc_data$주야, level=c('주간','야간'))), sum) # 인덱스 목록을 정렬하기 위해 level사용
info1
'''
주간 야간
강원 839 500
경기 2150 2492
경남 1094 941
경북 1367 1193
광주 197 283
대구 360 501
대전 181 245
부산 392 484
서울 734 1047
세종 47 36
울산 224 269
인천 331 450
전남 1163 911
전북 927 780
제주 316 197
충남 1028 996
충북 649 631 '''
class(info1)
'''
[1] "matrix" "array" '''
info2 <- data.frame(info1) # 구조 변경
class(info2)
'''
[1] "data.frame" '''
데이터의 행과 열의 구조를 변경하는 경우 data.table 패키지를 사용한다. 구조를 변경하는 경우 컬럼명을 따로 지정하지 않는 경우 기본적으로 V가 들어간다.
install.packages('data.table')
library(data.table)
t_1 <- transpose(info2) # 행과 열 변형, 컬럼명 지정이 되지 않음
t_1
'''
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 839 2150 1094 1367 197 360 181 392 734 47 224 331 1163 927 316 1028 649
2 500 2492 941 1193 283 501 245 484 1047 36 269 450 911 780 197 996 631 '''
rownames(t_1) <- colnames(info2)
colnames(t_1) <- rownames(info2)
t_1
'''
강원 경기 경남 경북 광주 대구 대전 부산 서울 세종 울산 인천 전남 전북 제주 충남 충북
주간 839 2150 1094 1367 197 360 181 392 734 47 224 331 1163 927 316 1028 649
야간 500 2492 941 1193 283 501 245 484 1047 36 269 450 911 780 197 996 631 '''
행과 열만 변경하였고 주/야간의 총 사상자 수를 알아보기위해 rbind() 함수를 통해 행을 추가한다. 행간 값을 합치기 위해 colSums() 함수를 사용한다.
t_2 <- rbind(t_1, total=colSums(t_1))
t_2
'''
강원 경기 경남 경북 광주 대구 대전 부산 서울 세종 울산 인천 전남 전북 제주 충남 충북
주간 839 2150 1094 1367 197 360 181 392 734 47 224 331 1163 927 316 1028 649
야간 500 2492 941 1193 283 501 245 484 1047 36 269 450 911 780 197 996 631
total 1339 4642 2035 2560 480 861 426 876 1781 83 493 781 2074 1707 513 2024 1280
'''
지역별 주/야간 교통사고 사상자수를 시각화 하기 위해 boxplot()을 사용한다. 시각화를 위해서 데이터는 벡터, 배열, 행렬 형태로 되어야 한다.
아래에 두가지 코드를 작성하였다. 하나의 막대에 주/야간 사상자수를 함께 넣은 막대그래프와 따로 넣은 그래프 두개를 그려넣었다. 이는 beside() 함수에 따라 다름을 알 수 있다.
barplot(as.matrix(t_1[,]), beside=T, col=c('pink','darkblue'), main= '지역별 주/야간 교통 사상사고 통계', legend=c('주간','야간')) # beside =T : 같은 지역별로 묶기
axis(2, seq(0, 3000, 500)) # 2: y축
barplot(as.matrix(t_1[,]), beside=F, col=c('pink','darkblue'), main= '지역별 주/야간 교통 사상사고 통계', legend=c('주간','야간')) # beside =F : 하나의 막대에 표현
axis(2, seq(0, 3000, 500))
'R' 카테고리의 다른 글
상관 분석 (0) | 2021.07.27 |
---|---|
추론통계(귀무가설과 대립가설, 유의 확률, t-검정, 분산분석) (0) | 2021.07.27 |
dplyr 패키지(select, distinct, arrange, group_by, filter, summarise, mutate) (0) | 2021.07.26 |
변수간 관계 탐색(산점도, pairs, 상관계수, 상관행렬, 상관행렬 히트맵) (0) | 2021.07.25 |
데이터 분포 탐색(사분위수, 히스토그램, 도수분포표, 막대그래프, 파이그래프, 정규분포) (0) | 2021.07.25 |