Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 블로그
- 리눅스
- 파이썬 시각화
- 한빛미디어
- 독후감
- MySQL
- 딥러닝
- Python
- Pandas
- MATLAB
- SQL
- Google Analytics
- 서평단
- Blog
- 파이썬
- python visualization
- 한빛미디어서평단
- matplotlib
- 시각화
- Linux
- 통계학
- Ga
- 매틀랩
- Tistory
- 서평
- tensorflow
- Visualization
- 티스토리
- 텐서플로
- 월간결산
Archives
- Today
- Total
pbj0812의 코딩 일기
[통계학] python을 통한 자유도에 따른 카이제곱 분포 그리기 본문
0. 목표
- python을 통한 자유도에 따른 카이제곱 분포 그리기
- 카이제곱 분포는 정규분포를 따르는 여러 데이터를 한꺼번에 취급할 수 있어, 분산분석에 이용가능
1. 실습
1) library 호출
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
2) 카이제곱 리스트 생성
- np.normal.random을 통해 정규분포의 무작위 값 획득
- 1000번을 돌려 각 값에 대한 제곱값을 획득
def normal(inp):
result = []
for i in range(1,1001):
tmp = np.random.normal(size = inp)
dummy = 0
for i in range(inp):
tmp2 = tmp[i] ** 2
dummy += tmp2
result.append(dummy)
return result
3) 얻은 값들을 조건에 따른 데이터 그룹화
- 실수의 값을 그대로 사용하면 값이 일치하지 않으므로, 1 간격의 범주화
- 20이 넘는 값들은 over20으로 저장하게 함
def make_group(inp):
num_0 = 0
num_1 = 0
num_2 = 0
num_3 = 0
num_4 = 0
num_5 = 0
num_6 = 0
num_7 = 0
num_8 = 0
num_9 = 0
num_10 = 0
num_11 = 0
num_12 = 0
num_13 = 0
num_14 = 0
num_15 = 0
num_16 = 0
num_17 = 0
num_18 = 0
num_19 = 0
num_20 = 0
for i in inp:
if i >= 20:
num_20 += 1
elif i >= 19:
num_19 += 1
elif i >= 18:
num_18 += 1
elif i >= 17:
num_17 += 1
elif i >= 16:
num_16 += 1
elif i >= 15:
num_15 += 1
elif i >= 14:
num_14 += 1
elif i >= 13:
num_13 += 1
elif i >= 12:
num_12 += 1
elif i >= 11:
num_11 += 1
elif i >= 10:
num_10 += 1
elif i >= 9:
num_9 += 1
elif i >= 8:
num_8 += 1
elif i >= 7:
num_7 += 1
elif i >= 6:
num_6 += 1
elif i >= 5:
num_5 += 1
elif i >= 4:
num_4 += 1
elif i >= 3:
num_3 += 1
elif i >= 2:
num_2 += 1
elif i >= 1:
num_1 += 1
elif i >= 0:
num_0 += 1
result = pd.DataFrame({
'standard' : ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', 'over20'],
'result' : [num_0, num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9, num_10,
num_11, num_12, num_13, num_14, num_15, num_16, num_17, num_18, num_19, num_20]
})
return result
4) 그래프 생성 모듈
- 여러 인풋에 대한 자동처리를 하기 위한 구성
def make_graph(inp):
# y pixel size
len_inp = len(inp)
size_y = 5 * len_inp
fig = plt.figure()
fig.set_size_inches(15, size_y)
for i in range(len_inp):
# subplot 추가
fig.add_subplot(len_inp, 1, i+1)
title = str(inp[i]) + ' df'
plt.title(title)
# 연산
result = make_group(normal(inp[i]))
plt.bar(result['standard'], result['result'])
plt.show()
5) 인풋 데이터 생성
- 각 값은 자유도를 의미
- 1 ~ 10까지
df = [i for i in range(1, 11)]
2. 결과
- 자유도가 커짐에 따라 분포가 오른쪽으로 이동하는 것을 볼 수 있음
make_graph(df)
3. 참고
- 자유도
'Science > 통계학' 카테고리의 다른 글
[통계학] python을 통한 모평균의 신뢰구간 계산 (0) | 2020.08.24 |
---|---|
[통계학] python으로 F 분포 그래프 그리기 (0) | 2020.08.19 |
[통계학] python으로 포아송 분포 함수 구현하기 (0) | 2020.08.18 |
[통계학] python을 통한 왜도 / 첨도 구현 (0) | 2020.08.16 |
[통계학] 동전 던지기 게임을 통한 정규분포 그래프 만들기 (0) | 2020.08.15 |
Comments