1. 붓꽃 데이터 임포트

from sklearn.datasets import load_iris       # 붓꽃 데이터를 불러왔습니다
iris = load_iris()                            # 부르기 쉽게 명명

features = iris.data.T   # 속성 데이터를 가져오기
features                 # 4개의 속성데이터가 있다

출력>
Output exceeds the size limit. Open the full output data in a text editorarray([[5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8,
        4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5. ,
        5. , 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5. , 5.5, 4.9, 4.4,
        5.1, 5. , 4.5, 4.4, 5. , 5.1, 4.8, 5.1, 4.6, 5.3, 5. , 7. , 6.4,
        6.9, 5.5, 6.5, 5.7, 6.3, 4.9, 6.6, 5.2, 5. , 5.9, 6. , 6.1, 5.6,
        6.7, 5.6, 5.8, 6.2, 5.6, 5.9, 6.1, 6.3, 6.1, 6.4, 6.6, 6.8, 6.7,
        6. , 5.7, 5.5, 5.5, 5.8, 6. , 5.4, 6. , 6.7, 6.3, 5.6, 5.5, 5.5,
        6.1, 5.8, 5. , 5.6, 5.7, 5.7, 6.2, 5.1, 5.7, 6.3, 5.8, 7.1, 6.3,
        6.5, 7.6, 4.9, 7.3, 6.7, 7.2, 6.5, 6.4, 6.8, 5.7, 5.8, 6.4, 6.5,
        7.7, 7.7, 6. , 6.9, 5.6, 7.7, 6.3, 6.7, 7.2, 6.2, 6.1, 6.4, 7.2,
        7.4, 7.9, 6.4, 6.3, 6.1, 7.7, 6.3, 6.4, 6. , 6.9, 6.7, 6.9, 5.8,
        6.8, 6.7, 6.7, 6.3, 6.5, 6.2, 5.9],
       [3.5, 3. , 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3. ,
        3. , 4. , 4.4, 3.9, 3.5, 3.8, 3.8, 3.4, 3.7, 3.6, 3.3, 3.4, 3. ,
        3.4, 3.5, 3.4, 3.2, 3.1, 3.4, 4.1, 4.2, 3.1, 3.2, 3.5, 3.6, 3. ,
        3.4, 3.5, 2.3, 3.2, 3.5, 3.8, 3. , 3.8, 3.2, 3.7, 3.3, 3.2, 3.2,
        3.1, 2.3, 2.8, 2.8, 3.3, 2.4, 2.9, 2.7, 2. , 3. , 2.2, 2.9, 2.9,
        3.1, 3. , 2.7, 2.2, 2.5, 3.2, 2.8, 2.5, 2.8, 2.9, 3. , 2.8, 3. ,
        2.9, 2.6, 2.4, 2.4, 2.7, 2.7, 3. , 3.4, 3.1, 2.3, 3. , 2.5, 2.6,
        3. , 2.6, 2.3, 2.7, 3. , 2.9, 2.9, 2.5, 2.8, 3.3, 2.7, 3. , 2.9,
        3. , 3. , 2.5, 2.9, 2.5, 3.6, 3.2, 2.7, 3. , 2.5, 2.8, 3.2, 3. ,
        3.8, 2.6, 2.2, 3.2, 2.8, 2.8, 2.7, 3.3, 3.2, 2.8, 3. , 2.8, 3. ,
        2.8, 3.8, 2.8, 2.8, 2.6, 3. , 3.4, 3.1, 3. , 3.1, 3.1, 3.1, 2.7,
        3.2, 3.3, 3. , 2.5, 3. , 3.4, 3. ],
       [1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4,
...
        1.4, 1.2, 1. , 1.3, 1.2, 1.3, 1.3, 1.1, 1.3, 2.5, 1.9, 2.1, 1.8,
        2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2. , 1.9, 2.1, 2. , 2.4, 2.3, 1.8,
        2.2, 2.3, 1.5, 2.3, 2. , 2. , 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6,
        1.9, 2. , 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9,
        2.3, 2.5, 2.3, 1.9, 2. , 2.3, 1.8]])

2. 데이터로 그래프 그리기(1)

#iris.feature_names[0]                   # 이 특성이 어떤 데이터인지 이름 알고싶을 때
# iris.target                             # 라벨(label =  target) 을 보면 종류가 몇개로 나누어 졌나 확인가능, 0,1,2로 나왔으니 3가지 꽃종류에 대한 라벨이 있음을 알 수 있다/

plt.scatter(features[0], features[1], c = iris.target, s=features[3]*100, alpha = 0.2, cmap = 'viridis')   # 첫번째 특성 데이터와 두번째 특성 데이터에 대한 점도, 컬러는 라벨에 따라 달라지게 만들었다., alpha를 통해 라벨마다 특정 중심을 알 수 있다.
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
iris.target_names[0]                        # 타켓(라벨)의 이름 알고싶을 때
iris.feature_names[3]                       # 특성 이름이 알고 싶을 때

