반응형
내 생일의 기온 변화를 그래프로 그리기
1. 데이터에 질문하기
태어난 날부터 지금까지 매년 생일의 최고 기온을 그래프로 그린다면 어떤 모양일까?
1) 데이터 읽어오기
먼저 부산의 기온 데이터를 읽어와서 한 줄씩 출력해보겠다.
import csv
f = open('pusan.csv')
data = csv.reader(f)
for row in data:
print(row)
이번에는 헤더부분을 next()로 제외한 후, 최고기온 데이터만 출력해보겠다.
f = open('pusan.csv')
data = csv.reader(f)
header = next(data)
for row in data:
print(row[-1])
2) 데이터 리스트에 저장하기
최고 기온 데이터를 날짜 순으로 저장할 result 리스틀 생성한다.
f = open('pusan.csv')
data = csv.reader(f)
header = next(data)
result = [] # 최고 기온 데이터를 저장할 result 리스트
for row in data:
if row[-1] != '': # 최고기온 값이 존재한다면
result.append(float(row[-1])) # 최고기온을 result에 저장
print(result)
len() 함수로 몇 개인지도 알 수 있다.
print(len(result))
2. 데이터 시각화하기
f = open('pusan.csv')
data = csv.reader(f)
header = next(data)
result = []
for row in data:
if row[-1] != '':
result.append(float(row[-1]))
plt.plot(result, 'r') # 최고기온이 저장된 result리스트를 plot()에 입력
plt.show() # 그래프로 출력
f.close()
4만개가 넘는 데이터를 모두 꺾은선으로 표현했더니 그래프가 무엇을 의미하는지 파악하기 어렵다. 특정한 날의 데이터만 뽑아서 그래프로 그려보겠다.
3. 날짜 데이터 추출하기
파이썬 문자열 함수 중 split()은 사용자가 설정하는 특정 문자를 기준으로 문자열을 분리한다.
s = 'hello python'
print(s.split())
split()에 사용자가 특정 문자를 입력하지 않으면 default로 공백문자를 기준으로 문자열을 분리한다.
'1997-06-22' 문자열을 '-'을 기준으로 분리해보자.
date = '1997-06-22'
print(date.split('-'))
print(date.split('-')[0])
print(date.split('-')[1])
print(date.split('-')[2])
분리된 문자열은 리스트로 반환되기 때문에 인덱싱 기능을 쓸 수 있고, 날짜의 연, 월, 일을 추출할 수 있다.
그렇다면, split()함수를 이용하여 8월의 최고 기온 데이터만 추출하여 그래프로 그려보자.
for row in data:
if row[-1] != '': # 최고기온 값이 존재한다면
if row[0].split('-')[1] == '08': #8월에 해당하는 값이라면
result.append(float(row[-1])) # result 리스트에 최고기온 추가
plt.plot(result, 'hotpink') # result리스트에 저장된 값을 hotpink 색으로 그리기
plt.show() # 그래프 출력
이번에는 매년 돌아오는 생일을 기준으로 그려보겠다. 다음 코드는 매년 6월 22일의 최고기온 데이터를 추출하여 그린것이다.
for row in data:
if row[-1] != '':
if row[0].split('-')[1] == '06' and row[0].split('-')[2] == '22':
result.append(float(row[-1]))
이번에는 1997년 이후 데이터만 추출하여 6월 22일 때의 최고기온과 최저기온을 함께 나타내보겠다.
f = open('pusan.csv')
data = csv.reader(f)
header = next(data)
high = [] # 최고 기온 값을 저장할 high 리스트
low = [] # 최저 기온 값을 저장할 low 리스트
for row in data:
if row[-1] != '' and row[-2] != '': # 최고 기온과 최저 기온이 존재할 경우
if int(row[0].split('-')[0]) >= '1997': # 1997년 이후 데이터만
if row[0].split('-')[1] == '06' and row[0].split('-')[2] == '22': # 6월 22일 데이터일 경우
high.append(float(row[-1])) # 최고 기온은 high 리스트에 저장
low.append(float(row[-2])) # 최저 기온은 low 리스트에 저장
plt.plot(high, 'hotpink') # high 리스트를 hotpink 색으로 그리기
plt.plot(low, 'skyblue') # low 리스트를 skyblue 색으로 그리기
plt.show() # 그래프 출력
폰트 지정하기
plt.rc('font', family='Malgun Gothic')
plt.title('내 생일의 기온 변화 그래프')
마이너스(-) 기호 깨짐 방지
plt.rcParams['axes.unicode_minus'] = False
내 생일의 기온 변화를 그래프로 그리기
import csv
import matplotlib.pyplot as plt
f = open('pusan.csv')
data = csv.reader(f)
header = next(data)
high = [] # 최고기온 값을 저장할 리스트
low = [] # 최저기온 값을 저장할 리스트
for row in data:
if row[-1] != '' and row[-2] != '': # 최고 기온 값과 최저 기온 값이 존재한다면
date = row[0].split('-') # 날짜를 '-'를 기준으로 구분하여 저장
if 1997 <= int(date[0]): # 1997년 이후 데이터라면
if date[1] == '06' and date[2] == '22': # 6월 22일 데이터라면
high.append(float(row[-1])) # 최고기온을 high에 저장
low.append(float(row[-2])) # 최저기온을 low에 저장
plt.rc('font', family='Malgun Gothic') # 맑은 고딕을 기본 글꼴로 설정
plt.rcParams['axes.unicode_minus'] = False # 마이너스 기호 깨짐 방지
plt.title('내 생일의 기온 변화 그래프') # 제목 설정
plt.plot(high, 'hotpink', label='high') # high 리스트에 저장된 값을 hotpink색으로 그리고 레이블 표시
plt.plot(low, 'skyblue', label='low') # low 리스트에 저장된 값을 skyblue색으로 그리고 레이블 표시
plt.legend() # 범례 표시
plt.show() # 그래프 나타내기
f.close()
반응형
'PNU DSC > 파이썬 데이터 분석' 카테고리의 다른 글
03-2. 인구 공공데이터2 (0) | 2020.05.15 |
---|---|
03-1. 인구 공공데이터 1 (0) | 2020.05.11 |
02-3. 데이터 시각화 기초 3 (1) | 2020.05.06 |
02-1. 데이터 시각화 기초 1 (1) | 2020.05.05 |
01. 기온 공공데이터 - 부산의 가장 더웠던 날은 언제일까? (0) | 2020.05.01 |