분석가 황규진 2024. 7. 10. 10:37

기온 공공 데이터

1.1 기온 데이터 가져오기

  • 기상청은 기상자료개방포털 홈페이지를 통해 기상 관련 데이터를 무료로 제공
 

기상자료개방포털

날씨! 데이터가 되다 기 상 청 API허브

data.kma.go.kr

1.2 기온 데이터 분석

1.2.1 CSV 파일에서 데이터 읽어 오기

  • csv.reader() : CSV 파일에서 데이터 읽어오는 함수
  • csv.writer() : CSV 파일에 데이터를 저장하는 함수
1행 부터 7 행까지는 실제 데이터가 아니므로 삭제

1.2.2 데이터 출력

import csv
f = open('부산.csv', 'r', encoding='cp949')
data = csv.reader(f)

for row in data:
  print(row)

f.close()

['\t2023-04-21', '108', '16.7', '11.4', '22.8']

['\t2023-04-22', '108', '16.9', '12.2', '22.5']

['\t2023-04-23', '108', '16.1', '10.7', '22.1']

['\t2023-04-24', '108', '15.8', '11.5', '21.3']

['\t2023-04-25', '108', '10.9', '9', '13.2']

['\t2023-04-26', '108', '10.2', '7.4', '13.5']

['\t2023-04-27', '108', '12.9', '5.1', '20']

['\t2023-04-28', '108', '15.7', '9', '21.3']

['\t2023-04-29', '108', '13.2', '9.9', '15.8']

['\t2023-04-30', '108', '12.7', '7.9', '17.9’]

  • open()함수의 두 번째 인자 'r'의 의미는 파일을 여는데 '읽기 모드'로 열겠다는 뜻, 세 번째 인자에서 cp949의 의미는 Window의 한글 인코딩 방식으로 읽어 오겠다는 뜻
  • 각 행의 데이터가 대괄호([])로 둘러싸여 있음, 즉 리스트!
  • 각 행, 리스트 데이터의 각 요소가 작은 따옴표로 둘러싸여 있음, 즉 문자열!
  • 누락된 데이터가 있음, 1967년 2월 19일과 1973년 10월 16일 데이터를 확인
import csv
# open()함수의 일기 모드를 알리는 파라메타 'r' 생략
f = open('부산.csv', encoding='cp949')
data = csv.reader(f)

# 각 요소는 ['\\t2022-03-30', '159', '14', '9.8', '16.2'] 이런 형태

for row in data:
  if row[0] == "\\t1967-02-19" or row[0] =="\\t1973-10-16":
    print(row)

f.close()

['\t1967-02-19', '108', '-1.7', '', '']

['\t1973-10-16', '108', '12.3', '', '']

 

1.2.3 헤더 확인하기

import csv
f = open('부산.csv', encoding='cp949')
data = csv.reader(f)

# 첫번째 행을 읽어와서 header에 할당
header = next(data)
print(header)

# 그 다음 행을 읽어와서 first_row에 할당
first_row = next(data)
print(first_row)

f.close()

['날짜', '지점', '평균기온(℃)', '최저기온(℃)', '최고기온(℃)']

['\t1907-10-01', '108', '13.5', '7.9', '20.7']

 

1.3 가장 더웠던 날은 언제

1.3.1 문제 해결 방법 구상

  1. 전체 데이터 읽어 들임
  2. 순차적으로 데이터(행)를 읽어서 최고 기온 확인
  3. 최고 기온이 가장 높았던 날짜 해당 기온 데이터 저장
  4. 최종 저장된 날짜와 최고 기온 값 출력

1.3.2 코드

import csv
f = open('부산.csv', encoding='cp949')
data = csv.reader(f)
header = next(data)       # header 제거

max_temp = -999
max_data = ''

for row in data:
  if row[-1] == '':           #최고 기온 정보는 행(리스트)의 맨 마지막 요소. 누락되었다면
    row[-1] = -1000           # 존재 할 수 없는 최고 기온.
  else:
    row[-1] = float(row[-1])    # 문자열 형으로 표현된 최고 기온을 숫자형 데이터로 변환하여 저장
  
  if max_temp < row[-1]:
    max_temp = row[-1]
    max_date = row[0]
    
f.close()
print("기상 관측 이래 부산의 최고 기온이 가장 높았던 날은 " + max_date +"일이며 "+ str(max_temp) +"도였습니다.")

기상 관측 이래 부산의 최고 기온이 가장 높았던 날은 2018-08-01일이며 39.6도였습니다.