# 기초 통계
- 데이터를 수집하고 표본 추출하는 방법
- 중심의 측정, 분산, 상대적 비교
- z-score를 사용해 데이터 정규화
- 경험적 법칙
## 통계란?
통계 분야의 목표는 우리 주변의 세계를 설명하고 모델화하는 것이다. 그렇게 하려면 모집단을 살펴봐야 한다.
실험이나 모델의 전체 주제로서 `모집단`population 을 정의할 수 있다.
예를 들어 1000명의 직원에게 모두 물어보고 100명이 약물을 사용 중이라면 약물 사용률은 10%다. 여기에서 모수는 10%다.
통계는 모집단의 표본이 가진 특성을 설명하는 수치적 측정치로 정의할 수 있다.
통계는 단지 모수의 추정치다. 모집단의 하위 집합을 설명해 전체 모집단을 설명하려고 시도하는 숫자다.
## 데이터를 얻고 표본 추출하는 방법
### 데이터 얻기
분석을 위해 데이터를 수집하는 두 가지 주요 방법이 있는데, `관측` 및 `실험`이다.
#### 관측
구체적인 특성을 측정하지만 연구 대상을 변경하지 않을 경우 `관측`Observational 방법을 통해 데이터를 얻을 수 있다.
#### 실험
`실험`Experimental은 대상에 대한 효과를 관측하고 처리하는 것으로 구성된다. 실험의 대상을 실험 단위라고 한다.
## 표본 추출 데이터
통계는 모집단의 표본을 측정한 결과라는 것을 기억하자. 측정하는 표본을 무엇으로 할지 결정하는 매우 일반적인 방법 두 가지에 대해 이야기하려고 한다. 이 절에서는 표본 크기와 표본 구성원을 결정하는 가장 일반적인 방법인 무작위 표본 추출이라는 주요 표본 추출 유형에 대해 설명한다.
### 확률 표본 추출
확률 표본 추출은 모집단에서 표본을 추출하는 방법으로, 모든 사람이 선택될 가능성이 있지만, 그 확률의 수는 사용자마다 다를 수 있다. 가장 간단한 확률 표본 추출법은 무작위 표본 추출이다.
### 무작위 표본 추출
`교란 요인`confounding factor 은 직접 측정하는 것이 아니라 측정되는 변수를 연결하는 변수다.
#### 불균등 확률 표본 추출
## 통계를 측정하는 방법
### 중심 측정
중심의 측정은 데이터셋의 가운데 또는 중심을 정의하는 방법이다.
중심 측정값은 데이터셋의 '가운데' 값이다.
#### 편차 측정
중심의 측정은 데이터의 가운데를 정량화하는 데 사용되지만, 이제는 수집한 데이터가 어떻게 '퍼져 있는가'를 측정하는 방법을 모색할 것이다.
표준 편자를 계산 하는 일반적인 수식은 다음과 같다.
$$
s = \frac{\sum(x-\bar{x})^2}{n}
$$
여기서는 다음과 같다.
- s 는 표본 표준 편차다.
- x 는 각각의 개별 데이터 포인트이다.
- $\bar{x}$ 는 데이터의 평균이다.
- n 은 데이터 포인트의 수다.
파이썬 접근 방식을 취하면 프로그래밍 방식으로 이 모든 작업을 수행할 수 있다.
```python
np.std(friends) # == 425.2
```
### 상대적 위치의 측정
상대적 위치의 척도를 만들기 위해 중심과 편차의 척도를 결합할 수 있다.
전체 데이터셋과 관련해서 특정 데이터 값이 위치하는 것을 측정하는 것이 `편차 측정값`measure of variation이다.
통계에서 매우 중요한 값인 z-score를 알아보자.
z-score 는 단일 데이터 값이 평균으로부터 얼마나 멀리 떨어져 있는지 알려주는 방법이다.
x 데이터 값의 z-score 는 다음과 같다.
$$
z = \frac{x-\bar{x}}{s}
$$
- x 는 데이터 포인트다.
- $\bar{x}$ 는 평균이다.
- s 는 표준 편차다.
```python
z_scores = []
m = np.mean(friends)
s = np.std(friends)
for friend in friends:
z = (friend - m)/s
z_scores.append(z)
```
데이터의 성격을 감안할 때 가설에는 다음과 같은 세 가지 옵션만 있다.
- 온라인 친구들의 수와 행복 사이에 긍정적인 연관성이 있다. (하나가 올라갈 때 다른 하나도 올라간다)
- 그들 사이에 부정적인 연관성이 있다. (친구의 수가 늘어나면 행복이 줄어든다.)
- 변수 간에 연관성이 없다 (하나가 변경될 때 다른 하나는 실제로 그렇게 많이 변경되지 않는다.)
`상관 계수` correlation coefficients 는 두 변수 간 연관성/관계의 강도를 설명하는 양적 측정이다.
```python
friends = [109, 1017, 1127, 418, 625, 957, 89, 950, 946, 797, 981, 125, 455, 731, 1640, 485, 1309, 472, 1132, 1773, 906, 531, 742, 621]
happiness = [.8, .6, .3, .6, .6, .4, .8, .5, .4, .3, .3, .6, .2, .8, 1, .6, .2, .7, .5, .3, .1, 0, .3, 1]
import pandas as pd
df = pd.DataFrame({'friends':friends, 'happiness':happiness})
df.head()
```
|
friends |
happiness |
0 |
109 |
0.8 |
1 |
1017 |
0.6 |
2 |
1127 |
0.3 |
3 |
418 |
0.6 |
4 |
625 |
0.6 |
```python
# 변수들 사이의 상관관계
df.corr()
```
|
friends |
happiness |
friends |
1.000000 |
-0.216199 |
happiness |
-0.216199 |
1.000000 |
```python
from sklearn import preprocessing
df_scaled = pd.DataFrame(preprocessing.scale(df), columns=['friends_scaled', 'happiness_scaled'])
df_scaled.head()
```
|
friends_scaled |
happiness_scaled |
0 |
-1.599495 |
1.153223 |
1 |
0.536040 |
0.394939 |
2 |
0.794750 |
-0.742486 |
3 |
-0.872755 |
0.394939 |
4 |
-0.385909 |
0.394939 |
```python
# 평균의 표준 편차 1 이내의 사람들의 비율 찾기
within_1_std = df_scaled[(df_scaled['friends_scaled'] <= 1) & (df_scaled['friends_scaled'] >= -1)].shape[0]
within_1_std / float(df_scaled.shape[0])
```
0.75
```python
# 평균의 표준 편차 2 이내의 사람들의 비율 찾기
within_2_std = df_scaled[(df_scaled['friends_scaled'] <= 2) & (df_scaled['friends_scaled'] >= -2)].shape[0]
within_2_std / float(df_scaled.shape[0])
```
0.9166666666666666
```python
# 평균의 표준 편차 3 이내의 사람들의 비율 찾기
within_3_std = df_scaled[(df_scaled['friends_scaled'] <= 3) & (df_scaled['friends_scaled'] >= -3)].shape[0]
within_3_std / float(df_scaled.shape[0])
```
1.0