본문 바로가기
학습노트/통계

[학습노트] 통계1. 탐색적 데이터 분석

by kime2 2024. 4. 1.

위치추정 : 데이터의 대부분의 값이 어디에 있을까?(대표성)

 

평균 : 모든 값의 총합을 개수로 나눈 값

가중평균 : 가중치를 곱한 값의 총합을 가중치의 총합으로 나눈 값

중앙값(중간값) : 데이터에서 가장 가운데 위치한 값

백분위수 : 전체 데이처의 P%를 아래에 두는 값(= 분위수)

가중 중앙값 : 데이터를 정렬한 후, 각 가중치 값을 위에서부터 더할 때, 총합의 중간이 위치하는 값

절사평균 : 정해진 개수의 극단값을 제외한 나머지 값들의 평균

로버스트하다 : 극단값들에 민감하지 않는다는 것을 의미(=저항성이 있다)

특이값 : 대부분의 값과 매우 다른 데이터의 값

 

참고: https://dacon.io/en/competitions/official/235901/codeshare/5085

import pandas as pd
import scipy.stats
import numpy as np

state = pd.read_csv('https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/state.csv')

# 산술평균 -> 6162876.3
state['Population'].mean()

# 절사평균 구하기 -> 4783697.125
from scipy import stats
stats.trim_mean(state['Population'],0.1)
#0.1 -> 각 끝에서 10% 제외

# 중앙값 -> 4436369.5
state['Population'].median()

# 넘파이를 활용한 가중평균 -> 살인율을 인구에 가중치를 더해서 평균을 구함 -> 4.445833981123393
np.average(state['Murder.Rate'], weights = state['Population'])

 

상하위 10%를 제외한 절사평균과 중앙값이 비슷하고 산술평균이 2,000,000정도 더 커지기 때문에 극단값이 크다

또한 중앙값이 평균보다 작기때문에 오른쪽으로 치우친 그래프, 양의 왜도를 가짐

 

  • 가장 기본적인 위치추정은 평균이다, 그러나 극단값에 민간
  • 중간값, 절사평균과 같은 방법으리 특잇값이나 이상데이터로부터 좀더 로버스트하다

변이추청 : 데이터가 얼마나 밀집해 있을까?

 

가정 : 데이터가 정규분포를 따름

편차 : 관측값과 위치 추정값 사이의 차이(오차, 잔차)

분산 : 평균과의 편차를 제곱한 값들의 합을 n-1로 나눈값

-> 표준편차는 표본의 평균에 따른다는 하나의 제약조건을 가지고 있기 때문에 n-1의 자유도를 갖는다

표준편차 : 분산의 제곱근

평균절대편차 : 평균과의 평차의 절대값의 평균(맨해튼 노름)

중간값의 중위절대편차(MAD) : 중간값과의 편차의 절대값의 중간값

 여기서 은 데이터의 중위값,상치에 대해 덜 민감

범위 : 데이터의 최댓값과 최솟값의 차이

순서통계량 : 최소에서 최대까지 정렬된 데이터 값에 따른 계량형

백분위수 : 어떤 값들의 P퍼센트가 이 값 혹은 더 작은 값을 갖고 (100-P)퍼센트가 이 값 혹은 더 큰 값을 갖도록 하는 값

사분위범위 : 75번째 백분위수와 25번쨰 백분위수 사이의 차이

 

# 표준편차 -> 6848235.347401142
state['Population'].std()

# 사분위범위 -> 4847308.0
state['Population'].quantile(0.75) - state['Population'].quantile(0.25)

# 중위절대편차 -> 3849876.1459979336
import statsmodels.api as sm
sm.robust.scale.mad(state['Population'])
# 중위절대편차는 특잇값에 영향을 받지 않이 때문에 표준편차보다 값이 작다

 

  • 분산과 표준편차는 가장 보편적인 변이 측정 방법 -> 모두 특잇값에 민감
  • 중간값과 백분위수로부터 평균 절대편차와 중간값의 중위절대편차를 구하는 것이  로버스트 함

 

데이터 분포

도수분포표 : 동일한 구간(bin)에 해당하는 수치 데이터 값들의 빈도를 나타내는 기록(  각 구간마다 몇개의 변숫값이 존재하는가)

히스토그램 : X축은 구간들을, Y축은 빈도수를 나타내는 도수테이블 그림(막대그래프X)

밀도그림 : 히스토그램(데이터의 분포)를 부드러운 곡선으로 그린 그림

