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
을 더 많이 사용한다.
시각화하기
히스토그램을 사용해 특정 범위에 있는 값들을 막대그래프처럼 나타낼 수 있다. pandas
의 hist()
를 사용한다.
h = df.hist(figsize=(12, 12)) # 전체 데이터에 대한 히스토그램
h = df.iloc[:, 12:24].hist(figsize=(12, 12), bins=100) # loc로 행과 열을 슬라이싱, iloc는 숫자로 슬라이싱 가능, bin으로 막대 개수 조절 가능
loc
와 iloc
를 사용해 데이터프레임의 행, 열 범위를 나타낼 수 있다. 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")
countplot
과 barplot
모두 막대 그래프를 반환한다. 마지막 barplot
의 경우 오차막대를 표현할 수 있으며, ci
를 사용해 오차막대를 조절할 수 있다. 위 코드의 경우 오차막대가 표준편차를 나타낸다.
댓글남기기