4강에서 사용한 데이터는 국민건강보험공단_건강검진정보 데이터이다. 2017년의 것을 사용하였다.
3강에서 배운 다양한 전처리 및 통계 기법을 활용하여 데이터를 가공하였다.

그룹화하기, 피벗테이블

pandas는 그룹화하기를 지원한다. 그룹화를 이용해 특정 속성을 기준으로 그룹화하여 통계를 계산할 수 있다.

df.groupby(["성별코드"])["가입자일련번호"].count()                  
df.groupby(["성별코드", "음주여부"])["가입자일련번호"].count()      # 여러 컬럼으로 그룹화

df.groupby(["성별코드", "음주여부"])["감마지티피"].mean()           
df.groupby(["성별코드", "음주여부"])["감마지티피"].describe()

df.groupby(["성별코드", "음주여부"])["감마지티피"].agg(["count", "mean", "median"])

.groupby()를 사용하면 수를 세서 통계치를 낼 수 있다. 첫 번째 코드는 ‘성별코드’ 칼럼으로 그룹화하여 ‘가입자일련번호’를 세는 것이다. 두 가지 이상의 컬럼에 대해 수행할 수도 있고, agg를 이용해 다양한 통계치를 구할 수도 있다.

그러나, 위에서 보다시피 groupby는 사용법도 불편하고, 직관적이지도 않다. 이를 대체할 수 있는 것이 pivot_table()이다.

df.pivot_table(index="음주여부", values="가입자일련번호", aggfunc="count")        

pd.pivot_table(df, index="음주여부", values="감마지티피", aggfunc=["mean", "median"])   # aggfunc에 여러 개의 통계치 사용

pivot_table은 연산을 동반하여 데이터프레임을 반환한다. 첫번째 코드는 ‘음주여부’ 칼럼을 기준으로 ‘가입자일련번호’를 세는 것이다. 두 번째처럼 다양한 통계치를 사용할 수도 있다.
Series를 반환하는 groupby와 달리 pivot_table은 데이터프레임을 반환한다. 이로 인해 계산 시간이 더 오래 걸릴 수도 있다. 그러나 사용법이 직관적이기 때문에 pivot_table을 더 많이 사용한다.


시각화하기

히스토그램을 사용해 특정 범위에 있는 값들을 막대그래프처럼 나타낼 수 있다. pandashist()를 사용한다.

h = df.hist(figsize=(12, 12))                                 # 전체 데이터에 대한 히스토그램
h = df.iloc[:, 12:24].hist(figsize=(12, 12), bins=100)        # loc로 행과 열을 슬라이싱, iloc는 숫자로 슬라이싱 가능, bin으로 막대 개수 조절 가능

lociloc를 사용해 데이터프레임의 행, 열 범위를 나타낼 수 있다. loc는 행이나 열의 이름을 직접 사용하고, iloc는 숫자를 사용한다.

seaborn도 다양한 시각화를 제공한다. 그러나 처리 시간이 걸린다는 단점이 있으므로, 샘플을 사용하는 것이 좋다.

df.sample(1000, random_state=1)     # random_state를 지정해서 항상 같은 데이터 추출

sns.countplot(x = "음주여부", data = df)
sns.countplot(data = df, x = "음주여부", hue = "성별코드")
sns.barplot(data=df.sample, x="연령대코드 (5세 단위)", y = "트리글리세라이드", hue="음주여부", ci = "sd")

countplotbarplot모두 막대 그래프를 반환한다. 마지막 barplot의 경우 오차막대를 표현할 수 있으며, ci를 사용해 오차막대를 조절할 수 있다. 위 코드의 경우 오차막대가 표준편차를 나타낸다.

관련 코드 보러가기

댓글남기기