멋쟁이사자처럼 X K-DIGITAL Training - 06.16
[이전]
2021.06.21 - [python/K-Digital] - [K-DIGITAL] 파이썬을 활용한 기초 통계분석(1) 빈도 분석과 이상치
import pandas as pd
import seaborn as sns
import scipy as sp
from scipy import stats # statistics
pandas 데이터 처리 및 분석 라이브러리로 행과 열로 이루어진 데이터 객체(DataFrame)를 만들어 다룰 수 있음
seaborn matplotlib에 기반하여 제작된 파이썬 데이터 시각화 모듈
scipy 과학기술계산을 위한 라이브러리
T검정(T-test)
두 변수 사이 비교를 위한 가장 기본적인 통계 분석법
두 집단 간 평균이 통계적으로 유의미한 차이를 보이고 있는지 검증할 때 사용되는 분석방법
카이제곱 검정(Chi-squre 검정)
두 범주형 변수 사이 관계가 있는지 없는지 검정 (독립성 검정)
범주형 자료의 집단간 동질성 여부를 통계적으로 검증하거나 두 변인간의 상관성을 통계적으로 검증하고자 할 때
귀무가설
- 표본 데이터를 사용하여 모집단에 대한 주장(귀무가설)의 타당성을 검정한다.
- 두 가지 현상 사이 관계가 없다.
- 독립변수는 종속변수에 대해 유의미한 영향을 미치지 않는다.
- independent
대립가설
- 검증하고자 하는 바, 귀무가설과 반대로 실험이나 연구를 통해 입증하려고 하는 주장
- 두 가지 현상 사이 연관관계가 있다.
- 독립변수는 종속변수에 중요한 영향을 미친다.
- not inpependent
P-VALUE
[조건부확률] 귀무가설이 참이라는 전제 하에 (두 현상 사이 관계가 없다는 전제 하에)
관찰이 완료된 값(통계치) 혹은 그보다 더 극단적인 값이 표본(샘플데이터)을 통해 나타날 확률
귀무가설을 지지하는 정도
귀무가설이 맞다고 가정할 때 얻은 결과보다 더 극단적인 결과가 관측될 확률
- p-value < 0.05(5%) 귀무가설 기각
- p-value >= 0.05(5%) 귀무가설 인정
* 주의
귀무가설을 기각한다는 것은 5% 만큼 귀무가설이 참일 가능성이 있다는 말이기도 함
귀무가설을 버린다해서 항상 대립가설(연구 결과가 참이거나 효과가 있다)이 맞다는 것은 아님
통계적으로만 유의미할 뿐 독립변수의 변화에 다른 종속변수의 변화값이 실질적/실용적인 의미를 갖진 않음
상관관계
두 변수가 어떤 선형적 또는 비선형적 관계르 가지고 있는지 분석
피어슨 상관계수
두 계량형 변수 사이 선형관계의 강도와 방향
-1에 가까울수록 음의 상관관계
1에 가까울 수록 양의 상관관계
0에 가까울수록 상관관계가 적음
1) 교차분석
df = pd.read_csv('data/cosmetics_.csv', encoding='utf-8')
df.head()
교차표 (crosstab)
- 빈도수
crosstab = pd.crosstab(df.propensity, df.skin, margins=True)
# margins=True 합계 값(All) 표시
# skin: 피부 타입
crosstab.columns = ["건성", "민감성", "중성", "지성", "여드름성", "합계"]
# propensity: 구매 성향
crosstab.index = ["비교적 저렴한 제품", "중간정도의 제품", "비교적고가의 제품", "합계"]
crosstab
- 합계가 1이 되도록 비율로 표현 (상대적인 비율 확인 가능)
pd.crosstab(df.propensity, df.skin, margins=True, normalize=True)
2) 독립표본 T 검정(t-test)
: 두 집단간의 평균차이 검정 예) 1반과 2반의 중간고사 영어과목 성적의 평균 차이
예시1) 남성과 여성의 화장품 만족도사이 연관관계 분석
df = pd.read_csv('data/cosmetics_.csv', encoding='utf-8')
df.head()
male = df[ df['gender']==1 ].satisf_al.values # 남성
female = df[ df['gender']==2 ].satisf_al.values # 여성
stats.ttest_ind(male, female)
>> Ttest_indResult(statistic=-0.494589803056421, pvalue=0.6213329051985961)
>> p-value가 0.05 이상으로 귀무가설 인정 (귀무가설이 참일 확률이 높음)
→ 서로 다른 성별 간 전반적인 만족도의 평균값 사이 유의미한 차이가 없다.
히스토그램
sns.distplot(male, kde=False, fit=stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})
sns.distplot(female, kde=False, fit=stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})
3) 대응표본 t-test 분석
: 동일한 모집단으로부터 추출된 두 변수의 평균값 비교 분석 예) 1반의 중간고사와 기말고사 영어 성적 평균 사이의 차이
예시1) 구매 가격에 대한 만족도와 구매 문의에 대한 만족도 사이 연관관계 분석
# satisf_b : 구매 가격에 대한 만족도 (5점 척도)
# satisf_i : 구매 문의에 대한 만족도 (5점 척도)
df[['satisf_b', 'satisf_i']].describe()
- 귀무가설: 구매 가격에 대한 만족도의 평균은 구매 문의에 대한 만족도의 평균과 차이가 없다.
- 대립가설: 구매 가격에 대한 만족도의 평균은 구매 문의에 대한 만족도의 평균과 차이가 있다.
t-test
stats.ttest_rel(df["satisf_b"], df["satisf_i"])
>> Ttest_relResult(statistic=-7.155916401026872, pvalue=9.518854506666398e-12)
>> p-value가 0.05 미만임으로 귀무가설 기각 (대립가설 인정)
→ 동일한 고객 집단이 평가한 구매 가격에 대한 만족도와 구매 문의에 대한 만족도의 평균값 사이 유의미한 차이가 있다.
히스토그램
sns.distplot(df["satisf_b"], kde=False, fit=stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})
sns.distplot(df["satisf_i"], kde=False, fit=stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})
4) 분산분석의 실습과 시각화 - ANOVA (Analysis of Variance)
# decision : 구매동기 (사회적 요인, 심리적 요인, 외모적 요인)
# satisf_al : 전반적인 만족도
decision_social = df[ df['decision']==1 ].satisf_al.values # 사회적 요인
decision_psychi = df[ df['decision']==2 ].satisf_al.values # 심리적 요인
decision_appear = df[ df['decision']==3 ].satisf_al.values # 외모적 요인
- 귀무가설: 구매동기에 따라 전반적인 만족도의 평균값에 차이가 없다.
- 대립가설: 구매동기에 따라 전반적인 만족도의 평균값 중 적어도 하나는 차이가 있다.
stats.f_oneway(decision_social, decision_psychi, decision_appear)
>> F_onewayResult(statistic=4.732129410493065, pvalue=0.009632034309915485)
>> p-value가 0.05 미만임으로 대립가설 인정
→ 3가지 구매 동기에 따른 만족도의 평균값 중 적어도 하나는 유의미한 차이가 있다.
히스토그램
sns.distplot(decision_social, kde=False, fit=sp.stats.norm, hist_kws={'color': 'r', 'alpha': 0.2}, fit_kws={'color': 'r'})
sns.distplot(decision_psychi, kde=False, fit=sp.stats.norm, hist_kws={'color': 'g', 'alpha': 0.2}, fit_kws={'color': 'g'})
sns.distplot(decision_appear, kde=False, fit=sp.stats.norm, hist_kws={'color': 'b', 'alpha': 0.2}, fit_kws={'color': 'b'})
4) 상관관계 분석
예시1) 구매동기, 구매가격 만족도, 구매문의 만족도, 전반 만족도, 재구매의향 사이 상관관계
df_corr = df[['decision', 'satisf_b', 'satisf_i', 'satisf_al', 'repurchase']]
df_corr.corr()
상관관계 히트맵
sns.heatmap(df_corr.corr(), cmap='viridis')
plt.show()
여러 변수간 산점도 (pairplot)
sns.pairplot(df_corr)
예시2) 기본 제공 데이터셋 - Iris
iris = sns.load_dataset('iris')
iris.head()
상관관계
iris.corr()
여러 변수간 산점도
sns.set(style="ticks", color_codes=True)
sns.pairplot(iris, kind="reg")
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(4) 추가, 수정 (0) | 2021.06.22 |
---|---|
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(3) 상관관계 (0) | 2021.06.22 |
[K-DIGITAL] 파이썬을 활용한 기초 통계분석(1) 빈도 분석과 이상치 (0) | 2021.06.21 |
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(2) 원인예측 (0) | 2021.06.19 |
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(1) 문제분석 (0) | 2021.06.18 |
댓글 영역