数据来自kaggle:https://www.kaggle.com/usgs/earthquake-database/data

数据读取及预处理

读取数据

Eqdata <- read_csv("database.csv")
usedataname <- c("Date","Latitude","Longitude", "Magnitude","Magnitude Type")
usedata = Eqdata[usedataname]
colnames(usedata) <- c("Date","Latitude","Longitude", "Magnitude","MagnitudeType")
usedata["Year"] <- sapply(usedata$Date,function(x) {strsplit(x,"/")[[1]][3]})
## 剔除缺失数据  
VIM::aggr(usedata,prop = FALSE)

usedata = usedata[!is.na(usedata$Year),]
usedata = usedata[!is.na(usedata$MagnitudeType),]
summary(usedata)
##      Date              Latitude         Longitude         Magnitude    
##  Length:23406       Min.   :-77.080   Min.   :-180.00   Min.   :5.500  
##  Class :character   1st Qu.:-18.655   1st Qu.: -76.32   1st Qu.:5.600  
##  Mode  :character   Median : -3.572   Median : 103.99   Median :5.700  
##                     Mean   :  1.674   Mean   :  39.66   Mean   :5.883  
##                     3rd Qu.: 26.155   3rd Qu.: 145.03   3rd Qu.:6.000  
##                     Max.   : 86.005   Max.   : 180.00   Max.   :9.100  
##  MagnitudeType          Year          
##  Length:23406       Length:23406      
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 

地震每年发生次数

## 根据年份将数据数据可视化
## 直方图

yeardata <- usedata%>%
  group_by(Year)%>%
  summarise(Eqnum = n())

## 可交互图像
p1 <- ggplot(yeardata) +
  theme_bw(base_family = "STKaiti") +
  geom_bar(aes(Year,Eqnum),width = 0.8,fill = "red",stat = "identity",alpha = 0.9) +
  theme(axis.text.x = element_text(angle = 90)) + 
  labs(x = "年份",y = "地震次数",title = "地震每年发生次数")
ggplotly(p1)

地震每年每种类型发生次数

## 根据年份将数据数据可视化
## 直方图

YTdata <- usedata%>%
  group_by(Year,MagnitudeType)%>%
  summarise(Eqnum = n())

## 可交互图像
p2 <- ggplot(YTdata,aes(fill = MagnitudeType)) +
  theme_bw(base_family = "STKaiti") +
  geom_bar(aes(Year,Eqnum),width = 0.8,stat = "identity",alpha = 0.8) +
  theme(axis.text.x = element_text(angle = 90)) + 
  labs(x = "年份",y = "地震次数",title = "地震每年发生次数")
ggplotly(p2)

地震发生的地图可视化

usedata["infor"] = paste(usedata$Year,"年:",usedata$Magnitude," Type:",usedata$MagnitudeType,sep = "")
map <- leaflet(data = usedata,width = 800, height = 500) %>%
  addTiles() %>%
  addCircleMarkers(lng = usedata$Longitude, lat = usedata$Latitude,
                   stroke = FALSE,color = "red",
                   fillOpacity = 0.5,radius = ~(usedata$Magnitude / 2),
                   popup = ~(usedata$infor)) 

map

聚类后的地图

map <- leaflet(data = usedata) %>%
  addTiles() %>%
  addCircleMarkers(lng = usedata$Longitude, lat = usedata$Latitude,
                   clusterOptions = markerClusterOptions(),
                   popup = ~(usedata$infor)) 

map

多图层的地图

a <- usedata%>%
  group_by(MagnitudeType)%>%
  summarise(num = n()) %>%
  arrange(desc(num))
a
## # A tibble: 10 x 2
##    MagnitudeType   num
##    <chr>         <int>
##  1 MW             7721
##  2 MWC            5668
##  3 MB             3760
##  4 MWB            2458
##  5 MWW            1983
##  6 MS             1702
##  7 ML               77
##  8 MWR              26
##  9 MD                6
## 10 MH                5
## 准备数据 
MWdata <- usedata[usedata$MagnitudeType == "MW",]
MWCdata <- usedata[usedata$MagnitudeType == "MWC",]
MBdata <- usedata[usedata$MagnitudeType == "MB",]
MWBdata <- usedata[usedata$MagnitudeType == "MWB",]
MWWdata <- usedata[usedata$MagnitudeType == "MWW",]
## 绘制地图 
map <- leaflet(data = usedata) %>%
  addTiles() %>%
  addCircleMarkers(lng = MWdata$Longitude, lat = MWdata$Latitude,
                   stroke = FALSE,group = "MW",color = "green",
                   fillOpacity = 0.5,radius = ~(MWdata$Magnitude / 2),
                   popup = ~(MWdata$infor)) %>%
  addCircleMarkers(lng = MWCdata$Longitude, lat = MWCdata$Latitude,
                   stroke = FALSE,group = "MWC",color = "red",
                   fillOpacity = 0.5,radius = ~(MWCdata$Magnitude / 2),
                   popup = ~(MWCdata$infor))%>%
  addCircleMarkers(lng = MBdata$Longitude, lat = MBdata$Latitude,
                   stroke = FALSE,group = "MB",color = "blue",
                   fillOpacity = 0.5,radius = ~(MBdata$Magnitude / 2),
                   popup = ~(MBdata$infor)) %>%
  addCircleMarkers(lng = MWBdata$Longitude, lat = MWBdata$Latitude,
                   stroke = FALSE,group = "MWB",color = "cyan",
                   fillOpacity = 0.5,radius = ~(MWBdata$Magnitude / 2),
                   popup = ~(MWBdata$infor)) %>%
  addCircleMarkers(lng = MWWdata$Longitude, lat = MWWdata$Latitude,
                   stroke = FALSE,group = "MWW",color = "lawngreen",
                   fillOpacity = 0.5,radius = ~(MWWdata$Magnitude / 2),
                   popup = ~(MWWdata$infor)) %>%
  addLayersControl(overlayGroups = c("MW","MWC","MB","MWB","MWW"),
                   options = layersControlOptions(collapsed = FALSE),
                   position = "topleft")
map