programming/파이썬으로 배우는 통계학

[파이썬/통계] Python에 의한 기술 통계 : matplotlib·seaborn에 의한 데이터 가시화

Jofresh 2023. 5. 5. 22:53
728x90
반응형

안녕하세요! 조신선입니다.

오늘은 matplotlib·seaborn에 의한 데이터 가시화에 대해서 포스팅하겠습니다.

 

오늘도 역시나 쥬피터(vscode확장자 : ipynb) 환경으로 시작하겠습니다.

 

라이브러리 임포트

# 수치 계산에 사용하는 라이브러리
import numpy as np
import pandas as pd

# 표시 자릿수 지정
%precision 3

# 그래프를 그리는 라이브러리
from matplotlib import pyplot as plt

# 그래프를 jupyter Notebook 내에 표시하도록 하기 위한 지정
%matplotlib inline

pyplot에 의한 꺾임선 그래프

해당 코드는 matplotlib 라이브러리를 이용하여 산점도 그래프를 그리는 코드입니다. plt.plot(x, y, color='black') 부분에서 x 축과 y 축을 각각 x, y 값으로 설정하고, color='black'은 색상을 검정으로 설정합니다. plt.title("lineplot matplotlib")는 그래프의 제목을 "lineplot matplotlib"으로 설정하고, plt.xlabel("x")와 plt.ylabel("y")는 각각 x축과 y축의 레이블을 설정합니다.

 

seaborn + pyplot에 의한 꺾임선 그래프


sns.distplot() 함수는 주어진 데이터를 히스토그램과 밀도 그래프로 동시에 시각화할 수 있는 Seaborn 라이브러리의 함수입니다.

아래 코드에서 fish_data는 시각화하려는 1차원 데이터이며, bins는 히스토그램에서 막대의 개수를 지정하는 인자입니다. kde는 밀도 그래프를 나타내는 것으로, 기본값은 True입니다. color는 시각화 색상을 지정하는 인자입니다.

따라서 아래 코드는 fish_data 데이터를 5개의 막대로 구성된 히스토그램으로 시각화하며, 밀도 그래프는 나타내지 않습니다. 색상은 검정색으로 지정됩니다.

 
 

커널 밀도 추정에 의한 히스토그램 평활화

seaborn의 distplot 함수는 데이터의 분포를 시각화하는 함수입니다. 주어진 데이터에 대한 히스토그램과 커널 밀도 추정(Kernel Density Estimation, KDE) 곡선을 함께 그려줍니다. 또한 이상치(outlier)를 나타내는 점들도 함께 시각화할 수 있습니다. distplot 함수는 기본적으로 KDE 곡선을 그리지만, kde 인자를 False로 설정하면 KDE 곡선을 그리지 않고, 히스토그램만 그려줍니다. bins 인자는 히스토그램의 막대 개수를 결정합니다. color 인자는 그래프의 색상을 설정하며, label 인자를 통해 범례(legend)의 이름을 설정할 수 있습니다.

 

bins=1로 설정되어 있어서 막대그래프가 하나만 그려지는 것으로 보입니다. bins 파라미터는 히스토그램에서 막대의 개수를 지정하는 파라미터이므로, 1이라는 값은 정확한 표현이 아니며 시각화에 적합하지 않습니다. 적당한 개수의 막대를 그리기 위해서는 bins 값을 적절하게 지정해주어야 합니다.

아래 코드는 fish_data에 저장된 데이터를 대상으로 히스토그램을 그리는 코드입니다. color 인자를 통해 히스토그램의 색상을 지정할 수 있습니다. 기본적으로 KDE는 함께 그려지지만, kde=False 옵션을 추가하면 KDE를 제외할 수 있습니다.

 

 

2변량 데이터에 대한 히스토그램

예시 데이터 이미지 공유

fish_multi 데이터프레임을 "species" 열을 기준으로 그룹화하고, 각 그룹별 통계량을 요약해서 출력합니다. 통계량으로는 count(데이터 개수), mean(평균값), std(표준편차), min(최소값), 25%, 50%(중앙값), 75%, max(최대값)가 있습니다. describe() 함수는 그룹화된 데이터프레임의 각 열마다 위 통계량을 계산하고 출력합니다.

아래 코드는 Seaborn 라이브러리를 이용해 종류별로 분류된 물고기 데이터의 히스토그램을 그리는 코드입니다.

 

sns.distplot() 함수는 입력된 데이터에 대한 히스토그램과 KDE (Kernel Density Estimation)을 함께 그려주는 함수입니다. length_a와 length_b는 query() 메서드를 사용하여 species 열 값이 "A"와 "B"인 데이터를 각각 추출한 것입니다. bins 인자는 히스토그램 막대기(bin)의 개수를 지정하고, color 인자는 그래프의 색상을 지정합니다. kde 인자는 KDE(kernel density estimation)을 사용할지 여부를 결정합니다. False로 설정하면 KDE를 사용하지 않습니다.

 

