관리 메뉴

안까먹을라고 쓰는 블로그

[Python] 모두의 데이터분석 with 파이썬 - 코드(기상데이터 + matplot) 본문

Language/Python

[Python] 모두의 데이터분석 with 파이썬 - 코드(기상데이터 + matplot)

YawnsDuzin 2019. 10. 21. 18:13

 

반응형

예제파일 다운 [기상자료개방포털]

https://data.kma.go.kr/stcs/grnd/grndTaList.do?pgmNo=70

 

기상자료개방포털

지점별로 평균기온과 최저기온, 최고기온의 시계열 분석을 확인합니다. 일자료, 월자료, 연자료에 대해 각각 조회할 수 있습니다. * '지역/지점'의 '지역'은 전국 및 광역 단위의 평균 제공(1973년~) (전국 및 광역별 평균에 사용된 지점은 전국 평균산출에 사용되는 45개 지점이며, 제주도는 제주시와 서귀포시 자료임)

data.kma.go.kr

 - "기후통계분석" - "기온분석"

    기간 : 19040101 ~ 20190117, 지역/지정 : 서울)로 "검색", "CSV 다운로드"

    파일명을 "seoul.csv"로 변경 후,  불필요한 1 ~ 7행은 삭제

 

소스코드

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':                     # 최고 기온 값이 존재한다면
        # if row[0].split('-')[1] == '08':  # 8월에 해당하는 값이라면
        if row[0].split('-')[1] == '02' and row[0].split('-')[2] == '14':  # 8월에 해당하는 값이라면
            result.append(float(row[-1]))     # result 리스트에 최고 기온 값 추가
# print(result)
# print(len(result))

# plt.figure(figsize = (10,2))
plt.plot(result, 'hotpink')  # result 리스트에 저장된 값을 hotpink 색으로 그리기
plt.show()                   # 그래프 그리기

실행 결과

 

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
high = []    # 최고 기온 값을 저장할 리스트 high 생성
low = []     # 최저 기온 값을 저장할 리스트 low 생성

for row in data:
    if row[-1] != '' and row[-2] != '':      # 최고기온과 최저기온이 존재하면,
        if 1983 <= int(row[0].split('-')[0]): # 1983년 이후 데이터면
            if row[0].split('-')[1] == '03' and row[0].split('-')[2] == '27':  # 2월14일이면
                high.append(float(row[-1]))  # 최고 기온값을 high리스트에 저장
                low.append(float(row[-2]))   # 최저 기온값을 low리스트에 저장
plt.plot(high, 'hotpink', label = 'high')  # high 리스트에 저장된 값을 hotpink색으로 그리기
plt.plot(low, 'skyblue', label = 'low')   # low 리스트에 저장된 값을 skyblue색으로 그리기
plt.legend()

plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title('내 생일의 기온 변화 그래프')

plt.show()  # 그래프 나타내기

실행 결과

 

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':
        result.append(float(row[-1]))
        
plt.hist(result, bins = 100, color = 'r')
plt.show()

실행 결과

 

import csv
import matplotlib.pyplot as plt

f = open('seoul.csv')
data = csv.reader(f)
next(data)

aug = []
jan = []

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

plt.hist(aug, bins = 100, color = 'r', label = 'Aug')
plt.hist(jan, bins = 100, color = 'b', label = 'Jan')
plt.legend()
plt.show()

실행 결과

 

import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
result = []

for row in data:
    if row[-1] != '':
        result.append(float(row[-1]))

import matplotlib.pyplot as plt
plt.boxplot(result)
plt.show()

실행 결과

 

import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
aug = []
jan = []

for row in data:
    month = row[0].split('-')[1]
    if row[-1] != '':
        if month == '08':
            aug.append(float(row[-1]))
        if month == '01':
            jan.append(float(row[-1]))
            
import matplotlib.pyplot as plt

# plt.boxplot(aug)
# plt.boxplot(jan)
plt.boxplot([aug, jan])

plt.show()

실행 결과

 

import matplotlib.pyplot as plt
import csv

f = open('seoul.csv')
data = csv.reader(f)
next(data)

month = [[], [], [], [], [], [], [], [], [], [], [], []]

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

실행 결과

 

import matplotlib.pyplot as plt
import csv

f = open('seoul.csv')
data = csv.reader(f)
next(data)

day = []
for i in range(31):
    day.append([])
    
for row in data:
    if row[-1] != '':
        if row[0].split('-')[1] == '08':
            day[int(row[0].split('-')[2]) - 1].append(float(row[-1]))
            
plt.style.use('ggplot')
plt.figure(figsize = (10, 5), dpi = 300)
plt.boxplot(day, showfliers = False)


plt.show()

실행 결과

반응형
Comments