본문 바로가기

package - seaboarn 본문

시각화 및 BI/시각화 기본과 시각화 패키지

package - seaboarn

jaegomhoji 2022. 2. 23. 21:40

++++++++++++++++++++++++++++++++++++++++++++ 문자 대응 코드 ++ 

import matplotlib.pyplot as plt
from matplotlib import rc # 한글깨짐 및 마이너스 기호 표시하기 위해 

import seaborn as sns

plt.rcParams["axes.unicode_minus"] = False
rc("font",family="Arial Unicode MS")

get_ipython().run_line_magic("matplotlib", "inline")

++++++++++++++++++++++++++++++++++++++++++++ 문자 대응 코드 ++ 

 

** seaborn은 import 하는 것만으로도 matplotlib에 효과를 준다 

 

 

** 기본 실습 ( 여러개를 그릴 때도 x,y,x1,y1,x2,y2 ... 이런식으로 지정 ) 

 

** 박스 플롯 

sns.boxplot(x=data["column_name"])

sns.boxplot(x="column1", y="dependent variable", data=data,

hue = "smoker",

palette="Set3", # 많은 색상표에서 원하는 색을 검색해볼 것

)

 

(좌) : 전체 요금에 대한 상자수염 그림                                             (우) : x축(요일)별 y축 요금에 대한 상자수염 그림 

왜 요일이 4개 밖에 안보이지? > 바로 데이터의 범주형 변수 확인 

 

좌) hue = 구분할 (명목x) 범주형 변수를 설정한 후의 박스 플롯         우) 스웜프 플롯 

 

 

** 스웜 플롯 

 

sns.swarmplot(x="col1", y="dep vari", data=data,   # 박스 플롯에 점을 찍어 iqr구간의 분포도를 알 수 있다

color=".25",

)

 

** 박스 플롯에 데이터 분포도 표시

* 박스 플롯과 스웜 플롯을 같이 그린다 

 

** 회귀선 

sns.lmplot(x="",y="",data=data,

hue= "smoker",

size=7,

ci=None,  # 넓게 펴진 영역을 꺼버려라 

robust = True,  # 로버스트한 기준을 적용하여 시각화 한다. 이상치 있을때 바로 직관적으로 확인하기 좋음

order = n, # 데이터 셋의 차수에 맞게 적용하는 옵션 

scatter_kws={"s" : 80} # 데이터 포인트의 크기 조절 옵션 

)

 

* size 옵션이 height 옵션으로 바뀜, figsize=(,)과 동일한 역할 

** hue = "시각화 기준 변수"로 그래프의 포인트들을 구분한 모습 

 

** 히트맵 

sns.heatmap(data,annot=True, fmt="d",cmap="") # annot는 annotation으로 히트맵 안의 값 , 컬러맵으로 컬러 코드 적용 가능

^%^ 주의 : 히트맵 그릴때 데이터는 피벗 테이블형으로 넣어준다! 

 

annot : 히트맵에 수치를 표현할 것인가?

fmt : format, "f" or "d" 실수형 정수형 옵션 

 

좌 <-> 우)는 annot 옵션 유무에 대한 차이  

 

https://hleecaster.com/python-seaborn-color/

컬러 브루어 색상코드, 위의 블로그에 컬러셋 이나 팔레트 설명도 잘 나와있다. 

 

** 페어플롯 

sns.pairplot(data, hue="variable") # 변수 별 상관관계를 표시할 수 있음 , hue 옵션으로 변수별로 색 구분 가능, x와 y 다수 지정 가능 

plt.show()

 

> x_vars와 y_vars= ["var1","var2"..]로 원하는 변수들의 페어플롯 출력 

 

** 부가 옵션

sns.set_style("white") # 배경 색 (스타일) 

sns.despine(offset=10)  = 오프셋 옵션은 눈금 단위와 그림간의 여백 

 

** 시각화 작업에서 유의할 점 , anscombe's quartet , 안스콤비의 4중주 

> 안스콤비의 4중주라고 검색해도 결과가 많이 없어서 대충 번역하면,

> 거의 동일한 기술 통계 정보(descriptive statistics)를 가지고 있지만, 시각화 했을 경우 굉장히 다른 분포가 보이는 4개의 데이터 셋을 말한다. 

 

> 4개의 데이터 셋이 독립/종속 변수의 평균과 분산, x와 Y의 상관계수, 선형회귀선(함수), 결정계수 값들이 매우 엄청 유사한 경우. 

 

> 각 데이터 셋은 11개의 x,y 값의 점으로 구성되어 있다.

> 1973년 프랜시스 안스콤비라는 통계학자가 등장시킨 데이터 셋.

> 수치적 계산은 정확히지만, 그래프는 굉장히 러프하다....라고 말하기 위해서라고.

> 눈으로 속지 말자는 뜻인것 같다. 

 

여담으로 이 사람이 어떻게 데이터 셋을 만들었는지는 알려져 있지 않은데, 발표 이후 이 자료를 토대로 만들어 보기도 한다고 한다.

https://en.wikipedia.org/wiki/Anscombe%27s_quartet

실제 데이터 셋을 확인해보니 index, level, x,y로  범주별로 11개의 데이터로 이루어져 있고 ( 일치 ).  마지막 값이 위에 밝혀진 값과 같다 

 

 

* ci, scatter_kws={"s"=50} , order, robust 등 여러 메쏘드를 건드려본다. 

 

 

> robust 하게 그래프를 그려서 이상치의 영향을 조금 줄인 모습 

 

* 마지막 범주에서는 시각화가 제대로 안되었는데, 그 이유를 좀 찾아봐야 할 것 같다. 

Comments