# 데이터가 겹치면 겹칠 수록 노이즈(오차)가 많아지고 분리가 라벨마다 잘될수록 분리가 잘된 데이터이다.

3. 데이터로 그래프 그리기(2)

 
# 다른 feature로도 만들어보자

plt.scatter(features[2], features[3], c = iris.target, s=features[3]*100, alpha = 0.2, cmap = 'viridis')   
plt.xlabel(iris.feature_names[2])
plt.ylabel(iris.feature_names[3])
iris.target_names[0]                       
iris.feature_names[3]

1. 랜덤값을 만드는 방법들

(1)

 
rng = np.random.RandomState(0)
x = rng.randn(100)      # rng는 random number generation를 뜻하고 rand는 random/  rand뒤에 n을 붙여 randn로 만들면 값이 0을 기준으로 표준편차가 1인 값을 부포해서 값을 뽑아냄 즉 -1~1까지 0을 기준으로 만든다
                   #x = rng.randint(10)                              0~9 사이 임의값 1개 뽑음
                   #x = rng.randint(1,10)                            1에서 9사이 임의의 값 1개
                   #x = np.random.randint(1,7)                     np 해주면 돌릴때마다 랜덤값
y = rng.rand(100)
x

 

#처리한 것들도 궁금하면 써볼 것

(2)

 
or i in [12,3,4,5,6,7,8,9,10]:
  print(np.random.randint(1,7))             # 이제 이건 돌릴 때마다 랜덤값이 나옴

2. 표 그리기

  # rand (0~1)의 값을 지정된 숫자 만큼 임의의 값을 만들어 낸다.
  # randn (0)을 기준으로 편차만큼 떨어진 임의값을 지정된 숫자만큼 만들어 낸다.
  # randint 지정된 범위안의 정수 1개를 만들어 낸다.
plt.style.use('classic')        # 스타일 변경


rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
sizes = rng.rand(100) * 1000                  # 사이즈 일단 옵션으로 만들자,사이즈는 마이너스 값이 있을수가 없음
color = rng.rand(100)                         # color 라는 옵션 100개 랜덤값 넣음 , 근데 컬러가 좀 촌시러우면 cmap을 구글링해봐(컬러맵) 그 cmap에서 하나 정해서 표 옵션에 이름넣으면 예쁜 컬러로 줄 수 있다.

plt.scatter(x, y, s = sizes, alpha=0.3, c = color, cmap='viridis')               # s = size,  c =color

산점도?

-점을 찍어서 얼마나 데이터가 분산되는지 보는 그래프

1. 예시용 표 만들기

x = np.linspace(0,10,30)          # 점개수를 줄이기 위해 간격을 조정, 0에서 10까지 30개 값
y= np.sin(x)

plt.plot(x, y,'o', color='black' )    #marker로 o를 집어넣으면 동그라미로 산점도가 나옵니다.
 

2. 예시용 표 만들기(2)

 
rng = np.random.RandomState(0)          #넘파이로 랜덤값 찍어보자 여기 괄호에 준 값을 seed값을 준다고한다
#rng.rand(5)                             # 5개의 결과를 만들어달라
plt.plot(rng.rand(5),rng.rand(5), 'o')                  # x,y 좌표에 랜덤으로 5개씩 값을 주었다

seed?

랜덤의 씨앗값을 준다는 것이다(다른데서 0주면 똑같은 랜덤값나옴): 이런건 주로 테스트용으로 사용할 때, 시범용 즉 공부용으로 사용할 때 항상 일정한 랜덤값아 필요하기 때문에 seed를 사용

3. (2)번처럼 랜덤표를 다른 방식으로 표현

 
rng = np.random.RandomState(0)
for marker in ['o',',',',','x','+', 'v', '^','<','>','s','d','p']: 
  plt.plot(rng.rand(5), rng.rand(5), marker, label='maker = {0}'.format(marker))  
  plt.legend(numpoints=1)                               # 레전드에 나오는 포인트 갯수 1개만
  plt.xlim(0, 1.8)

o = 동그라미 마크

, = 점 마크

x = x마크

+ = 십자마크

v = 삼각(아래방향)

^ = 삼각(윗방향)

< = 삼각(왼방향)

> = 삼각(우방향)

s =사각

d =다이아

p = 오각형

4.점에서 선 연결하여 그래프 만들기

plt.plot(x,y, '--ok')                            # 마커에 대시 붙이기 그 뒤에 컬러도 붙이기

plt.plot(x,y,'-p', color='grey',            # 디테일한 지정을 해보자
          markersize = 15,                  # 마커의 사이즈
          markerfacecolor = 'white',        # 미커의 색상
         linewidth = 4,                     # 선 두께
         markeredgecolor = 'red',           # 마커의 테두리 색상
          markeredgewidth = 2               # 마커 테두리 두께
)

 

