-
통계-3 범주형 데이터통계 2023. 5. 29. 19:12
1. 범주형 데이터
범주형 데이터는 수치로 측정이 불가능한 데이터를 의미한다. 성별, 경, 혈액형 등이 범주형 데이터에 포함된다.
범주형 데이터는 명목형 데이터와 순서형 데이터로 구분할 수 있다.
명목형 데이터: 순서와 상관없이 서로 다른 카테고리에 속하는 데이터이다. 성별, 지역, 혈액형 등이 포함된다.
순서형 데이터: 순서를 가지고 서로 다른 카테고리에 속하는 데이터이다. 학년, 경력 등이 포함된다.
titanic_df = pd.read_csv('./data/Titanic_data.csv') survived_by_sex = titanic_df.groupby('Sex')['Survived'].mean() plt.figure(figsize=(6, 4)) sns.barplot(x=survived_by_sex.index, y=survived_by_sex.values) plt.title('Survival Rate by Sex') plt.xlabel('Sex') plt.ylabel('Survival Rate') plt.show()
타이타닉 데이터를 불러온 뒤 성별 생존율의 평균값을 매긴 후 그래프로 표현한다.
survived_embarked = titanic_df.groupby('Embarked')['Survived'].sum() dead_embarked = titanic_df.groupby('Embarked')['Survived'].count() - survived_embarked
embarked(탑승항구)의 생존자의 숫자를 합산하고 한국의 개수에서 생존자의 항구를 빼서 사망자의 항구수를 구한다.
plt.figure(figsize=(10, 6)) plt.bar(survived_embarked.index, survived_embarked.values, color='g', alpha=0.5, label='Survived') plt.bar(dead_embarked.index, dead_embarked.values, bottom=survived_embarked.values, color='r', alpha=0.5, label='Dead') plt.title('Survivors by Embarked') plt.xlabel('Embarked') plt.ylabel('Number of passengers') plt.legend()
c, q, s 항구 별 탑승자와 생존자, 사망자 수를 확인 할 수 있다.
survived_class = titanic_df.groupby('Pclass')['Survived'].sum() dead_class = titanic_df.groupby("Pclass")['Survived'].count()-survived_class
마찬가지로 클래스별 생존자와 사망자를 구한다.
plt.figure(figsize=(10, 6)) plt.bar(survived_class.index, survived_class.values, color='g', alpha=0.5, label='Survived') plt.bar(dead_class.index, dead_class.values, bottom=survived_class.values, color='r', alpha=0.5, label='Dead') plt.title('Survivors by Class')
객실 등급이 높을수록 생존율이 높은 것을 확인할 수 있다.
2. 카이제곱 검정
카이제곱 검정은 두 범주형 데이터가 서로 관계가 있는지 분석하는 방법이다.
1. 각 범주에 대한 기대값을 구한다.
2. 기대값과 관측값의 차이를 구한다.
3. (관측값-기대값)^2/기대값을 하면 각 범주의 카이제곱 값을 구할 수 있다.
4. 각 카이제곱값을 합하여 전체의 카이제곱 값을 구할 수 있다.
observed_values = np.array([[10, 20, 30], [6, 15, 9]]) chi2, p_value, dof, expected_values = chi2_contingency(observed_values)
데이터를 생성하고 카이제곱 검정을 수행하여 카이제곱 값, p-value, 자유도, 기댓값을 추출한다. 카이제곱은 영어로 chi2이다.
print(f"카이제곱 통계량: {chi2}") print(f"p-value: {p_value}") print(f"자유도: {dof}") print("기대값:") print(expected_values) 카이제곱 통계량: 3.3997252747252746 p-value: 0.18270861966696167 자유도: 2 기대값: [[10.66666667 23.33333333 26. ] [ 5.33333333 11.66666667 13. ]]
카이제곱 통계량은 3.4이다. 이 값이 높을수록 변수 간의 관련성이 약하다고 판단 할 수 있지만 유의미한 판단을 위해 p-value를 고려해야 한다.
p-value는 귀무가설이 맞다는 전제하에 관측치가 귀무가설과 같거나 더 극단적인 값을 가질 확률이다.
귀무가설은 주장하고자 하는 가설(대립 가설)과 반대되는 가설이다. 즉 이 문제에서는 검증하고 싶은 것이 두 변수 간의 상관관계가 있다는 주장이며 귀무가설은 두 변수사이에 상관관계가 없다이다.
p- value가 높을수록 두 변수간의 상관관계가 없다는 귀무가설에 의해서 두 변수 간의 상관관계가 없다.(우연히 발생했다. )라고 판단할 수 있으며 일반적으로 p-value가 0.05 이하 일 때 검정결과가 유의미하며 우연히 일어나지 않았다고 판단한다.
p-value는 0.18이므로 상관관계가 없다라고 판단할 수 있다.
자유도는 통계량이 자유롭게 움직일 수 있는 정도를 나타낸다. 카이제곱에서는 자유도가 높을수록 정규분포에 가까워진다.
[10 20 30] 60
[ 6 15 9] 30
16 35 39 90
설정한 범주형 데이터에서 자유도가 2라는 의미는 예를 들어 10과 20 두 개의 값이 정해지면 나머지 값들도 강제로 정해지는 것으로 자유롭게 설정할 수 있는 범위의 개수를 의미한다.
기댓값은 어떠한 사건이 발생할 것으로 예상되는 평균적인 값이다. 카이제곱 검정에서는 각 행과 열의 합계를 계산 한 뒤 비율에 따라 기댓값을 계산한다.
3. 분할표
분할표는 범주형 데이터를 분석할 때 각 카테고리 별로 빈도수를 나타낸 것이다.
data = [[5,10,15],[10,15,20]] sns.heatmap(data, cmap='YlGnBu', annot=True,fmt='d',cbar=False) plt.title('example contingency table heatmap') plt.show()
cmap을 통해서 색상을 조절하고 annot= true로 셀 안에 데이터를 표시한다. fmt는 데이터의 형식이며 d는 정수이다.
히트맵을 사용하여 분할표를 시각화할 수 있다.
'통계' 카테고리의 다른 글
통계-5 데이터 분석 방법 (0) 2023.05.29 통계-4 순서형 데이터, 이진 데이터, 시계열 데이터, 공간 데이터 (0) 2023.05.29 통계-2 이산형 데이터 (0) 2023.05.29 통계-1 연속형 데이터 (0) 2023.05.29