파이썬/NIPA 데이터분석 강의

NIPA 데이터분석 첫번째 활용선택 : 04 Matplotlib 1 - line plot 옵션과 scatter bar hist

mcdn 2020. 9. 30. 14:15
반응형

활용선택 4번째 시간 Matplotlib다 

 

1. 넘파이 판다스 같은 라이브러리와 함께 결합해서 손쉽게 그래프로 그릴 수 있는 라이브러리!

 

2. plt.plot함수로 x와 y를 넣으면 그래프 성공 

3. title label을 넣을 수 있다. 

4. 이 object-oriented style 객체 기반 스타일로 그래프 그리기. 

전 슬라이드는 자동적으로 피규를 생성했다면 얜 손수 만들어주는 것. 

subplots의 경우 객체가 두개 필요. 

ax에 x와 y를 앞 슬라이드처럼 그대로 넣어주고 아까랑 다르게 set_이 앞에 필요하다. 

이렇게 두가지 스타일이 있다. 

명시적으로 figure ax 를 만들어주는 얘를 수업에서 쓸 예정 

 

5. figure는 도화지다 axes는 그래프 legend 범례 

6. 저장할 때는 figure에 대해 savefig함수를 써야 한다!!!!!!!! ax가 아니라 

윗줄의 set_dpi는 dot per inch 지정해주는 거. 저장할 때 크기가 커서 출력물에 대해 잘 표현된다. 

7. 다음으론 한 도화지에 여러 개의 그래프를 저장하는 법을 배워보자. 

numpy의 linspace함수는 0부터 4파이까지 100개의 균일한 값을 의미한다. 

subplots(2, 1) 의 경우 세로축으로 두개의 그래프를 넣겠다는 뜻이다. 

그러면 axes에 인덱스가 생긴다. axes[0]의 경우에는 plot(x, np.sin(x))를 넣는다. 

from elice_utils import EliceUtils
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
elice_utils = EliceUtils()

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

# 그래프를 그리는 코드 작성
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("First Plot")
ax.set_xlabel("x")
ax.set_ylabel("y")


# elice에서 그래프를 확인
fig.savefig("first_plot.png")
elice_utils.send_image("first_plot.png")

 

8. 이번에는 plot의 옵션들을 배워보자. 

linestyle은 : 

maker은 * 

color은 #~

9. 다양한 linestyle을 그려보았다. 

순서대로 solid line, dashed line, dashdot line, dotted line 

기호로 써도 되고 / 문자열로 써도 된다 (solid등 )

 10. 색깔의 경우 네가지 방식으로 쓸 수 있다. 

rgb, cmyk까지 쓸 수 있다. 

green 풀네임 쓰기 

0부터 1사이 값을 넣을 수 있다. 이 경우는 회색조 gray scale로 0은 black에 1은 투명에 가깝다 

rgb코드 에 대해서도 적용할 수 있다. 

11. 마커도 굉장히 많은데 대표적 5개만 알아보도록 하자. 

. dot o circle v triangle s square * star 

여기까지 lineplot 옵션들에 대해 배웠다. 

 

12. 위는 거의 같고 

set_xlim set_ylim은 처음값 끝값을 지정할 수 있다. 

지정해주지 않으면 가장 최적화된 값을 찾는다. 

13. 범례

같은 공간에 두개의 선을 그을 거다. 

legend옵션들 볼 수 있다. label = 로 이름을 정할 수 있고 

legend loc 은 위치  upper right / low right / left / center 등 

shadow 은 그림자 

fancybox 모서리가 둥근 박스 

borderpad = 범례 데이터 안의 흰색 크기에 대한 값. 여백이 더 넓어진 것 

from elice_utils import EliceUtils
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

elice_utils = EliceUtils()

#이미 입력되어 있는 코드의 다양한 속성값들을 변경해 봅시다.
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(
    x, x, label='y=x',
    marker='o',
    color='blue',
    linestyle=':'
)
ax.plot(
    x, x**2, label='y=x^2',
    marker='^',
    color='red',
    linestyle='--'
)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend(
    loc='upper left',
    shadow=True,
    fancybox=True,
    borderpad=2
)

fig.savefig("plot.png")
elice_utils.send_image("plot.png")

