[부스트코스] 코칭스터디 Data Science 13기 - 3주차

김민수·2023년 10월 19일
0

boostcourse

목록 보기
7/8
post-thumbnail

📌 코칭스터디 Data Science 13기 - 3주차

1. 강의 내용

1) 건강검진 데이터로 가설검정하기

  • 라이브러리 로드하고 한글폰트 설정하기
  • 데이터셋 소개와 로드하기 - 가설세우기
  • 로드한 데이터의 결측치를 보고 요약·집계하기 - info, isnull, value_counts
  • groupBy와 pivot_table로 다양한 집계 연산하기
  • 히스토그램으로 전체 수치 데이터를 한번에 시각화 하기
  • 데이터의 빈도수 시각화 하기 - countplot
  • 범주형 데이터의 시각화 - barplot, lineplot, pointplot, boxplot, violinplot
  • 산점도와 회귀선 상관관계 보기 - scatterplot, lmplot
  • 수치형 데이터 분포 확인하기 - distplot
  • 상관계수 히트맵으로 표현하기 - heatmap

2. 강의 정리

1) 라이브러리 로드하고 한글폰트 설정하기

  • 한글 폰트 설정하기(1)
# 한글폰트 설정
import os

# macos인 경우 'posix'을 입력
if os.name == 'posix':
    plt.rc("font", family="AppleGothic")

# 마이너스 폰트 깨지는 문제에 대한 대처
plt.rc("axes", unicode_minus=False)

# 폰트가 흐릿하게 보이는 것을 방지
%config InlineBackend.figure_format = 'retina'
  • 한글 폰트 설정하기(2)
# 한글폰트 사용을 위해 설치
# 아래 모듈을 설치하고 불러오면 별도의 한글폰트 설정이 필요 없습니다.
!pip install koreanize-matplotlib

import koreanize_matplotlib

2) 데이터셋 소개와 로드하기 - 가설세우기

  • 데이터 미리보기
    • head, tail, sample, shape 등을 활용하여 데이터를 확인한다.
  • 가설 세우기
    • 음주 여부에 따라 건강검진 수치 차이가 있을까?
    • 신장과 허리둘레의 크기는 체중과 상관관계가 있을까?

3) 로드한 데이터의 결측치를 보고 요약·집계하기 - info, isnull, value_counts

  • 데이터 요약하기

    • info, describe 등을 활용해 요약 정보를 확인한다.
  • 데이터 결측치 확인하기

    • 결측치 개수 확인하기
    # isnull
    df.isnull().sum()
    
    # isna
    df.isna().sum()
    • 막대 그래프로 결측치 개수 확인하기
    df.isnull().sum().plot.barh(figsize=(10,8))

4) groupby와 pivot_table로 다양한 집계 연산하기

  • groupby
    # 성별코드에 따른 음주 상태
    df.groupby(by=['성별코드','음주여부'])['가입자일련번호'].count()
    # 성별코드와 음주여부에 따른 간수치지수 개수,평균,중앙값
    df.groupby(by=['성별코드', '음주여부'])['감마지티피'].agg(['count', 'mean', 'median'])
  • pivot_table
    df.pivot_table(index='성별코드', values='가입자일련번호', aggfunc='count')
    pd.pivot_table(df, index=["음주여부", "성별코드"], values="감마지티피", aggfunc="describe")

5) 히스토그램으로 전체 수치 데이터를 한번에 시각화 하기

  • 전체 히스토그램 그리기
h = df.hist(figsize=(18,18))

  • iloc를 사용하여 일부분 히스토그램 그리기
# 12개의 컬럼의 데이터만 히스토그램 그리기
h = df.iloc[:, :12].hist(figsize=(12,12))

6) 데이터의 빈도수 시각화 하기 - countplot

  • 음주여부에 따른 성별코드
    • 남성은 음주를 하는 경우가, 여성은 음주를 안하는 경우가 많다.
