본문 바로가기

DATA STUDY/모두의 데이터분석 with 파이썬

첫째 마당 - 서울이 가장 더웠던 날은 언제였을까 UNIT 03

1. 질문 다듬기

 

서울이 가장 더웠던 날은 언제였을까? 얼마나 더웠을까?

 

갖고 있는 데이터를 고려해서 이 질문을 좀더 구체적으로 바꿔줘야 합니다. 

 

기온 csv의 헤더를 보시면 '기온'에 관한 내용만 포함되어 있기 때문에 '기온'을 기준으로 더운 날을 설정해야합니다.

 

(단순히 더웠던 날이 아닌 최고 기온이었던 날을 찾는 것)

2. 문제 해결 방법 구상하기

1번 질문을 어떻게 해결해야할지 계획을 세우는 단계입니다.

 

UNIT 02에서 확인했던 헤더가 ['날짜', '지점', '평균기온', '최저기온', '최고기온'] 였죠?

 

이중에서 날짜최고기온 데이터를 사용하겠습니다

3. 파이썬 코드로 구현하기

 

import csv
f = open('seoul.csv')
data = csv.reader(f)
header = next(data)
for row in data:
	row[-1] = float(row[-1]) # 이 부분!!
    print(row)
f.close()

 

주석 달린 부분이 전과 달라진 부분입니다.

 

UNIT 02를 떠올리면 for문을 이용해 데이터를 뽑아낼때 콤마(,) 기준 따옴표(')로 감싸진 형태로 데이터가 출력됐습니다.

row[-1] = float(row[-1])

우선 데이터가 리스트 형태로 출력되기 때문에 인덱싱이 가능하죠? 위 코드를 통해 마지막에서 첫 번째 데이터를 실수화 시킬수 있습니다.

 

실수 형태로 만들어야 대소 비교가 가능하기 때문에 문자열(sting)에서 실수(float)으로 변환했습니다.

 

기온 데이터에는 결측값(빈 값)이 존재하는데 이로 인해 "could not convert string to float" 오류가 발생합니다.

 

이 책에서는 이에 대한 대응책으로 빈 값에 특정값을 넣는 것을 추천하고 있습니다.

 

import csv
max_temp =-999  
max_date =''       
f =open('seoul.csv')
data = csv.reader(f)
header =next(data)
for row in data :
    if row[-1] =='' :
       row[-1] =-999   
    row[-1] = float(row[-1])
    print(row)
f.close()

 

if문을 사용해 마지막에서 첫 번재 데이터, 즉 최고 기온 데이터가 비어 있다면 -999로 채워 넣게 지정했습니다.

 

그리고 나서 문자열을 실수화하고 있습니다.

 

모든 최고 기온 데이터가 실수화 되어 비교할 수 있는 상태가 됐습니다. 이제 무엇을 해야할까요?

 

 

먼저 기준값을 설정한 뒤 다른 기온 데이터와 비교하면서 기준값을 업데이트 해줘야합니다.

 

import csv
max_temp =-999   
max_date =''       
f =open('seoul.csv')

 

이 경우에 max_temp, 즉 기준 최고 기온 값을 -999으로 설정을 해두고 이후에 다른 값들과 비교해가면서 max_temp 값을 업데이트 해나갈 것입니다.

 

초기 max_temp 값은 꼭 -999일 필요는 없습니다. 상식선에서 조절해주시면 됩니다.

 

max_date는 작은따옴표('')로 둘러싸인 문자열 값이라 초기값을 빈 문자열로 설정합니다.

 

이제 데이터 탐색하면서 max_temp에 저장된 최고 기온과 비교하면서 max_ temp 값을 업데이트 해갈겁니다!!

 

import csv
max_temp =-999   
max_date =''       
f =open('seoul.csv')
data = csv.reader(f)
header =next(data)
for row in data :
    if row[-1] =='' :
        row[-1] =-999  
    row[-1] = float(row[-1])
    if max_temp < row[-1] :
        max_date = row[0]
        max_temp = row[-1]
f.close()

 

if문을 보면 max_temp와 row[-1]인 최고 기온 값을 비교하며 계속해서 업데이트 해나가고 있습니다.

 

따로 리스트를 선언해서 값을 집어 넣어야 하는줄 알았는데 부등호만 표시해둬도 값이 자동으로 업데이트 되는걸로 보입니다.

 

print(max_date, max_temp)

 

print로 결과값을 출력하면 끝납니다!