์์ธ์ ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋
๋ฐ์ดํฐ ๋ถ์ ๊ณผ์
1.
๊ฐ์ค ์ค์
2.
๋ฐ์ดํฐ ์์ง
3.
๋ฐ์ดํฐ ๊ฐ๊ณต
4.
๋ฐ์ดํฐ ๋ถ์
5.
๊ฐ์ค ๊ฒ์
6.
๊ฒฐ๋ก ๋์ถ
โข
๊ฐ์ค ๊ฒ์
: ๊ฐ์ค์ด ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ์ง ํ๋จํ๋ ๊ณผ์
โข
t ๊ฒ์ ๋ถ์๊ธฐ๋ฒ : ๋ ๋ฐ์ดํฐ ํ๊ท ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ ๋ถ์ ๊ธฐ๋ฒ
1.
๊ฐ์ค ์ค์
"์์ธ ์ค๊ตฌ์ ์ฑ๋ถ๊ตฌ ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."
2.
๋ฐ์ดํฐ ์์ง
โข
์์ธํน๋ณ์ ๋๊ธฐํ๊ฒฝ ์ ๋ณด
โข
[๋๊ธฐ์ง ํต๊ณ]
โข
์ธก์ ๊ธฐ๊ฐ : 2023๋
5์ ๋ฏธ์ธ๋จผ์ง ์ ์ฒด
โข
[์์
๋ค์ด๋ก๋]
3.
๋ฐ์ดํฐ ๊ฐ๊ณต
a.
์์
๋ก ์ ์ฒ๋ฆฌ
โข
1~4ํ ์ญ์
โข
"๊ตฌ๋ถ" ์
๋ณํฉ ํด์
โข
1ํ ๋ ์ง ์์ โ ํ
์คํธ ์์ ๋ณ๊ฒฝ
โข
์
๋ฐ์ดํฐ ์ ํ โ ๋ณต์ฌ โ ์๋์ ๋ถ์ฌ๋ฃ๊ธฐ(ํ/์ด๋ฐ๊ฟ ์ต์
)
โข
1์ผ โ 2023-05-01 ๋ ์งํ์์ผ๋ก ๋ณ๊ฒฝ
โข
1~31์ผ ๊น์ง ์๋์ฑ์ฐ๊ธฐ
โข
์์
ํ์ผ ์ ์ฅ : dust.xlsx
b.
ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ
# ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ
# ์ฑ๋ถ๊ตฌ, ์ค๊ตฌ ๋ฐ์ดํฐ๋ง ์ถ์ถ
# ๊ฒฐ์ธก์น ํ์ธ
Plain Text
๋ณต์ฌ
4.
๋ฐ์ดํฐ ๋ถ์
5.
๊ฐ์ค ๊ฒ์
โข
๊ฐ์ค ๊ฒ์ : "๊ฐ์ค์ ํฉ๋น์ฑ์ ํ๋จํ๋ ๊ณผ์ "
โข
ํต๊ณ์ ์ถ๋ก ์ ์ฌ์ฉํ์ฌ ์ฃผ์ฅํ๊ณ ์ ํ๋ ๊ฐ์ค์ด ๋ฐ์ดํฐ์ ์ผ์นํ๋์ง๋ฅผ ๊ฒ์ฆํ๋ ๊ณผ์
โข
๊ฐ์ค ๊ฒ์ ๊ด๋ จ ํจ์
โฆ
bartlett(๋ฐ์ดํฐ1, ๋ฐ์ดํฐ2) or levene(๋ฐ์ดํฐ1, ๋ฐ์ดํฐ2)
: ๋ ๊ฐ์ ๋
๋ฆฝ์ ์ธ ์ง๋จ์ ๋ถ์ฐ ๋น๊ต
โฆ
p-value <= 0.05 : ์๋ฏธ๊ฐ ์๋ ์ฐจ์ด๊ฐ ์๋ค ("๋ถ์ฐ์ด ๋ค๋ฅด๋ค")
โฆ
p-value > 0.05 : ์๋ฏธ๊ฐ ์๋ ์ฐจ์ด๊ฐ ์๋ค ("๋ถ์ฐ์ด ๊ฐ๋ค") โ "๋ฑ๋ถ์ฐ"
โฆ
ttest_ind(๋ฐ์ดํฐ1, ๋ฐ์ดํฐ2, var.equal = ๋ฑ๋ถ์ฐ์ฑ ์ฌ๋ถ)
: ๋ ๊ฐ์ ๋
๋ฆฝ์ ์ธ ์ง๋จ์ ํ๊ท ์ ๋น๊ต
โฆ
p-value <= 0.05 : ์๋ฏธ๊ฐ ์๋ ์ฐจ์ด๊ฐ ์๋ค ("ํ๊ท ์ด ๋ค๋ฅด๋ค")
โฆ
p-value > 0.05 : ์๋ฏธ๊ฐ ์๋ ์ฐจ์ด๊ฐ ์๋ค ("ํ๊ท ์ด ๊ฐ๋ค")
โข
๊ฐ์ค ๊ฒ์ ๊ณผ์
a.
๊ท๋ฌด๊ฐ์ค, ๋๋ฆฝ๊ฐ์ค ์ค์
โข
๊ท๋ฌด๊ฐ์ค : "์ฃผ์ฅ์ด ํจ๊ณผ๊ฐ ์๊ฑฐ๋ ์ฐจ์ด๊ฐ ์๋ค"
โข
๋๋ฆฝ๊ฐ์ค : "์ฃผ์ฅ์ด ํจ๊ณผ๊ฐ ์๊ฑฐ๋ ์ฐจ์ด๊ฐ ์๋ค"
b.
์ ์์์ค ์ค์
โข
๊ท๋ฌด ๊ฐ์ค์ ๊ธฐ๊ฐํ๊ธฐ ์ํ p-value ๊ฐ์ ๊ธฐ์ค ์ค์
โข
์ผ๋ฐ์ ์ผ๋ก 0.05
c.
๊ฒ์ ๋ฐฉ๋ฒ ์ ํ
โข
ํ๊ท ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ ๊ฒฝ์ฐ : t๊ฒ์ ๋ถ์๊ธฐ๋ฒ - t.test() ํจ์ ์ฌ์ฉ
d.
p-value ๋์ถ
โข
p-value (probability value)
: ๊ณ์ฐ๋ ํต๊ณ๋์ด ๊ท๋ฌด๊ฐ์ค์ ๋ถํฉ๋๋ ์ ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ
โข
์ ์ ํ ๋ถ์๊ธฐ๋ฒ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ p-value ๋ฅผ ๊ฒฐ๊ณผ๋ก ์ป์
e.
๊ฒฐ๋ก ๋์ถ
โข
0.05 ๋ณด๋ค ํฌ๋ฉด ํด์๋ก ํต๊ณ๋์ด ๋์ฑ ๋ ๊ท๋ฌด๊ฐ์ค์ ๋ถํฉํจ
โข
0.05 ๋ณด๋ค ์์ผ๋ฉด ํต๊ณ์ ์ผ๋ก ์๋ฏธ์๋ ์ฐจ์ด๊ฐ ์๋ค๊ณ ํ๋จ
โ ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ๊ณ ๋๋ฆฝ๊ฐ์ค ์ฑํ
6.
๊ฒฐ๋ก ๋์ถ
โข
๊ท๋ฌด๊ฐ์ค
: "์์ธ ์ค๊ตฌ์ ์ฑ๋ถ๊ตฌ ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."
โข
t.test()
โฆ
p-value = 0.1115 > 0.05
โ "๊ท๋ฌด๊ฐ์ค ์ฑํ"
โ "์์ธ ์ค๊ตฌ์ ์ฑ๋ถ๊ตฌ ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."
์ค์ต์ฝ๋
โข
์ฑ๋ถ๊ตฌvs์ค๊ตฌ
# ์์ธ์ ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
# !pip install pandas openpyxl
import os
import pandas as pd
program_path = os.path.abspath(__file__)
path = os.path.dirname(program_path)
input_file = path + '/dust.xlsx'
# ์์
ํ์ผ ์ฝ๊ธฐ
dust_data = pd.read_excel(input_file)
# ์ฑ๋ถ๊ตฌ, ์ค๊ตฌ ๋ฐ์ดํฐ๋ง ์ถ์ถ
dust_data_select = dust_data[["๋ ์ง", "์ฑ๋ถ๊ตฌ", "์ค๊ตฌ"]]
print(dust_data_select.head()) # ๋ฐ์ดํฐํ๋ ์์ ์ฒ์ 5๊ฐ์ ํ์ ๊ฐ์ ธ์ ์ถ๋ ฅ
print('--------------------------------')
# ๊ฒฐ์ธก์น ํ์ธ
print('๊ฒฐ์ธก์น : ')
print(dust_data_select.isna().sum())
print('--------------------------------')
# ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋ ๊ธฐ์ ํต๊ณ๋
print('์ฑ๋ถ๊ตฌ ๋ฏธ์ธ๋ฒ์ง ๊ธฐ์ ํต๊ณ๋ : ')
print(dust_data_select["์ฑ๋ถ๊ตฌ"].describe())
print('--------------------------------')
print('์ค๊ตฌ ๋ฏธ์ธ๋ฒ์ง ๊ธฐ์ ํต๊ณ๋ : ')
print(dust_data_select["์ค๊ตฌ"].describe())
print('--------------------------------')
# ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋ ๋ฑ๋ถ์ฐ์ฑ ๊ฒ์ ๋ฐ ํ๊ท ์ฐจ์ด ๊ฒ์
from scipy.stats import bartlett, levene, f_oneway
# Bartlett's test ๋๋ Levene's test๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ์ ๋ฑ๋ถ์ฐ์ฑ์ ๊ฒ์
print('์ค๊ตฌ-์ฑ๋ถ๊ตฌ ๋ฑ๋ถ์ฐ์ฑ์ ๊ฒ์ ')
bartlett_statistic, bartlett_p_value = bartlett(dust_data_select["์ค๊ตฌ"], dust_data_select["์ฑ๋ถ๊ตฌ"])
levene_statistic, levene_p_value = levene(dust_data_select["์ค๊ตฌ"], dust_data_select["์ฑ๋ถ๊ตฌ"])
print("Bartlett's test - Statistic:", bartlett_statistic, "p-value:", bartlett_p_value)
print("Levene's test - Statistic:", levene_statistic, "p-value:", levene_p_value)
print('--------------------------------')
# f_oneway() (One-Way ANOVA): "์ผ์๋ถ์ฐ๋ถ์"
# - ANOVA(Analysis of Variance)์ ์ผ์๋ถ์ฐ๋ถ์(One-Way ANOVA)์ ์ํํ๋ ํจ์
# - ์ธ ๊ฐ ์ด์์ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด๋ฅผ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
# ๋ฑ๋ถ์ฐ์ฑ์ด ๋ง์กฑ๋๋ฉด ANOVA๋ฅผ ์ํํ์ฌ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด ๊ฒ์
# ANOVA(Analysis of Variance) : ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ ํต๊ณ์ ์ธ ๋ฐฉ๋ฒ
if bartlett_p_value > 0.05 and levene_p_value > 0.05:
print('์ค๊ตฌ-์ฑ๋ถ๊ตฌ ํ๊ท ์ฐจ์ด ๊ฒ์ ')
f_statistic, f_p_value = f_oneway(dust_data_select["์ค๊ตฌ"], dust_data_select["์ฑ๋ถ๊ตฌ"])
print("F-statistic:", f_statistic, "p-value:", f_p_value)
else:
print("๋ฑ๋ถ์ฐ์ฑ์ ๋ง์กฑํ์ง ์์ ANOVA๋ฅผ ์ํํ ์ ์์ต๋๋ค.")
print('----------------------------------------------------------------')
# ttest_ind() (Independent Samples t-test):
# - ๋
๋ฆฝํ๋ณธ t-๊ฒ์ (Independent Samples t-test)์ ์ํํ๋ ํจ์
# - ๋
๋ฆฝํ๋ณธ t-๊ฒ์ ์ ๋ ๊ทธ๋ฃน์ ํ๊ท ์ฐจ์ด๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์ํ์ง๋ฅผ ๊ฒ์ ํฉ๋๋ค.
# - ๋ ๊ฐ์ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด๋ฅผ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
# * equal_var= [True: ๋ฑ๋ถ์ฐ์ฑ ๊ฐ์ , False: ๋ฑ๋ถ์ฐ์ฑ ๊ฐ์ โ(๋ถ์ฐ์ด ๋ค๋ฆ์ ๊ฐ์ )]
# # ์ง์ญ๋ณ ํ๊ท ์ฐจ์ด ๊ฒ์ ํ๊ธฐ
from scipy.stats import ttest_ind
t_statistic, p_value = ttest_ind(dust_data_select["์ค๊ตฌ"], dust_data_select["์ฑ๋ถ๊ตฌ"], equal_var=True)
print("T-statistic:", t_statistic)
print("p-value:", p_value)
print('----------------------------------------------------------------')
print('*** ๊ฒฐ๋ก ๋์ถ ***')
if p_value > 0.05:
print('๊ท๋ฌด๊ฐ์ค ์ฑํ - "์์ธ ์ค๊ตฌ์ ์ฑ๋ถ๊ตฌ ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."')
else:
print('๋๋ฆฝ๊ฐ์ค ์ฑํ - "์์ธ ์ค๊ตฌ์ ์ฑ๋ถ๊ตฌ ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."')
# ์ฑ๋ถ๊ตฌ์ ์ค๊ตฌ ๋ฏธ์ธ๋จผ์ง ๋๋ ์์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
import matplotlib.pyplot as plt
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
plt.figure(figsize=(8, 6))
dust_data_select.boxplot(column=["์ฑ๋ถ๊ตฌ", "์ค๊ตฌ"])
plt.title("finedust")
plt.xlabel("AREA")
plt.ylabel("FINEDUST_PM")
plt.show()
Python
๋ณต์ฌ
โข
์ง์ญ์ ์
๋ ฅํ์ฌ ๊ฒ์ ํ๊ธฐ
# ์์ธ์ ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
# !pip install pandas openpyxl
import os
import pandas as pd
# ์์ด๊ตฌvs์ค๋๊ตฌ : ๋๋ฆฝ๊ฐ์ค
# ๊ฐ๋จ๊ตฌvs์ข
๋ก๊ตฌ : ๊ท๋ฌด๊ฐ์ค
program_path = os.path.abspath(__file__)
path = os.path.dirname(program_path)
input_file = path + '/dust.xlsx'
# ์์
ํ์ผ ์ฝ๊ธฐ
dust_data = pd.read_excel(input_file)
a_group = input('A ์ง์ญ : ')
b_group = input('B ์ง์ญ : ')
# A, B ์ง์ญ๋ง ๋ฐ์ดํฐ๋ง ์ถ์ถ
dust_data_select = dust_data[["๋ ์ง", a_group, b_group]]
print(dust_data_select.head()) # ๋ฐ์ดํฐํ๋ ์์ ์ฒ์ 5๊ฐ์ ํ์ ๊ฐ์ ธ์ ์ถ๋ ฅ
print('--------------------------------')
# ๊ฒฐ์ธก์น ํ์ธ
print('๊ฒฐ์ธก์น : ')
print(dust_data_select.isna().sum())
print('--------------------------------')
# ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋ ๊ธฐ์ ํต๊ณ๋
print('{} ๋ฏธ์ธ๋ฒ์ง ๊ธฐ์ ํต๊ณ๋ : '.format(a_group))
print(dust_data_select[a_group].describe())
print('--------------------------------')
print('{} ๋ฏธ์ธ๋ฒ์ง ๊ธฐ์ ํต๊ณ๋ : '.format(b_group))
print(dust_data_select[b_group].describe())
print('--------------------------------')
# ์ง์ญ๋ณ ๋ฏธ์ธ๋จผ์ง ๋๋ ๋ฑ๋ถ์ฐ์ฑ ๊ฒ์ ๋ฐ ํ๊ท ์ฐจ์ด ๊ฒ์
from scipy.stats import bartlett, levene, f_oneway
# Bartlett's test ๋๋ Levene's test๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ์ ๋ฑ๋ถ์ฐ์ฑ์ ๊ฒ์
print('{}-{} ๋ฑ๋ถ์ฐ์ฑ์ ๊ฒ์ '.format(a_group, b_group))
bartlett_statistic, bartlett_p_value = bartlett(dust_data_select[b_group], dust_data_select[a_group])
levene_statistic, levene_p_value = levene(dust_data_select[b_group], dust_data_select[a_group])
print("Bartlett's test - Statistic:", bartlett_statistic, "p-value:", bartlett_p_value)
print("Levene's test - Statistic:", levene_statistic, "p-value:", levene_p_value)
print('--------------------------------')
# f_oneway() (One-Way ANOVA): "์ผ์๋ถ์ฐ๋ถ์"
# - ANOVA(Analysis of Variance)์ ์ผ์๋ถ์ฐ๋ถ์(One-Way ANOVA)์ ์ํํ๋ ํจ์
# - ์ธ ๊ฐ ์ด์์ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด๋ฅผ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
# ๋ฑ๋ถ์ฐ์ฑ์ด ๋ง์กฑ๋๋ฉด ANOVA๋ฅผ ์ํํ์ฌ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด ๊ฒ์
# ANOVA(Analysis of Variance) : ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ ํต๊ณ์ ์ธ ๋ฐฉ๋ฒ
if bartlett_p_value > 0.05 and levene_p_value > 0.05:
print('{}-{} ํ๊ท ์ฐจ์ด ๊ฒ์ '.format(a_group, b_group))
f_statistic, f_p_value = f_oneway(dust_data_select[b_group], dust_data_select[a_group])
print("F-statistic:", f_statistic, "p-value:", f_p_value)
else:
print("๋ฑ๋ถ์ฐ์ฑ์ ๋ง์กฑํ์ง ์์ ANOVA๋ฅผ ์ํํ ์ ์์ต๋๋ค.")
print('----------------------------------------------------------------')
# ttest_ind() (Independent Samples t-test):
# - ๋
๋ฆฝํ๋ณธ t-๊ฒ์ (Independent Samples t-test)์ ์ํํ๋ ํจ์
# - ๋
๋ฆฝํ๋ณธ t-๊ฒ์ ์ ๋ ๊ทธ๋ฃน์ ํ๊ท ์ฐจ์ด๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์ํ์ง๋ฅผ ๊ฒ์ ํฉ๋๋ค.
# - ๋ ๊ฐ์ ๊ทธ๋ฃน ๊ฐ์ ํ๊ท ์ฐจ์ด๋ฅผ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
# * equal_var= [True: ๋ฑ๋ถ์ฐ์ฑ ๊ฐ์ , False: ๋ฑ๋ถ์ฐ์ฑ ๊ฐ์ โ(๋ถ์ฐ์ด ๋ค๋ฆ์ ๊ฐ์ )]
# # ์ง์ญ๋ณ ํ๊ท ์ฐจ์ด ๊ฒ์ ํ๊ธฐ
from scipy.stats import ttest_ind
t_statistic, p_value = ttest_ind(dust_data_select[b_group], dust_data_select[a_group], equal_var=True)
print("T-statistic:", t_statistic)
print("p-value:", p_value)
print('----------------------------------------------------------------')
print('*** ๊ฒฐ๋ก ๋์ถ ***')
if p_value > 0.05:
print('๊ท๋ฌด๊ฐ์ค ์ฑํ - "์์ธ {}์ {} ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."'.format(a_group, b_group))
else:
print('๋๋ฆฝ๊ฐ์ค ์ฑํ - "์์ธ {}์ {} ์ง์ญ์ ๋ฏธ์ธ๋จผ์ง ๋๋์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋ค."'.format(a_group, b_group))
# A ์ง์ญ๊ณผ B์ง์ญ ๋ฏธ์ธ๋จผ์ง ๋๋ ์์ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
import matplotlib.pyplot as plt
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
plt.figure(figsize=(8, 6))
dust_data_select.boxplot(column=[a_group, b_group])
plt.title("finedust")
plt.xlabel("AREA")
plt.ylabel("FINEDUST_PM")
plt.savefig(path + '/์์ธ์ ๋ฏธ์ธ๋จผ์ง - {}vs{}.png'.format(a_group, b_group))
plt.show()
Python
๋ณต์ฌ