[TIL] 21.05.13 t-test


1.str.contains()の使用とstr.replace()の使用
# ',' 가 들어있는지 확인
epop_trees_df['이팝나무'].str.contains(',').sum()


# out
# 6
#
pd.str.replace()をto numeric()に使用する
# ',' 지우고 숫자형으로 변환
epop_trees_df['이팝나무'] = pd.to_numeric(epop_trees_df['이팝나무'].str.replace(',', ''))
epop_trees_df.dtypes


# out
# 이팝나무    int64
#
2.scipyのstats t-test
from scipy import stats

epop_trees_df.mean()[0]
# 688.64

# 서울시의 구별 평균 이팝나무의 수가 400개일 것이다는 것에 대한 가설검정
ttest_epoptrees = stats.ttest_1samp(epop_trees_df, popmean=400)
ttest_epoptrees



# out
# Ttest_1sampResult(statistic=array([3.38092056]), pvalue=array([0.00247071]))
#
P-valueは0.002470...したがって0.05未満である.
貴務仮説を「誤り」と判断し、これに基づいて貴務仮説を却下することができる.
対立仮定ソウル市の違いは、ポプラの平均数が400本ではないことだ.
採用可能.
Two-Sample test
# 서울시 가로수 데이터에서 느티나무(Zelkova tree), 
# 왕벚나무(Yoshino_cherry_tree) 데이터만 추리기
zelkova_trees_df = pd.DataFrame(new_trees_df['느티나무'])
yoshino_cherry_trees_df = pd.DataFrame(new_trees_df['왕벚나무'])
print(zelkova_trees_df.head())
print(yoshino_cherry_trees_df.head())


# out
#   느티나무
# 1   619
# 2   460
# 3   373
# 4  1,975
# 5  1,057
#   왕벚나무
# 1   421
# 2   289
# 3   262
# 4   602
# 5   940


# 느티나무, 왕벚나무 데이터 숫자형 변환
zelkova_trees_df['느티나무'] = pd.to_numeric(zelkova_trees_df['느티나무'].str.replace(',', ''))
yoshino_cherry_trees_df['왕벚나무'] = pd.to_numeric(yoshino_cherry_trees_df['왕벚나무'].str.replace(',', ''))
print(zelkova_trees_df.dtypes)
print(yoshino_cherry_trees_df.dtypes)


# out
# 느티나무    int64
# dtype: object
# 왕벚나무    int64
# dtype: object


# 가설검정 테스트 전 평균 확인
print(zelkova_trees_df.mean(), yoshino_cherry_trees_df.mean())


# out
# 느티나무    1415.12
# dtype: float64 왕벚나무    1292.0
# dtype: float64
ケヤキと桜の平均データの仮定検査
H0=μ1=μ2H0=μ1=μ2H0=μ1=μ2
H1=μ1≠μ2H1=μ1\not=μ2H1=μ1​=μ2
貴無仮説
ケヤキと桜の平均数は同じはずです.(違いはありません)
対立仮説.
ケヤキと桜の平均数が違います.
t_samp_o_tail_ttest = stats.ttest_ind(zelkova_trees_df, yoshino_cherry_trees_df)
t_samp_o_tail_ttest


# out
# Ttest_indResult(statistic=array([0.4629256]), pvalue=array([0.64550969]))
ケヤキと桜の木のP-valueは0.64550...したがって,貴無仮定が正しい確率が50%以上で異なるとは断定できない.しかしt-statisticsの値は0.4629です...従って、一定の誤差があると判断できる.結局、高い仮定は信用できない.
Two-Sample One-tailed test
# one side tailed 계산
# one side tailed 일 경우 p-value 값을 2로 나누어 주어야 한다.
# 95% 신뢰도를 기준으로 유의수준(alpha) = 0.05
# 만약 귀무가설을 기각하고 왕벚나무의 평균이 느티나무보다 크다면 P-value / 2 < alpha & t_statistics < 0
# 만약 귀무가설을 기각하고 왕벚나무의 평균이 느티나무보다 작다면 P-value / 2 < alpha & t_statistics > 0
# 만약 귀무가설을 기각하지 않고 왕벚나무의 평균이 느티나무보다 크다면 P-value / 2 > alpha & t_statistics < 0
# 만약 귀무가설을 기각하지 않고 왕벚나무의 평균이 느티나무보다 작다면 P-value / 2 > alpha & t_statistics > 0
print("유의미하며 기각하며 왕벚나무의 평균이 느티나무보다 크다. = {}".format((ttest_pval / 2 < 0.05) & (ttest_t_statistics < 0)))
print("유의미하며 왕벚나무의 평균이 느티나무보다 작다. = {}".format((ttest_pval / 2 < 0.05) & (ttest_t_statistics > 0)))
print("유의미 하지 않으며 왕벚나무의 평균이 느티나무보다 크다. = {}".format((ttest_pval / 2 > 0.05) & (ttest_t_statistics < 0)))
print("유의미 하지 않으며 없으며 왕벚나무의 평균이 느티나무보다 작다. = {}".format((ttest_pval / 2 > 0.05) & (ttest_t_statistics > 0)))
#
#
# out
# 유의미하며 기각하며 왕벚나무의 평균이 느티나무보다 크다. = False
# 유의미하며 왕벚나무의 평균이 느티나무보다 작다. = False
# 유의미 하지 않으며 왕벚나무의 평균이 느티나무보다 크다. = False
# 유의미 하지 않으며 없으며 왕벚나무의 평균이 느티나무보다 작다. = True
3.サンプリング
import numpy as np
np.random.seed(123)

# 이팝나무 수 샘플 뽑기
samp_epop_tree = np.random.choice(epop_trees_df['이팝나무'].values, size=10, replace=False)
# replace=False -> 비복원 추출
print(samp_epop_tree)
print(samp_epop_tree.mean())


# out
# [1176  446  768 1281 1426  575  853  443  760  709]
# 843.7
System sampling関数
# 체계적 추출 함수 만들기 systematic_sampling
def systematic_sampling(data, step):
    indexes = np.arange(0, len(data), step=step)
    systematic_sample = data.iloc[indexes]
    return systematic_sample
   
# 샘플 데이터의 데이터 프레임
df = pd.DataFrame(data=sample_data, columns=['num'])

# 체계적 추출 systematic sampling
systematic_sample = systematic_sampling(df, 5)
print(systematic_sample.head())
print('-'*20)
print("추출 갯수 :", len(systematic_sample))


# out

#     num
# 0     1
# 5     6
# 10   11
# 15   16
# 20   21
# --------------------
# 추출 갯수 : 20