[데이터분석]2. 데이터 시각화
<1> matplotlib
- 파이썬에서 2D 형태의 그래프, 이미지 등을 그릴 때 사용하는 것으로, 실제 과학 컴퓨팅 연구 분야나 인공지능 연구 분야에서도 많이 활용
import matplotlib.pyplot as plt
- pyplot 모듈 사용
1) 기본 그래프 그리기
import matplotlib.pyplot as plt
라이브러리 불러오기
plt.plot([x축 데이터], [y축 데이터])
: plot() 함수에 데이터 입력하기
plt.show()
: 그래프 보여주기
import matplotlib.pyplot as plt
plt.plot([10,20,30,40])
plt.show()
- 파이썬에서 2D 형태의 그래프, 이미지 등을 그릴 때 사용하는 것으로, 실제 과학 컴퓨팅 연구 분야나 인공지능 연구 분야에서도 많이 활용
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
라이브러리 불러오기plt.plot([x축 데이터], [y축 데이터])
: plot() 함수에 데이터 입력하기plt.show()
: 그래프 보여주기
import matplotlib.pyplot as plt
plt.plot([10,20,30,40])
plt.show()
- 플롯 함수에 한 개의 리스트 입력했을 때 시행 결과
- 입력된 리스트 : y축의 값으로 입력됨
- x축 : 자동으로 0부터 1씩 증가
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [12, 43, 25, 15])
plt.show()
- 첫번째 리스트 : x축
- 두번째 리스트 : y축
2) 그래프 옵션 추가하기
1. 제목 넣기
plt.title('제목에 넣을 문자열')
import matplotlib.pyplot as plt
plt.title('plotting')
plt.plot([10,20,30,40])
plt.show()
2. 범례 넣기
plt.plot([],label='')
: 속성의 레이블값으로 문자열
plt.legend()
: 레이블 값이 범례로 나옴
import matplotlib.pyplot as plt
plt.title('legend')
plt.plot([10,20,30,40], label='asc')
plt.plot([40,30,20,10], label='desc')
plt.legend()
plt.show()
plt.legend(loc=5)
: 범례의 위치 직접 지정
- 1 : 오른쪽 상단, 2 : 왼쪽 상단, 3 : 왼쪽 하단, 4 : 오른쪽 하단, 5 : 오른쪽, 6 : 왼쪽 중간, 7 : 오른쪽 중간, 8 : 중앙 하단, 9 : 중앙 상단, 10 : 정중앙, 0 : 그래프에 따라 자동적으로 설정
3. 그래프 색상 바꾸기
plt.plot([],color='')
: 생략 시 자동으로 색상 설정
import matplotlib.pyplot as plt
plt.title('color')
plt.plot([10,20,30,40], label='skyblue', color='skyblue')
plt.plot([40,30,20,10], label='pink', color='pink')
plt.legend()
plt.show()
- 기본색은 약자로 표기 가능 : r(red), g(green), b(blue), k(black), y(yellow)
4. 그래프 선 모양 바꾸기
plt.plot([],linestyle='')
: 원하는 선 모양 지정 가능
import matplotlib.pyplot as plt
plt.title('linestyle')
plt.plot([10,20,30,40], label='dashed', color='r', linestyle='-')
plt.plot([40,30,20,10], label='dotted', color='g',linestyle=':')
plt.legend()
plt.show()
plt.plot([1,2,3,4], 'r-')
: 색상과 선모양을 동시에 적어도 됨
5. 마커 모양 바꾸기
- 마커 : 선 형태가 아닌 점 형태로 그래프 그릴 수 있음
import matplotlib.pyplot as plt
plt.title('linestyle')
plt.plot([10,20,30,40],'r.', label='circle')
plt.plot([40,30,20,10], 'g^', label='triangle')
plt.legend()
plt.show()
plt.plot([1,2,3,4], 'r.-')
: 색상, 마커모양, 선모양을 동시에 생성 가능
<2> 내 생일 날 기온 변화 그래프로 그려보기
1) 데이터 질문하기
1. 데이터 읽어오기
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
for row in data:
print(row[-1])
- header을 제외하고 최고 기온만 프린트
2. 데이터 리스트에 저장
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]))
print(result)
import csv
f = open('seoul.csv')
data = csv.reader(f)
next(data)
for row in data:
print(row[-1])
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]))
print(result)
2) 데이터 시각화
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.plot(result,'r') # 결과를 빨간색그래프로 표현
plt.show()
- 그래프 크기 조절하기 : figure()의 figsize=(가로, 세로) 이용
plt.figure(figsize = (10, 2)) #가로 10인치, 세로 2인치
3) 날짜 데이터 추출
s = 'hello python'
print(s.split()) #['hello', 'python'] 출력
- split() : 공백 기준 문자열 분리
date= '1990-01-01'
print(date.split('-')) #['1990', '01', '01'] 출력
- 사용자가 직접 분리할 문자열 지정 가능
print(date.split('-')[0]) #1990
print(date.split('-')[1]) #01
print(date.split('-')[2]) #01
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월인 경우만
result.append(float(row[-1]))
plt.plot(result,'hotpink')
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] != '':
if row[0].split('-')[1] == '08' and row[0].split('-')[2] == '14': # 매년 8월 14일의 최고 기온만 출력
result.append(float(row[-1]))
plt.plot(result,'y')
plt.show()
import csv
import matplotlib.pyplot as plt
f = open('seoul.csv')
data = csv.reader(f)
next(data)
high = []
low = []
for row in data:
if row[-1] != '' and row[-2] != '':
if 1983 <= int(row[0].split('-')[0]):
if row[0].split('-')[1] == '08' and row[0].split('-')[2] == '14':
high.append(float(row[-1]))
low.append(float(row[-2]))
plt.plot(high,'r')
plt.plot(low,'g')
plt.show()
- 1983년 이후 매해 8월 14일의 최고, 최저 기온 출력
import csv
import matplotlib.pyplot as plt
f = open('seoul.csv')
data = csv.reader(f)
next(data)
high = []
low = []
for row in data:
if row[-1] != '' and row[-2] != '':
if 1983 <= int(row[0].split('-')[0]):
if row[0].split('-')[1] == '02' and row[0].split('-')[2] == '14':
high.append(float(row[-1]))
low.append(float(row[-2]))
plt.plot(high,'r')
plt.plot(low,'g')
plt.rc('font', family = 'AppleGothic') # 폰트 설정
plt.rcParams['axes.unicode_minus'] = False # 한글의 마이너스가 안깨지도록 설정
plt.title('생일 그래프')
plt.show()
- 제목 넣기
<3> 기온 데이터 시각화
1. 히스토그램
- hist() 함수 : 자료 분포상태를 직사각형 모양의 막대로 나타냄. 데이터의 빈도에 따라 높이가 결정됨
import matplotlib.pyplot as plt
plt.hist([1,1,2,3,4,5,6,6,7,8,10])
plt.show()
- hist() 함수 : 자료 분포상태를 직사각형 모양의 막대로 나타냄. 데이터의 빈도에 따라 높이가 결정됨
import matplotlib.pyplot as plt
plt.hist([1,1,2,3,4,5,6,6,7,8,10])
plt.show()
- 1, 6에 해당하는 막대의 높이는 2, 9를 제외한 나머지 막대 높이는 1
ex) 주사위 시뮬레이션
- 주사위를 굴린다
- 나온 결과를 기록한다
- 이 과정을 N번 반복
- 주사위의 눈이 나온 횟수를 히스토그램으로 나타냄
randint(a,b)
: a 이상 b 이하 정수 중 하나 숫자를 무작위로 선택
import random
dice = []
for i in range(10):
dice.append(random.randint(1,6))
print(dice)
import random
import matplotlib.pyplot as plt
dice = []
for i in range(10):
dice.append(random.randint(1,6))
plt.hist(dice)
plt.show()
- 랜덤한 숫자 히스토그램으로 표현 : dice 리스트에 저장된 값의 빈도에 따라 막대의 높이가 다름
기온데이터 히스토그램으로 표현
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()
- 구간을 100개로 나눠 히스토그램으로 표현
import csv
import matplotlib.pyplot as plt
f = open('seoul.csv')
data = csv.reader(f)
next(data)
aug = []
for row in data:
if row[-1] != '' and row[0].split('-')[1] == '08':
aug.append(float(row[-1]))
plt.hist(aug, bins=100, color='r')
plt.show()
- 8월의 데이터만 히스토그램으로 표현
import csv
import matplotlib.pyplot as plt
f = open('seoul.csv')
data = csv.reader(f)
next(data)
aug = []
jan = []
for row in data:
m = row[0].split('-')[1]
if row[-1] != '' :
if m == '08':
aug.append(float(row[-1]))
if m == '01':
jan.append(float(row[-1]))
plt.hist(aug, bins=100, color='r')
plt.hist(jan, bins=100, color='b')
plt.show()
- 1월, 8월 최고 기온값을 히스토그램으로 나타냄
2. 상자그림으로 나타내기
- boxplot() : 자료에서 얻어낸 최댓값, 최솟값, 상위 ¼, 2/4(중앙), 3/4에 위치한 값을 보여주는 그래프
import random
import matplotlib.pyplot as plt
import numpy as np
r = []
for i in range(100):
r.append(random.randint(1,1000))
plt.boxplot(r)
plt.show()
result = np.array(r)
print("¼: "+str(np.percentile(result,25)))
print("2/4: "+str(np.percentile(result,50)))
print("¾: "+str(np.percentile(result,75)))
기온데이터 박스플롯으로 표현
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.boxplot(result)
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:
m = row[0].split('-')[1]
if row[-1] != '' :
if m == '08':
aug.append(float(row[-1]))
if m == '01':
jan.append(float(row[-1]))
plt.boxplot(aug)
plt.boxplot(jan)
plt.show()
- 동그라미 : 이상치(ideal) - 다른 수치에 비해 너무 크거나 작은값
plt.boxplot([jan, aug])
- 최고 기온 데이터를 월별로 구분하기
- 데이터를 월별로 분류해 저장
- 월별 데이터를 상자 그림으로 그림
import csv
import matplotlib.pyplot as plt
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])) #month 인덱스는 0부터 시작하므로 -1해줌
plt.boxplot(month)
plt.show()
- 빈 리스트 12개 만듦
- 월별 데이터를 정수로 변환한 0~11까지의 인덱스 값에 월별 데이터 저장
8월 일별 기온 데이터 상자 그림으로 표현
import csv
import matplotlib.pyplot as plt
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()
plt.style.use('ggplot')
: 그래프 스타일 지정 > 그래프 배경이 회색 격자무늬로 변경됨. 2/4값을 표현하는 선의 색상도 변경되었음- showfliers=False : 이상치 값 표현 안되게 함.
Author And Source
이 문제에 관하여([데이터분석]2. 데이터 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjaa9292/데이터분석2.-데이터-시각화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)