ㅅㅇ

matplotlib_ 02_2 각종 그래프 그리기 _ 산점도 (Scatter Plot) 본문

AI_STUDY/데이터 시각화 Matplotlib Seaborn Pandas

matplotlib_ 02_2 각종 그래프 그리기 _ 산점도 (Scatter Plot)

SO__OS 2022. 6. 16. 01:00
플레이데이터 빅데이터캠프 공부 내용 _ 6/15

Pandas_ 02_2 각종 그래프 그리기 _ 산점도 (Scatter Plot)

1. 산점도(산포도)

- X와 Y축을 가지는 좌표평면상 관측값들을 점을 찍어 표시하는 그래프


- 변수(Feature)간의 상관성(상관관계. ex. x축에 따라 y축이 증가)이나,

  관측값들 간의 군집 분류(ex. 두 개의 그룹으로 나눠, 뭉쳐져 있다.)를 확인할 수 있다.
      - cf) line plot는 값의 위치보다 시간, 순서 등 변화 흐름에 따른 값 보고 싶을 때. 목적이 아예 다르다.

 

- scatter() 메소드 사용

x = np.arange(1,1000,50)
y = np.arange(1,1000,50) 

plt.scatter(x,y)


    - 1번인수 : x값,   2번인수 y값
    - x와 y값들을 모두 매개변수로 전달해야 한다.
    - x,y 의 인수는 스칼라 실수나 리스트 형태의 객체들을 넣는다.
        - 리스트
        - 튜플
        - numpy 배열 (ndarray)
        - 판다스 Series
    - x와 y의 원소의 수는 같아야 한다.

 

2. 산점도 (Scatter Plot) 그리기

 ex1   # 상관성을 보이는 그래프

import numpy as np

x = np.arange(1,1000,50) # 1 ~ 1000-1  +50
y = np.arange(1,1000,50) 

plt.figure(figsize=(7,7))
plt.scatter(x,y) # x와 y 같은 인덱스의 값끼리 묶어서 점을 찍는다.
plt.show()

 

 ex2   # 이러한 그래프는 변수간의 상관성이 없다라고 말할 수 있다.

x = np.arange(1,1000,50) # 1 ~ 1000-1  +50
y2 = np.random.randint(100,300,20)  # 100 ~ 300-1 사이에서 임의의 정수 20개 (난수)를 추출.

plt.scatter(x, y2)
plt.show()

3. 설정

 scatter() 의 매개변수로 

 

1)  marker (마커) : 점의 모양
    - marker란 점의 모양을 말하며 미리정의된 값으로 변경할 수있다.
    - scatter() 메소드의 marker 매개변수를 이용해 변경한다. 

https://matplotlib.org/stable/api/markers_api.html

 

matplotlib.markers — Matplotlib 3.5.2 documentation

matplotlib.markers Functions to handle markers; used by the marker functionality of plot, scatter, and errorbar. All possible markers are defined here: marker symbol description "." point "," pixel "o" circle "v" triangle_down "^" triangle_up "<" triangle_

matplotlib.org

 

2)  s : 마커의 크기
    - 리스트형태(리스트, 튜플)로 지정


3)  alpha  : 하나의 마커에 대한 투명도
    - 0 ~ 1 사이 실수를 지정 (default 1)

 

 

ex1   마커 설정

 

- 중복되어 찍혔기 때문에 점이 30개로 안 보이는데, 이 정도를 투명도 설정으로 알 수 있다.

plt.figure(figsize=(10,10))

plt.scatter(x=np.random.randint(1,5,30), y=np.random.randint(1,5,30), 
            marker = 'v',
            color = 'red',
            s = 100, # maker size
            alpha = 0.1 # 투명도 0~1
           ) 

plt.scatter(x=np.random.randint(5,10,30), y=np.random.randint(5,10,30), marker = '*')

# 군집 분류를 알 수 있는 그래프

 

 

4. 두 컬럼(변수) 간의 상관관계를 계산

두 컬럼(변수) 간의 관계에는 한쪽의 값이 증가할 때 다른 쪽 값은 증가 or 감소 or 관계없음 이 있다.

관계는 즉, 패턴이다. 패턴을 아는 것은 중요하다. -> 패턴이 있어야 예측이 가능하다.( 머신러닝딥러닝, 통계분석 ... )


(1) 정상적 판단 : 산점도(scatter plot)

       - x 와 y 의 관계를 파악 

       - 시각적으로 판단이 어려울 때도 있다.


(2) 정량적 판단 : 상관계수 계산
     - 두 변수의 관계를 넘파이와 판다스 메소드를 통해 구할 수 있다. 

     - 상관관계 : 양의 상관관계(비례. 증감이 같은 것), 음의 상관관계(반비례. 증감이 반대인 것)

 

    - 상관계수 계산법

     (넘파이)   np.corrcoef ( df[컬럼명], df[컬럼명] )   

     (판다스)   df [ [ '컬럼명', '컬럼명' ] ].corr()
            -  음수 : 음의 상관관계, 양수 : 양의 상관관계, 0 : 관계없다.   = > 상관계수 : -1 ~ +1 실수
            -  (+)(-)1에 가까울 수록 관계성이 커진다.    0에 가까울수록(퍼질수록) 관계성이 약해진다.

 

< 보통 상관성(절대적 기준 아님.) >

절대치 1 ~ 0.7 : 아주 강한 상관관계
0.7 ~ 0.3 : 강한 상관관계
 0.3 ~ 0.1 : 약한 상관관계

 0.1 ~ 0 : 상관성(관계)이 없다.

4.1 상관계수 계산 _ numpy

import numpy as np

np.corrcoef(df['경보 발령횟수'], df['관측일수'])

 

#   0.6 : 양의 상관관계(양수)  -  > 강한 관계성을 가진다. 비례.

 

4.2 상관계수 계산 _ pandas

import pandas as pd

df[['경보 발령횟수', '관측일수']].corr()