반응형
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
- 파이썬
- 선형회귀
- 코딩독학
- 머신러닝
- Seaborn
- sql연습문제
- SQL
- CSS
- 코딩
- 경사하강법
- 판다스
- 영국석사
- 데이터분석
- 다항회귀
- 윈도우함수
- 유학생
- 행렬
- matplotlib
- 코딩공부
- 코드잇
- HTML
- 로지스틱회귀
- 코드잇 TIL
- numpy
- 결정트리
- 나혼자코딩
- 오늘도코드잇
- for반복문
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) seaborn의 절대도수와 상대도수 막대그래프 나타내기 본문
728x90
반응형
🔻지난글🔻에서 seaborn과 matplotlib으로 막대그래프 나타내는 방법을 알아보았습니다.
이번 글에서는 절대도수와 상대도수의 막대그래프를 나타내는 방법에 대해 알아보겠습니다.
1. 절대 도수를 나타내는 수평 막대 그래프 작성하기
- 먼저, 필요한 패키지를 불러오고, csv 파일을 읽습니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#csv 파일에서 데이터 읽기
df = pd.read_csv('data/diamonds.csv')
print(df.shape)
df.head(10)
- 어떤 변수의 총 개수를 차트에 나타내고 싶을 때는 countplot 함수를 사용하면 됩니다.
- 먼저, value_counts로 clarity 변수의 각 범주에 속하는 데이터의 개수를 파악하고, 내림차순으로 정렬한 합니다.
- 그 다음 countplot 함수를 사용하면 절대 도수를 나타내는 차트를 수직이나 수평으로 작성할 수 있습니다.
#clarity 열에서 각 고유한 값의 도수 구하기
# 기본 설정에 따라 절대 도수가 내림차순으로 반환됨
clarity_counts = df['clarity'].value_counts()
clarity_counts
#clarity 열에 존재하는 고유한 값들을 빈도의 크기순으로 지정하기
order = clarity_counts.index
#절대 도수를 나타내는 수평 막대 그래프 그리기
sns.countplot(data=df, y='clarity', color'tab:blue', order=order)
2. 한쪽 축에 실제 개수가 아닌 비중을 나타내는(상대도수) 막대 그래프 작성하기
- 예를 들어, IF 투명도 등급의 다이아몬드 비율을 구하려면 계산을 해서 추정해야 합니다.
- 그 대신, 상대 도수를 나타내는 차트를 작성해보겠습니다.
- 비율을 나타내야 하므로 정수값을 요구하는 countplot을 사용할 수 없으므로 대신 barplot을 사용해야 합니다.
- 가장 먼저 해야 할 일은 데이터를 정규화하는 것입니다. 방법은 두 가지가 있습니다.
- 방법 1) value_counts를 계속 사용하되 normalize=True를 입력하는 것
- 각 범주의 개수를 전체 데이터 개수로 나눠서 정규화한 값이 사용됩니다.
- 그리고 이 series를 dataframe 으로 변환합니다.
#pandas의 기본 제공 정규화 기능 사용하기
clarity_counts = df['clarity'].value_counts(normalize=True)
#pd.series를 dataframe으로 변환하기
clarity_counts = clarity_counts.reset_index(drop=False)
clarity_counts = clarity_counts.rename(columns={'index':'clarity', 'clarity':'proportion'})
sns.barplot(data=clarity_counts, y='clarity', x='proportion', color='tab:blue', order=order)
- 이 그래프를 보면 IF등급으로 분류된 다이아몬드는 전체의 3.5~4%인 것을 알 수 있습니다.
- 상대도수가 가장 큰 SI1등급은 전체의 25%을 차지하는 것을 알 수 있습니다.
- 방법 2) matplotlib으로 절대 도수 차트와 상대 도수 차트를 결합하는 것입니다.
- 각 막대에 대한 반복문을 실행해서 그 값을 백분율 단위로 변환합니다.
- 결과적으로 각 투명도 등급의 도수를 전체 데이터 개수로 나눈 값으로 구성된 문자열이 만들어집니다.
- 결과를 보면 각 등급에 대한 절대 도수 뿐만 아니라 상대적 비율도 확인할 수 있습니다.
#차트는 위와 동일하되, 비중을 나타내는 텍스트를 각 막대에 출력하기
clarity_counts = df['clarity'].value_counts()
total_count = clarity_counts.sum()
base_color = sb.color_palette()[0]
#비중을 나타내는 텍스트를 막대에 출력
sns.countplot(data=df, y='clarity', color=base_color, order=order)
for i, count in enumerate(clarity_counts):
#개수를 백분율로 변환한 다음 문자열로 변환하기
pct_string = f'{100*count/total_count:.1f}%'
#문자열 값을 각 막대에 출력하기
plt.text(count+1, i, pct_string, va='center')
728x90
반응형
'코딩공부 > Data analysis' 카테고리의 다른 글
(데이터분석) seaborn과 matplotlib으로 히스토그램 나타내기 (0) | 2024.05.24 |
---|---|
(데이터분석) matplotlib으로 원 그래프 작성하기 (0) | 2024.05.24 |
(데이터분석) seaborn과 matplotlib으로 막대그래프 작성하기 (0) | 2024.05.23 |
(데이터분석) 데이터 정제 결과를 시각적 방식과 프로그래밍 방식으로 테스트하기 (0) | 2024.05.21 |
(데이터분석) 파이썬으로 timeseries 시계열 데이터 정제하기 (0) | 2024.05.21 |