목차
1. 집계, 그리고 기준
2. countplot이란?
3. 파라미터 확인
1. 집계, 그리고 기준
E나라 지표 기준 2017년 기준 총인구 5,136만명중 남자는 2,574만명, 여자는 2,563만명입니다. 여기에는 두 가지 내용이 포함되어 있습니다. 첫 번째는 "집계"입니다. 여기서는 전체 인구수를 셌습니다(count). 두 번째, 집계 대상입니다. 두 가지 조건이 있는데, 하나는 대한민국 국민이고, 다른 하나는 성별입니다.
집계를 하기 위해서는 항상 기준이 필요합니다. 그리고, 이러한 기준을 "범주"라고 합니다. 범주가 있다면, 범주를 기준으로 집계(종합)를 할 수 있습니다. 예를 들어, "소득"이라는 개념에 대해 생각해봅시다.
소득은 국민 개별로 제 각각 일 것 입니다. 예를 들어, A가 작년 한해 벌어들인 소득은 4500만 5천 557원 입니다. 그리고, B는 4500만 5천 556원 입니다. 거의 비슷하지만, 개별 값으로 확인했을 때 두 사람의 소득은 미세한 차이를 보입니다.
그래서, 소득 구간이라는 개념을 사용합니다.
즉, 구간 = 범주 -> 집계가 가능해지는 것입니다.
2. countplot이란?
이와 같은 범주형 변수들을 그래프로 그릴 수 있는 방법은 여러가지가 있습니다. 오늘은 그 중 countplot이라는 것에 다루어 보고자 합니다.
gibles-deepmind.tistory.com/36?category=904126
데이터는 해당 글을 참조해주시길 바랍니다.
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns train = pd.read_csv("/Users/cho/data/HRdata/aug_train.csv") #유니크 값이 너무 많은 변수는 제외 tooManyUnique = ["enrollee_id", "city", "city_development_index", "training_hours"] Category = [col for col in train.columns if col not in tooManyUnique]
변수 내 유니크 값이 너무 많은 변수는 제거 했습니다.
10개의 범주형 변수에 대해 countplot으로 그래프를 그려볼 것입니다.
fig, axes = plt.subplots(2, 2, figsize=(15, 8)) sns.countplot(ax=axes[0,0], x=Category[0], data=train) sns.countplot(ax=axes[0,1], x=Category[1], data=train) sns.countplot(ax=axes[1,0], x=Category[2], data=train) sns.countplot(ax=axes[1,1], x=Category[3], data=train)
우선, 4개의 변수 먼저 그래프를 그려 봅니다.
여기서, count라는 의미가 이해가시나요? 즉, countplot이란 각 범주별로 count한 집계 값을 그래프로 나타낸 것입니다.
3. 파라미터 확인해보기
fig, axes = plt.subplots(2, 2, figsize=(15, 8))
우선, fig와 axes를 이용하여 4개의 그래프를 그릴 수 있는 2x2의 figure를 만듭니다. 그리고, figsize로 각 그래프 사이즈를 정합니다.
sns.countplot(ax=axes[0,0], x=Category[0], data=train)
2x2 figure에서 각 그래프들은 0,0/0,1/1,0/1,1 좌표에 위치합니다. 그래서, ax=axes[0, 0]을 통해 그래프의 위치를 결정해줍니다. 다음으로는, x축에 위치하는 컬럼 이름을 입력해줍니다. 앞서 저는 Category라는 변수의 리스트를 만들어 두었기 때문에 그 리스트에서 컬럼을 호출해옵니다. 다음으로, data를 불러옵니다.
나머지 변수들도 그려봅니다.
fig, axes = plt.subplots(2, 3, figsize=(15, 10)) sns.countplot(ax=axes[0,0], x=Category[4], data=train, order = train[Category[4]].value_counts().index) axes[0,0].set_xticklabels(axes[0,0].get_xticklabels(), rotation=90) sns.countplot(ax=axes[0,1], x=Category[5], data=train, order = train[Category[5]].value_counts().index) sns.countplot(ax=axes[0,2], x=Category[6], data=train, order = train[Category[6]].value_counts().index) axes[0,2].set_xticklabels(axes[0,2].get_xticklabels(), rotation=90) sns.countplot(ax=axes[1,0], x=Category[7], data=train, order = train[Category[7]].value_counts().index) axes[1,0].set_xticklabels(axes[1,0].get_xticklabels(), rotation=90) sns.countplot(ax=axes[1,1], x=Category[8], data=train, order = train[Category[8]].value_counts().index) sns.countplot(ax=axes[1,2], x=Category[9], data=train, order = train[Category[9]].value_counts().index) fig.tight_layout()
이번에는 2x3 figure에 그래프들을 배열했습니다. 그런데, 여기서 위와 달리 두 가지 내용을 추가했는데요. 하나는 x축 정렬, 다른 하나는 x축의 값(xtick이라 부릅니다.)들을 회전시켰습니다.
sns.countplot(ax=axes[0,0], x=Category[4], data=train, order = train[Category[4]].value_counts().index)
우선, x축 정렬 먼저 설명 드리겠습니다. x축을 내림차순으로 정렬하는 방법입니다. order라는 파라미터를 추가해야 합니다. 그리고, countplot자체가 집계된 값을 표현하기 때문에 안의 값도 집계된 값으로 넣어야 하는데요.
value_counts() 메서드를 이용하여 집계를 한 다음 index를 불러오면 그 index를 기준으로 x축 라벨을 정렬합니다.
axes[0,0].set_xticklabels(axes[0,0].get_xticklabels(), rotation=90)
다음으로, x축의 값들을 회전시키는 것입니다. get_xticklabels()를 통해 각 값들을 불러온 다음, rotation을 통해 회전시킬 각도를 설정해주시면 됩니다.
또한, 두 가지 변수를 동시에 표현할 수 도 있는데요.
sns.countplot(x=Category[0], hue=Category[1] , data=train)
hue라는 파라미터에 변수를 추가하면 두 가지 변수로 나누어 집계 값을 확인할 수 있습니다.
여기서, y축 값을 퍼센트로 나타낼 수 있는지 궁금하실텐데요. countplot이 아니라 barplot의 파라미터를 이용하면 편리하게 표현할 수 있습니다. 해당 내용은 다음 시간에 다룰 수 있도록 하겠습니다.
'딥상어동의 딥한 데이터 처리 > 시각화' 카테고리의 다른 글
[Pandas] 데이터프레임도 이미지로 저장할 수 있다구? (1) | 2022.10.02 |
---|---|
[Boxplot] 박스플롯 이용시 주의사항 (2) | 2021.12.19 |
[Pandas] 퍼널차트 데이터프레임으로 표현해보기 (2) | 2021.08.15 |
[Matplotlib] 모두를 위한 Python시각화 - (1)Matplotlib.artist (2) | 2021.01.03 |
아카이브 페이지 (2) | 2021.01.01 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!