| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- #abc 프로젝트 멘토링 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #공부일지 #멘토링일지
- #abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업
- Today
- Total
나른한 코딩 생활
[6일차] ABC 부트캠프 데이터 시각화 본문
오늘부터는 새로운 강사님과 함께 Python 라이브러리와 데이터 시각화 등을 배울 것이다
간단한 용어를 시작으로 오늘 배운 내용을 사용하여 히스토그램을 만들고 마무리 해보자
기초 용어
- 데이터 시각화 Data Visualization :
데이터 분석 결과를 쉽게 이해할 수 있도록 시각적 수단(그래프,차트)을 통해 정보를 효과적으로 전달 하는 방법
CSV 파일 " Comma Separated Values" : 쉼표로 구분 된 일반 텍스트 형식
- 크롤링 : 웹 페이지를 그대로 가져와서 데이터를 추출해 내는 행위
- Colab : 구글에서 제공하는 클라우드 기반의 Jupyter 노트북 환경
지역의 기온 데이터 분석
import csv #csv library import
# 1) 파일을 연다.
f = open('/content/daejeon.csv', 'r', encoding='euc-kr')
# 2) 파일을 읽는다.
data = csv.reader(f,delimiter=',')
print(data)
# 3) 파일 내용 출력
for row in data:
print(row)
# 4) 파일 닫기
f.close()
CSV : comma seperated values
먼저 csv 와 관련된 메서드를 사용하기 위해서 import csv 를 해야한다.
line 4 : f =open~
을 통해 한글 파일 ( encoding = 'ecu-kr' ) 을 인코딩 하는 과정이 필요하다.
해당 과정은 Notepad++ 편집툴을 이용하였을때 우측 하단에 명시된다.
파일을 열었으면 이후 파일을 읽는 과정을 수행한다.
data = csv.reader(f,delimiter=',')
# csv.reader 함수를 통해 csv 파일을 읽는다
# f 는 아까 불러온 scv 파일, delimiter는 ',' 를 기준으로 데이터 해석
파일의 작업이 끝나면 마지막 f.close() 함수를 통해 파일을 닫아주는 과정이 필요하다.
헤더는 여기서 쉽게 이야기하자만 , 로 나누어진 데이터 타입의 종류를 의미한다
기상청 사이트에서 csv파일을 다운로드 할 경우 1 분단 아래에
데이터가 시작되는 첫줄에 헤더가 나와있다.
날짜, 지역, 평균 기온, 최저 기온, 최고 기온
등과 같이 서술되어 있는 부분을 헤더라고 한다
하지만 해당 코드내용을 실행하게 되면 Error 가 발생하게 될 가능성이 크다
기간을 어느정도로 설정했느냐에 따라 다르겠지만 데이터가 비어있는
' 결측치 (Missing Value) ' 가 존재할 수 있기 때문이다.
따라서 데이터가 비어있는 결측치를 따로 처리해 줘야 데이터 분석에 문제가 없다.
해당 과정을 결측치 데이터 처리 라고 한다.
# 날짜와 평균온도를 출력하는 코드
import csv
# 1) csv 파일 설정
f = open('/content/seoul.csv', 'r', encoding='euc-kr')
data = csv.reader(f,delimiter=',')
header = next(data) # next() 한 줄 읽고, 커서 한칸 이동
# 2) 날짜, 평균 기온 출력
for row in data:
# 2-1) 결측치 데이터 처리 -> 지우거나, 채우거나(명확한 결과를 위해서 극단적인 값으로 초기화)
if row[2] == '':
row[2] = -999
# 날짜와 평균 기온 출력
print(row[0], float(row[2]))
# 3) 파일 닫기
f.close()
다음과 같은 코드를 실행하면 사용한 csv 파일의 날짜와 평균 기온을 차례로 출력하게 된다.
import csv
# 0) 최고 기온이 가장 높았던 날짜와 온도를 저장할 변수 선언
max_date = '' # 최고 기온이 가장 높았던 날짜
max_temp = -999 # 최고 기온이 가장 높았던 온도 -> 극적인 값으로 초기화
# 1) csv 파일 설정
f = open('/content/Daejeon.csv', 'r', encoding='euc-kr')
data = csv.reader(f,delimiter=',')
header = next(data) # next() 한 줄 읽고, 커서 한칸 이동
# 2) 날짜, 최고 기온 찾기
for row in data:
# 2-1) 결측치 데이터 처리 -> 지우거나, 채우거나(명확한 결과를 위해서 극단적인 값으로 초기화)
if row[-1] == '':
row[-1] = -999
# 2-2) 최고 기온 형변환
row [-1] = float(row[-1])
# 2-3) 저장된 최고 기온과 현재 최고 기온을 비교해서 더 높은 최고 기온과 날짜를 저장
if max_temp < row[-1]:
max_date = row[0]
max_temp = row[-1]
# 3) 파일 닫기
f.close()
# 4) 결과 출력
print("기상 관측 이래, 대전의 최고 기온이 가장 높았던 날은,", max_date, '온도는', max_temp, '였습니다.')
# 기상 관측 이래, 대전의 최고 기온이 가장 높았던 날은, 2018-08-15 온도는 39.4 였습니다.
matplotlib 을 통한 그래프 그리기
matplotlib?
- 파이썬으로 데이터를 시각화할때 가장 많이 사용하는 라이브러리
import matplotlib.pyplot # 똑같이 import 문을 사용해야 함
import matplotlib.pyplot as plt
# plt 라는 별칭으로 사용함
matplotlib을 사용해 기본적인 그래프 몇가지를 그려보자
import matplotlib.pyplot as plt
plt.title('plotting') # 타이틀 속성 추가
# 1 개 이상의 차트를 같이 그릴 경우 label 속성 추가
plt.plot([1,2,3,4],[10,20,30,40],color='skyblue', marker= '^',linestyle = '--',label='asc')
plt.plot([1,2,3,4],[40,30,20,10],'m', marker='.',label='desc')
plt.plot([1,2,3,4],[25,25,25,25], 'g.', label = 'simple_dot') # 'red' , '^' , '--'=> '' lisnestyle 지우기
# 범례 속성 추가
plt.legend() # label 값이 없으면 작동 X
plt.show()

