airquality 데이터 분석- 목요일반

Author

hjlee

1. 데이터 구조 확인

# 데이터 구조와 요약 통계
str(airquality)
'data.frame':   153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

해설: 변수 Ozone, Solar.R, Wind, Temp, Month, Day는 모두 수치형(numeric)이며, 일부 변수에는 결측치(NA)가 존재합니다. 결측 현황을 볼 필요가 있습니다. month와 day는 date() 나 factor()로 바꿀 필요가 있습니다.

2. 기술통계량 확인

sum(is.na(airquality))
[1] 44
airquality$Month <- factor(airquality$Month, labels = c(5,6,7,8,9))
summary(airquality)
     Ozone           Solar.R           Wind             Temp       Month 
 Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00   5:31  
 1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00   6:30  
 Median : 31.50   Median :205.0   Median : 9.700   Median :79.00   7:31  
 Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88   8:31  
 3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00   9:30  
 Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00         
 NA's   :37       NA's   :7                                              
      Day      
 Min.   : 1.0  
 1st Qu.: 8.0  
 Median :16.0  
 Mean   :15.8  
 3rd Qu.:23.0  
 Max.   :31.0  
               
describe(airquality, na.rm = T)
        vars   n   mean    sd median trimmed   mad  min   max range  skew
Ozone      1 116  42.13 32.99   31.5   37.80 25.95  1.0 168.0   167  1.21
Solar.R    2 146 185.93 90.06  205.0  190.34 98.59  7.0 334.0   327 -0.42
Wind       3 153   9.96  3.52    9.7    9.87  3.41  1.7  20.7    19  0.34
Temp       4 153  77.88  9.47   79.0   78.28  8.90 56.0  97.0    41 -0.37
Month*     5 153   2.99  1.42    3.0    2.99  1.48  1.0   5.0     4  0.00
Day        6 153  15.80  8.86   16.0   15.80 11.86  1.0  31.0    30  0.00
        kurtosis   se
Ozone       1.11 3.06
Solar.R    -1.00 7.45
Wind        0.03 0.28
Temp       -0.46 0.77
Month*     -1.32 0.11
Day        -1.22 0.72

월을 팩터형으로 변환하여, 매일 측정이 이루어진 것을 볼 수 있고, Ozone과 Solar.R은 결측이 여러개 있어 분석할 때 결측값 처리합니다.


3.일별 각 관측량 분포

barplot(airquality$Ozone, ylim = c(0,200), main = "Ozone")

barplot(airquality$Solar.R, ylim = c(0,300), main = "Solar.R")

barplot(airquality$Wind, main = "Wind")

barplot(airquality$Temp, ylim = c(0,100),main = "Temp")

각 측정치는 일(월)의 변화에 따른 점진적 변동이 보이지는 않습니다. Temp 값은 다른 값에 비하여 일별 변동이 크지 않아 보입니다.

월별로 측정치 비교를 해보겠습니다.


4. 월별 측정량 현황

plot(airquality$Month,airquality$Ozone, ylim = c(0,200), main = "Ozone by month")

plot(airquality$Month,airquality$Solar.R, ylim = c(0,300), main = "Solar.R by month")

plot(airquality$Month,airquality$Wind, main = "Wind by month")

plot(airquality$Month,airquality$Temp, ylim = c(50,100),main = "Temp by month",col = heat.colors(5), cex.lab = 0.9) #아래와 같은 따뜻한 색상 5개 벡터를 반환

월별 평균을 보니 월별 값의 변화가 발견됩니다. 다만 데이터의 변화 범위가 커서 일별 패턴을 보기 어려웠던것 같습니다. 7월을 중심으로 오존, 태양 복사 에너지량, 온도가 높고, 바람은 반대입니다.

5. 기온과 오존량, 태양 복사량의 관계

plot(airquality$Temp, airquality$Ozone,
     main = "기온과 오존량의 관계",
     xlab = "기온(Temp)", ylab = "오존(Ozone)",
     col = "darkorange", pch = 19, cex = 0.8, cex.lab = 0.9)

plot(airquality$Temp, airquality$Solar.R,
     main = "기온과 태양 복사량의 관계",
     xlab = "기온(Temp)", ylab = "복사량(Solar.R)",
     col = "yellowgreen", pch = 19, cex = 0.8, cex.lab = 0.9)

