본문 바로가기
Python

[아나콘다] 데이터 분석 및 가공_3

by amoomar 2022. 5. 13.
반응형

 

 

해당 포스팅도 마찬가지로 CSV파일을 분석하고, 가공하여 요청한 정보를 출력하는 과정을 구현하였다.

 

https://data.kma.go.kr/climate/RankState/selectRankStatisticsDivisionList.do?pgmNo=179 

 

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

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

data.kma.go.kr

 

위의 링크의 csv파일을 다운로드 하여 평균 기온을 기반으로 가장 높은 온도와, 가장 기온이 높았던 연도-달을 출력하는 것이 요구조건이다.

 

출력 예시는 아래와 같다.

 

제주 최고 기온 : 29.2 ℃

2017년 7월

 

 


 

 

 

필요하지 않은 부분을 삭제한 파일의 대략적인 내용은 아래와 같다.

 

 

 

코드의 내용은 아래와 같다.

설명이 가능하도록 주석을 상세히 달았다.

import csv
from datetime import datetime

maxTemp=-100 #최고기온 비교값
maxDate='' #평균기온이 가장 높았던 일자(가공 전)
year='' #평균기온이 가장 높았던 연도!
mon='' #평균기온이 가장 높았던 달!

with open('test01.csv', encoding='CP949') as file:
   
    #1. 파일 읽어오기
    data=csv.reader(file)
    header=next(data) #헤더 날리기
    
    for v in data:
        
        # 3. 만약 평균기온이 공란이라면, 아래의 if문에 비교되지 않을 대체값을 저장
        if v[3]=='':
            v[3]=-999
        
        # 2. 최고기온, 최고기온에 해당되는 달 찾기
        # 처음 값보다 다음 값이 더 크면, 그 큰 값을 mxaTemp에 담는 형식
        # 위의 행위를 data의 행 길이만큼 반복
        v[3]=float(v[3]) #형변환
        if maxTemp < v[3]:
            maxTemp=v[3]
            maxDate=v[2]

# 4. 출력 전 가공
# 1) "월" 가공 / 영어 -> 숫자
# datetime활용 https://ponyozzang.tistory.com/626
mon=maxDate.split('-') #"월-연도"에서 "월"과 "연도"로 구분
year=mon[1] # year에 "연도"를 담음
mon=mon[0] # mon에 "월"만 담음
mon=datetime.strptime(mon, '%b') # str인 mon을 date형식으로 형변환하여 mon에 담음
mon=mon.strftime('%m') # Jul을 07로, date타입 중에서도 달을 나타내는 숫자형식으로 변환

# 2) "연도" 가공 / 두자리 -> 네자리
# 98~18년까지의 정보이니, 19보다 크다면 2000년대, 아니라면 1900년대로 간주
# 비교할때만 int로 형변환, 이후 문자열을 더하여 알맞은 형식으로 저장
if int(year) > 19: 
    year='19'+year
else:
    year='20'+year

# 5. 출력
print('제주 최고 기온:', maxTemp, '℃')
print(year+'년 '+mon[1:]+'월')

 

 

 

출력 결과는 아래와 같다.

 

 

 

 

반응형