귀퉁이 서재
DATA - 30. 다변량 (multivariate) 데이터 시각화 본문
이번 챕터에서는 독립 변수가 여러개인 다변량 데이터에 대한 시각화를 다루겠습니다. 독립 변수가 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'])
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)
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()
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()
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')
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 = "")
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)
야래는 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')
어떤 그래프를 그려야 할지 고민이 될 땐?
변수에 따라 적절한 그래프는 따로 있지만 언제 어떤 그래프를 사용해야할지 모두 기억하기는 힘듭니다. 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
'데이터 분석' 카테고리의 다른 글
Data Analyst Nano Degree를 끝내며.. (4) | 2019.07.04 |
---|---|
DATA - 29. 이변량 (Bivariate) 데이터 시각화 (0) | 2019.06.18 |
DATA - 28. 단변량 (Univariate) 데이터 시각화 (0) | 2019.06.14 |
DATA - 27. 정확하고 효율적인 데이터 시각화(Data Visualization)를 위한 고려사항 (0) | 2019.06.12 |
DATA - 26. 데이터 시각화(Data Visualization)의 중요성 (0) | 2019.06.09 |