2022.08.06

📈기본 그래프 그리기(matplotlib을 사용해보자!)

데이터를 시각화하는 방법 중에서 이번 시간에는 그래프를 그려보았다.

  • matplotlib 기본 그래프

import matplotlib.pyplot as plt # 라이브러리 임포트

plt.plot([20,5,30,5,20,40]) # y 값이 주어지면, 자동으로 x 값을 0부터 1씩 증가함.

plt.show()


위 그래프는 x값을 자동으로 출력되어서, 이번에는 x값도 지정해보도록 한다.

  • matplotlib 기본 그래프 -> plot(x,y)

import matplotlib.pyplot as plt # 라이브러리 임포트

plt.plot([1,2,3,4], [10,20,30,40]) # plot(x,y) 입력

plt.show() # 그래프 보여주기

matplotlib 기본 그래프 -> 여러개의 plot(x,y), label 추가 + Title추가

import matplotlib.pyplot as plt # 1) 라이브러리 임포트

plt.title('color') # 2) 타이틀 속성 추가

plt.plot([1,2,3,4], [10,20,30,40], 'r', label= 'red') # 3) 증가하는 데이터셋 -> 범례(label) 추가
plt.plot([1,2,3,4], [40,30,20,10],'k', label= 'black') # 감소하는 데이터셋 -> 색깔(color) 추가(기본 5가지 색은 약자로 표시[r,g,b,k,y])

plt.legend(loc=6) # 4) 범례 추가

plt.show() # 5) 그래프 보여주기

matplotlib 기본 그래프 -> 여러개의 plot(x,y), label 추가 + Title추가 + Marker추가

import matplotlib.pyplot as plt # 1) 라이브러리 임포트

plt.title('Marker') # 2) 타이틀 속성 추가

plt.plot([1,2,3,4], [10,20,30,40], 'rp--' , label= 'pentagon + dashed') #
plt.plot([1,2,3,4], [40,30,20,10], 'k:.', label= 'diamond + dotted') # 

plt.legend() # 4) 범례 추가 (loc=0)

plt.show() # 5) 그래프 보여주기

🎂내 생일의 기온 변화를 그래프로 그리기

최고 기온 데이터 준비하기

import csv

# 최고기온 데이터만 result 리스트에 담아서 출력
result = [] # 1) list 선언
date_list =[]

f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기

data = csv.reader(f)

next(data) # 3) 헤더 추출

# 4) result list 변수에 최고 기온 데이터 담기
for row in data:
    if row [-1] != '': # 4-1) 결측치 제외
        result.append(float(row[-1])) # 4-2)  데이터 담기
        date_list.append([0])

print(result) # 5) 데이터 출력
print(date_list)

최고 기온 데이터 시각화하기

import matplotlib.pyplot as plt

# 그래픽 크기 조절
plt.figure(dpi = 300)

plt.plot(result, 'r')
plt.show()

서울시 온도 데이터에서 내 생일의 최고 기온 데이터를 담아서 시각화하기

import csv
import matplotlib.pyplot as plt
from datetime import datetime

# 최고기온 데이터만 result 리스트에 담아서 출력


f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기

data = csv.reader(f)

next(data) # 3) 헤더 추출

high = []
low = []
avg = []
date_list =[]

# 4) 자신이 태어난 월과 일 일치하는 데이터만 담아야한다.
for row in data:
    if row [-1] != '' and row [-2] != '' and row [-3] != '': # 4-1) 결측치 제외
        date = row[0].split('-')
        if 1907 <= int(date[0]):
            if date[1] == '09' and date[2] == '02':
               high.append(float(row[-1]))
               low.append(float(row[-2]))
               avg.append(float(row[-3]))
               date_list.append(datetime.strptime(row[0],'%Y-%m-%d'))

plt.figure(figsize=(25,5), dpi=200)
plt.plot(date_list, high, 'r.-', label = 'high')
plt.plot(date_list, low, 'b.-', label = 'low')
plt.plot(date_list, avg, 'm.-', label = 'avg')

plt.title('Celsius')
plt.legend()

plt.show()

➕응용) n년 이후의 내 생일의 기온 변화

import csv
import matplotlib.pyplot as plt
from datetime import datetime

# 최고기온 데이터만 result 리스트에 담아서 출력


f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기

data = csv.reader(f)

next(data) # 3) 헤더 추출

high = []
low = []
avg = []
date_list =[]

year = input("원하는 년도를 입력하세요.")

# 4) 자신이 태어난 월과 일 일치하는 데이터만 담아야한다.
for row in data:
    if int(year) <= int(row[0].split('-')[0]):
        if row [-1] != '' and row [-2] != '' and row [-3] != '': # 4-1) 결측치 제외
            date = row[0].split('-')
            if row[0].split('-')[1] == '12' and row[0].split('-')[2] == '02':
                high.append(float(row[-1]))
                low.append(float(row[-2]))
                avg.append(float(row[-3]))
                date_list.append(datetime.strptime(row[0].split('-')[0],'%Y'))