상자 수염도

sns.boxplot은 범주형 변수와 연속형 변수 간의 관계를 시각화하는 데 사용되는 seaborn 라이브러리의 함수입니다. 아래 코드에서는 x 인수에 범주형 변수 "species"를 지정하고, y 인수에 연속형 변수 "length"를 지정하여 어떤 물고기 종에 속하는 샘플들이 어떤 길이 범위에 분포하는지를 상자 그림으로 시각화합니다. 범주형 변수 "species"의 각 값에 해당하는 샘플들의 분포가 중앙값, 사분위수, 이상치 등을 포함한 상자 그림으로 나타나며, 각 범주별 분포의 차이를 비교할 수 있습니다.

 

fish_multi 데이터 프레임을 species 기준으로 그룹화하여, 각 그룹별(describe) 통계량을 출력합니다.

예를 들어, species가 "A"인 그룹에 대해서 평균, 표준편차, 최소값, 최대값 등의 통계량이 계산되어 출력됩니다. "B"에 대해서도 같은 방식으로 출력됩니다.

 

 

바이올린 플롯 (제가 개인적으로 가장 자주 사용하는 플롯)

violinplot은 데이터의 분포를 바이올린처럼 그린 그래프입니다. boxplot과 유사하지만 데이터의 밀도에 대한 정보를 더 많이 제공합니다. 가운데 흰색 점은 중앙값(median)을, 검은색 선은 사분위 범위(25%와 75% 지점)를 나타냅니다. 바이올린의 폭은 해당 값의 분포 밀도를 나타내며, 히스토그램과 밀도 그래프가 함께 표시됩니다.

아래 코드에서는 fish_multi 데이터셋에서 species와 length 컬럼을 이용해 바이올린플롯을 그린 것입니다. x축은 species, y축은 length를 나타내며, color 옵션으로 색상을 지정해주었습니다.

 

막대 그래프

sns.barplot은 주어진 데이터를 바탕으로 각 범주형 변수(category)의 값에 대한 평균값을 막대 그래프로 시각화해주는 함수입니다. x축은 범주형 변수를, y축은 해당 변수의 평균값을 나타냅니다. fish_multi 데이터에서 species 변수를 범주형 변수로, length 변수를 평균값을 계산할 대상으로 지정하여 시각화할 수 있습니다. 이 코드는 fish_multi 데이터에서 species 변수를 범주형 변수로, length 변수를 평균값을 계산할 대상으로 지정하여 시각화합니다. 즉, 각 어종(species)별로 길이(length)의 평균값을 막대 그래프로 시각화합니다. 색깔은 회색(gray)으로 지정합니다

 

살포도

예시로 사용될 데이터 이미지로 공유!

jointplot은 두 변수 간의 관계를 시각화하는데 사용됩니다. 주어진 데이터셋에서 x 변수는 x축에, y 변수는 y축에 대응되며, 데이터 포인트는 산점도로 나타납니다. jointplot은 또한 각 변수의 분포도를 볼 수 있는 히스토그램도 함께 제공합니다. 또한, kind 매개변수를 이용하여 육각형 맵, 커럴 플롯 등 다양한 유형의 차트로 시각화할 수도 있습니다.

페어 플롯


load_dataset() 함수는 seaborn 라이브러리에서 제공하는 데이터셋을 불러오는 함수입니다. 위 코드에서는 iris 데이터셋을 불러와서 변수 iris에 저장했습니다. iris 데이터셋은 붓꽃의 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비, 그리고 붓꽃의 품종 정보가 포함되어 있습니다. head() 함수를 통해 데이터셋의 첫 3행을 출력해보았습니다.

 

iris 데이터프레임에서 species 열을 그룹화 기준으로 설정하여 mean() 함수를 적용하면, 각각의 종(species)별로 평균값(mean)을 구할 수 있습니다.

즉, 위 결과에서는 setosa 종의 sepal_length 열의 평균값은 5.006으로, sepal_width 열의 평균값은 3.428으로 계산됩니다. 마찬가지로 versicolor와 virginica 종의 각 열의 평균값도 계산되어 출력됩니다.

pairplot() 함수는 데이터프레임에 있는 각 열의 조합에 대해 산점도(scatter plot)을 그립니다. hue 매개변수를 이용하여 시각화하려는 범주형 변수를 지정할 수 있으며, 이에 따라 각 범주에 대한 산점도가 다른 색상으로 구분되어 나타납니다. palette 매개변수는 색상 팔레트를 지정하는 데 사용됩니다.

위 코드에서는 iris 데이터셋을 불러와 species 열을 기준으로 각 변수의 쌍에 대한 scatter plot을 그리고, 각각의 종(species)을 색상으로 구분하여 시각화한 것입니다.

728x90
반응형