사이트에 접속하면 강수량, 온도를 기반으로 눈이 올 확률을 예측하여 알려줍니다.
일단 눈 데이터를 기상자료개방포털 사이트에서 들고왔는데
솔직히 1년에 가장 많이 온 눈 일수가 21일인 것도 좀 놀랐는데
2024년에는 무려 0번인게 더 놀랐다
1906년 이후 처음 있는 일이다
데이터는 무조건 무조건 외모지상주의다
그렇기에 예쁘게 만들어 줘야한다
일단 눈 정보를 다듬어줬다
그리고 강수량과 온도를 다듬어줬다
마지막으로 받아온 정보들을 토대로
눈이 온 날짜, 온도, 강수량, 눈 종류를 뽑아냈더니
다음과 같은 적당히 예쁜 데이터가 등장했다
지금 당장 학습시켜버리고 싶은 데이터다
이게 학습을 시키다보니 날짜를 눈 확률 측정에 영향을 주게 만들었는데
너무 이상해져서 년도를 제외 시켜보았더니 여전히 많이 이상한 값을 내뱉었다
아무래도 데이터가 겁나게 많은데(1904년부터 2024년까지의 온도 및 강수량) 부산에 눈이 온 날이 그리 많지 않다보니 눈이 온 날짜를 중심으로 학습이 진행되어서 다른 날에는 아무리 온도와 강수량이 적절해도 절대 높은 값이 나오지 않았다
깔끔하게 그냥 날짜를 빼버렸다
어차피 뭐 요새는 시기보다 날씨가 자기 멋대로기 때문에 이게 더 맞는듯?
적당히 맞는 것 같았다
위에꺼는 실제로 눈이 온 날을 넣어봤고, 아래는 대충 애매한 숫자를 넣어봤다
일단 이왕 이렇게 된 김에 오늘 날씨까지 받아올 수 있으면 좋을듯?
그래서 공공데이터 API를 쓰기로 하였다
def forecast(params):
url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst'
res = requests.get(url, params)
xml_data = res.text
dict_data = xmltodict.parse(xml_data)
for item in dict_data['response']['body']['items']['item']:
if item['category'] == 'T1H':
temp = item['obsrValue']
if item['category'] == 'RN1':
sky = item['obsrValue']
return temp, sky
이렇게 온도와 강수량을 쏙 빼와서
snow = tf.keras.models.load_model('snowmodel.keras')
result = snow.predict(np.array([[today_temp,today_rain]]))
result = float(result[0][0])
print('오늘의 날씨는 %.1f도이고 강수량은 %.1fmm 마지막으로 눈이 올 확률은 대충 %.3f%%입니다' %(today_temp,today_rain,result))
이렇게 출력해보았다
잘 나오는듯?
이정도면 그냥 재미로 확률보기에는 나쁘지 않은 것 같다
이제 GET 요청 날리면 날씨, 강수량, 눈 확률을 주어보자
FastAPI로 빠르게 만들어보았고, 클라우드 타입에 배포하였다
배포하고 포스트맨으로 테스트해보니 잘 오는 것을 확인할 수 있다!
이제 이걸 잘 나타내주기만 하면 완벽할 것 같다
흠 솔직히 디자인이 이상하긴 하지만 그래도 눈 내리고, 눈 확률 대충 보여주니 된 거 아닌가?!
처음에는 진짜 그냥 저기 가운데 저 친구들만 있었는데
너무 심심해 보여서 눈 소스를 들고왔는데 잘 들고온 것 같다(감사합니다)
눈 출처 : https://2minmin2.tistory.com/51
매일 매일 눈이 올 확률을 보면 재밌겠다는 생각과 왜 부산에 눈이 안 내리는지 분노와 함게 어우러진 프로젝트지만 잘 만들어진 것 같다
사실 정확도가 그렇게 높은진 잘 모르겠지만 그래도 재미로 보기에는 좋은 수치인 듯 싶다
(어떤 이상한 값이 등장할지 몰라서 꽤 두렵긴함)
이 이후로도 데이터 분석과 함께하는 딥러닝 프로젝트는 계속하고 싶다는 생각이 들고, 많은 딥러닝 경험을 쌓아 메인 프로젝트 혹은 사이드 프로젝트에 잘 써먹어야겠다
만든지 2주가 흐르고
이왕 부산한거 전국으로 확장해보면 어떨까? 라는 생각속에서 광역시와 특별시의 데이터를 가지고 전국 확장을 시작했다
일단 모델을 전국을 하나로 합칠지 각자의 모델을 쓸지 고민하다가
일단 내 예측 모델이 그렇게 높은 성능을 가지고 있는 것도 아니고, 단순 강수량과 온도가지고만 판단하기 때문에 안그래도 낮은 예측률이 더 낮아질 것 같아서 모델은 다 따로 만들기로 하였다
그렇게 부산,대전,대구,광주,인천,서울,울산 총 7개의 도시를 추가하였고
성공적으로 확장에 성공했다
사실 데이터 처리와 모델 만드는 코드를 거의 동일시 하였기에 만드는데 오랜 시간이 걸리지는 않았다
그리고 원래 퍼센트 계산에 오류가 있어서 그것도 수정하였다
이렇게 완성된 프로젝트
만들다가 날씨에 대해 새로운 아이디어가 떠올랐지만 이건 앱 환경에 더 적합한 아이디어다 싶어서 일단 임시 보류할 예정이다
최근 재밌는 아이디어가 계속 떠오르는데 언제 다 구현할지는 모르겠지만 나의 뻘짓이 계속 이어져 행복한 코딩 생활이 될 수 있으면 좋겠다!
타지역 눈은 치우느라 개고생이겠지만 부산 눈은 낭만이제~