-
🐼데이터분석입문_통계(5주차)카테고리 없음 2024. 4. 9. 17:40
numpy 내에서도 기초 통계치를 계산하는 함수가 존재한다.
ex) statistics : 기초 통계치를 계산하는 함수, scipy 등 다양하게 존재
데이터의 대푯값이라고 할 수 있는 다양한 지표들을 통해 numpy와 statistics의 문법을 알아보자.
- 평균
- 중앙값
: 데이터를 크기 순서대로 나열할 때 정확하게 중앙에 위치한 값
: 홀수면 중앙이 나오고, 짝수면 두 개의 값을 평균으로 계산한다, 중앙값은 평균값에 비해서는 이상치에 영향을 덜 받는다.
: 평균으로 계산하는 것이 아니라, 중앙값으로 대치해서 MSE 바꿔서 중앙값으로 바꿔 계산하는 이유가 데이터 자체에 이상치가 큰 경우에는 아무래도 대푯값을 평균보다는 중앙값이 적절할게 볼 수 있기 때문이다.(도메인 부분과 같이 고려 필수)
- 최빈값
: mode, 가장 많이 나타내는 값. 1,1,2,3,4에서 1인 최빈값
- 편차
: 각 데이터가 평균으로부터 얼마나 떨어져 있는지는 나타내는 지표
- 분산
: 산포도의 지표로 데이터 평균값의 차이를 이용, 분산은 편차에 제곱해 계산
- 표준편차
: 산포도 지표로 분산에 제곱근을 취한 것이 표준편차
- 범위(range)
: 분산이나 표준편차와는 다르게 데이터 전체를 보는 것이 아니라 최댓값, 최솟값으로 산포도를 표현하는 것으로 최댓값과 최솟값의 차이가 크면 산포도가 크고 차이가 작으면 산포도도 작다.
- 사분위 범위(interquartile range)
: 범위 또한 최댓값, 최솟값으로 계산하는 것으로 이상치가 크면 변화가 크다.
데이터를 1로 보면 제1사분위수(Q1, 하위 25%), 제2사분위수(Q2, 중위 50%), 제3사분위수(Q3, 상위 75%)
사분위의 범위는 IQR로 Q3-Q1의 범위이다.
- 데이터 정규화(normalization)
: 평균이나 분산에 의존하지 않고 데이터의 상대적인 위치 관계를 알 수 있는 지표 중 가장 대표적인 것이 편찻값이지만 어떤 편차값도 더 통일된 지표가 필요하여 등장한 개념
데이터 분석을 수행할 때는 정규화를 하여 수치들을 맞추는 작업을 진행한다.
data = np.array([1,2,4,5,6,7,8,9,10,10]) # numpy의 다양한 문법 print(np.mean(data)) # 평균 print(np.median(data)) # 중앙값 print(np.std(data)) # 표준편차 print(np.var(data)) # 분산 print(np.min(data)) # 최솟값 print(np.max(data)) # 최댓값 print(np.argmax(data)) # 최댓값의 인덱스 변환 print(np.argmin(data)) # 최솟값의 인덱스 변환 print(np.percentile(data,25)) # 제1사분위수 25% print(np.percentile(data,75)) # 제3사분위수 75%
# 상관계수 data2 = np.array([12,13,14,15,16,17,18,19,20,20]) print(np.corrcoef(data,data2)) # Statistic 다양한 문법 print(statistics.mean(data)) print(statistics.median(data)) print(statistics.variance(data)) print(statistics.stdev(data)) print(statistics.harmonic_mean(data)) #다른 평균들 계산 가능 print(statistics.mode(data)) #최빈값 print(statistics.quantiles(data, n=4))
타이타닉 데이터를 가지고 간단한 시각화를 시도해 보자
# 타이타닉 데이터의 생존에 대한 값의 비중은 어떻게 될까? # 생존의 값을 카운팅 # sns.countplot을 사용해 데이터를 시각화 sns.countplot(x='survived', data=df)
# 생존만이 아니라 성별에 따른 생존 유무를 살펴보자 sns.countplot(x='sex', hue = 'survived', data = df)
# pclass별 생존 카운트 sns.countplot(x='pclass', hue = 'survived', data=df)
# 연속적인 값은 어떻게 나올까? # age그래프를 그려보자 sns.countplot(x = 'age', data =df)
# 요금은 어떤 분포일까? sns.histplot(df['fare'], kde=True, bins = 20)
# 생존자와 비생존자에 대한 나이 분포 # kdeplot sns.kdeplot(df.loc[df['survived'] == 0, 'age'], label = 'Not Survived', shade = True) sns.kdeplot(df.loc[df['survived'] == 1, 'age'], label = 'Survived', shade = True)
# 이상치를 간단하게 살펴볼 수 있는 boxplot sns.boxplot(x='pclass', y='age', data =df) plot.show()