(본 내용은 모두의 데이터분석 with 파이썬(길벗 출판사) 내용의 일부를 참조하였습니다)
원주에서 가장 기온이 높았던 때는 언제일까? 파이썬의 라이브러리 csv를 호출하여, 간단한 코드를 짜 보고자 한다.
pandas라는 라이브러리를 이용하면, 아래 코드보다 조금 더 간단하게 호출할 수 있으나, 여기서는 for 문과 if 문을 활용하여 해 볼 것이다.
우선 라이브러리를 호출한다.
import csv
다음으로, 데이터를 불러와야 한다.
위 데이터를 다운 받으면 된다. 필자가 헤더 정보 일부를 수정하였다.
첫 번째 값은 날짜로, 헤더정보는 date로 지정하였다.
두 번째 값은 관측 장소인데, 원주는 114번이다. 헤더정보는 pos로 지정하였다.
세 번째 값은 평균 기온이며, 데이터가 없다. 헤더정보는 mean_temp
네 번쩨 값은 최저 기온이며, 헤더정보는 min_temp
다섯 번째 값은 최고 기온이며, 헤더정보는 max_temp 이다.
이제 이 파일을 불러와야 한다. 파일을 불러오는 명령어는
open('c:\\111\wonju.csv') -> open 다음에는 wonju.csv 폴더가 있는 곳의 경로를 써 주면 된다. 주의할 것은 파이썬에서 폴더간 경계를 \ 표시 2개로 지정해 준다는 점이다.
open('c:\\111\wonju.csv')는 앞으로도 계속 사용될 것이기 때문에, a라는 변수로 지정해 주자
import csv
a=open('c:\\111\wonju.csv')
이제 불러온 데이터를 csv의 내장 함수 reader로 읽을 것이다. 따라서 코드는
import csv
a=open('c:\\111\wonju.csv')
csv.reader(a)
앞으로 csv.reader(a)도 자주 사용될 것이기 때문에, data라는 변수로 지정해 주자. 그럼 코드는
import csv
a=open('c:\\111\wonju.csv')
data=csv.reader(a)
와 같이 된다.
여기서 print(data)를 해 버리면, 그냥 wonju.csv라는 파일이 저장된 하드 디스크 위치만 불러와 버린다. 데이터를 모두 보고 싶으면, for 문을 사용해야 한다.
for문은 지정한 명령을 데이터가 종료될 때 까지 반복적으로 수행하라는 의미를 가진 명령어이다.
for문을 사용해서 wonju.csv 데이터를 출력하려면
import csv
a=open('c:\\111\wonju.csv')
data=csv.reader(a)
for row in data:
print(row)
이렇게 하면 : 다음의 print(row)는 wonju.csv의 데이터가 종료될 때 까지 반복적으로 출력하라는 의미가 된다.
그래서 wonju.csv에 있는 모든 데이터가 "리스트"형으로 반복적으로 출력된다.
이제 여기서 기온이 가장 높았을 때 날짜와, 온도를 찾아내자.
그런데 맨 첫번째 열은 헤더 정보이다. 헤더 정보는 문자열이며, 단순히 숫자의 크기만을 비교하고자 해야하기 때문에, 불필요한 정보이다. 따라서 헤더 정보를 제외하고 출력을 해야한다. 이는 next라는 명령어를 사용하면 된다. 그래서 코드의 처음에 next를 넣어주면 간단히 해결된다. next를 포함하여 코드를 다시 짜면
import csv
a=open('c:\\111\wonju.csv')
data=csv.reader(a)
next(data)
for row in data:
print(row)
이제 헤더정보를 제외한 모든 데이터가 출력될 것이다.
이제 최고 기온이 언제였는지 찾아보자.
최고 기온은 우선, max_temp라는 변수를 생성하고, 이 변수의 값이 -999라는 실현 불가능한 온도로 지정하자. 그리고 max_date=' ' 로 지정하여 아무 말이나 넣어주자. ' ' 안의 값은 요것처럼 빈 칸으로 두어도 되고, 아무 문자나 마구 넣어도 된다. 어짜피 for문의 루프가 돌아가는동안 바뀌게 될 것이다.
그리고, 현재 리스트형 데이터는 모두 문자열로 되어있다. 그래서 이를 숫자로 변환해 주어야 한다. 우리가 여기서 비교하고자 하는 값은 리스트형 자료의 맨 마지막 데이터이다. 따라서 row[4]라고 지정해야한다. 리스트에서 다섯번째임에도 4라고 하는건, 맨 첫번째 데이터는 1이 아니고 0이기 때문이다.
row[4]의 문자열을 실수로 바꾸려면, row[4]=float(row[4])
라고 하면 되는데, float는 데이터를 실수로 바꾸라는 명령어이며, float(row[4])라고 하여, row[4]를 실수로 바꾼뒤, 이를 다시 row[4]로 지정해 준 것이다. 그리고, row[4]의 모든 데이터를 실수로 바꾸어야 하기 때문에, for의 작업이 진행되는 동안 진행되어야 한다. 따라서 for문의 루프안에 집어 넣어야 한다.
그럼
import csv
a=open('c:\\111\wonju.csv')
data=csv.reader(a)
next(data)
max_temp=-99
max_date=' '
for row in data:
row[4]=float(row[4])
if row[4]>max_temp:
max_temp=row[4]
max_date=row[0]
print(max_temp, max_date)
이게 무슨말이냐 하면, 리스트 데이터의 기온이 26도였다면, 당연히 -999보다 크니, 바로 max_temp=26도가 된다. 그리고 그 때 날짜가 1990-10-1일이면, max_date도 1999-10-1로 바꾸라는 거다.
그 다음 리스트 데이터의 기온이 23도라면, 26도보다는 작으니 안바꾸고 다음 리스트로 넘어간다.
다음 리스트의 기온이 27도라면, 26도보다 크니까, max_temp=27로 바꾼다. 그리고 이 때 날짜가 1999-10-3일이라면, max_date도 1999-10-3으로 바꾸라는 거다.
이 작업을 wonju.csv 파일에 있는 데이터가 모두 끝날 때 까지 반복하라는 소리.
이렇게 하면 마지막에 최종적인 max_temp와 max_date를 뽑아낸다.
위 과정은 pandas라는 라이브러리를 이용하면, 조금 더 간단한 명령어러도 해결 가능하다. 하지만 for 문이나 if 문의 기초를 배우기 위해서는 위 과정을 따르는게 좋다.
(본 내용은 모두의 데이터분석 with 파이썬(길벗 출판사) 내용의 일부를 참조하였습니다)
'파이썬으로 배우는 지구과학' 카테고리의 다른 글
태풍의 풍향 풍속을 바람 장미(방사형 그래프)에 표현하기 (0) | 2021.12.24 |
---|---|
파이썬의 pie chart로 지질시대 시간표 만들기 (0) | 2021.07.02 |
파이썬을 이용하여 광물의 절대 굳기 그래프 그리기 (0) | 2021.05.21 |
numpy의 내장함수인 arange와 linspace (0) | 2021.05.20 |
range의 간단한 사용 (0) | 2021.05.20 |
댓글