오늘은 통계학에 관해서 배우고 파이썬을 이용하여 프로그래밍을 하였다.
확률표본추출,,,,
모수 추정의 오차 : 표본통계량을 이용하여 모수를 추리하는 과정을 모수 추정이라한다.표본오차 : 모집단을 완벽하게 대표할 수 있는 표본을 선택하지 못해서 나타남
편향과 우연에 의해 발생편향 : 표본 통계랑이 일관성있게 한쪾 방향에 치우치는 것
변동 : 동일한 규모의 표본을 여러 번 추출한다고 했을 때, 각 표본에서 산출된 표본 통계랑들이 동일하지 않고 우연히 각기 다른 값을 갖는다. 이를 표본 변동이라 부른다.
우연에 의한 표본오차는 표본의 크기를 증가시킴으로써 감소 가능,
편향에 의한 오차는 단순 무작위 표본추출방법으로 해결 가능표본분포 : 조금씩 차이나는거,,,? 표본 통계량과 모수가 어느 정도 차이가 나는지,,
확률분포 : 각각의 변수값에 대한 발생 확률을 나타내는것
함수의 형태로 볼 수 있다 => 확률분포함수
확률밀도함수 : 주어진 변량이 정해진 구간 안에 존재할 확률
중신극한정리 : ?
N (평균, 표준편차^2)
가설 : 연구 문제에 대한 최선의 예측 또는 잠정적인 해답으로 정의한다
대립가설
귀무가설
양측검정
단측검정가설의 설정 : 대립 가설을 결정한다.
검정방법의 결정 : 가설 검정에 활용할 통계적 분포를 결정한다
유의 수준의 결정 : 유의수준이란 가설검정에서 용냡될 수 있는 오류의 정도를 의미한다.
검정통계량과 유의확률 계산
가설 채택여부 결정
import numpy as np
import scipy as sp
##소수점 이하 자릿수
%precision 3
fish_data = np.array([2,3,3,4,4,4,4,5,5,6]) # 물고기의 몸길이라는 1종류의 데이터 1변량 데이터
fish_data
sp.sum(fish_data)
np.sum(fish_data)
fish_data.sum()
sum(fish_data)
len(fish_data)
N = len(fish_data)
sum_value = sp.sum(fish_data)
mu = sum_value / N # 데이터 총합 / 데이터 총 개수 = 평균
mu
sp.mean(fish_data)
fish_data
sigma_2_sample = sp.sum((fish_data - mu) ** 2) / N # 그림으로 설명하기
sigma_2_sample
fish_data
fish_data - mu # mu = 4
(fish_data - mu) ** 2
sp.sum((fish_data - mu) ** 2) # 제곱의 총합
sp.sum((fish_data - mu) ** 2) /10 # 제곱의 총합을 샘플 사이즈로 나누기
sp.var(fish_data, ddof = 0) # sp.var를 사용하면 분산을 쉽게 구할수 있다.
# 분산은 데이터가 흩어진 정도를 나타냄
sigma_2 = sp.sum((fish_data - mu) ** 2) / (N - 1) #불편분산을 구할 시 n-1로 나누어 준다
sigma_2
sp.var(fish_data, ddof = 1) # ddof = 1 인 경우 불편분산추정량을 이용한 경우임
sigma = sp.sqrt(sigma_2) # 표준편차 : 분산 데이터 측정 단위 제곱으로 표시 ,
# 표준편차는 원데이터와 같은 측정단위로 분석하여 루트 씌어줌
sigma
sp.std(fish_data, ddof = 1) # 불편분산에 루트값을 취해서 표준편차 구할시 ddof = 1 꼭 넣어주기 !!
fish_data
fish_data - mu # 표준화 하는 방법 _ 노트 참조 하기 표준화 : x -평균 / 표준편차
fish_data - mu/sigma
sp.mean(standard) #표준정규분포 평균 0
sp.std(standard, ddof = 1) #표준정규분포 표준편차 1
fish_data
sp.amax(fish_data) #최대값
sp.amin(fish_data) #최소값
sp.median(fish_data) #중앙값 (4+4)/2
fish_data_2 = np.array([2,3,3,4,4,4,4,5,5,100])
sp.mean(fish_data_2)
sp.median(fish_data_2) #(4+4)/2
from scipy import stats
fish_data_3 = np.array([1,2,3,4,5,6,7,8,9])
stats.scoreatpercentile(fish_data_3, 25) # 사분위수 구하기 stats.scoreatpercentile 25%
stats.scoreatpercentile(fish_data_3, 75) # 사분위수 구하기 stats.scoreatpercentile 75%
stats.scoreatpercentile(fish_data_3, 50)
import pandas as pd
import scipy as sp
%precision 3
fish_multi = pd.read_csv("3-2-1-fish_multi.csv") # 물고기 종류별로 정리한 길이의 데이터 불러오기
print(fish_multi)
group = fish_multi.groupby("species") # groupby 함수 이용하여 그룹화 하고 평균 구하기
print(group.mean())
print(group.std(ddof = 1)) # 표준편차 구하기 (ddof =1 불편분산 사용 )
group.describe()
shoes = pd.read_csv("3-2-2-shoes.csv") # 구두 판매 데이터 불러오기
print(shoes)
cross = pd.pivot_table(
data = shoes, #데이터 지정
values = "sales", #데이터를 모을 열 지정
aggfunc = "sum", # 데이터를 모을 함수 지정
index = "store", # 인덱스 지정 지정
columns = "color" #컬럼 지정
)
print(cross)
cov_data = pd.read_csv("3-2-3-cov.csv") # Covariance 데이터 불러오기
print(cov_data)
x = cov_data["x"]
y = cov_data["y"]
N = len(cov_data)
mu_x = sp.mean(x)
mu_y = sp.mean(y)
mu_x
mu_y
cov_sample = sum((x - mu_x) * (y - mu_y)) / N
cov_sample
cov = sum((x - mu_x) * (y - mu_y)) / (N - 1)
cov
sp.cov(x, y, ddof = 1)
sp.cov(x, y, ddof = 1)
import numpy as np
x = np.array([1,2,3,4,5])
y = np.array([-1,-2,-3,-4,-5])
x = np.array([1,2,3,4,5])
y = np.array([-1,-2,-3,-4,-5])
np.matmul(x.transpose(),y) # x 전치행렬
np.matmul(x,y.transpose())
x*y # 일반 곱셈
np.multiply(x,y) # 일반 곱셈
A = np.matrix ([[1,2,3],[4,5,6]])
A
A.transpose()
A.T
a = np.array([[1,0],[0,1]])
b = np.array([[1,2],[3,4]])
a+b
a-b
a = np.array([[1,0],[0,1]])
b = np.array([[1,2],[3,4]])
a
b
a*b #일반 곱셈
np.multiply(a,b) #일반 곱셈
np.matmul(a,b) #행렬 곱셈
np.dot(a,b) #행렬 곱셈
a@b
np.eye(3)
np.eye(3).astype(int)
np.diag([1,2,3])
a = np.array([[1,2,3],[1,3,3],[1,2,4]])
a
inv = np.linalg.inv(a) # 역행렬
inv
np.dot(a,inv)
fu = np.full((2,4),3)
fu
b = np.arange(24).reshape(4,3,2) # 3x2 행렬 4개
b
b[0, : , :] # 인덱스 0번째
b[1, 1 , :]
b[1, 1 , 0] # 67p 오류
A = np.arange(6).reshape([2,3])
B = np.arange(12).reshape([3,4])
A
B
np.matmul(A,B)
np.dot(A,B)
A@B
A = np.arange(2*2*4).reshape([2,2,4])
B = np.arange(2*2*4).reshape([2,4,2])
A
B
np.matmul(A,B) # 3차원 이상의 행렬곱을 수행할 경우 dot , matmul 결과다름
np.dot(A,B)
A
A = np.arange(6).reshape([2,3]) # dot은 행렬과 상수의 곱셈 허용
np.dot(A,2)
np.matmul(A,2) #matmul 은 행렬과 상수의 곱 허용하지 않음
import numpy as np
import pandas as pd
%precision 3
from matplotlib import pyplot as plt
%matplotlib inline
x = np.array([0,1,2,3,4,5,6,7,8,9])
y = np.array([2,3,4,3,5,4,6,7,4,8])
plt.plot(x, y, color = 'black')
plt.title("lineplot matplotlib")
plt.xlabel("x")
plt.ylabel("y")
import seaborn as sns
sns.set()
plt.plot(x, y, color = 'black')
plt.title("lineplot seaborn")
plt.xlabel("x")
plt.ylabel("y")
fish_data = np.array([2,3,3,4,4,4,4,5,5,6])
fish_data
sns.distplot(fish_data, bins = 5, #distplot 히스토그램
color = 'black', kde = False)
sns.distplot(fish_data, bins = 5,
color = 'black', kde = True) #kde = 커널 밀도 함수
sns.distplot(fish_data, bins = 1,
color = 'black', kde = False)
sns.distplot(fish_data, color = 'red')
fish_multi = pd.read_csv("3-3-2-fish_multi_2.csv")
print(fish_multi)
print(fish_multi.groupby("species").describe())
length_a = fish_multi.query('species == "A"')["length"] #query 함수로 데이터 필터링 loc, iloc대신 사용
length_b = fish_multi.query('species == "B"')["length"]
length_a
length_b
sns.distplot(length_a, bins = 5,
color = 'red', kde = False)
sns.distplot(length_b, bins = 5,
color = 'gray', kde = False)
sns.boxplot(x = "species", y = "length",
data = fish_multi, color = 'gray')
fish_multi.groupby("species").describe()
sns.violinplot(x = "species", y = "length", #바이올린플롯
data = fish_multi, color = 'gray')
sns.barplot(x = "species", y = "length", #막대그래프
data = fish_multi, color = 'gray')
cov_data = pd.read_csv("3-2-3-cov.csv")
print(cov_data)
sns.jointplot(x = "x", y = "y", #jointplot 히스토그램, 산점도
data = cov_data, color = 'black')
iris = sns.load_dataset("iris")
iris.head(n = 3)
iris.groupby("species").mean()
sns.pairplot(iris, hue="species", palette='gray')
activities = [ 'eat','sleep','work','play']
slices = [3,7,8,6]
colors =['r','y','g','b']
plt.pie(slices, labels = activities, colors = colors,
startangle = 90 ,shadow = True,
explode = (0,0,0.1,0), radius = 1.5,
autopct = '%1.2f%%') # 부채꼴에 표시될 숫자의 형식 소수점 한자리
plt.show()
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()
# 표시 자리수 지정
%precision 3
# 그래프를 주피터 노트북에 그리기 위한 설정
%matplotlib inline
fish_5 = np.array([2,3,4,5,6]) # 5마리 물고리 예시
fish_5
np.random.choice(fish_5, size = 1, replace = False)
np.random.choice(fish_5, size = 3, replace = False)
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(1)
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(1) #난수 seed 사용하여 추출
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(1) #난수 seed의 인수가 같으면 랜덤값을 출력해도 같은 값이 나옴
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(3) #난수 seed 사용하여 추출
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(3) #난수 seed 사용하여 추출
np.random.choice(fish_5, size = 3, replace = False)
np.random.seed(1)
sp.mean(
np.random.choice(fish_5, size = 3, replace = False)
)
fish_100000 = pd.read_csv(
"3-4-1-fish_length_100000.csv")["length"]
fish_100000
len(fish_100000) #호수에 있는 물고기의 수는 100,000
sampling_result = np.random.choice(
fish_100000, size = 10, replace = False)
sampling_result
sp.mean(sampling_result)
sp.mean(fish_100000)
sp.std(fish_100000, ddof = 0)
sp.var(fish_100000, ddof = 0)
sns.distplot(fish_100000, kde = False, color = 'black')
x = np.arange(start = 1, stop = 7.1, step = 0.1)
x
stats.norm.pdf(x = x, loc = 4, scale = 0.8) #stats.norm.pdf 사용 loc= 평균값, scale = 표준편차
plt.plot(x, # 위 값을 가지고 확률밀도 그려보기
stats.norm.pdf(x = x, loc = 4, scale = 0.8),
color = 'black')
x = np.arange(start = 0, stop = 100, step = 0.1)
x
plt.plot(x, # 위 값을 가지고 확률밀도 그려보기
stats.norm.pdf(x = x, loc = 4, scale = 0.8),
color = 'black')
## pdf() missing 1 required positional argument: 'x'
plt.plot(x, # 위 값을 가지고 확률밀도 그려보기
stats.norm.pdf(x = x, loc = 4, scale = 0.8),
color = 'black')
sns.distplot(fish_100000, kde = False, #정규분포의 확률밀도와 모집단의 히스토그램 겹쳐보기
norm_hist = True, color = 'black') # norm_hist = True 면적이 1이 되는 히스토그램
plt.plot(x,
stats.norm.pdf(x = x, loc = 4, scale = 0.8),
color = 'black')
sampling_norm = stats.norm.rvs(
loc = 4, scale = 0.8, size = 10)
sampling_norm
sp.mean(sampling_norm)
x = np.random.normal(size =100) # 표준정규분포를 따르는 랜덤 데이터 100개 발생하고 히스토그램그리기
sns.displot(x)
x = np.random.normal(size =200)
sns.displot(x)
x = np.random.normal(size =1000)
sns.displot(x)
plt.hist(x,bins=10, color="green")
x = np.random.normal(size =100)
plt.boxplot(x)
plt.show
x = np.random.normal(size =1000)
plt.boxplot(x)
plt.show