기초 통계

통계

  • 통계란?
    • 관찰(수집)된 자료(현상/상태)에 대해서 통계적(수치적)으로 처리하고 연구하는 과정
    • 기술통계와 추론통계가 있다.

 

기술통계(서술 통계, Descriptive statistics)

  • 수집한 데이터를 요약, 묘사, 설명하는 통계 기법
  • 자료의 요약된 정보를 대푯값(Representative value)으로 표현

기술 통계는 대체적으로 4가지로 분류가 된다.

  • 통계적 수치(통계량)
    • 중심에 대한 통계
    • 산포에 대한 통계
    • 관계에 대한 통계
    • 형태에 대한 통계
bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]

df = pd.DataFrame(zip(bream_length, bream_weight), columns=['길이', '무게'])
df.head()


#평균값 구하기
np.mean(df['길이'])

#중앙값 구하기
np.median(df['길이'])

최빈값 구하기
df['길이'].mode()

 

중심에 대한 통계

  • 자료의 중심에 대한 경향을 나타내는 수치
  • 평균: 자료에 대한 평균(모평균/표본평균/샘플평균)
  • 중앙값: 자료의 50%에 해당하는 값 : 극단적인 값이 있는 경우 중앙값이 평균값보다 유용하다.
    • 자료를 정렬했을 때, 가운데 오는 값
    • 직원이 100명인 회사에서 직원들 연봉 평균은 3천만원인데 사장의 연봉이 10억인 경우. 이처럼 극단적인 값이 있는 경우 중앙값이 평균값보다 유용하다.
  • 최빈값: 가장 많이 등장하는 값
  • 이상점(극단값, outlier): 다른 자료와는 극단적으로 다른 값. 너무 크거나 작다. 상자도표(boxplot)에서 상(하)사분위수로부터 1.5×IQR만큼 떨어진 거리보다 더 먼 곳에서 발견되는 관측값으로 정의된다.

산포에 대한 평균

  • 자료의 변동성을 나타내는 수치이다.
  • 표준편차와 분산을 많이 사용한다.(통계지식 정리할 필요가 있다.)
  • 판다스에서는 기술 통계량을 한 번에 적용해 준다.
  • 편차(deviation):관측(수집)값과 평균의 차이
  • 변동(variation):편차의 제곱합
  • 분산(variance) : 변동을 데이터의 수로 나눈 값
  • 표준편차(Standard Deviation):분산의 제곱근
#변동 구하기
df['길이'].var()

#표준편차 구하기
df['길이'].std()

#판다스는 기술통계량을 한 번에 계산해준다
df.describe()

데이터의 표준화

  • 한 화면에 넣어 주기 힘들 때, 쓰인다. 데이터의 범위를 비슷한 분포로 만들어 준다.(스케일링)
  • 데이터에서 평균을 빼고, 표준편차로 나누는 작업이다.
  • Robust scaling - 이상값의 영향을 크게 주지 않는 방법으로 스케일링 하는 방법이다. (평균은 0, 표준편차는 1)이 된다.
  • 평균과 표준편차는 상황에 따라 스케일링할 수 있다.
  • 예시) 평균이 50, 표준편차가 10이 되도록 정규화
z = 50 + 10 * (df['길이'] - mean) / np.std(df['길이'])
z

관계에 대한 통계

  • 자료와 자료간의 관계를 나타내는 수치이다.
  • 상관계수 : -1과 1에 가까울 수록 상관성이 높다고 해석
  • 0에 가까울 수록 상관성이 낮다고 해석한다.
  • 보통 절대값이 0.5이하이면, 상관성이 없다고 해석한다.

상관관계는 있으나 인과관계가 없을 수 있다.

오비이락 : 까마귀가 날아간 후 우연히 배가 떨어졌을 뿐이지 까마귀가 원인이 되어서 배가 떨어진 것으로 생각하지 말라는 의미.

length = np.array(df['길이'])
weight = np.array(df['무게'])

df[['길이', '무게']].corr()

sns.pairplot(df[['길이', '무게']])
  • 두 변수의 상관성을 확인하기 좋은 시각화 pair_plot을 이용해볼 수 있습니다.

형태에 대한 통계

  • 자료의 분포나 왜곡된 형태
    • 왜도(Skewness): 편향. 중심을 기준으로 좌우의 데이터가 편향되어 있는 형태를 나타내는 수치
    • 첨도(kurtosis): 뾰족함의 정도

추론 통계

  • 모집단을 통계적으로 추론(부분을 가지고 전체를 추론)->빅 데이터는 추론 통계이다.

모집단과 표본

  • 복원추출 : 독립사건
length = np.array(df['길이'])
weight = np.array(df['무게'])

np.random.choice(length, 20)# length - 20개 꺼내주세요 복원 - 독립사건 
array([36. , 34. , 30. , 37. , 31.5, 35. , 30.7, 29.7, 32. , 41. , 29. ,
       34. , 34. , 32. , 33.5, 29.7, 34.5, 26.3, 33.5, 33.5])
       
np.random.choice(length, 20, replace=False)# length - 20개 꺼내주세요 비복원 - 종속사건
array([31. , 30. , 36. , 29. , 32. , 35. , 26.3, 26.5, 29. , 41. , 32. ,
       36. , 38.5, 39.5, 34.5, 29.7, 33.5, 31.5, 35. , 35. ])
  • 비복원추출 : replace  = Fale로 하면 된다. 종속사건

 

모평균은 뽑을 때마다 다를 수 있다. 

# 모집단의 평균
for i in range(5):
    sample = np.random.choice(length, 20)
    print('{}번째 무작위 추출로 얻은 표본 평균: {}'.format(i, sample.mean()))
    
0번째 무작위 추출로 얻은 표본 평균: 33.785
1번째 무작위 추출로 얻은 표본 평균: 33.78
2번째 무작위 추출로 얻은 표본 평균: 32.41
3번째 무작위 추출로 얻은 표본 평균: 32.35
4번째 무작위 추출로 얻은 표본 평균: 31.54

확률

10,000번 정도 주사위를 던지면 각가의 값이 1/6로 가까워졌다. (대수의 법칙)

import numpy as np
import pandas as pd
dice = [ 1, 2, 3, 4, 5, 6]
prob = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6]
#prob = [1/21, 2/21, 3/21, 4/21, 5/21, 6/21]
# 주사위 던지기를 100번 시행했을 때 각 주사위 눈금을 구해서 sample이라는 새 리스트에 담아보세요 
sample = np.random.choice(dice, 100000, p=prob)# 주사위 100개 꺼내주세요 복원 - 독립사건 

fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111)
ax.hist(sample, bins=6, range=(1, 7), density=True, rwidth=0.8)
# 실제의 확률분포를 가로선으로 표시
ax.hlines(prob, np.arange(1, 7), np.arange(2, 8), colors='gray')
# 막대 그래프의 [1.5, 2.5, ..., 6.5]에 눈금을 표시
ax.set_xticks(np.linspace(1.5, 6.5, 6))
# 주사위 눈의 값은 [1, 2, 3, 4, 5, 6]
ax.set_xticklabels(np.arange(1, 7))
ax.set_xlabel('dice')
ax.set_ylabel('relative frequency')
plt.show()

 

위의 그래프와 같이, 주사위의 횟수가 굉장히 많아질수록, 각각의 면에 속하는 확률은 동일해진다.