기온이 올라갈수록 오존량은 증가하는 경향을 보입니다. 기온과 태양 복사량은 데이터 범위가 넓고 관계가 불분명합니다.

6. 태양 복사량과 오존량의 관계

plot(airquality$Solar.R, airquality$Ozone,
     main = "태양 복사와 오존량의 관계",
     xlab = "Solar.R", ylab = "Ozone",
     col = "goldenrod", pch = 19, cex = 0.8, cex.lab = 0.9)

Solar.R이 높을수록 오존량이 증가하는 경향을 보이나 관계의 강도는 강하지 않습니다. 복사량 250 이후는 오히려 감소 경향이 보이고 있어. 상관관계가 분명하지 않습니다.


7. 바람 세기(Wind)와 오존량, 태양 복사량 관계

plot(airquality$Wind, airquality$Ozone,
     main = "바람 세기와 오존량의 관계",
     xlab = "Wind", ylab = "Ozone",
     col = "steelblue", pch = 19, cex = 0.8, cex.lab = 0.9)

plot(airquality$Wind, airquality$Solar.R,
     main = "바람 세기와 태양 복사량의 관계",
     xlab = "Wind", ylab = "복사량(Solar.R)",
     col = "yellowgreen", pch = 19, cex = 0.8, cex.lab = 0.9)

전반적으로 바람이 약할수록 오존량이 높은 경향이 나타납니다. 바람 세기와 태양 복사량은 관련이 없어 보입니다. 바람이 아주 약하거나(5이하), 아주 센(15이상)은 측정값의 양이 적습니다.


8. 기온과 바람, 오존량의 히스토그램

hist(airquality$Temp, ylim = c(0,40),
     main = "기온 분포",
     xlab = "기온", col = "salmon", breaks = 10, cex.lab = 0.9)

hist(airquality$Wind, ylim = c(0,40),
     main = "바람속도 분포",
     xlab = "바람 속도", col = "yellowgreen", breaks = 10, cex.lab = 0.9)

hist(airquality$Ozone,ylim = c(0,40),
     main = "오존 분포",
     xlab = "Ozone", col = "skyblue", breaks = 10, cex.lab = 0.9)

기온은 70~85도 F 범위에 많이 분포하며, 전체적으로 높은 쪽으로 치우친 분포입니다. 바람은 6~12 mph 사이가 주를 이룹니다. 오존값은 대부분 0~100 범위에 분포하며, 40이하의 비중이 높습니다.


9. 기온, 바람 속도, 태양 복사량 오존량 히스토그램 비교

par(mfrow = c(1, 4))
hist(airquality$Temp, ylim = c(0,40),
     main = "기온 분포",
     xlab = "기온", col = "salmon", breaks = 10, cex.lab = 0.9)
hist(airquality$Wind, ylim = c(0,40),
     main = "바람속도 분포",
     xlab = "바람 속도", col = "yellowgreen", breaks = 10, cex.lab = 0.9)
hist(airquality$Ozone,ylim = c(0,40),
     main = "오존 분포",
     xlab = "Ozone", col = "skyblue", breaks = 10, cex.lab = 0.9)
hist(airquality$Solar.R, ylim = c(0,40),
     main = "태양복사량 분포",
     xlab = "Solar.R", col = "pink", breaks = 10, cex.lab = 0.9)

par(mfrow = c(1, 1))

기온과 바람은 중간에 많은 값이 있는 분포를 보이나, 오존은 낮은 값이 많고, 태양 복사량은 높은 값이 많은 편이나, 전체적으로는 분포 차이가 적음.

10. 결론 요약

  • 기온이 높을수록 오존량도 증가하는 경향이 있음
  • 7월과 8월에 오존량, 기온 모두 높음
  • 바람이 약할수록 오존량이 높아지는 패턴이 있음
  • 태양 복사량이 많을수록 오존량이 높아 보이나 명확한 상관 관계는 아님.
  • 기온과 바람은 양극한으로 가면 측정량이 적음
  • 위 결과는 대기 오염 관리나 환경 예보 등에서 참고 가능한 기초 자료가 될 수 있음