🐼 seoul_2022.csv 파일 구성 🐼

모든 코드는 해당 파일을 사용하여 작성

...

row[-1] : 최고기온 열
row[-2] : 최저기온 열
row[-3] : 평균기온 열


📈 그래프 그리기 📈

https://matplotlib.org/

  • import matplotlib.pytplot as plt

👤 기본 그래프

📉 plt.plot() : 직선 또는 꺾은선 그래프 그리기 📉

📉 plt.plot() : 직선 또는 꺾은선 그래프 그리기

  • label = 'asc'(오름차순) of 'desc'(내림차순)
  • color = '그래프색'
  • linestyle = '그래프선모양' ( ls로 쓸 수 있음 ex) ls=':')

📉 plt.plot() : 마커속성

  • https://wikidocs.net/92083
  • marker 속성을 설정하면 선 형태가 아닌 점 형태로 그리기 가능
  • '<색상><마커모양><선모양>' : 동시 설정 가능 ex)gD^(green, Diamond, 삼각형 모양 마커)

🎂 기온 변화를 그래프로 그리기 🎂

👤 데이터 준비


👀 최고기온 데이터 준비할 때 밑의 형광펜 부분을 추가해주고, plt.plot(date_list, result, 'r.') 로 그리면 년도를 나타낼 수 있다.

👤 8월 데이터만 추출해서 그래프로 그리기

🗨️ split() : 사용자가 설정하는 특정 문자로 문자열 분리(기본적으로 공백문자) 🗨️

데이터

date = '1907-10-01'

년도만 추출

print(date.split('-')[0]) -> 1907
print(date.split('-')[-3]) -> 1907

월만 추출

print(date.split('-')[1]) -> 10
print(date.split('-')[-2]) -> 10

일만 추출

print(date.split('-')[2]) -> 01
print(date.split('-')[-1]) -> 01

👤 12/4일의 최저기온, 평균기온, 최고기온을 하나의 그래프로 시각화하기

  1. 변수 선언(higt, avg, low)
  2. for data 담기
    -> 🔥주의 : 결측치 제외조건 and로 연결
    -> 월과 일이 일치하는 데이터만 담기
  3. 그리기

🗨️ 한글, 마이너스 기호 깨짐 방지 🗨️

➕ 12/4일의 최저기온, 평균기온, 최고기온을 지정한 년도의 부분만 출력하기

  1. input()으로 시작 년도, 끝나는 년도 입력받기
  2. for문 안에서 범위를 지정해주기
import csv
import matplotlib.pyplot as plt
from datetime import datetime

high_result = [] 
low_result = []
avg_result = []
datelist = []

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

start = input("원하는 시작 년도를 넣어주세요 : ")
end = input("원하는 종료 년도를 넣어주세요 : ")

# 4) result list 변수에 기온 데이터 담기
for row in data:
  if int(start) <= int(row[0].split('-')[0]) and int(end) >= int(row[0].split('-')[0]):
    if row[-1] != '' and row[-2] != '' and row[-3] != '': # 4-1) 결측치 제외
    # 월과 일이 일치하는 데이터만 담기
      if row[0].split('-')[1] == '12' and row[0].split('-')[2] == '04':
        high_result.append(float(row[-1])) # 4-2) 데이터 담기
        low_result.append(float(row[-2]))
        avg_result.append(float(row[-3]))
        datelist.append(datetime.strptime(row[0].split('-')[0], '%Y'))
plt.figure(figsize=(20,5) ,dpi=200)

plt.rcParams['axes.unicode_minus'] = False #마이너스 기호 깨짐 방지
plt.rc('font', family="NanumBarunGothic") # 나눔 바른 고딕을 기본 글꼴로 설정

plt.plot(datelist, high_result, 'r', label="최고기온")
plt.plot(datelist, low_result, 'b', label="최저기온")
plt.plot(datelist, avg_result, 'g', label="평균기온")

plt.title(start + "년 부터 " + end +"년 까지 기온 변화 그래프")
plt.legend()
plt.show() ```


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

📊 히스토그램 📊

  • plt.hist()

👤 1월과 8월의 서울 최고기온 히스토그램

👀 다른 년도를 응용하려면 변수 리스트 선언, if문을 년도에 맞게 바꿔주면 됨

👤 월을 입력받아 서울 최저평균최고기온 히스토그램 그리기

👤 기온데이터를 상자 그림으로 표현하기

  • plt.boxplot()
import csv
from datetime import datetime
import matplotlib.pyplot as plt

aug = [] # 1) list 선언
jan = []

f = open('/content/seoul_2022.csv', encoding="cp949")
data = csv.reader(f)
next(data) # 3) 헤더 추출

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])) 

plt.figure(dpi=100)
plt.rcParams['axes.unicode_minus'] = False 
plt.rc('font', family="NanumBarunGothic")

plt.title("서울 최고기온 데이터 01월과 08월 boxplot")
plt.boxplot(jan)
plt.boxplot(aug) # plt.boxplot([jan, aug]) 따로 그리고 싶을 때
plt.show()

👤 1~12월까지 월별 최고온도를 boxplot으로 나타내기

  • 월별 데이터를 저장하기 위해 list안에 list 담는 형태를 이용
import csv
from datetime import datetime
import matplotlib.pyplot as plt

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

# 3) 월별 데이터 저장할 month변수를 선언
# month = [[0], [1], [2], [3] ... [11]] 
# 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]))
    # temp = int(row[0].split('-')[1])
    # month[temp-1].append(float(row[-1]))
plt.figure(dpi=100)
plt.rcParams['axes.unicode_minus'] = False #마이너스 기호 깨짐 방지
plt.rc('font', family="NanumBarunGothic") # 나눔 바른 고딕을 기본 글꼴로 설정

plt.title("서울 최고 기온 데이터 월별 boxplot")
plt.boxplot(month)
plt.show() 

👤 1~31일까지 일별 최고온도를 boxplot으로 나타내기

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

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

# 3) 일별 데이터 저장할 day변수를 선언
# month = [[0], [1], [2], [3] ... [11]] 
# month[0].append
day = []
for i in range(31):
  day.append([])

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

plt.figure(dpi=100)
plt.rcParams['axes.unicode_minus'] = False 
plt.rc('font', family="NanumBarunGothic")

plt.title("서울 최고 기온 데이터 일별 boxplot")
plt.boxplot(day)
plt.show()

🚩 소감 🚩
리스트 안 리스트라는 개념이 좀 생소하고 어려웠는데 예시랑 같이 이해해보니까 조금은 ..? 이해가 된 것 같다. 나중에도 이 개념이 어려우면 더 찾아보든가 아니면 예시를 잘 생각해보면 될 것 같다. 저번주 데이터분석 수업과 비교하면 난이도가 좀 올라간 것 같아서 정신을 좀만 놓으면 수업을 따라가기 힘들 것 같다 ㅎㅎ.... 최고기온, 최저기온, 평균기온을 구하는 부분에서 결측치를 제외할 때 and가 아닌 or을 써도되는게 맞는 것 같아서 계속 아리까리했는데 or은 한개라도 true이면 true가 돼서 그렇게되면 개수가 맞지 않기 때문이라고한다. 그리고 for문을 돌릴 때 or보다 and가 더빠르다고 한다. or은 앞이 계속 false가 나온다고 해도 뒤쪽에 true가 나올 수 있기 때문에 계속 진행해야되는데, and는 false가 하나라도 나오면 바로 넘어가니까 그렇다고한다 ...^..^ 너무피곤하다,,,

profile
배고파용.

0개의 댓글