목차
2-1. 기술 통계 (Descriptive Statistics)
2-2. 확률 분포 (Probability Distribution)
1. 개요
데이터 분석에서 통계는 핵심적인 역할을 수행합니다. 데이터의 특징을 요약하고, 패턴을 발견하며, 불확실성을 추론하는 데 필수적인 도구이기 때문입니다. Numpy는 이러한 기본적인 통계 연산을 효율적으로 수행할 수 있는 다양한 함수들을 제공합니다. 단순한 평균, 분산 계산부터 시작하여 더 나아가 확률 분포와 상관 분석까지, Numpy를 활용하면 파이썬 환경에서 강력하고 유연한 통계 분석을 수행할 수 있습니다.
이번 글에서는 Numpy를 이용하여 기본적인 통계 분석 기법들을 살펴보고, 실제 코드를 통해 어떻게 적용할 수 있는지 상세하게 안내합니다. 데이터를 이해하는 첫걸음인 기술 통계부터 데이터 간의 관계를 파악하는 상관 분석, 그리고 데이터의 분포를 모델링하는 확률 분포까지, Numpy를 통해 통계 분석의 기초를 다지고 데이터 분석 능력을 한 단계 향상시켜 보세요.
2. 내용
2-1. 기술 통계 (Descriptive Statistics)
기술 통계는 수집된 데이터를 요약하고 설명하는 기본적인 통계 방법입니다. Numpy는 배열에 대한 다양한 기술 통계량을 계산하는 함수를 제공합니다.
import numpy as np
data = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10])
평균 (Mean)
배열 요소들의 합을 요소의 개수로 나눈 값입니다.
mean_value = np.mean(data)
print(f"평균: {mean_value}")
평균: 5.454545454545454
중앙값 (Median)
배열을 정렬했을 때, 가운데 위치하는 값입니다. 데이터의 분포가 비대칭적일 경우 평균보다 데이터의 중심 경향을 더 잘 나타냅니다.
median_value = np.median(data)
print(f"중앙값: {median_value}")
중앙값: 5.0
최댓값 (Maximum) 및 최솟값 (Minimum)
배열에서 가장 큰 값과 가장 작은 값을 각각 나타냅니다.
max_value = np.max(data)
min_value = np.min(data)
print(f"최댓값: {max_value}")
print(f"최솟값: {min_value}")
최댓값: 10
최솟값: 1
범위 (Range)
데이터의 최댓값과 최솟값의 차이를 나타내며, 데이터가 얼마나 넓게 퍼져 있는지 간단하게 확인할 수 있습니다.
range_value = np.max(data) - np.min(data)
print(f"범위: {range_value}")
범위: 9
분산 (Variance)
데이터가 평균으로부터 얼마나 널리 흩어져 있는지를 나타내는 측도입니다. 각 데이터 포인트와 평균과의 차이를 제곱한 값들의 평균으로 계산됩니다.
variance_value = np.var(data)
print(f"분산: {variance_value}")
분산: 7.763636363636363
표준 편차 (Standard Deviation)
분산의 제곱근으로, 데이터의 흩어진 정도를 평균과 같은 단위로 나타내어 해석하기 용이합니다.
std_value = np.std(data)
print(f"표준 편차: {std_value}")
표준 편차: 2.7863302759791267
백분위수 (Percentile)
데이터를 크기 순서대로 배열했을 때, 특정 비율에 해당하는 값을 나타냅니다. 예를 들어, 50번째 백분위수는 중앙값과 같습니다.
percentile_25 = np.percentile(data, 25)
percentile_75 = np.percentile(data, 75)
print(f"25번째 백분위수: {percentile_25}")
print(f"75번째 백분위수: {percentile_75}")
25번째 백분위수: 3.0
75번째 백분위수: 8.0
2-2. 확률 분포 (Probability Distribution)
확률 분포는 특정 확률 변수가 가질 수 있는 모든 값과 그에 대응하는 확률을 나타냅니다. Numpy는 다양한 확률 분포를 따르는 난수를 생성하는 기능을 제공하여 통계 분석 및 시뮬레이션에 활용할 수 있습니다.
정규 분포 (Normal Distribution)
종 모양의 연속 확률 분포로, 평균을 중심으로 대칭적인 형태를 가집니다. 많은 자연 현상과 사회 현상을 모델링하는 데 사용됩니다.
# 평균 0, 표준 편차 1인 정규 분포에서 100개의 난수 생성
normal_data = np.random.normal(loc=0, scale=1, size=100)
print(f"정규 분포 데이터 (처음 5개): {normal_data[:5]}")
정규 분포 데이터 (처음 5개): [-0.38799611 0.33639791 -0.24240286 0.14383049 0.53331948]
균등 분포 (Uniform Distribution)
특정 구간 내의 모든 값이 동일한 확률을 가지는 연속 확률 분포입니다.
# 0부터 1 사이의 균등 분포에서 50개의 난수 생성
uniform_data = np.random.uniform(low=0, high=1, size=50)
print(f"균등 분포 데이터 (처음 5개): {uniform_data[:5]}")
균등 분포 데이터 (처음 5개): [0.36898849 0.88947366 0.58571985 0.82972017 0.8138179 ]
2-3. 상관 분석 (Correlation Analysis)
상관 분석은 두 변수 간의 선형적인 관계의 강도와 방향을 측정하는 통계적 방법입니다. Numpy의 np.corrcoef()
함수를 사용하여 배열 간의 상관 계수를 계산할 수 있습니다.
data_x = np.array([1, 2, 3, 4, 5])
data_y = np.array([2, 4, 5, 4, 5])
# 상관 계수 행렬 계산
correlation_matrix = np.corrcoef(data_x, data_y)
print(f"상관 계수 행렬:\n{correlation_matrix}")
# 개별 상관 계수 추출
correlation_coefficient = correlation_matrix[0, 1]
print(f"X와 Y의 상관 계수: {correlation_coefficient}")
상관 계수 행렬:
[[1. 0.89442719]
[0.89442719 1. ]]
X와 Y의 상관 계수: 0.8944271909999159
상관 계수는 -1부터 1 사이의 값을 가지며, 1에 가까울수록 강한 양의 선형 관계, -1에 가까울수록 강한 음의 선형 관계, 0에 가까울수록 선형 관계가 없음을 나타냅니다.
3. 결론
이번 글에서는 Numpy를 활용하여 데이터를 이해하는 데 필수적인 기술 통계, 확률 분포, 그리고 변수 간의 관계를 파악하는 상관 분석의 기본적인 개념과 Numpy 함수 사용법을 살펴보았습니다. Numpy는 간편하고 효율적인 방식으로 다양한 통계적 계산을 수행할 수 있도록 지원하며, 이는 데이터 분석의 첫걸음을 떼는 데 매우 유용한 도구입니다.
데이터의 특성을 파악하고, 데이터에 내재된 패턴을 발견하며, 변수 간의 관계를 이해하는 것은 성공적인 데이터 분석의 핵심입니다. Numpy가 제공하는 강력한 통계 관련 함수들을 숙련되게 활용하여 데이터 분석 능력을 향상시키고, 더 깊이 있는 통찰력을 얻으시기를 바랍니다.
'Numpy' 카테고리의 다른 글
[Numpy] pandas와 numpy 호환 (0) | 2025.05.19 |
---|---|
[Numpy] Numpy로 시작하는 선형대수 - 벡터, 행렬, 그리고 방정식 풀이 (1) | 2025.05.15 |
[NumPy] 값 비교 및 검증 함수 총정리 (isnan, isfinite, allclose, array_equal 등) (0) | 2025.04.19 |
[Numpy] 배열 비교와 조건 필터링 함수 정리 (np.greater, np.where, np.less, np.equal, np.logical_or) (0) | 2025.04.13 |
[Numpy] 배열 연결과 분할 함수 정리 (np.concatenate, np.split, np.stack, np.hstack, np.vstack) (0) | 2025.04.12 |