1. label

plt.plot(x, np.sin(x))                            
plt.title('A Sine Curve')                            # 표 전체에 대한 제목label을 붙여보았습니다
plt.xlabel('x')                                     # x 축에 대한 label
plt.ylabel('sin(x)')                                # y 축에 대한 label

2. 선에 대한 각주 표시

plt.plot(x,np.sin(x), '-g', label='sin(x)')       
       
plt.plot(x, np.cos(x), ':b', label = 'cos(x)')       # sin, cos 그래프에 달아놓은 라벨은 당장에 보이지 않지만 아래 legend 명령으로 각주만들 때 쓰임

plt.axis('equal')                                       # 표 x,y축의 비율 균일하게
                             
plt.legend()                                           # 위에서 지정한 선에 대한 라벨을 토대로 각주 만든다

plt.xlabel('x')                                          # x축에 대한 라벨
plt.ylabel('y')                                          # y축에 대한 라벨 
plt.title('Sin and Cos')                              # 표 전체에 대한 라벨

 

△예시용 그래프

 

위의 그래프를 잘보면 x축과 y축의 비율이 서로 다름을 알 수 있다.

즉 x,y축이 기준이 달라 실제 그래프와 모양이 다르다는 것이다.

(우리가 조건을 안걸면 그래프 무조건 꽉채우려고 해서 그럼)

1. 직접 x,y축의 한계 지정해주기

plt.plot(x, np.sin(x))    

plt.xlim(-1, 11)                    # x 축의 리밋 지정 -1~11까지
plt.ylim(-1.5, 1.5)                 # y 축의 리밋 지정 -1.5~1.5까지
plt.plot(x, np.sin(x))
plt.xlim(10, 0)                       # x축을 반전시켰다, 좌우반전
plt.ylim(1.2, -1.2)                   # y축을 반전시켰다, 상하반전

2. 다른 방식

plt.plot(x, np.sin(x))          # 또 다른 표현 방법
plt.axis([-1,11,-1.5,1.5])                   # x,y에 해당되는 축을 리스트 안에 표현

3. 꽉채워서 그리기

plt.plot(x,np.sin(x))
plt.axis('tight')     # 그래프 꽉채워서 출력, 기본값이긴 함, 그러나 x축과 y축의 비례관계가 지금 다르니 진짜 그래프 모양과 좀 다름

4. x,y축 비율 균일하게 해서 그래프 만들기

plt.plot(x, np.sin(x))
plt.axis('equal')                        # x축과 y축의 비율 동일하게 만들어줌. 이게 진짜 그래프의 크기임

 

1. 그래프의 선 색상을 지정하는 여러방법

(아래 예시에서 x의 값 증감시키는 이유는 그래프에서 선이 겹치지 않게 하기 위해서)

plt.plot(x,np.sin(x), color = 'blue')                          # 색상 파랑으로 지정 
plt.plot(x,np.sin(x-1), color = 'g')                           #약어 사용, g = green     
plt.plot(x,np.sin(x-2), color ='0.75')                        # 0~1사이에서 0이면 검정 1이면 흰색  
plt.plot(x,np.sin(x-3), color = '#FFDD44')                # RGB 의 각각의 자리를 16진수 두자리로 표현
plt.plot(x,np.sin(x-4), color = (1.0,0.2,0.3))              # RGB의 각각의 자리를 0-1의 정도로 표현
plt.plot(x,np.sin(x-5), color = 'chartreuse')             # 색상 이름 직접 지정

-파랑과 검정은 둘다 b로 시작해서 헷갈리는데, 사실 검정의 약어는 k라서 괜찮다.

rgb = 모니터 출력에 주로 쓰는 빛의 삼원색(레드/그린/블루)

cmyk = 인쇄 출력에 주로 쓰는 색의 삼원색 (시안/마젠타/옐로우/블랙)

어떤 색상의 약어는 rgb를 어떤 색상의 약어는 cmyk를 쓴다.

2. 선의 종류

plt.plot(x,x+0, linestyle = 'solid')                   
plt.plot(x,x+1, linestyle = 'dashed')
plt.plot(x,x+2, linestyle = 'dashdot')
plt.plot(x,x+3, linestyle = 'dotted')
 

기호로 나타내면 이렇다▽

plt.plot(x,x+4, linestyle = '-')
plt.plot(x,x+5, linestyle = '--')
plt.plot(x,x+6, linestyle = '-.')
plt.plot(x,x+7, linestyle = ':')
 

3. 선 스타일+색상 함께 쓰기

 
plt.plot(x,x+0, '-g')                 #solid green
plt.plot(x,x+1, '--c')                # dashed cyan
plt.plot(x,x+2, '-.k')                # dashdot black
plt.plot(x,x+3, ':r')                 # dotted red

+ Recent posts