logo

분포의 특성

🤖 AI 프롬프트
df의 speed의 왜도와 첨도를 구해주고, seaborn을 이용해 히스토그램을 그려줘

왜도(skewness)

  • 왜도: 분포의 비대칭 정도를 나타내는 지표
    • 양수: 큰 값 쪽인 오른쪽 꼬리의 영향이 더 큼
    • 음수: 작은 값 쪽인 왼쪽 꼬리의 영향이 더 큼
    • 대칭인 분포의 왜도는 0. 다만 왜도 0만으로 좌우 대칭을 보장하지는 않음
γ1​=E[(σX−μ​)3]
  • μ: 모집단 평균, σ: 모집단 표준편차

왼쪽 꼬리가 긴 음의 왜도 분포와 오른쪽 꼬리가 긴 양의 왜도 분포 비교

from scipy.stats import skew

skew(df.speed)  # 속도 분포의 왜도
실행 결과
np.float64(0.2825749079028675)
  • 속도의 왜도: 약 0.2826. 빠른 속도 쪽 꼬리의 영향이 더 큰 분포
  • 왜도는 표준화한 값이므로 속도 단위와 무관

첨도(kurtosis)

  • 첨도: 표준화한 편차의 4제곱 평균. 평균에서 멀리 떨어진 값의 영향을 나타내는 지표
    • 표준화한 편차의 절댓값이 1보다 작으면 4제곱한 값은 더 작아짐
    • 절댓값이 1보다 크면 4제곱한 값은 더 커짐. 극단적인 관측값이 계산에 크게 기여
β2​=E[(σX−μ​)4]
  • 초과 첨도(excess kurtosis): 첨도에서 정규분포의 첨도 3을 뺀 값
γ2​=β2​−3
  • 정규분포의 첨도는 3, 초과 첨도는 0
  • 양의 초과 첨도: 정규분포보다 평균에서 먼 값의 기여가 큰 경우. 두꺼운 꼬리나 극단적인 값의 영향을 확인
  • 음의 초과 첨도: 정규분포보다 평균에서 먼 값의 기여가 작은 경우

초과 첨도 3부터 -1.2까지 여러 분포의 확률 밀도 곡선 비교. 초과 첨도가 클수록 봉우리가 뾰족하고 꼬리가 두꺼움

from scipy.stats import kurtosis

kurtosis(df.speed)  # 기본값은 초과 첨도
실행 결과
np.float64(2.925082447515611)
  • 속도의 초과 첨도: 약 2.9251. 0보다 커 정규분포 기준보다 평균에서 먼 값의 기여가 큰 수준

히스토그램(histogram)

  • 히스토그램: 데이터를 구간별로 나누고 각 구간의 관측값 수를 막대 높이로 표시한 그래프
  • 시본(seaborn)의 histplot()으로 작성
    • data=df: 사용할 데이터프레임
    • x="speed": 가로축에 사용할 열 이름. 변수 이름이 아니라 문자열로 지정
    • 기본 세로축 Count: 각 속도 구간에 속한 선박 수
  • seaborn은 맷플롯립(matplotlib)을 사용. plt.show()로 그래프 표시
import seaborn as sns
import matplotlib.pyplot as plt

sns.histplot(x="speed", data=df)
plt.show()
실행 결과
<Figure size 640x480 with 1 Axes>

선박 속도 구간별 선박 수를 나타낸 기본 히스토그램

  • 속도가 집중된 구간과 빠른 속도 쪽으로 이어지는 분포 형태 확인

구간 수 지정

  • bins에 정수를 지정하면 구간 수 설정
sns.histplot(x="speed", data=df, bins=30)  # 구간을 더 세분화한 비교 예시
plt.show()
실행 결과
<Figure size 640x480 with 1 Axes>

속도 범위를 30개 구간으로 나눈 선박 속도 히스토그램

  • 같은 자료를 30개 구간으로 나눈 결과. 구간 수에 따라 막대의 너비와 세부 모양이 달라짐

구간 경계 지정

  • bins에 경계값 목록을 지정하면 각 구간의 시작점과 끝점 설정
  • 속도 5~35노트를 5노트 간격으로 나누는 예시
xs = list(range(5, 36, 5))  # 5~35노트를 포함하는 5노트 간격의 경계
sns.histplot(x="speed", data=df, bins=xs)
plt.xticks(xs)
plt.show()
실행 결과
<Figure size 640x480 with 1 Axes>

5노트부터 35노트까지 5노트 간격으로 나눈 선박 속도 히스토그램

  • 경계값 7개로 구간 6개 생성
  • 구간은 왼쪽 경계 포함, 오른쪽 경계 제외. 마지막 구간은 오른쪽 경계도 포함
  • bins=xs는 집계 구간, plt.xticks(xs)는 가로축 눈금 위치를 지정
  • range()는 끝값을 제외하므로 35를 포함하려면 끝값을 35보다 크게 지정

커널 밀도 추정(kernel density estimation)

  • 커널 밀도 추정(KDE): 관측값 주변의 밀도를 합쳐 분포 형태를 부드럽게 추정하는 방법
  • kde=True: 히스토그램에 KDE 곡선 추가
  • 기본 빈도 히스토그램에서는 곡선 높이도 막대의 빈도 척도에 맞춰 조정
sns.histplot(x="speed", data=df, kde=True)
plt.show()
실행 결과
<Figure size 640x480 with 1 Axes>

선박 속도 히스토그램에 부드러운 KDE 곡선을 겹친 그래프

  • 막대는 구간별 선박 수, 곡선은 자료의 부드러운 분포 형태를 표시
  • KDE 곡선은 정규분포를 가정해 그린 곡선이 아니라 관측값으로 추정한 곡선

퀴즈

문제 1 / 6맞음: 0힌트: 0틀림: 0채점중: 0남음: 6

속도 분포의 왜도가 양수일 때, 어느 쪽 꼬리의 영향이 더 큰 것으로 해석하나요?

  • ○빠른 속도 쪽인 오른쪽 꼬리
  • ○느린 속도 쪽인 왼쪽 꼬리
  • ○양쪽 꼬리의 영향이 같은 대칭 분포

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
백분위수와 사분위수