color = '색깔' 을 통해 지정된 색깔을 사용 가능하며 축약해서 사용도 가능하다
ex) 'r' 은 color = 'red' 와 같다
marker 는 지점 혹은 데이터 값을 표기할 모양을 지정하는 것이며 '^', '.' 등 을 사용한 모습이다.
linestyle 은 선을 실선, 점선 등으로 변경할 수 있으며,
'--' 를 통해 점선, ' ' (공백) 을 통해 선을 없애는 것도 가능하다.
plt.plot([1,2,3,4],[25,25,25,25], 'g^--', label = 'simple_dot')
다음 줄과 같이 'g^--' 를 통해 특정 그래프에서 축약해서 사용할 수 있으며
의미는 coloer = 'green' , marker = '^', linestyle = '--' 와 같다
plot.title 값에 한국어를 사용하고 싶지만, colab 에서는 기본적으로
한국어를 지원하지 않기 때문에 이러한 오류를 먼저 해결하자
pip install koreanize-matplotlib
해당 라이브러리를 설치해 matplotlib의 한국어 버전을 다운로드 한다
import koreanize_matplotlib # import를 통해 한국어를 사용가능
히스토그램
히스토그램 : 도수분포표를 시각화한 그래프
import koreanize_matplotlib
import csv
import matplotlib.pyplot as plt
f = open('/content/seoul.csv', 'r', encoding='euc-kr')
data = csv.reader(f,delimiter=',')
header = next(data)
result = [] # 결과값을 저장할 빈 list 생성
# 결측치를 제외한 데이터만 시각화
for row in data:
if row[-1] != '':
result.append(float(row[-1]))
plt.title('서울 최고 기온 시각화')
plt.plot(result,'r')
plt.show()
f.close()

해당 그래프로는 데이터가 난잡하고 알아보기 힘들다
다음과 같은 그래프를 분포도에 따라 (여러 조건을 붙혀) 나타내는 것을
히스토그램 이라고 한다.
# ...
plt.title('서울 최고 기온 시각화')
plt.hist(result,bins=100,color='r')
# plot-> hist 형태로 변경
plt.show()
f.close()
위 코드에서 다음과 같은 형태로 히스토그램 그래프를 그리기 위해 메서드를 쓰게되면
result 값에 대한 hist 작성 : result (사용자가 설정한 변수)
데이터 값의 촘촘한 정도( x값 ) : bins
히스토그램 그래프의 색상 : color
와 같은 이름들로 설정할 수 있다.
그럼 다음과 같은 히스토그램을 출력함을 알 수 있다.

