핀테크특화 데이터/AI 엔지니어 핀테커스 6주차(23/10/4 수)

...·2023년 10월 13일
0

양정은T

목록 보기
4/10

요약 : 시각화, 난수만들기

Data Visualization - Matplotlib

  • 지난번 수업에 이어서 진행(4주차 day1(23/9/18))
  • pycharm에서 했었음
    -기본 그래프 설정, 그리드 설정, RGB색 설정, ticks설정, 점그래프, 추세선, sizearray, colorarray

지난수업 복습

  • 한 코드에 다 녹여내본 것

    -text alignment : horizontal alignment(center, left(세로선 오른쪽에 붙음), right(세로선 왼쪽에 붙음)), vertical alignment(center, top(글자 위에 선), bottom(글자 밑에 선))
    -축 범위 설정
    방법1 : ax1.set_xticks([0, 10, 50, 100])
    방법2 : xticks = [i for i in range(100)] \n ax.set_xticks(xticks)
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize = (3, 3), facecolor = 'linen')
ax1 = fig.add_subplot() #fig가 가진 method
ax1.set_title("Title of a Ax", fontsize = 13, fontfamily = 'monospace')
ax1.set_xlabel("X label", fontsize = 10, color = 'darkblue', alpha = 0.7)
ax1.set_ylabel("Y label, Data1", fontsize = 10, color = 'darkblue', alpha = 0.7)
ax1.tick_params(axis = 'x', labelsize=7, length = 5,  width = 1, rotation = 30,
                bottom = False, labelbottom = False, top = True, labeltop = True)
ax1.grid()
ax1.text(x = 40, y = 40, va = 'center', ha = 'center', s = 'Hello', fontsize = 15)

ax2=ax1.twinx()
ax2.set_ylabel("Data2", fontsize = 10, color = 'darkblue', alpha = 0.7)
ax1.set_xlim([0, 100])
ax1.set_xticks([0, 10, 50, 100])
ax1.set_ylim([0, 100])
ax2.set_ylim([0, 0.1])
fig.tight_layout() #그래프 잘리는 경우 해결법
plt.show()

matplotlib 새 진도

  • scatter그래프와 테두리 설정
import matplotlib.pyplot as plt
fig = plt.figure(figsize = (3, 3))
ax = fig.add_subplot()
ax.scatter(0, 0, s = 10000, facecolor = 'red', edgecolor = 'b', linewidth = 5)
  • np.random.normal로 난수데이터 만들어서 scatter 그래프 그리기

    -facecolor = 'None'으로 설정하면 동그라미 채울 색이 없는거라서 뒤에가 다 비침
n_data = 100
x_data = np.random.normal(0, 1, (n_data, ))
y_data = np.random.normal(0, 1, (n_data, ))
fig, ax = plt.subplots(figsize = (5, 5))
ax.scatter(x_data, y_data, s = 300, facecolor = 'White',
edgecolor = 'tab:blue', linewidth = 2, alpha = 0.5)
  • np.arange와 np.random.normal로 데이터 만들어서 그래프 그리기

-np.random.normal(loc, scale, size)
-loc는 정규분포의 평균(μ), scale은 정규분포의 표준편차(σ), size는 정규분포에서 추출할 수의 규격
-(n_data, )로 하나, n_data로 하나 결과 똑같음. 근데 행렬데이터 다루는 경우가 많기 때문에 그냥 기본 형태 이대로!!!!!!
-스칼라 () -> 벡터 (a, ) -> 매트릭스 (a,b) shape 뽑으면 이렇게 도출됨
-np.arange(시작, 끝, 간격(step)), 끝+1해줘야 끝 값이 나옴
-pad는 여백 설정!

import matplotlib.pyplot as plt
import numpy as np
n_dataa = 100
s_idx = 30
x_data = np.arange(s_idx, s_idx + n_data)
y_data = np.random.normal(0, 1, (n_data, ))
fig, ax = plt.subplots(figsize = (10, 5))
ax.plot(x_data, y_data)

fig.tight_layout(pad=3)
x_ticks = np.arange(s_idx, s_idx + n_data + 1, 20) 
ax.set_xticks(x_ticks)

ax.tick_params(labelsize = 25)
ax.grid()
plt.show()
  • np.array와 np.random.normal로 데이터 만들어서 그래프 그리기

    -getter : 값 가져옴. y축 양끝값을 가져옴. 머신러닝할때 중요!
    -linspace : 처음, 끝 사이 간격 같게 8개 가져옴
np.random.seed(0)

x_data = np.array([10, 25, 31, 40, 55, 80, 100])
y_data = np.random.normal(0, 1, (7, ))

fig, ax = plt.subplots(figsize = (10, 5))
ax.plot(x_data, y_data)

fig.subplots_adjust(left = 0.2)
ax.tick_params(labelsize = 25)
#---------------------------------------------------------------
ax.set_xticks(x_data)
ylim = ax.get_ylim() 
yticks = np.linspace(ylim[0], ylim[1], 8)
ax.set_yticks(yticks)
ax.grid()
plt.show()

삼각함수 만들기

  • sin함수

    -matplotlib에서 지원하는 latex코드로 파이기호 나타낼 수 있음 r'π\pi'
PI = np.pi
t = np.linspace(-4*PI, 4*PI, 300)
sin = np.sin(t) #삼각함수 sin
linear = 0.1*t

fig, ax = plt.subplots(figsize = (10, 5))
ax.plot(t, sin)
ax.plot(t, linear)

ax.set_ylim([-1.5, 1.5])

x_ticks = np.arange(-4*PI, 4*PI+0.1, PI)
x_ticklabels = [str(i) + r'$\pi$' for i in range(-4, 5)]

ax.set_xticks(x_ticks)
ax.set_xticklabels(x_ticklabels)

ax.tick_params(labelsize = 20)
ax.grid()
  • sin, cos, tan 함수들

    -matplotlib으로 발산하는 그래프(탄젠트) 그리려면 추가로 조작해줘야함. 그러지 않으면 데이터가 연속으로 입력되어서 연결된 세로선 생겨버림. 따라서 아래 식과 같은 트릭을 활용해야함.
    -y[:-1][np.diff(y) < 0] = np.nan
    -y[:-1] : 불리언 인덱싱. 맞으면 True, 틀리면 False 도출. 처리 전후 개수가 같아야함 -> 맨 뒤 값 하나 빼고 4개로 개수 맞춰주는 것
    #불리언인덱싱 뭔지 정리해야함!!!!!
    -np.diff : 점과 점 사이의 차이를 계산
    -nan = not a number
    -결과적으로, y축 값끼리 빼서 음수가 나오면 숫자취급 안하게 함으로써 그래프에 안나오게 하는 것
profile
안녕하세요를레히

0개의 댓글