딥상어동의 딥한 생각

Seaborn | countplot(기본 파라미터, x축 정렬하기, x축 라벨 회전)

by 딥상어동의 딥한생각

목차

 

1. 집계, 그리고 기준
2. countplot이란?
3. 파라미터 확인

 

1. 집계, 그리고 기준

 

E나라 지표 기준 2017년 기준 총인구 5,136만명중 남자는 2,574만명, 여자는 2,563만명입니다. 여기에는 두 가지 내용이 포함되어 있습니다. 첫 번째는 "집계"입니다. 여기서는 전체 인구수를 셌습니다(count). 두 번째, 집계 대상입니다. 두 가지 조건이 있는데, 하나는 대한민국 국민이고, 다른 하나는 성별입니다. 

 

집계를 하기 위해서는 항상 기준이 필요합니다. 그리고, 이러한 기준을 "범주"라고 합니다. 범주가 있다면, 범주를 기준으로 집계(종합)를 할 수 있습니다. 예를 들어, "소득"이라는 개념에 대해 생각해봅시다. 

 

소득은 국민 개별로 제 각각 일 것 입니다. 예를 들어, A가 작년 한해 벌어들인 소득은 4500만 5천 557원 입니다. 그리고, B는 4500만 5천 556원 입니다. 거의 비슷하지만, 개별 값으로 확인했을 때 두 사람의 소득은 미세한 차이를 보입니다. 

 

그래서, 소득 구간이라는 개념을 사용합니다. 

 

 

https://news.joins.com/article/23525937 (개인적인 의견과는 무관합니다.)

 

즉, 구간 = 범주 -> 집계가 가능해지는 것입니다.

 

2. countplot이란?

 

이와 같은 범주형 변수들을 그래프로 그릴 수 있는 방법은 여러가지가 있습니다. 오늘은 그 중 countplot이라는 것에 다루어 보고자 합니다.

gibles-deepmind.tistory.com/36?category=904126

[캐글따라하기] HR 데이터분석 (1) zero-draft

www.kaggle.com/arashnic/hr-analytics-job-change-of-data-scientists HR Analytics: Job Change of Data Scientists Predict who will move to a new job www.kaggle.com 해당 데이터를 참고하였습니다. gibles..

gibles-deepmind.tistory.com

 

데이터는 해당 글을 참조해주시길 바랍니다. 

 

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의 파라미터를 이용하면 편리하게 표현할 수 있습니다. 해당 내용은 다음 시간에 다룰 수 있도록 하겠습니다. 

블로그의 정보

딥상어동의 딥한생각

딥상어동의 딥한생각

활동하기