오늘 배운 내용들을 토대로 다음을 만족하는 히스토그램을 출력하는
히스토그램을 출력해보자
먼저 조건은 다음과 같다
- 사용자에게 조사할 달(1~12)을 입력받는다
- 입력받은 달의 평균, 최고, 최저 기온 분포를 한번에 그리기
- 최저 = 파랑 , 평균 = 초록 , 최고 = 빨강 의 색깔로 히스토그램 만들기
먼저 히스토그램을 만드는 과정을 그대로 따라간다
import koreanize_matplotlib
import csv
import matplotlib.pyplot as plt
f = open('/content/seoul.csv', 'r', encoding='euc-kr')
data = csv.reader(f,delimiter=',')
header = next(data)
처음 3개의 라이브러리를 import 해준 뒤 csv 파일을 연다
input_mon = int(input('원하는 달을 입력하세요'))
print(input_mon, ": 원하는 달")
max = [] # '최고 기온' 데이터를 저장하는 빈 리스트
avg = [] # '평균 기온' 데이터를 저장하는 빈 리스트
min = [] # '최저 기온' 데이터를 저장하는 빈 리스트
다음으로는 input 함수로 받은 숫자문자열을 (ex, '12') int() 를 사용해 int형으로 변환
이후에 list 형 변수 max, avg, min 을 비어있는 형태로 선언해준다
# max, min, avg 에 해당하는 값을 삽입
for row in data:
if row[-1] != '':
# 선택된 데이터만 답기
if int(row[0].split('-')[1]) == input_mon:
max.append(float(row[-1]))
min.append(float(row[-2]))
avg.append(float(row[-3]))
헤더 이후의 데이터(리스트)를 한줄씩 불러오며
결측치가 없고, 입력한 달과 일치하는 리스트의 데이터를 위에서 선언한 리스트 변수에 append 한다.
plt.title('서울의 '+ str(input_mon)+'월 최고, 최저, 평균 기온 시각화')
plt.hist(max,bins=100,color='r',label=str(input_mon)+'월 최고 기온')
for 문이 끝난 이후에는 title의 이름을 설정한 후
max, min, avg 를 각각의 히스토그램으로( plt.hist ) 만든다.
이후 후처리를 하고 난 뒤 출력하면 히스토그램이 성공적으로 출력된다.
완성된 코드는 아래와 같은 형태를 가진다.
import koreanize_matplotlib
import csv
import matplotlib.pyplot as plt
f = open('/content/seoul.csv', 'r', encoding='euc-kr')
data = csv.reader(f,delimiter=',')
header = next(data)
input_mon = int(input('원하는 달을 입력하세요'))
print(input_mon, ": 원하는 달")
max = []
avg = []
min = []
# max, min, avg 에 해당하는 값을 삽입
for row in data:
if row[-1] != '':
# 선택된 데이터만 답기
if int(row[0].split('-')[1]) == input_mon:
max.append(float(row[-1]))
min.append(float(row[-2]))
avg.append(float(row[-3]))
plt.title('서울의 '+ str(input_mon)+'월 최고, 최저, 평균 기온 시각화')
plt.hist(max,bins=100,color='r',label=str(input_mon)+'월 최고 기온')
plt.hist(avg,bins=100,color='g',label=str(input_mon)+'월 평균 기온')
plt.hist(min,bins=100,color='b',label=str(input_mon)+'월 최저 기온')
plt.legend()
plt.show()
f.close()

이렇게 간단한 종류의 그래프를 그려보았다.
내일은 pandas 라이브러리를 사용하여 조금 더 다양한 종류의 그래프를 그려보는 시간을 가져보겠다.
아래는 오늘 먹은 점심 떡볶이이다
돈이 없는 요즘 분식은 생명줄이다...
김말이 맛감자 ^o^b

'ABC 부트캠프' 카테고리의 다른 글
| [8일차] ABC 부트캠프 라이브러리를 통한 데이터 분석 (0) | 2024.07.03 |
|---|---|
| [7일차] ABC 부트캠프 공공데이터 활용 및 Pandas 라이브러리 (0) | 2024.07.03 |
| [5일차] ABC 부트캠프 Python 기초 4 & 미니 프로젝트 (1) | 2024.06.28 |
| [4일차] ABC 부트캠프 Python 기초 3 (0) | 2024.06.27 |
| [3일차] ABC 부트캠프 PYTHON 기초 2 (0) | 2024.06.26 |