한국 지진 데이터 시각화 (1978~2012)

ggmap으로 spatial 데이터 분석을 해보기 위해서 데이터를 찾던 중 기상청에서 제공하는 지진 통계 데이터를 가지고 하면 어떨까 하는 생각에 1978년도부터 지진 데이터를 가지고 플로팅을 해보기로 했다. 

ggmap은 google map 뿐만 아니라 openstreet map, stamen design, cloud made map 을 소스로 사용해 spatial 데이터 분석을 할 수 있는 패키지로 최근 ggplot2를 기반으로 layering 시스템을 채용해 ggplot2를 사용해본 사용자들이 아주 쉽게 접근할 수 있는 장점을 제공하고 있다.

필자 경험상 ggmap을 플로팅한 결과를 R markdown으로 컨버팅시 connection close문제가 발생해 아직 markdown으로 변환은 힘든 상황이지만 블로그에 올릴정도의 그래프는 생성할 수 있다.

일단 기상청 지진 센터에서 데이터를 가져와 엑셀에서 필드 편집을 해 R에서 로딩하기 쉬운 형식으로 만들었다. 파일은 여기에 올려 두었다.

코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
library(ggmap)
library(lubridate)
 
eq <- read.table("https://dl.dropbox.com/u/8686172/eq.csv", sep="\t", header=T, stringsAsFactors=F)
 
summary(eq)
 
eq$latitude <- unlist(strsplit(eq$latitude, " "))[seq(from=1,to=nrow(eq), by=2)]
eq$longitude <- unlist(strsplit(eq$longitude, " "))[seq(from=1,to=nrow(eq), by=2)]
 
 
eq$longitude <- as.double(eq$longitude)
eq$latitude <- as.double(eq$latitude)
eq$year <- as.factor(substr(eq$date,1,4))
eq$date <- ymd_hm(eq$date)
 
ggmap(get_googlemap(center = 'korea', zoom=6, maptype='terrain'),extent='device', fullpage = TRUE) + 
  geom_point(aes(x=longitude, y=latitude, size=power, colour=date), data = eq, alpha = .7) +
  scale_x_date("10 years") + 
  geom_density2d(aes(x=longitude, y=latitude), data=eq) 
 
 
ggmap(get_googlemap(center = 'korea', zoom=7, maptype='terrain'),extent='device') + 
  geom_point(aes(x=longitude, y=latitude, size=power, colour=date), data = eq, alpha = .7) +
  scale_x_date("10 years") + 
  geom_density2d(aes(x=longitude, y=latitude), data=eq)
 
 
library(plyr)
library(ggplot2)
eqcnt <- ddply(eq, .(year),summarise, shock=mean(power), freq=length(power))
 
 
ggplot(eqcnt, aes(year, freq)) + geom_point(aes(size=shock),colour="blue") + geom_line(aes(group=1), colour="red") +
  ylab("지진빈도") + opts(axis.text.x=theme_text(angle=90, hjust=1)) 
 
ggplot(eq,aes(x=year,y=power)) + geom_boxplot() + opts(axis.text.x=theme_text(angle=90, hjust=1)) + ylab("진도")

 

 

이렇게 나온 그래프는 아래와 같다.

image

밀도함수를 적용해서 플로팅 했기 때문에 통계적으로 어느 위치에 집중적으로 지진이 나왔는지 확인 가능하다. 재밋는 사실은 시간 간격은 있지만 거의 유사한 위치에 빈번하게 지진이 발생하는 데이터를 많이 볼 수 있는데, 될 수 있으면 그런 지역에 거주하는건 피해야 되는게 아닐까 한다.

 

image

 

좀더 상세한 지도이다.

대전부근에서 지진이 많이 발생하며, 포항쪽 그리고 제주도 동해상에 많은 지진이 나왔음을 알 수 있다.

인구집중 지역인 서울은 그리 많은 지진이 나지 않는다는 것을 알 수 있다.

년도별 지진 발생 횟수를 보면 아래와 같다.,

 

image

 

시간이 갈수록 지진 발생 횟수가 상승함을 알 수 있으나, 그 진도(shock)의 파워가 상승하는 기미는 보이지 않으나 이 부분은 좀 파악이 필요한 부분이다.

각 년도별로 진도의 분포가 궁금해 진다.

그러기 위해 아래 그래프를 그려본다.

 

image

 

재밋는 사실은 대부분의 해에 outlier가 존재한다는건데, 이건 지진 예측이 왜 힘든건지 알려주는 한 단서가 아닐까 한다. 

다행스럽게도 지진 빈도는 해가 갈수록 늘어나지만 지진의 진도는 상승 기세가 보이지 않는거 같다.

내가 해본 분석은 spatial 데이터 분석의 기초이다. 좀더 상세한 분석은 관련 공부를 좀 해야 한다.

 

 

ps. 이 글에서 power, shock은 진도와 같은 의미로 사용되었다. 귀찮아서 그래프 고치기 싫어서 혼용했으니 양해 부탁드린다.

CC BY-NC 4.0 한국 지진 데이터 시각화 (1978~2012) by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.