728x90
반응형
안녕하세요, 오늘은 데이터프레임이 주어졌을 때
1. 히스토그램을 그릴 수 있는 수치형 컬럼을 자동으로 선택하고,
2. 변수 갯수에 따라 선택한 컬럼을 사용자가 설정한 배열(ex> (3 by 2) 형태의 그리드) 형태 히스토그램
으로 그릴 수 있는 코드를 공유하고자 합니다.
[소스코드]
# libraries & dataset
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# input df : 여기서는 mpg dataset을 선택해서 그려보았어요
tmp_df = sns.load_dataset('mpg')
tmp_df.head()
# select numerical columns
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
num_df = tmp_df.select_dtypes(include=numerics)
print(num_df.head(3)) # 7개 열이 선택되었습니다.
# plot multiple histogram by seaborn
sns.set(style="whitegrid")
cols = num_df.columns
# ** 사용자가 그리고자 하는 배열 형태의 열 갯수 지정!
plot_n_cols = 4
# 사용자가 선택한 열 갯수에 따라 적합한 행 갯수 계산
#### 1) 열의 갯수가 plot_n_cols의 배수인 경우 그 값 그대로
#### 2) 아닐 경우 변수 갯수를 plot_n_cols로 나눈 몫에 1을 더해준 값으로 plot_n_rows 설정
if (len(cols) % plot_n_cols) > 0:
plot_n_rows = int(len(cols)/plot_n_cols) + 1
else:
plot_n_rows = int(len(cols)/plot_n_cols)
print(plot_n_rows, plot_n_cols)
# 히스토그램을 한판에 그릴 형태 설정 (figsize는 여러번 반복 수행을 통해 잘 보이는 값으로 선택)
fig, axs = plt.subplots(plot_n_rows, plot_n_cols, figsize=(18, 7))
i, j = 0, 0
for c in cols:
print(i, j, c)
sns.histplot(data=num_df, x=c, kde=True, color="skyblue", ax=axs[i, j])
if j == plot_n_cols - 1:
i = i + 1
j = 0
else:
j = j + 1
plt.show()
[실행결과]
mpg cylinders displacement horsepower weight acceleration model_year
0 18.0 8 307.0 130.0 3504 12.0 70
1 15.0 8 350.0 165.0 3693 11.5 70
2 18.0 8 318.0 150.0 3436 11.0 70
2 4
0 0 mpg
0 1 cylinders
0 2 displacement
0 3 horsepower
1 0 weight
1 1 acceleration
1 2 model_year
[추가] 히스토그램의 배열 형태 바꾸기
추가로! 배열의 형태를 바꿀 경우 아래와 같이 그래프를 출력할 수도 있어요!!
# select numerical columns
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
num_df = tmp_df.select_dtypes(include=numerics)
print(num_df.head(3))
sns.set(style="whitegrid")
cols = num_df.columns
plot_n_cols = 3
if (len(cols) % plot_n_cols) > 0:
plot_n_rows = int(len(cols)/plot_n_cols) + 1
else:
plot_n_rows = int(len(cols)/plot_n_cols)
print(plot_n_rows, plot_n_cols)
fig, axs = plt.subplots(plot_n_rows, plot_n_cols, figsize=(18, 12))
i, j = 0, 0
for c in cols:
print(i, j, c)
sns.histplot(data=num_df, x=c, kde=True, color="skyblue", ax=axs[i, j])
if j == plot_n_cols - 1:
i = i + 1
j = 0
else:
j = j + 1
plt.show()
위의 코드에서 바꾼 부분은
격자(그리드)의 열 갯수를 4개에서 3개로, 그에 맞추어 plt.subplots의 figsize를 (18, 12)로 세로 크기를 더 길게 수정한 것입니다.
plot_n_cols = 3
fig, axs = plt.subplots(plot_n_rows, plot_n_cols, figsize=(18, 12))
반응형
'Data Analysis > visualization' 카테고리의 다른 글
[번역] 모든 데이터 과학자가 시각화 툴킷에 추가해야 하는 8가지 대안 (1) | 2023.11.22 |
---|---|
[python] 데이터프레임에서 수치형 컬럼 자동 선택 후 그룹별 박스플롯 그리기! (feat. seaborn) (0) | 2022.04.27 |
[Python] y축 2개를 이용한 산점도 + 추세선 그리기(그룹별 색상 옵션 추가) (0) | 2022.02.11 |
[Python] y축 2개를 이용한 산점도 + 추세선 그리기(&그룹별 색상) (0) | 2022.02.10 |
[Python] 산점도 : 2개의 변수 간 분포 확인을 위한 시각화 방법(한눈에 들어오는 예제 코드 포함) (0) | 2022.01.27 |