으쌰으쌰! 팀 프로젝트/MID 2 (머신러닝)

1차 진행 : 날씨 관련 데이터 활용하기

니츄 2023. 4. 4. 00:35

 요약

 

기상자료개방포털[기후통계분석:통계분석:조건별통계]

중부(26) 서울경기: 서울(108), 인천(112), 수원(119), 강화(201), 양평(202), 이천(203) 강원영동: 속초(90), 강릉(105), 태백(216) 강원영서: 철원(95), 대관령(100), 춘천(101), 원주(114), 인제(211), 홍천(212) 충북:

data.kma.go.kr

 

 

 

 

 컬럼 수정하기

  • 컬럼 생성
    • [식사가능인원] 컬럼 :  '본사정원수' - (본사휴가자수 + 본사출장자수 + 현본사소속재택근무자수)
    • [일자] 컬럼  =>  [연도], [월], [일]로 나누기
    • [계절] 컬럼 생성하기
  • 컬럼 삭제
    • [조식메뉴] 컬럼 삭제
  • 컬럼(데이터) 추가
    • '기온' 데이터 : 최고기온(℃), 최저기온(℃) 추가
    • '기온' & '습도'데이터 : [불쾌지수] 컬럼 추가
    • '강수량' 데이터 : 강수량(rain) 추가
  • 컬럼명 변경
    • [본사정원수]  →  [정원수]
    • [본사휴가자수]  →  [휴가자수]
    • [본사출장자수]  →  [출장자수]
    • [본사시간외근무명령서승인건수]  →  [야근수]
    • [현본사소속재택근무자수]  →  [재택근무자수]

 

 

 

 

 날씨 관련 데이터와 상관계수 확인하기

→ 수치 상으로는 날씨데이터와 중식계, 석식계의 상관관계가 낮은 것으로 나타남.

 

 

 

 

 

 

 가설)  "기온이 식사 수에 영향을 미칠까?"

 방법 1. 여름(6,7,8월) 중 가장 더운 날/ 덜 더운날 top15 비교하기

→ 이렇게는 큰 차이를 찾아내기 어렵다고 판단. 적당한 기준점과 범주화가 필요할 것으로 보임.

 

 

 

 

 

 방법 2. 날씨를 범주화하여 비교하기

→ 계절이 '여름' 인 행의 수 307개.

  • 날씨를 세 개의 범주로 나누기 : '무더위', '보통', '선선한 날'
  • 범주의 기준 : 최고온도 상위 100일의 평균온도와 최고온도 하위 100일의 평균온도

 

→ 범주로 나눈 후 각 범주의 개수는 위와 같음.

 

→ 석식에서는 큰 차이를 보이지 않지만, 중식의 경우 무더운 날일 수록 중식계의 수가 적은 모습을 보임.

 

 

 

 같은 방법으로 '불쾌지수'로 결과를 확인했을 경우

→ 불쾌지수가 높을 수록 중식계와 석식계의 수가 적은 것을 확인할 수 있었음.

   구내식당 에어컨이 잘 안나오나..?

 

 

 

 강수량 데이터로도 확인해보기

  • 기상청에서는 강수 표현을 약한 비, (보통) 비, 강한 비, 매우 강한 비로 나누어 표현한다.
    • 약한 비는 1시간에 3mm 미만
    • 보통 비는 1시간에 3~15mm 미만
    • 강한 비는 1시간에 15mm 이상
    • 매우 강한 비는 1시간에 30mm 이상을 의미합니다.
  • 약한 비(0), 보통 비(1), 강한 비(2), 매우 강한 비(3)으로 표현
# 강수량 함수 만들기
# 약한 비(0), 보통 비(1), 강한 비(2), 매우 강한 비(3)으로 표현

def get_rain(rain):
    if rain >= 30:
        return 3
    elif rain >= 15:
        return 2
    elif rain >= 3:
        return 1
    else : 
        return 0
        
train_weather['강수량정도'] = train_weather['rain'].apply(get_rain)

plt.figure(figsize=(5,5))
sns.barplot(train_weather, x='강수량정도', y = '중식계')
plt.title('강수량 정도별 중식계 평균 수')

→ 비가 강하게 오는 날일수록 구내식당 이용률이 높다는 것이 확인됨.

 

 

 

 

 

 

 조원들과 피드백 이후

 방법 3. 여름과 겨울의 기온예측도 기상청 기준으로 해보면 어떨까?

 여름 데이터

  • 일반적으로 일 최고기온이 33℃ 이상일 때를 폭염이라고 합니다.
  • '폭염주의보' :  33℃ 이상이 2일 이상 지속일 경우
  • '폭염경보' : 35℃ 이상이 2일 이상 지속일 경우
def heat_alert(a):
    if a >= 35:
        return '폭염경보'
    elif a >= 33:
        return '폭염'
    else: 
        return '안전'

여름['날씨경보'] = 여름['최고기온(℃)'].apply(heat_alert)

# 폭염경보와 폭염주의보를 구분할 때, 2일 이상의 조건을 위한 함수를 제작하고자 하였으나 실패함.

→ 역시나 눈에 띄는 차이는 없다.

 

 

 

 

 겨울 데이터

  • 한파는 10월~4월 사이의 기간을 기준으로 합니다.
  • '한파주의보'
    • 아침 최저기온이 전날보다 10℃이상 하강하여 3℃ 이하인 경우,
    • 아침 최저기온이 -12℃이하가 2일 이상 지속일 경우
  • '한파경보'
    • 아침 최저기온이 전날보다 15℃이상 하강하여 3℃ 이하인 경우,
    • 아침 최저기온이 -15℃이하가 2일 이상 지속일 경우
b = '최저기온(℃)'
def cold_wave(b):
    if b <= -15:
        return '한파경보'
    elif b <= -12:
        return '한파'
    else: 
        return '안전'

겨울['날씨경보'] = 겨울['최저기온(℃)'].apply(cold_wave)

→ 겨울 또한, 조건을 '2일 이상 지속'으로 넣지 못하였는데

   그럼에도 불구하고 한파경보는 1일, 한파는 5일이라는 매우 적은 수를 보였다.

   비교를 하기에 너무 데이터 수가 적다고 판단된다.

   만약 '2일 이상 지속' 조건까지 넣었다면 데이터가 더 적어지지 않았을까.

→ 그래서 결과도 이런 식으로 나왔다..