14. 라인그래프가 아니라 다른 종류 그래프에 대해서도 알아보자. 

첫번째는 scatter 산개된 그래프다. 

plot에 x y그대로 넣게 세번째 인자에 'o'를 집어넣으면 그 마커 값에 맞게 scatter로 자동적으로 생성된다!!

여기서 함수는 plot이기에 기본적으로 선 느낌이다 

markersize 는 원의 크기 

markerfacecolor 원의 안쪽 색깔

markeredgecolor 원 테두리 색깔 

15. 랜덤하게 만들기 위해서 colors sizes를 설정하고

scatter값 안에 c, s로 지정한다

여기는 plot함수가 아니라 scatter함수를 사용해서 옵션 자체가 다르다! 

alpha값은 투명값이다. 

 

 

Scatter 그래프는 산점도라고도 하는데, 이를 사용하게 되면 값 사이의 관계를 파악하기 용이해지고 데이터 셋에서 이상값을 찾기도 용이합니다.

둘 이상의 측정값의 상관 관계를 파악하고 시각화 할 수 있는 훌륭한 그래프 입니다.

산점도를 직접 만들어보고 출력을 확인해보세요.

from elice_utils import EliceUtils
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

elice_utils = EliceUtils()

fig, ax = plt.subplots()
#x = np.arange(10)
x = np.random.randn(50)
y = np.random.randn(50)
colors = np.random.randint(0, 100, 50)
sizes = 500 * np.pi * np.random.rand(50) ** 2

ax.scatter(
    x, y, c = colors, s = sizes
)
fig.savefig("plot.png")
elice_utils.send_image("plot.png")

scatter는 집합 s와 c를 요구한다! 그냥 색 지정하면 xx len()함수가 적용되기 때문 

16. figsize = 12 4 의 경우 도화지가 가로 12 세로 4로 지정해주는 함수 

ax.bar함수에 x, y를 넣는다 

17. 누적해서 그리는 bar plot이다. 

data에는 랜덤으로 뽑은 세 값이 든 집합 세개가 들어있다. 

x_ax에는 0 1 2가 들어있는 집합. i에는 0 1 2가 들어간다 

x축은 x_ax 즉 0 1 2 가 들어가고 data[i]의 경우 x값 y 값 z값이 된다. 

그러면 그림에서 파란색은 x집합을 의미한다. 0 1 2 에 따라 data[0]이 들어가기 때문 

(헷갈리니까 조심 ㅜㅜ) 

이떄 bottom은 data[:i]에 의해 전 데이터가 멈춘 곳이 되는데 없으니까 0에서 시작. 

다음 for문을 돌릴 때는 y 집합이 y 축 값이 된다. = 오렌지

이때 bottom은 그 전 data[:i]인 x집합이 멈춘 곳이 되기 때문에 오렌지 부분은 파란색 맨 위에서 그대로 쌓아 올리게 된다. 

ax.set_xticks는 메인 틱을 0 1 2 로 줄 하나씩 나오게 하는 거고 

ax.set_xtickslabel는 "A" "B" "C"로 이름을 바꿔 놓는 것이다. 

 

18. 도수분포표인 히스토그램을 그린다. 

data= randn 표준정규분포에서 고르게 된다. 

bins = 50 의 경우 막대기가 얼만큼 나오게 하는 것. 

막대기가 50개인 상태 / 5개면 큼직큼직 5개 막대기 

from elice_utils import EliceUtils
elice_utils = EliceUtils()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
fname='./NanumBarunGothic.ttf'
font = fm.FontProperties(fname = fname).get_name()
plt.rcParams["font.family"] = font


x = np.array(["축구", "야구", "농구", "배드민턴", "탁구"])
y = np.array([18, 7, 12, 10, 8])

z = np.random.randn(1000)


fig, axes = plt.subplots(1, 2, figsize=(8, 4))

# Bar 그래프
axes[0].bar(x, y)
# 히스토그램
axes[1].hist(z, bins = 50)


# elice에서 그래프 확인하기
fig.savefig("plot.png")
elice_utils.send_image("plot.png")

오른쪽은 bins = 8로 설정한 히스토그램 

 

반응형