데이터 분석 학습

[모두의 데이터분석 With 파이썬] Unit.05 리뷰 / 데이터에 맞는 시각화

yunjuniverse 2022. 3. 24. 09:00

 

2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.01 리뷰 / CSV, 아나콘다, 크롬

2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.02 리뷰 / 주피터, 코랩

2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.03 리뷰 / 데이터 전처리

2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.04 리뷰 / 기본 그래프 그리기

 

 

일단 지금까지 써왔던 데이터를 불러오는 것부터 시작하자

 

import csv 
f = open('/content/drive/MyDrive/Python Study/모두의 데이터 분석 with 파이썬/seoul.csv', encoding='cp949') 
data = csv.reader(f)
next(data) 
result = [] #result 클래스를 빈 리스트 형태로 저장 
for row in data:
  if row[-1] != '' : # 최고 기온 데이터 값이 존재한다면
    result.append(float(row[-1])) #result 리스트에 최고 기온 값(실수)을 추가
print(result)

결과값: [20.7, 22.0, 21.3, 22.0, 25.4, 21.3, 16.1, 14.9, 21.1, 24.1, 20......]

 

데이터를 불러오고 리스트형태로 저장하고 마지막행에 있는 최고 기온 데이터를  실수 형태로 변환하여 출력하는 코드이다. 방대한 자료의 양으로 인해 전체 개수가 몇개인지 알 수 없으므로 자료의 양을 세보자

 

print(len(result))

결과값: 39462

 

데이터의 길이를 세는 len()함수를 이용해 확인하니 무려 4만개 가량.....

 

이 많은 데이터 값은 어떤 방식으로 나타내는 것이 좋을까?

시계열(일정한 시간 간격에 따라 배치된 데이터 수열) 그래프는 일반적으로 꺽은선 그래프를 이용한다.

#최고 기온 데이터 시각화
import matplotlib.pyplot as plt
plt.plot(result, 'r') #'r'은 빨간색이라는 뜻
plt.show()

결과값: 

 

음...  거의 낙서 같다. 그래프의 크기를 조금 조정해서 보기 좋게 만들어 주자

figure()함수의 figsize 속성 값을 변경하여 그래프의 크기를 조절해준다

figsize=(가로 길이, 세로 길이) 형식으로 크기를 설정할 수 있고 단위는 inch이다(1 inch는 2.54cm)

#그래프 크기 조절

plt.plot(result, 'r')
plt.figure(figsize=(10,2)) #가로 10인치, 세로 2인치로 설정
plt.show()

결과값:

오잉? 똑같이 보인다. 그러나 이건 코랩에서의 문제로 밑의 사이즈 값을 조절하며 figure size를 확인하면 해당 가로, 세로 사이즈가 변경된다는 것을 알 수 있다.

 

이제 날짜 데이터를 추출해야한다.

 

날짜 데이터 추출을 위해서는 split()함수를 이용한다. 이는 사용자가 설정하는 특정문자를 기준으로 문자열을 분리해준다. 분리하는 기본값은 공백이며 변경 가능하다.

#split() 함수 예시
s = 'hello python' #s에 문자열 저장
print(s.split()) #문자열 분리, 기본값은 공백!

결과값: ['1907', '10', '01']

 

날짜 데이터를 '-'으로 분리해보자

date='1907-10-01' #date에 날짜 저장
print(date.split('-')) #날짜 '-'로 분리

결과값: ['1907', '10', '01']

 

여기에 리스트의 인덱싱 기능 활용해서 날짜의 연, 월, 일을 각자 추출해보자.

인덱싱(indexing)은 저번에도 말했듯 문자열의 위치를 가지고 문자열을 추출하는 일이다. 0은 첫 번째, 1은 두 번째, 2는 세 번째 데이터 값의 위치를 불러온다

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

결과값: 1907 10 01

 

이제 split()함수로 1년 중 여름의 정점인 8월의 최고 기온만 추출해서 그래프로 그리고 핫핑크로 설정한다.


* matplotlib의 색상 종류를 확인해보고 싶다면 https://matplotlib.org/stable/gallery/color/named_colors.html
 

List of named colors — Matplotlib 3.5.1 documentation

Note Click here to download the full example code

matplotlib.org

 
import csv 
f = open('/content/drive/MyDrive/Python Study/모두의 데이터 분석 with 파이썬/seoul.csv', encoding='cp949') 
data = csv.reader(f)
next(data) 
result = [] #result 클래스를 빈 리스트 형태로 저장 
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()

결과값:

 

8월만 보니 조금 간결해지긴 했지만 조금 복잡하긴 하다.

이번에는 매년 같은 날의 기온데이터만 뽑아보자. (2월 14일)

 

import csv 
f = open('/content/drive/MyDrive/Python Study/모두의 데이터 분석 with 파이썬/seoul.csv', encoding='cp949') 
data = csv.reader(f)
next(data) 
result = [] 
for row in data:
  if row[-1] != '' : 
    if row[0].split('-')[1] == '02' and row[0].split('-')[2] == '14' : # 2월에 해당하는 값이면서(and) 14일에 해당하는 값이라면
      result.append(float(row[-1])) # result 리스트에 최고 기온 값을 추가하하고
plt.plot(result, 'hotpink') #result리스트에 저장된 값을 hotpink 색으로 그린다
plt.show()

 

결과값:

 

갈수록 기온이 조금씩 증가하는 것을 볼 수 있다. 역시 온난화

1983년 데이터만 뽑아서 그래프로 그려 보자. 최고 기온뿐만 아니라 최저 기온 데이터도 함께 보려한다.
high =[] # 최고 기온 값을 담을 리스트형 클래스 생성
low = [] # 최저 기온 값을 담을 리스트형 클래스 생성

for row in data:
  if row[-1] !='' and row[-2] !='': # 최고 기온 값과 최저 기온 값이 존재한다면,
    if 1983 <= int(row[0].split('-')[0]): # 1983년 이후 데이터라면
      if row[0].split('-')[1] == '02' and row[0].split('-')[2] == '14': # 2월 14일이라면
        high.append(float(row[-1]))
        low.append(float(row[-2]))

plt.plot(high, 'hotpink')
plt.plot(low, 'skyblue')
plt.show()

결과값: 

이제 깔끔하게 매년 동일 기간의 온도 데이터를 확인할 수 있다

 

 

(여기서 한글 폰트를 설치해 제목과 범례를 넣어주는 작업도 있는데 이건 패스...)