import matplotlib.pyplot as plt
-> 라이브러리 임포트
plt.plot([1,2,3,4], [10, 20, 30, 40])
plt.show()
-> plt.plot을 통해서 x,y값을 입력하고 plt.show를 통해서 그래프를 나타낸다.
plt.title("ploting")
-> 을 통해서 그래프 이름 설정 가능
plt.legend()
-> plot에 label을 통해 범례 이름 설정가능
color = 'r', linestyle = '--'
-> color를 통해 색지정, linestyle을 통해 선모양 변경가능.(color는 c로, linestyle은 ls로 요약가능, r,g,b,k,y는 축약가능. 다른 색은 안됨)
import csv
import matplotlib.pyplot as plt
from datetime import datetime
# 최고, 평균, 최저, 날짜 기온 데이터 리스트에 담아서 출력
high = [] # 1) list 선언
avg = []
low = []
date_list = []
f = open('/content/seoul2022.csv', encoding='cp949') # 2) 데이터 불러오기
data = csv.reader(f)
next(data) # 3) 헤더
# 4-1) list 변수에 최고, 평균, 최저 기온 데이터 담기
for row in data:
if row[-1] != '' and row[-2] != '' and row[-3] != '': # 4-1) 결측치 제외
# 자신이 태어난 월과 일이 일치하는 데이터만
if row[0].split('-')[1] == '03' and row[0].split('-')[2] == '17':
high.append(float(row[-1])) # 4-2) 데이터 담기
low.append(float(row[-2]))
avg.append(float(row[-3]))
date_list.append(datetime.strptime(row[0], '%Y-%m-%d')) # 2022-08-01 -> %Y-%m-%d
plt.figure(figsize=(10,5), dpi=200)
plt.plot(date_list, high, 'r', label='high')
plt.plot(date_list, avg, 'g', label='avg')
plt.plot(date_list, low, 'b', label='low')
plt.legend()
plt.show()
🔽 결과
❓ 내가 태어난 연도부터 확인 가능한 코드는 무엇일까?(데이터 편집 없이 코드로 구현한다면)
# 나머지 코드는 그대로
for row in data:
if 2000 <= int(row[0].split('-')[0]):
if row[-1] != '' and row[-2] != '' and row[-3] != '':
if row[0].split('-')[1] == '03' and row[0].split('-')[2] == '17':
high.append(float(row[-1])) # 4-2) 데이터 담기
low.append(float(row[-2]))
avg.append(float(row[-3]))
date_list.append(datetime.strptime(row[0], '%Y-%m-%d')) # 2022-08-01 -> %Y-%m-%d
🔽 결과
import matplotlib as mpl
import matplotlib.pyplot as plt
%config InlineBackend.figure_format = 'retina'
!apt -qq -y install fonts-nanum
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic')
mpl.font_manager._rebuild()
그래프 코드에 아래 코드를 추가하면 된다.
plt.rcParams['axes.unicode_minus'] = False
plt.rc('font', family='NanumBarunGothic')
🔽 결과
✏️ 범례 위치 수정
plt.legend(loc=)
-> loc=에 위치에 맞는 숫자를 입력하면 됨.
start_year = input("언제부터?")
end_year = input("언제까지?")
-> 년도 변수 입력
for row in data:
if int(start_year) <= int(row[0].split('-')[0]) and int(end_year) >= int(row[0].split('-')[0]):
if row[-1] != '' and row[-2] != '' and row[-3] != '':
if row[0].split('-')[1] == '03' and row[0].split('-')[2] == '17':
high.append(float(row[-1])) # 4-2) 데이터 담기
low.append(float(row[-2]))
avg.append(float(row[-3]))
date_list.append(datetime.strptime(row[0].split('-')[0], '%Y'))
-> 입력받은 년도 시각화 처리 코드
plt.title(start_year + "년 이후부터" + end_year + "까지의 내 생일의 기온 변화 그래프")
-> 타이틀 입력
🔽 결과(start_year에 2002년, end_year에 2018년 입력한 결과)
import csv
import matplotlib.pyplot as plt
# 최고 기온 데이터만 result 리스트에 담아서 출력
result = [] # 1) list 선언
f = open('/content/seoul2022.csv', encoding='cp949') # 2) 데이터 불러오기
data = csv.reader(f)
next(data) # 3) 헤더
# 4) result list 변수에 최고 기온 데이터 담기
for row in data:
if row[-1] != '':
if row[0].split('-')[1] == '08': # 4-1) 결측치 제외
result.append(float(row[-1])) # 4-2) 데이터 담기
plt.figure(dpi=100)
plt.rc('font', family='NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title("서울의 8월 최고 기온 데이터 히스토그램")
plt.hist(result, bins=100, color = 'r')
plt.show()
🔽 결과
(※ 히스토그램은 축약 안됨)
✏️ 1,4,8월 최고 기온 그래프
aug = []
jan = []
apl = []
-> 변수 선언
for row in data:
month = row[0].split('-')[1]
if month == '08':
if row[-1] != '':
aug.append(float(row[-1]))
if month == '01':
if row[-1] != '':
jan.append(float(row[-1]))
if month == '04':
if row[-1] != '':
apl.append(float(row[-1]))
-> 각 달에 맞게 list 변수에 최고 기온 데이터 담기
plt.hist(aug, bins=100, color = 'r', label = "8월 최고 기온")
plt.hist(jan, bins=100, color = 'b', label = "1월 최고 기온")
plt.hist(apl, bins=100, color = 'y', label = "4월 최고 기온")
-> 히스토그램 그리기
🔽 결과
✏️ 8월 최고, 최저, 평균 기온 비교
high = []
low = []
avg = []
-> 변수 선언
for row in data:
month = row[0].split('-')[1]
if month == '08':
if row[-1] != '':
high.append(float(row[-1]))
if row[-2] != '':
low.append(float(row[-2]))
if row[-3] != '':
avg.append(float(row[-3]))
-> 각 달에 맞게 list 변수에 최고 기온 데이터 담기
plt.hist(high, bins=100, color = 'r', label = "8월 최고 기온")
plt.hist(low, bins=100, color = 'b', label = "8월 최저 기온")
plt.hist(avg, bins=100, color = 'y', label = "8월 평균 기온")
-> 히스토그램 그리기
✏️ 사용자에게 월을 입력받아 히스토그램 그리기
choice_month = input("원하는 월을 입력하시오")
-> 사용자에게 원하는 달을 입력받음
for row in data:
month = row[0].split('-')[1]
if month == choice_month:
if row[-1] != '' and row[-2] != '' and row[-3] != '':
high.append(float(row[-1]))
low.append(float(row[-2]))
avg.append(float(row[-3]))
-> 입력받은 달의 최고, 최저, 평균의 데이터를 변수에 저장
plt.hist(high, bins=100, color = 'r', label = choice_month + "월 최고 기온")
plt.hist(low, bins=100, color = 'b', label = choice_month + "월 최저 기온")
plt.hist(avg, bins=100, color = 'y', label = choice_month + "월 평균 기온")
plt.title(choice_month + "월 기온 데이터 히스토그램")
-> 히스토그램 그리기
🔽 결과(04 입력한 결과)
-> aug와 jan의 boxplot 코드를 따로 했을 때
-> boxplot([aug, jan])로 했을 때
히스토그램(1월과 8월 최고 기온 비교)이랑 동일한 코드, hist를 boxplot으로만 변경
✏️ 상자그림을 이용한 월별 기온 변화 비교
import csv
import matplotlib.pyplot as plt
high = []
low = []
avg = []
f = open('/content/seoul2022.csv', encoding='cp949') # 1) 데이터 불러오기
data = csv.reader(f)
next(data) # 2) 헤더
# 3) 월별 데이터 저장형 month 변수를 선언
# month = [[0], [1],...,[10],[11]] -> 총 12개
# month[0].append()
month = []
for i in range(12):
month.append([])
# 4) 각 달에 맞게 list 변수에 데이터 담기
for row in data:
if row[-1] != '':
month[int(row[0].split('-')[1])-1].append(float(row[-1]))
# (row[0].split('-')[1]) -> 월 출력, int를 이용해서 형변환(01->1), 인덱스는 0부터 시작이므로 -1을 한 것.
plt.figure(dpi=100)
plt.rc('font', family='NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
plt.boxplot(month)
plt.title("서울 최고 기온 데이터 월별 상자 그림")
plt.legend()
plt.show()
🔽 결과
+) 일별 비교
깔끔하게 정리 아주 잘 했네요. 글 보면서 어제 강의한 내용 새록새록 생각나면서 되게 까마득한 느낌은?!
하하, 다음주에 봐요