# hue를 활용하여 "성별코드"를 같이 나타내기
sns.countplot(x='음주여부', data=df, hue='성별코드')

  • 키와 몸무게별 성별코드
      • 남성이 여성보다 상대적으로 키가 크다.
      • 여성은 155cm가, 남성은 170cm가 많다.
    plt.figure(figsize=(25,6))
    sns.countplot(data=df, x='신장(5Cm단위)', hue='성별코드')
    • 몸무게
      • 남성이 여성보다 몸무게가 상대적으로 크다.
      • 여성은 55kg, 남성은 70kg이 많다.
    plt.figure(figsize=(30,10))
    sns.countplot(data=df, x='체중(5Kg 단위)', hue='성별코드')

7) 범주형 데이터의 시각화(1) - barplot

  • 음주여부에 따른 연령대코드별 총콜레스테롤 수치
# 음주여부 = {0.0: 마시지 않는다, 1.0: 마신다}
plt.figure(figsize=(15,9))
sns.barplot(data=df_sample, x='연령대코드(5세단위)', y='총콜레스테롤', hue='음주여부')

  • 흡연상태에 따른 연령대코드별 총콜레스테롤 수치
# 흡연상태 = {1.0:피우지않는다, 2.0:이전에 피웠으나 끊음, 3.0:현재 피우고 있다}
plt.figure(figsize=(15,9))
sns.barplot(data=df_sample, x='연령대코드(5세단위)', y='총콜레스테롤', hue='흡연상태')

8) 범주형 데이터의 시각화(2) - lineplot, pointplot

  • lineplot

    • 음주여부에 따른 연령대코드와 총콜레스테롤
    plt.figure(figsize=(15,9))
    sns.barplot(data=df_sample, x='연령대코드(5세단위)', y='총콜레스테롤', hue='음주여부')

    • 음주여부에 따른 연령대코드와 혈색소
      • 연령이 올라갈수록 혈색소가 줄어든다고 볼 수 있다.
      • 음주를 하지 않는 사람들이 혈색소가 낮은 편이라고 볼 수 있다.
    sns.pointplot(data=df, x="연령대코드(5세단위)", y="혈색소", hue="음주여부", ci=None)

  • pointplot

    • 음주여부에 따른 연령대코드와 키
      • 키가 큰 사람이 음주를 한다고 볼 수 있다.
    plt.figure(figsize=(10,4))
    sns.pointplot(data=df, x="연령대코드(5세단위)", y="신장(5Cm단위)", hue="음주여부", errorbar="sd")

9) 범주형 데이터의 시각화(3) - boxplot, violinplot

  • boxplot

    • 신장과 몸무게
    plt.figure(figsize=(15, 4))
    sns.boxplot(data=df, x="신장(5Cm단위)", y="체중(5Kg 단위)")

  • violinplot

    • 성별코드에 따른 신장과 몸무게
    plt.figure(figsize=(15, 4))
    sns.violinplot(data=df, x="신장(5Cm단위)", y="체중(5Kg 단위)", hue="성별코드", split=True)

10) 산점도와 회귀선 상관관계 보기 - scatterplot, lmplot

  • scatterplot
    • 음주여부에 따른 간 건강상태
      sns.scatterplot(data=df_sample, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue="음주여부")
  • lmplot
    • 음주여부와 흡연상태에 따른 신장과 체중
      sns.lmplot(data=df_sample, x="신장(5Cm단위)", y="체중(5Kg 단위)", hue="흡연상태", col="음주여부")

11) 수치형 데이터 분포 확인하기 - distplot

  • distplot
    • 음주여부에 따른 총콜레스테롤 수치 히스토그램
    sns.distplot(df.loc[(df["총콜레스테롤"].notnull()) & (df["음주여부"] == 1), "총콜레스테롤"], hist=False)
    sns.distplot(df.loc[(df["총콜레스테롤"].notnull()) & (df["음주여부"] == 0), "총콜레스테롤"])

12) 상관계수 히트맵으로 표현하기 - heatmap

  • heatmap
    • 체중은 신장과 허리둘레의 크기에 상관관계가 있다.
      plt.figure(figsize=(20,7))
      sns.heatmap(df_corr, annot=True, fmt=".2f", cmap="Blues")
      업로드중..

3. 정리

1) barplot VS countplot

  • barplot
  • countplot

2) barplot 신뢰구간

0개의 댓글