반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코드잇TIL
- 영국석사
- HTML
- 코드잇 TIL
- 행렬
- 런던
- for반복문
- 결정트리
- 코딩공부
- 코딩독학
- 판다스
- 다항회귀
- 경사하강법
- 선형회귀
- 윈도우함수
- 데이터분석
- Seaborn
- sql연습문제
- matplotlib
- 유학생
- 머신러닝
- 파이썬
- 오늘도코드잇
- CSS
- numpy
- 나혼자코딩
- 코드잇
- 로지스틱회귀
- 코딩
- SQL
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) seaborn으로 병렬 막대 차트(Clustered bar chart), 히트맵(heatmap)그리기 본문
코딩공부/Data analysis
(데이터분석) seaborn으로 병렬 막대 차트(Clustered bar chart), 히트맵(heatmap)그리기
life-of-nomad 2024. 5. 27. 13:03728x90
반응형
단변량 막대 그래프 그리는 방법에 이어 병렬 막대 그래프 그리는 방법에 대해 알아보겠습니다.
🔻(지난글) 단변량 막대그래프🔻
1. 병렬 막대 그래프
- 병력 막대 그래프를 사용하면 두 개의 정성적 변수 간의 관계를 나타낼 수 있습니다.
- 하지만 이를 위해서는 두 번째 변수를 가공하여 y축을 따라 정량적 값으로 표시되게 해야 합니다.
- 단변량 막대 그래프와 마찬가지로 그룹별 데이터 포인트의 개수를 나타내야 하지만, 하나의 그룹이 두 변수에 대한 레이블로 구성된다는 점이 차이점입니다.
- 차트를 쉽게 해석할 수 있도록 막대를 정해진 순서로 배열해야 합니다.
- 먼저 첫 번째 변수의 수준에 따라 분류된 다음, 각 그룹 내에서 두 번째 변수를 기준으로 정해진 순서에 따라 배열됩니다.
- 병렬 막대 그래프는 seaborn의 countplot 함수를 사용해서 그래프를 그릴 수 있습니다.
- 단변량 차트를 이변량 차트로 바꾸기 위해서는 hue 인수를 통해 차트에 나타낼 두 번째 변수를 추가해야 합니다.
2. 막대 그래프 그리기 예시
1단계) 'VClass'열을 범주형 데이터로 변환
- 먼저, 필요한 라이브러리와 데이터를 불러옵니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('..//data/fuel-econ.csv')
df.head(5)
- 'VClass'열을 일반 객체 유형에서 순서가 있는 범주형으로 변환합니다.
#세단의 종류
sedan_classes = ['Minicompact Cars', 'Subcompact Cars', 'Compact Cars', 'Midsize Cars', 'Large Cars']
#sedan_classes에 정의된 분류들을 순서가 있는 범주형 데이터로 변환하기
vclasses = pd.CategoricalDtype(ordered=True, categories=sedan_classes)
#pandas.astype()을 통해 'VClass'열을 일반 객체 유형에서 순서가 있는 범주형으로 변환하기
df['VClass'] = df['VClass'].astype(vclasses);
2단계) 변속기 종류를 나타내는 열 새로 추가하기
- 이 데이터세트에는 다양한 종류의 변속기(trans열)가 포함되어 있습니다.
- 하지만 여기서는 변속기를 자동(Automatic)과 수동(Manual)이라는 두 범주로만 나누고자 합니다.
- 해당 부분을 추출하기 위해 lambda함수를 사용해서 각 변속기 종류 데이터의 첫 번째 단어만 가져옵니다.
df['trans_type'] = df['trans'].apply(lambda x:x.split()[0])
df.head()
- 마지막 열에 trans_type이라는 열이 추가되었으며 이는 Automatic, Manual의 두 값을 갖습니다.
3단계) 막대 그래프 작성하기
sns.countplot(data=df, x='VClass', hue='trans_type)
3. 히트맵 그리기
- 두 범주형 변수 관계는 히트맵을 사용해서 나타낼 수도 있습니다.
- 이전 글에서는 히트맵을 이차원형 히스토그램으로 취급했지만, 여기서는 막대 그래프라고 생각하면 됩니다.
🔻matplotlib으로 히트맵 그리는 법 아래 글 참고🔻
- seaborn 함수 heatmap()은 이러한 종류의 히트맵을 잘 구현할 수 있지만, 인수를 전달하는 방식이 좀 다릅니다.
- 원본 DataFrame을 그대로 활용하는 대신 집계 결과를 행렬로 정리하고 이를 바탕으로 차트를 그려야 합니다.
1단계) 주어진 데이터를 DataFrame 형식으로 만들기
- 먼저 groupby를 사용해서 주어진 DataFrame을 VClass와 trans_type을 기준으로 그룹화하겠습니다.
#group_by()와 size()로 두 변수의 수준별 조합에 대한 차량의 숫자 정보를 pandas series로 만들기
ct_counts = df.groupby(['VClass', 'trans_type']).size()
- DataFrame이 차급과 변속기에 따라 분류되었으며 각 결합 범주에 속하는 도수를 확인할 수 있습니다.
- 이 groupby 객체는 series이므로 DataFrame으로 만들어야 합니다.
- 이를 위해 reset_index를 사용해서 마지막 열의 이름을 count로 변경합니다.
#series.reset_index()를 사용해 series를 DataFrame 객체로 변환하기
ct_counts = ct_counts.reset_index(name='count')
- 마지막으로 pivot 함수를 사용해서 DataFrame pivot 메서드의 데이터를 재배열합니다.
#DataFrame.pivot()으로 데이터를 재정렬하여 차급 정보를 행으로 배치하기
ct_counts = ct_counts.pivot(index='VClass', columns='trans_type', values='count')
2단계) 히트맵 작성하기
- 위의 결과를 seaborn heatmap 함수에 직접 넣습니다.
sns.heatmap(ct_counts)
- 위의 결과를 보면 색상마능로는 각 셀의 값이나 변속기의 구성 비율을 파악하기가 어렵습니다.
- 각 셀의 도수를 나타내는 주석을 셀 안에 추가해봅시다.
3단계) 주석 추가하기
- annot=True를 추가하면 각 셀에 주석이 나타나지만, 기본 문자열 형식으로는 소수점 두 자리 숫자까지만 나타낼 수 있습니다.
- 여기서 fmt = 'd'를 추가하면 주석이 정수 꼴로 나타납니다.
- 만약 데이터가 존재하지 않는 셀이 있다면 fmf = '.0f'를 사용해서 NaN을 0으로 나타낼 수 있습니다.
sns.heatmap(ct_counts, annot=True, fmt='d')
728x90
반응형
'코딩공부 > Data analysis' 카테고리의 다른 글
(데이터분석) matplotlib으로 선도표 나타내기 (0) | 2024.05.28 |
---|---|
(데이터분석) seaborn으로 히스토그램 faceting(면 분할) 하기 (0) | 2024.05.27 |
(데이터분석) seaborn으로 상자 그림(box plot) 나타내기 (0) | 2024.05.27 |
(데이터분석) seaborn으로 Violin plot(바이올린 플롯) 나타내기 (0) | 2024.05.27 |
(데이터분석) matplotlib으로 heatmap(히트맵) 작성하기 (0) | 2024.05.27 |