# 살인율의 백분위 수 
state['Murder.Rate'].quantile([0.05, 0.25, 0.5, 0.75, 0.95])

# 박스플랏
ax = (state['Population']/1000000).plot.box()
ax.set_ylabel('population(millions)')

# 도수분포표
# pandas.cut -> 이 값들을 각 구간에 매핑하는 시리즈를 만든다
# value_counts 매서드 -> 빈도 제이블을 구함

binnedpopulation = pd.cut(state['Population'], 10) # 10개의  동일한 구간으로 만듧
binnedpopulation.value_counts()

# 히스토그램
ax2 = (state['Population']/1000000).plot.hist(figsize =(4,4))
ax.set_xlabel('Popluation')

# 밀도 그림
ax3 = state['Murder.Rate'].plot.hist(density = True, xlim=[0,12], bins =range(1,12))
state['Murder.Rate'].plot.density(ax=ax3)
ax3.set_xlabel('Merder Rate (per 100,000)')

 

 

  • 도수 히스토그램은 Y축에 횟수를 X축에 변숫값들을 표시
  • 도수분포표는 히스토그램에 보이는 횟수들을 표 형태로 나타낸 것
  • 상자그림에서 상자의 위와 아래 부분은 각 75%, 25% 백분위수를 의미

 

이진데이터 VS 범주데이터

 

최빈값 : 데이터에서 가장 자주 등장하는 범주/값

기댓값 : 범주에 해당하는 어떤 수치가 있을때, 범주의 출연 확률에 따른 평균

-> 계산: 각 결과값에 발생확률을 곱하고 모두 더한다 (= 가중평균)

막대도표 : 각 범주의 빈도수 혹은 비율을 막대로 나타낸 그림

-> 히스토그램의 x축은 수치적으로 나타낼 수 있는 하나의 변수로 서로 붙어 있고, 막대그래프는 서로다른 범주로 떨어져있음

파이그림 : 각 범주의 빈도수 혹은 원의 부채꼴 모양으로 나타낸 그림

 

  • 범주형데이터는 보통 비율로 요약하고 막대그래프를 사용
  • 범주란 전혀 다른 집합(사과, 오렌지, 남자, 여자)정도를 나타내는 요인변수의 수준, 구간별로 나뉨 수치 데이터 같은 것을 의미
  • 기댓값은 어떤 값과 그 값이 일어날 확률을 서로 곱해 더한 값 -> 요인변수의 수준을 요약

 

상관관계

상관계수 : 수치적 변수들 간에 어떤 관계가 있는지를 나타내기 위해 사용되는 측정량(-1~1)

-> 변수1,2 각각의 평균으로 부터 편차들을 서로 곱한 값의 평을각 변수의 표분편차의 곱으로 나누어줌

상관행렬 : 행과 열이 변수들을 의미하는 표, 각 셀은 그 행과 열에 해당하는 변수들간의 상관관계

산점도 : X축과 Y축이 서로 다른 두 개의 변수를 나타내는 도표

import seaborn as sns
etfs = sp500_px.loc[sp500_px.index > '2012-07-01',
                  sp500_sym[sp500_sym['sector'] == 'etf']['symbol']]
sns.heatmap(etfs.corr(), vmin =-1, vmax = 1,
            cmap=sns.diverging_palette(20,220,as_cmap = True))

# 산점도 그리기
AA = sp500_px[['QQQ','XLK']]
ax = AA.plot.scatter(x= 'QQQ', y = 'XLK', figsize = (4,4))
ax.axhline(0, color = 'grey', lw =1) # 수평보조선
ax.axvline(0, color = 'grey', lw =1) # 수직보조선

  • 상관계수는 두 사이에 어떤 관계가 있는지 측정(-1~1, 사이의 값으로 0이면 관계x)

 

여러개의 변수 탐색

 

일변량분석 = 하나의 변수를 다루는 평균, 분산 

이변분석량 = 상관계수처럼 두 변수를 다룸

다변량분석 : 셋 이상

 

분할표 : 두가지 이상의 범주형 변수의 빈도수를 기록한 표

육각형 구간 : 두 변수를 육각형 모양의 구간으로 나눈 그림

등고 도표 : 자도상에 같은 높이의 지점을 등고선으로 나타내는 것처럼, 두 변수의 밀도를 등고선으로 표시

바이올린 도표 : 상자그림과 비슷하지만 밀도 추정 추가