Matplot Lib을 이용한 시각화¶
파이썬으로 데이터 분석한 결과를 시각화 하는데 많이 사용한다
파이썬에서 2D형태의 그래프 이미지등을 그릴때 사용한 것으로 실제 과학컴퓨팅 분야나
인공지능 분야에서 많이 사용한다
다양한 모듈이 있는데 그중에서 가장 많이 사용하는 서브모듈이 pyplot이다.
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import DataFrame
import seaborn as sns
1. 산점도 그래프 그리기¶
산점도는 scatter() 함수를 사용해서 시각화한다.
산점도는 x,y축에 해당하는 데이터의 상관관계를 표시할때 사용하며
점들이 흩어져 있는 분포를 확인할수 있는 그래프
2개의 축을 기준으로 데이터들이 얼마나 퍼져있는지의 여부(분포도, 산점도)를 알수있다.
In [2]:
# s를 넣게되면 점의 크기를 조절할 수 있다.
# c는 컬러를 넣을수 있는 속성이다. range를 넣게되면 cmap을 사용해서
# cmap
plt.scatter([1,2,3,4],[10, 30, 20, 40], s=[100, 200, 350, 500], c=['yellow', 'brown','pink','red'])
plt.colorbar()
plt.show()
In [3]:
# c = range를 넣게되면 cmap을 사용해서 구현이 가능하다
# cmap은 좀더 알아보기.
plt.scatter([1,2,3,4],[10, 30, 20, 40], s=[100, 200, 350, 500], c=range(4), cmap='jet')
plt.colorbar()
plt.show()
In [4]:
# 1. 딕셔너리를 이용한 DataGrame 생성하기
np.random.seed(1)
data = {
'a' : np.arange(50), # 0부터 49까지
'c' : np.random.randint(0,50,50), # 0에서 50까지의 숫자를 랜덤으로 넣어줌.
'd' : np.random.randn(50)
}
data
Out[4]:
{'a': array([ 0, 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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]), 'c': array([37, 43, 12, 8, 9, 11, 5, 15, 0, 16, 1, 12, 7, 45, 6, 25, 20, 37, 18, 20, 11, 42, 28, 29, 14, 4, 23, 23, 41, 49, 30, 32, 22, 13, 41, 9, 7, 22, 1, 0, 17, 8, 24, 13, 47, 42, 8, 30, 7, 3]), 'd': array([-8.91913759e-01, 1.73559653e+00, -6.31108331e-01, -9.07343356e-01, 3.74751973e-01, -4.73382754e-01, -4.54520824e-01, -8.53380627e-02, 1.50318838e+00, 1.16064112e+00, -4.82941397e-01, -1.80662901e+00, -9.15447608e-01, -6.97339847e-02, -8.49954772e-01, 5.06232307e-02, 7.05072381e-01, -1.67994195e+00, 1.99997564e+00, 1.15696327e+00, 1.93117963e-01, -1.55300741e+00, -1.00135380e-02, 6.49165533e-01, 1.55857293e+00, 2.38351806e-01, 1.08086617e-01, 1.01526292e+00, 9.59636776e-01, -1.27303148e-01, 6.98554164e-01, -2.22549508e+00, -1.26822935e+00, 1.39218201e+00, 1.92383191e+00, 9.91091266e-01, 3.80610804e-01, -7.47766359e-01, -1.31767750e+00, 1.33291008e+00, -6.84540250e-01, 1.25598233e+00, 4.96726354e-01, 3.29275803e-01, -1.18990846e-03, -3.07292625e-01, -1.83536999e-01, -5.52975151e-01, -1.55712804e-01, 5.72392274e-01])}
In [5]:
data['b'] = data['a'] + 10*np.random.randn(50)
data['d'] = np.abs(data['d'])*100
data
Out[5]:
{'a': array([ 0, 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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]), 'c': array([37, 43, 12, 8, 9, 11, 5, 15, 0, 16, 1, 12, 7, 45, 6, 25, 20, 37, 18, 20, 11, 42, 28, 29, 14, 4, 23, 23, 41, 49, 30, 32, 22, 13, 41, 9, 7, 22, 1, 0, 17, 8, 24, 13, 47, 42, 8, 30, 7, 3]), 'd': array([8.91913759e+01, 1.73559653e+02, 6.31108331e+01, 9.07343356e+01, 3.74751973e+01, 4.73382754e+01, 4.54520824e+01, 8.53380627e+00, 1.50318838e+02, 1.16064112e+02, 4.82941397e+01, 1.80662901e+02, 9.15447608e+01, 6.97339847e+00, 8.49954772e+01, 5.06232307e+00, 7.05072381e+01, 1.67994195e+02, 1.99997564e+02, 1.15696327e+02, 1.93117963e+01, 1.55300741e+02, 1.00135380e+00, 6.49165533e+01, 1.55857293e+02, 2.38351806e+01, 1.08086617e+01, 1.01526292e+02, 9.59636776e+01, 1.27303148e+01, 6.98554164e+01, 2.22549508e+02, 1.26822935e+02, 1.39218201e+02, 1.92383191e+02, 9.91091266e+01, 3.80610804e+01, 7.47766359e+01, 1.31767750e+02, 1.33291008e+02, 6.84540250e+01, 1.25598233e+02, 4.96726354e+01, 3.29275803e+01, 1.18990846e-01, 3.07292625e+01, 1.83536999e+01, 5.52975151e+01, 1.55712804e+01, 5.72392274e+01]), 'b': array([ 7.59955476, 8.35681993, 12.13892432, -4.38431181, 6.57706672, -6.37451728, 21.78141345, 5.24889432, -9.29088822, 6.55925525, 11.93079609, 23.47796373, 11.50679496, 5.29652081, 6.25947811, 21.1001901 , 0.52918991, 14.95232271, 3.31707767, 19.41552775, 20.26831491, 14.58874005, 18.30683747, 11.32705482, 24.24545422, 15.17623745, 22.97084697, 21.29581171, 18.69244801, 21.25419144, 31.46522589, 22.45867559, 13.64174189, 21.59895033, 28.07554802, 43.8200328 , 43.78838041, 51.99032386, 53.42909317, 34.52268308, 22.22307664, 23.08164766, 31.94934572, 38.99623663, 49.36258367, 57.99784714, 46.94180386, 44.16830715, 44.04287256, 41.87568031])}
In [6]:
# 위 data를 DataFrame으로 만들겠다
# a,b,c,d 는 컬럼으로
# 0,1,2,3,4 인덱스가 지정
DataFrame(data)
Out[6]:
a | c | d | b | |
---|---|---|---|---|
0 | 0 | 37 | 89.191376 | 7.599555 |
1 | 1 | 43 | 173.559653 | 8.356820 |
2 | 2 | 12 | 63.110833 | 12.138924 |
3 | 3 | 8 | 90.734336 | -4.384312 |
4 | 4 | 9 | 37.475197 | 6.577067 |
5 | 5 | 11 | 47.338275 | -6.374517 |
6 | 6 | 5 | 45.452082 | 21.781413 |
7 | 7 | 15 | 8.533806 | 5.248894 |
8 | 8 | 0 | 150.318838 | -9.290888 |
9 | 9 | 16 | 116.064112 | 6.559255 |
10 | 10 | 1 | 48.294140 | 11.930796 |
11 | 11 | 12 | 180.662901 | 23.477964 |
12 | 12 | 7 | 91.544761 | 11.506795 |
13 | 13 | 45 | 6.973398 | 5.296521 |
14 | 14 | 6 | 84.995477 | 6.259478 |
15 | 15 | 25 | 5.062323 | 21.100190 |
16 | 16 | 20 | 70.507238 | 0.529190 |
17 | 17 | 37 | 167.994195 | 14.952323 |
18 | 18 | 18 | 199.997564 | 3.317078 |
19 | 19 | 20 | 115.696327 | 19.415528 |
20 | 20 | 11 | 19.311796 | 20.268315 |
21 | 21 | 42 | 155.300741 | 14.588740 |
22 | 22 | 28 | 1.001354 | 18.306837 |
23 | 23 | 29 | 64.916553 | 11.327055 |
24 | 24 | 14 | 155.857293 | 24.245454 |
25 | 25 | 4 | 23.835181 | 15.176237 |
26 | 26 | 23 | 10.808662 | 22.970847 |
27 | 27 | 23 | 101.526292 | 21.295812 |
28 | 28 | 41 | 95.963678 | 18.692448 |
29 | 29 | 49 | 12.730315 | 21.254191 |
30 | 30 | 30 | 69.855416 | 31.465226 |
31 | 31 | 32 | 222.549508 | 22.458676 |
32 | 32 | 22 | 126.822935 | 13.641742 |
33 | 33 | 13 | 139.218201 | 21.598950 |
34 | 34 | 41 | 192.383191 | 28.075548 |
35 | 35 | 9 | 99.109127 | 43.820033 |
36 | 36 | 7 | 38.061080 | 43.788380 |
37 | 37 | 22 | 74.776636 | 51.990324 |
38 | 38 | 1 | 131.767750 | 53.429093 |
39 | 39 | 0 | 133.291008 | 34.522683 |
40 | 40 | 17 | 68.454025 | 22.223077 |
41 | 41 | 8 | 125.598233 | 23.081648 |
42 | 42 | 24 | 49.672635 | 31.949346 |
43 | 43 | 13 | 32.927580 | 38.996237 |
44 | 44 | 47 | 0.118991 | 49.362584 |
45 | 45 | 42 | 30.729263 | 57.997847 |
46 | 46 | 8 | 18.353700 | 46.941804 |
47 | 47 | 30 | 55.297515 | 44.168307 |
48 | 48 | 7 | 15.571280 | 44.042873 |
49 | 49 | 3 | 57.239227 | 41.875680 |
plt.scatter(
x,
y,
s=None,
c=None,
marker=None,
cmap=None,
norm=None,
vmin=None,
vmax=None,
alpha=None,
linewidths=None,
verts=<deprecated parameter>,
edgecolors=None,
*,
plotnonfinite=False,
data=None,
**kwargs,
)
In [7]:
plt.scatter(x='a', y='b') # 데이터를 안 넣을 경우 .
Out[7]:
<matplotlib.collections.PathCollection at 0x224be986670>
In [8]:
plt.scatter(x='a', y='b', data=data)
plt.show()
In [9]:
plt.scatter(x='a', y='b', data=data, c='c', cmap='RdPu') # 레드 퍼플
plt.show()
In [10]:
plt.scatter(x='a', y='b', data=data, c='c', cmap='jet')
plt.show()
In [11]:
plt.scatter(x='a', y='b', data=data, c='c',s = 'd', cmap='jet') # s = Strong, c=Color
plt.show()
2. Subplot으로 plot(), scatter(), bar() 시각화를 동시에 이용하기¶
Subplot : 하나의 영역을 쪼개어서 여러개의 그래프를 동시에 보여주는 기능
In [12]:
names = ['group_a','group_b','group_c'] # X값으로 사용
values = [1,10,100] # Y값으로 사용
plt.figure(1, figsize=(9,3))
plt.subplot(131) # 131 3개로 쪼겜. 자세히 알아보기.
plt.bar(names,values) # 바차트
plt.subplot(332)
plt.scatter(names,values) # 산포도
plt.subplot(233)
plt.plot(names,values) # 줄
plt.show()
3. 히스토그램 그리기¶
hist()함수를 사용한다
히스토그램은 자료의 분포상태를 직사각형의 막대그래프로 나타낸 것
데이터의 빈도를 알아보는 것으로 빈도에 따라서 그래프의 높이가 결정된다.
hist()는 막대그래프의 파형을 가진다.
plt.hist(
x,
bins=None,
range=None,
density=False,
weights=None,
cumulative=False,
bottom=None,
histtype='bar',
align='mid',
orientation='vertical',
rwidth=None,
log=False,
color=None,
label=None,
stacked=False,
*,
data=None,
**kwargs,
)
In [13]:
plt.hist([1,1,2,3,4,5,6,6,7,8,10]) # 1과 6이 2개씩 들어가있다.
plt.show()
In [14]:
dice = []
for i in range(5):
dice.append(np.random.randint(1,7))
print(dice)
[5, 5, 4, 4, 4]
In [15]:
# histogram bins 사용법
dice = []
for i in range(5):
dice.append(np.random.randint(1,7))
plt.hist(x=dice) # x데이터는 하나만 넣는다.
plt.show()
In [16]:
dice = []
for i in range(5):
dice.append(np.random.randint(1,7))
plt.hist(x=dice, bins=50) # bins 는 해당 막대의 영역을 얼마나 채우는지 결정해주는 변수이다.
plt.grid()
plt.show()
In [17]:
dice = []
for i in range(100000):
dice.append(np.random.randint(1,7))
plt.hist(x=dice, bins=50) # bins 는 해당 막대의 영역을 얼마나 채우는지 결정해주는 변수이다.
plt.grid()
plt.show()
4. 그림문자 표현하기¶
In [18]:
mu, sigma = 100,15
x = mu+sigma * np.random.randn(10000)
len(x)
Out[18]:
10000
In [19]:
# 히스토그램으로 시각화하면 지저분한 값이 같이 넘어온다...
plt.hist(x, bins=100)
plt.grid()
plt.xlabel('x')
plt.ylabel('y')
plt.show()
In [20]:
# density - 상대적인 빈도값으로 보고 싶을때 지정하는 속성이다.
plt.hist(x, bins=50,
density=1,
facecolor = 'g', # green으로 색을 변경..
alpha = 0.25 # 투명도를 조정하는 값이다. 0에서 1사이의 값을 넣는다.
)
plt.grid()
plt.title('IQ')
plt.ylabel('y')
plt.text(60,0.025,r'$mu = 100, \sigma = 15$') #
plt.show()
In [21]:
# density - 상대적인 빈도값으로 보고 싶을때 지정하는 속성이다.
plt.hist(x, bins=50,
density=1,
facecolor = 'g', # green으로 색을 변경..
alpha = 0.25 # 투명도를 조정하는 값이다. 0에서 1사이의 값을 넣는다.
)
plt.grid() # 그리드 그려줌
plt.title('IQ') # 타이틀
plt.ylabel('y') # y축
plt.text(60,0.025,r'$mu = 100, \sigma = 15$') # 텍스트 입력
plt.axis([40, 160, 0,0.028]) # 데이터를 자른다. ([옆,위 아래])
plt.show()
'workSpace > PYTHON' 카테고리의 다른 글
[ML] SVM을 활용한 데이터 분석 (0) | 2021.01.18 |
---|---|
[seaborn] seaborn을 이용한 시각화 (0) | 2021.01.18 |
[Pandas][Numpy][seaborn] 2019년 서울 특별시 아파트 실거래 분석 및 표 만들기 (0) | 2021.01.18 |
[Pandas][Numpy][seaborn] 2019년 서울 특별시 주유소 판매가격 분석 및 표 만들기 (0) | 2021.01.18 |
[ML] SVM - 지도학습 분류모델 실습 (0) | 2021.01.18 |