【R】葡萄牙森林火灾(数据可视化&回归分析)

下面将以葡萄牙森林火灾数据为例进行数据可视化及建模分析。葡萄牙森林火灾数据
(数据来源)

一、数据集描述
属性 解释
X 在蒙特西尼奥公园地图的横坐标(1-9)
Y 在蒙特西尼奥公园地图的纵坐标(2-9)
month 一年中的月份(1-12)
day 一周中的哪一天(1-7)
FFMC 来自FWI(火险气候指数系统的FFMC(细小可燃物湿度码)(18.7-96.20)
DMC 来自FWI系统的DMC(半腐层湿度码)(1.1-291.3)
DC 来自FWI系统的DC(干旱码)(7.9-860.6)
ISI 来自FWI系统ISI(初始蔓延指数)(0.0-56.10)
temp 温度(2.2-33.3)
RH 相对湿度(15%-100%)
wind 风速(0.4-9.4)
rain 室外降雨量(0.0-6.4)
area 面积-森林烧毁面积(0.00-1090.84)

二、每个月份,每个季度,每一天(周一到周日)森林火灾发生次数和总面积的条形图

library(ggplot2) #要用到的绘图包
#导入数据
data <- read.table("D:\\R\\forestfires.csv",header=TRUE,sep=",")

#按月、季、日画出森林火灾发生次数和总面积的条形图
library(ggplot2)
setwd('D:/3283697933/R')  #设置保存图片的路径

#每月森林火灾发生次数
jpeg(file = "每月森林火灾发生次数.jpg")
k=ggplot(data,aes(x=factor(month)))
k + geom_bar(stat="count",fill = 'steelblue') + labs(title='每月森林火灾发生次数',x='月份',y='次数')
dev.off()

注:因为绘制的图片较多所以这里直接设置路径保存了,实际上也可以直接绘图。
在这里插入图片描述由图可知12个月份中森林火灾高发的月份为八月和九月,分别超过了200次和150次,其余月份的火灾发生次数较低。

#每季度森林火灾发生次数
jpeg(file = "每季度森林火灾发生次数.jpg")
#添加季度作为变量
data$quarter[data$month=="jan"] <- 'spr'
data$quarter[data$month=="feb"] <- 'spr'
data$quarter[data$month=="mar"] <- 'spr'
data$quarter[data$month=="apr"] <- 'sum'
data$quarter[data$month=="may"] <- 'sum'
data$quarter[data$month=="jun"] <- 'sum'
data$quarter[data$month=="jul"] <- 'aut'
data$quarter[data$month=="aug"] <- 'aut'
data$quarter[data$month=="sep"] <- 'aut'
data$quarter[data$month=="oct"] <- 'win'
data$quarter[data$month=="nov"] <- 'win'
data$quarter[data$month=="dec"] <- 'win'
k=ggplot(data,aes(x=factor(quarter)))
k + geom_bar(stat="count",fill = 'steelblue') + labs(title='每季度森林火灾发生次数',x='季度',y='次数')
dev.off()

在这里插入图片描述由图可知四个季度中森林火灾高发的季度为第三季度,即7,8,9月。其发生总次数接近400次。

#每日森林火灾发生次数
jpeg(file = "每日森林火灾发生次数.jpg")
k=ggplot(data,aes(x=factor(day)))
k + geom_bar(stat="count",fill = 'steelblue') + labs(title='每日森林火灾发生次数',x='星期',y='次数')
dev.off()

由图可知森林火灾在周日发生的次数最多,约为90次,但总体上差距不是很大。由图可知森林火灾在周日发生的次数最多,约为90次,但总体上差距不是很大。

#每月森林火灾发生总面积
jpeg(file = "每月森林火灾发生总面积.jpg")
k=ggplot(data,aes(x=factor(month),y=area))
k + geom_bar(stat="identity",fill = 'steelblue') + labs(title='每月森林火灾发生总面积',x='月份',y='公顷')
dev.off()

在这里插入图片描述由图可知森林火灾在九月份的面积高达2000公顷远超于其他月,另外在八月份的森林火灾覆盖面积为第二高,超过2000公顷。

#每季度森林火灾发生总面积
jpeg(file = "每季度森林火灾发生总面积.jpg")
k=ggplot(data,aes(x=factor(quarter),y=area))
k + geom_bar(stat="identity",fill = 'steelblue') + labs(title='每季度森林火灾发生总面积',x='季度',y='次数')
dev.off()

在这里插入图片描述
由图可知森林火灾在第三季度(7,8,9月)的覆盖总面积最高,将近6000公顷,其余三个季度火灾发生的总面积基本持平。

#每日森林火灾发生总面积
jpeg(file = "每日森林火灾发生总面积.jpg")
k=ggplot(data,aes(x=factor(day),y=area))
k + geom_bar(stat="identity",fill = 'steelblue') + labs(title='每日森林火灾发生总面积',x='星期',y='公顷')
dev.off()

在这里插入图片描述由图可知森林火灾在周六的覆盖总面积最高,超过2000公顷,一周的其余时间火灾发生的总面积有较小的差距。

三、每个季度降雨量和风速的盒图

#每个季度降雨量的盒图
jpeg(file = "每季度降雨量的盒图.jpg")
boxplot(rain ~ quarter, data=data,main="每个季度降雨量的盒图",
        xlab="季度", ylab="降雨量(毫米/平方米)",col="green")
dev.off()

在这里插入图片描述因为有一个降雨量为6.4的异常值点,所以不容易看出数据集中的具体区域,但仍能得知四个季度的降雨量都在0附近。

#每个季度风速的盒图
jpeg(file = "每季度风速的盒图.jpg")
boxplot(wind ~ quarter, data=data,main="每个季度风速的盒图",
        xlab="季度", ylab="风速(公里/小时)",col="pink")
dev.off()

在这里插入图片描述
四、根据火灾发生的位置信息,画出火灾发生次数和面积的气泡图

#火灾发生次数的气泡图
#将坐标放到新的数据框a中,方便画图
X <- data$X ; Y<- data$Y 
a <- data.frame(X,Y)
a$Z <- 10*data$X + data$Y
a$count <- 1
#去掉重复值,计算每个坐标出现的次数
count <- tapply(a$count,a$Z,sum)
b <- data.frame(count)
b$Z <- unique(a$Z)
b$X <- floor(0.1*b$Z)
b$Y <- b$Z-10*b$X

jpeg(file = "火灾发生次数的气泡图.jpg")
r <- sqrt(b$count/pi)
symbols(b$X,b$Y,circle=r, inches=0.5,
        fg="white", bg="lightblue",
        main="火灾发生次数的气泡图",
        ylab="纵坐标",xlab="横坐标")
dev.off()

在这里插入图片描述

#火灾发生面积的气泡图
jpeg(file = "火灾发生面积的气泡图.jpg")
r <- sqrt(data$area/pi)
symbols(data$X,data$Y,circle=r, inches=0.30,
        fg="purple", bg="pink",
        main="火灾发生面积的气泡图",
        ylab="纵坐标",xlab="横坐标")
dev.off()

在这里插入图片描述
五、对于中火灾高发的季度,画出散点图矩阵,再进行回归分析,找出火灾高发的相关变量
由二的结果可知,火灾高发的季度为秋季(7,8,9月)。
下面将分两步进行,画出散点图矩阵(包括直线和曲线拟合),再进行回归分析,找出火灾高发的相关变量。
(1)散点图矩阵(直线和曲线拟合)
考虑到图的清晰度和美观,我们将FFMC,DMC,DC,ISI作为第一组,温度,相对湿度,风速作为第二组,分别绘制它们的散点图矩阵。

library(car)
jpeg(file = "散点图矩阵1.jpg")
data1 <- subset(data,data$quarter == "aut")
scatterplotMatrix(~ FFMC + DMC + DC + ISI, data=data1,
                  spread=FALSE, smoother.args=list(lty=2), main="散点图矩阵(FFMC,DMC,DC,ISI)")
dev.off()

在这里插入图片描述

jpeg(file = "散点图矩阵2.jpg")
scatterplotMatrix(~ temp + RH + wind, data=data1,
                  spread=FALSE, smoother.args=list(lty=2), main="散点图矩阵(温度,相对湿度,风速)")
dev.off()

在这里插入图片描述
(2)回归分析(找出火灾高发的相关变量)

#回归探寻秋季火灾高发的相关变量
data1 <- subset(data,data$quarter == "aut")
data$count <- 1
fit <- lm(count ~ FFMC + DMC + DC + ISI+temp + RH + wind + rain, data=data1)
summary(fit)

在这里插入图片描述

fit1 <- lm(count ~ (FFMC + DMC + DC + ISI+temp + RH + wind + rain)^2, data=data1)
summary(fit1)

在这里插入图片描述

fit2 <- lm(count ~ (FFMC + DMC + DC + ISI+temp + RH + wind + rain)^3, data=data1)
summary(fit2)

在这里插入图片描述
六、结果整理与总结
①森林火灾发生次数及面积
八月和九月为葡萄牙森林火灾的高发月份,这两个月中森林火灾每月发生次数在175次左右;八月和九月也是森林火灾发生总面积最大的月份。此外三月份的火灾发生次数仅次于八月,九月,略高于50次。其余月份的火灾发生次数与总面积均较少。
将月度森林火灾发生次数整合为季度数据后,由于累加,发现秋季的火灾发生次数与火灾发生总面积远高于其三个季度。
从周数据来看,周日火灾发生的次数最多,周三火灾发生的次数最少。但二者相差不超过五十次,故可以认为森林火灾发生次数与是星期几相关性不大。但森林火灾周日发生的覆盖总面积显著高于一周的其他时间。我们猜想是周末去森林出游的人较多,乱扔水平以及废弃香烟等物品容易引发森林火灾。
②每个季度降雨量与风速
由于春季降雨量有一个异常值点6.3,但四个季度的降雨量都集中在0附近,故从盒图中看不出降雨量集中的精确区间。但针对那个异常值点并不能认为是数据录入错误而武断地删除,也应考虑小概率时间导致其它的异常发生等因素,对其进行进一步探究。
四个季度的平均风速在4公里/小时上下波动,相差不大。但相较于其他三个季度,冬季的风速的上四分位数到下四分位数的距离最大,即范围最大。大部分数据集中在3-8公里/小时。
③每个地点火灾的发生次数与面积
将森林中的地点抽象为平面直角坐标系X,Y中的点,共计36处区域发生了火灾。其中森林火灾高发区域集中在中下方区域(5,5)附近,火灾面积较大的区域集中在中间偏右(7,6)。火灾发生次数与发生面积并无很强的相关性。
④四个指标之间的联系:FFMC(细小可燃物湿度码);DMC(半腐层湿度码);DC(干旱码);ISI(初始蔓延指数)
当半腐层湿度码以及干旱码增加时细小可燃物湿度码变化程度不大,但随着初始蔓延指数的增加细小可燃物湿度码呈现对数上升的趋势;初始蔓延指数增加时半腐层湿度码变化不明显,干旱码有不明显的下降趋势;半腐层湿度码增加时半腐层湿度码也有所增加,且二者呈现明显的线性趋势。
⑤三个指标之间的联系:温度;相对湿度;风速
随着相对湿度的增加,温度有明显的下降趋势,且二者的关系呈线性;随着风速与温度和相对湿度的散点图都非常杂乱无序,可以认为它们之间没有联系。
⑥森林火灾高发的相关变量
从多元线性回归的三次回归结果中可以看出FFMC,DMC,DC,ISI, 温度,相对湿度,风速,降雨量这八个变量对森林火灾高发期的发生次数均没有显著影响。故可以认为自然气候原因并不是导致火灾发生的主要因素,需要考虑一些人为因素。

经过查阅资料得知:
葡萄牙为地中海气候,夏季炎热干燥,冬季低温湿润。森林火灾的发生与高温、连续干旱、有密切关系,温度越高,火灾发生的概率也就越大,这与条形图统计的结论相符合。
曾有“葡萄牙大佩德罗冈2.6万公顷森林被烧毁”的新闻,该次森林火灾是因雷电击中林木引发。但葡消防员协会主席苏亚雷斯接受媒体采访时表示,在雷电发生之前,已有火情报告,不排除是有人故意纵火。因为分析数据时没有考虑雷电与人为纵火等因素,且据分析已有变量均不显著,所以也这给了我一个新的思路:雷电以及人为因素也有可能导致森林火灾的发生。

  • 9
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值