plt.figure(figsize=(25,5), dpi=200)
plt.rc('font', family= 'NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False # 마이너스 기호 깨짐 방지

plt.plot(date_list, high, 'r.-', label = '최고기온')
plt.plot(date_list, low, 'b.-', label = '최저기온')
plt.plot(date_list, avg, 'm.-', label = '평균기온')


plt.title(year + "년 이후의 내 생일의 기온 변화")
plt.legend()
plt.show()

사진처럼 원하는 년도를 입력하라고 물어보는 질문을 하게하고

2000이라는 값을 넣었을때 2000년 이후의 데이터를 불러온다.

📍기온데이터를 다양하게 시각화하기

최고 기온 데이터 히스토그램으로 표현하기

import csv
from datetime import datetime
import matplotlib.pyplot as plt

# 최고기온 데이터만 result 리스트에 담아서 출력
result = [] # 1) list 선언

f = open('/content/seoul_2022.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':
            result.append(float(row[-1]))

plt.figure(dpi=100)
plt.rc('font', family= 'NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
plt.hist(result, bins = 100, color = 'r')
plt.title("서울 기온 데이터 08월 히스토그램")
plt.show()

📊n월의 최고, 최저, 평균 데이터 출력하기

n월의 최고, 최저, 평균 데이터 출력하기

import csv
import matplotlib.pyplot as plt

# 최고기온 데이터만 result 리스트에 담아서 출력
high = [] # 1) list 선언
low = []
avg = []


f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기
data = csv.reader(f)
next(data) # 3) 헤더 추출

choice_month = input("원하는 월을 입력하세요.")

# 4) result list 변수에 최고 기온 데이터 담기
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.figure(dpi=100)
plt.rc('font', family= 'NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False 
plt.hist(high, bins = 100, color = 'r', label= choice_month +'월 최고기온', alpha = 0.5) # alpha -> 그래프의 투명도 조절
plt.hist(avg, bins = 100, color = 'g', label= choice_month +'월 평균기온', alpha = 0.5)
plt.hist(low, bins = 100, color = 'b', label= choice_month +'월 최저기온', alpha = 0.5)
plt.title("서울의"+ choice_month +"월 최고,평균,최저 기온 히스토그램")
plt.legend()
plt.show()

예시로 12월 데이터를 불러왔다.

📦1월부터 12월까지 최고 기온 데이터 상자 그림으로 표현

1월과 8월의 최고 기온 데이터 상자 그림으로 표현

import csv
from datetime import datetime
import matplotlib.pyplot as plt

# 최고기온 데이터만 result 리스트에 담아서 출력
aug = [] # 1) list 선언
jan = []

f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기
data = csv.reader(f)
next(data) # 3) 헤더 추출

# 4) result list 변수에 최고 기온 데이터 담기
for row in data:
    month = row[0].split('-')[1] # 월 정보를 month 변수에 담기
    if month == '08':
        if row[-1] != '':
            aug.append(float(row[-1]))

    if month == '01':
        if row [-1] != '':
            jan.append(float(row[-1]))

plt.figure(dpi=100)
plt.rc('font', family= 'NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
#plt.boxplot(aug)
#plt.boxplot(jan)
plt.boxplot([aug,jan])
plt.title("서울 기온 데이터 08월 상자그림")
plt.show()

1월부터 12월까지 최고 기온 데이터 상자 그림으로 표현

import csv
from datetime import datetime
import matplotlib.pyplot as plt


f = open('/content/seoul_2022.csv', encoding = 'cp949') # 2) 데이터 불러오기
data = csv.reader(f)
next(data) 


# 3) 월별 데이터 저장할 month 변수를 선언
#  month = [[0],[1],[2],[3],[4],[5],[6],[7][8],[9],[10],[11]]

month = []

# 4) result list 변수에 최고 기온 데이터 담기
for i in range(12):
    month.append([]) # month = [[],[],[],[],[]],[],[],[][],[],[],[]]

for row in data:
    if row[-1] !='':
        month[int(row[0].split('-')[1])-1].append(float(row[-1]))

plt.figure(dpi=100)
plt.rc('font', family= 'NanumBarunGothic')
plt.rcParams['axes.unicode_minus'] = False
#plt.boxplot(aug)
#plt.boxplot(jan)
plt.boxplot(month)
plt.title("최고 기온 상자 그림")
plt.show() # 5) 데이터 출력하기

profile
Do (Awe)Something!

1개의 댓글

comment-user-thumbnail
2022년 8월 16일

alpha = 0.5 값을 넣어서 투명도를 조절하다니... 아주 잘했어요 ㅎㅎ
영웅씨의 생일이 9월2일.. 얼마 안남았군요. 기억 ^-^

답글 달기