数据来自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))
mapmap <- leaflet(data = usedata) %>%
addTiles() %>%
addCircleMarkers(lng = usedata$Longitude, lat = usedata$Latitude,
clusterOptions = markerClusterOptions(),
popup = ~(usedata$infor))
mapa <- 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