귀퉁이 서재

DATA - 30. 다변량 (multivariate) 데이터 시각화 본문

데이터 분석

DATA - 30. 다변량 (multivariate) 데이터 시각화

Baek Kyun Shin 2019. 6. 24. 20:12

이번 챕터에서는 독립 변수가 여러개인 다변량 데이터에 대한 시각화를 다루겠습니다. 독립 변수가 3개일 때를 예로 들어 설명하겠습니다. 기본적으로 x축과 y축에 변수 하나씩을 표현하고, 나머지 변수는 모양(shape), 크기(size), 색깔(color) 등으로 표현할 수 있습니다.

Encoding via Shape (2개의 numeric variables, 1개의 categorical variable 일때)

cat_markers = [['A', 'o'],
               ['B', 's']]

for cat, marker in cat_markers:
    df_cat = df[df['cat_var1'] == cat]
    plt.scatter(data = df_cat, x = 'num_var1', y = 'num_var2', marker = marker)
plt.legend(['A','B'])

출처: Udacity

x축에 numeric variable 1, y축에 numeric variable 2를 표현했습니다. 나머지 categorical variable 1은 모양을 달리해서 표현했습니다. 이 그래프에서는 색깔도 다르지만 모양을 달리하면 자동으로 색깔이 다르게 표시됩니다. marker 모양의 종류는 (Reference 1)을 참고하시면 됩니다.

Encoding via Size (3개의 numeric variables 일때)

plt.scatter(data = df, x = 'num_var1', y = 'num_var2', s = 'num_var3')

# dummy series for adding legend
sizes = [20, 35, 50]
base_color = sb.color_palette()[0]
legend_obj = []
for s in sizes:
    legend_obj.append(plt.scatter([], [], s = s, color = base_color))
plt.legend(legend_obj, sizes)

출처: Udacity

x축에 numeric variable 1, y축에 numeric variable 2를 표현했고, numeric variable 3는 점의 크기로 표현했습니다. 산점도는 첫 줄에서 이미 다 그려준 것이고, for 문 아래는 legend를 크기별로 나타내기 위한 것입니다.

Encoding via Color (2개의 numeric variables, 1개의 categorical variable일때)

g = sb.FacetGrid(data = df, hue = 'cat_var1', size = 5)
g.map(plt.scatter, 'num_var1', 'num_var2')
g.add_legend()

출처: Udacity

Encoding via Shape와 유사합니다. 모양이 다른 게 아니라 색깔이 다르다는 것이 차이입니다.

Encoding via Color (3개의 numeric variables일때)

plt.scatter(data = df, x = 'num_var1', y = 'num_var2', c = 'num_var3', cmap = 'mako_r')
plt.colorbar()

출처: Udacity

cmap은 color bar 종류를 나타내주는 파라미터입니다. (Reference 2)

Color Palettes

sb.palplot(sb.color_palette(n_colors=9))

sb.palplot(sb.color_palette('viridis', 9))

sb.palplot(sb.color_palette('vlag', 9))

Clustered charts (1개의 numeric variable, 2개의 categorical variables일 때)

ax = sb.barplot(data = df, x = 'cat_var1', y = 'num_var2', hue = 'cat_var2')
ax.legend(loc = 8, ncol = 3, framealpha = 1, title = 'cat_var2')

출처: Udacity

numeric variable이 1개, categorical variables가 2개일 때는 위와 같이 clustered bar chart로 표현할 수도 있고, 아래와 같이 clustered point chart로 표현할 수도 있습니다.

ax = sb.pointplot(data = df, x = 'cat_var1', y = 'num_var2', hue = 'cat_var2',
                  dodge = 0.3, linestyles = "")

출처: Udacity

Pair Grid

아래는 numeric variables간 1대1 비교를 위한 그래프입니다. 대각선은 하나의 variable에 대한 히스토그램입니다.

g = sb.PairGrid(data = df, vars = ['num_var1', 'num_var2', 'num_var3'])
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)

출처: Udacity

야래는 numeric variable과 categorical variable 간 비교를 위한 그래프입니다.

g = sb.PairGrid(data = df, x_vars = ['num_var1', 'num_var2', 'num_var3'],
                y_vars = ['cat_var1','cat_var2'])
g.map(sb.violinplot, inner = 'quartile')

출처: Udacity

어떤 그래프를 그려야 할지 고민이 될 땐?

변수에 따라 적절한 그래프는 따로 있지만 언제 어떤 그래프를 사용해야할지 모두 기억하기는 힘듭니다. From data to Viz라는 홈페이지에서는 변수에 따른 적합한 그래프를 추천해줍니다. 어떤 그래프를 그려야할지 고민이 될 때는 이 사이트를 이용하시면 유용할 겁니다.

Pandas Profiling

판다스 프로파일링이라는 놀라운 패키지를 소개해드립니다. (Reference 3) 아래와 같이 짧은 코드로 어마어마한 분석결과를 얻을 수 있습니다. conda install pandas-profiling으로 패키지를 먼저 설치한 뒤 아래 코드를 돌려보시고 결과를 직접 눈으로 보시기 바랍니다. 어떤 분석부터 시작해야할지 막막할 때 가이드가 될 것입니다. 판다스의 파워가 점점 더 무지막지해지는 것 같군요..

import pandas_profiling
pandas_profiling.ProfileReport(df)

 

References

Reference1: matplotlib.markers

Reference2: Colors in matplotlib

Reference3: Pandas-profiling github

 

 

Comments