다시 이음

데이터를 적절하게 시각화 해보자 -1 ( feat. python) - 분포, 상관관계 본문

AI 일별 공부 정리

데이터를 적절하게 시각화 해보자 -1 ( feat. python) - 분포, 상관관계

Taeho(Damon) 2021. 8. 5. 17:12

이번주 프로젝트를 진행을 하면서 데이터 전처리와 분석이 중요하단 걸 알았지만 가장 크게 다가왔던 것은 그동안 신경을 안썼던 시각화에 대한 문제였습니다.

 

데이터를 분석한다 함은 내가 CEO가 아닌 이상 누군가에게 분석한 내용을 발표하거나 전달해야하는 위치에 있다는 걸 잊고 있던 거죠.

 

그러기위해서 필요한 능력은 안정된 톤으로 발표하는 전달력, 단순 명료하나 설득력이 있는 논리전개, 깔끔하고 말하고자하는 바가 잘 들어난 발표자료. 이 세가지가 얼마나 중요한지 알게된 시간이었습니다.

 

그 부족함을 채우기 위해서 다른 동기여러분들이 많이 사용하신 시각화에 대해서 흥미를 느꼈고 한번 정리를 해보고 싶었습니다.

 

1. 분포 ( Distribution )

1) Violin

violin t-plot은 하나 이상의 그룹을 위한 숫자 변수의 분포를 가시화 할 수있다.

Violinplots 는 때때로 데이터의 특징을 숨길 수 있는 boxplots에 비해 더 많은 주의를 기울일 필요 가 있습니다.

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# plot
sns.violinplot(x=df["species"], y=df["sepal_length"])

 

2) Density ( 밀도 plot )

Density plot을 사용하면 하나 또는 여러 그룹에 대한 숫자 변수의 분포를 시각화할 수 있습니다. data-to-viz.com에 명시된 대로 대규모 데이터 세트에 매우 적합합니다. 

파이썬에서 두 가지 접근 방식이 존재합니다.

첫 번째 방법은 커널 밀도 추정치를 계산하는 것이고 두 번째 방법은 고해상도 히스토그램을 만드는 것입니다.

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Make default density plot
sns.kdeplot(df['sepal_width'])

 

3) Histogram

히스토그램을 사용하면 하나 또는 여러 그룹에 대한 숫자 변수의 분포를 시각화할 수 있습니다. 

값은 bin으로 분할되며 각 bin은 막대로 표시됩니다.

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# Plot the histogram thanks to the distplot function
sns.distplot( a=df["sepal_length"], hist=True, kde=False, rug=False )

 

4) Box plot

Box plot은 하나 또는 여러 그룹에 대한 숫자 변수의 분포를 요약 한 것입니다. 중앙값, 사분위수 및 이상값을 빠르게 얻을 수 있지만 데이터 세트 개별 데이터 포인트를 숨길 수도 있습니다.

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

sns.boxplot( x=df["species"], y=df["sepal_length"] )

 

5)Ridgeline chart ( 능선 차트 )

능선차트는 여러 그룹에 대한 숫자 변수의 분포를 요약 한 것입니다. 각 그룹은 밀도 차트로 표시되며 각 밀도 차트는 공간을 보다 효율적으로 사용하기 위해 서로 겹칩니다.

 

 

2. 상관관계 ( Correlation )

1) Scatterplot ( 산포도 )

산점도 2 개 숫자 변수 사이의 관계를 표시한다. 각 데이터 포인트는 원으로 표시됩니다.

Seaborn, Matplotlib및 Plotly을 통해 구현이 가능하다.

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')

# use the function regplot to make a scatterplot
sns.regplot(x=df["sepal_length"], y=df["sepal_width"])

 

 

2) heatmap ( 히트맵 )

히트 맵은 행렬의 각 값은 컬러로 표현되는 데이터의 그래픽 표현이다.

히트맵을 통해 시각화 할 때 확연하게 구분이 되는 시각화를 위해서는 데이터를 정규화 할 필요가 있다.

히트맵은 그룹화(클러스터화)와 같이 사용되는 경우가 많아서 참고하는 것이 좋다.

# library
import seaborn as sns
import pandas as pd
import numpy as np

# Create a dataset
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# Default heatmap
p1 = sns.heatmap(df)

 

3)Correlogram ( 상관도 )

correlogram 또는 상관 행렬은 행렬의 숫자 변수들의 각 쌍 사이의 관계를 분석 할 수있다. 

상관 관계는 산점도 로 시각화됩니다 . 대각선은 히스토그램 또는 밀도 플롯 으로 각 변수의 분포를 나타냅니다 .

# library & dataset
import seaborn as sns
df = sns.load_dataset('iris')
import matplotlib.pyplot as plt

# Basic correlogram
sns.pairplot(df)
sns.plt.show()

 

4) Bubble plot

버블 플롯 A는 산점도 원 사이즈 제 숫자 변수의 값에 매핑된다.

즉, scatter plot을 기본으로 수치 변수에 따라 원의 크기를 결정하는 업그레이드 버전.

# libraries
import matplotlib.pyplot as plt
import seaborn as sns
from gapminder import gapminder # data set

# data
data = gapminder.loc[gapminder.year == 2007]

# use the scatterplot function to build the bubble map
sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop", legend=False, sizes=(20, 2000))

# show the graph
plt.show()

 

5) Connected Scatterplot ( 접속 산점도 )

접속 산점도 A는 선 그래프 , 각 데이터 포인트는 원 또는 마커의 임의의 형태로 도시된다. 

종류가 2가지인 데, 1번째는 평범한 선그래프에 도트표시가 되는 것. 2번째는 시간에 따른 두 변수 간의 관계를 표현 가능하다.

# library
import seaborn as sns
import pandas as pd
import numpy as np

# Create a dataset
df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])

# Default heatmap
p1 = sns.heatmap(df)

 

6) 2D Density Chart

2차원 밀도 차트를 사용하면 두 양적 변수의 결합된 분포를 시각화할 수 있습니다.

종류 : Contour plot (등고선 차트), 2D histogram, Hexbin chart(그래프 영역을 육각형으로 분할), marginal plots(다른 차트와의 결합)