반응형
해당 포스팅도 마찬가지로 CSV파일을 분석하고, 가공하여 요청한 정보를 출력하는 과정을 구현하였다.
https://data.kma.go.kr/climate/RankState/selectRankStatisticsDivisionList.do?pgmNo=179
위의 링크의 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:]+'월')
출력 결과는 아래와 같다.
반응형
'Python' 카테고리의 다른 글
[아나콘다] 파일 입출력_JSON (0) | 2022.10.26 |
---|---|
[아나콘다] 데이터 시각화 (0) | 2022.05.13 |
[아나콘다] 데이터 분석 및 가공_2 (0) | 2022.05.11 |
[아나콘다] 데이터 분석 및 가공 (0) | 2022.05.10 |
[IDLE] 데이터 분석 및 가공 (0) | 2022.05.10 |