반응형
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
- 결정트리
- 코드잇
- 나혼자코딩
- sql연습문제
- 코딩독학
- 파이썬
- CSS
- 판다스
- 경사하강법
- for반복문
- SQL
- 데이터분석
- 로지스틱회귀
- 윈도우함수
- 코드잇TIL
- 코딩공부
- 유학생
- numpy
- 선형회귀
- 행렬
- Seaborn
- 코드잇 TIL
- 런던
- 영국석사
- matplotlib
- 머신러닝
- 코딩
- 다항회귀
- HTML
- 오늘도코드잇
Archives
- Today
- Total
영국 척척석사 유학생 일기장👩🏻🎓
(데이터분석) seaborn과 matplotlib으로 히스토그램 나타내기 본문
728x90
반응형
- 히스토그램은 숫자 변수의 분포를 나타낼 때 사용합니다.
- 막대 그래프를 정량적 변수에 적용한 것과 같습니다.
- 하지만 하나의 막대로 각 고유 범주에 속하는 값의 개수를 나타내는 대신, 값을 연속적인 계급으로 나눈 다음 하나의 막대로 각 계급에 속하는 값의 개수를 나타냅니다.
- seaborn과 matplotlib으로 나타낼 수 있습니다.
1. Matplotlib.pyplot.hist()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('diamonds.csv')
df.shape
df.head(5)
- 다이아몬드의 x,y,z축 길이를 확인하려고 합니다.
- 이 값은 mm단위로 입력되어 있습니다.
- 히스토그램을 작성할 때는 matplotlib의 hist 함수를 사용하면 됩니다.
- data 변수에 데이터 세트를 전달한 다음 x축에 매개변수 x를 나타내는 x히스토그램을 그리도록 지정합니다.
plt.hist(data=df, x='x');
- matplotlib은 기본적으로 데이터를 10개의 계급으로 나누는데 이는 일반적으로 너무 적고,
- 계급의 경계가 눈금과 일치하지도 않습니다.
- 이때, 매개변수 bin을 사용합니다. 정숫값만큼의 계급이 자동으로 만들어집니다.
plt.hist(data=df, x='x', bins=25)
- 직접 계급을 지정할 수도 있습니다.
- numpy arange 함수를 사용해 계급 경계의 배열을 정의하면 됩니다.
- 최댓값에 0.25를 더하는 것은 가장 오른쪽의 계급의 경계값이 데이터의 최댓값보다 크게 만들어 어떤 경우에도 모든 데이터가 표시되도록 하기 위함입니다.
#np.arange(최솟값, 최댓값, 계급의 크기 1/4mm)
bins = np.arange(0, df['x'].max()+0.25, 0.25)
plt.hist(data=df, x='x', bins=bins);
2. Seaborn histograms
- 기본 계급 개수가 matplotlib보다 많습니다.
- 데이터를 정규화한 다음 각 계급이 차지하는 비중을 나타내고 싶다면 통계량을 뜻하는 stat이라는 매개변수를 도입하면 됩니다.
- 그러면 각 계급이 전체에서 차지하는 비중을 나타내는 차트가 됩니다.
- 기본 구문은 다음과 같습니다.
seaborn.histplot(data, x, y, bins, kde, stat, hist_kws)
sns.histplot(data=df, x='x', stat='percent');
- 이 함수에서는 kde=True라는 매개변수를 지정할 수 있습니다.
- 이는 차트 위에 가우시안 커널 밀도 추정을 겹쳐서 나타냅니다.
- KDE(Kernel Density Estimate) : 데이터 분포의 밀도 추정이며 그 곡선 아래의 면적은 항상 1입니다.
3. 두 개의 히스토그램을 나란히 작성하기
#차트의 크기를 조정하고 두 차트를 나란히 배치하기
#subplot을 아우르는 figure의 크기 설정하기
plt.figure(figsize = [20, 5])
#왼쪽의 히스토그램, 계급의 크기가 지나치게 큼
#1개의 행, 2개의 열, subplot 1
plt.subplot(1, 2, 1)
bins = np.arange(0, pokemon['speed'].max()+4, 4)
plt.hist(data = pokemon, x = 'speed', bins=bins);
#오른쪽의 히스토그램, 계급의 크기가 지나치게 작음
plt.subplot(1, 2, 2) #1개의 행, 2개의 열, subplot 2
bins = np.arange(0, pokemon['speed'].max()+1/4, 1/4)
plt.hist(data = pokemon, x='speed', bins=bins);
4. seaborn으로 hue인수를 사용해서 여러 변수 나타내기
- 하나의 히스토그램에서 x, y, 다이아몬드 크기(mm)를 모두 나타내는 방법을 알아보겠습니다.
- pandas.Dataframe.melt() 메서드를 사용해 주어진 DataFrame을 unpivoting하여 넓은 형식에서 긴 형식으로 바꾸되, 식별자로 사용할 열을 지정합니다.
DataFrame.melt(id_vars, value_vars, var_name, value_name, col_level, ignore_index)
- in_var : 식별자 변수를 사용할 열을 나타내는 튜플
- value_vars : unpivoting할 열들을 나타내는 튜플 (원본을 유지하면서 재배치)
- var_name : 새로운 열의 이름
- value_name : unpivoting 할 열들의 '값'에 대해 지정할 이름
df = df[df['y'] < 11.] #이상치 제거
df['index'] = df.index
df_long = df.melt(id_vars=['index'], value_vars=['x', 'y'], var_name=['dimension'], value_name='size')
print(df_long.shape)
df_long.head(10)
sns.histplot(data=df_long, x='size', hue='dimension', bins=61, element='step');
- 'hue'매개변수를 사용하면 서로 다른 분포를 겹쳐서 나타낼 수 있습니다.
- 'step' 요소로 계급의 경계를 나타내는 선을 제거하여 이미지를 깔끔하게 나타낼 수 있습니다.
728x90
반응형
'코딩공부 > Data analysis' 카테고리의 다른 글
(데이터분석) 불연속 데이터에서의 히스토그램, 막대그래프 나타내기 (0) | 2024.05.25 |
---|---|
(데이터분석) matplotlib의 figure, axes, subplots의 개념 (0) | 2024.05.25 |
(데이터분석) matplotlib으로 원 그래프 작성하기 (0) | 2024.05.24 |
(데이터분석) seaborn의 절대도수와 상대도수 막대그래프 나타내기 (0) | 2024.05.24 |
(데이터분석) seaborn과 matplotlib으로 막대그래프 작성하기 (0) | 2024.05.23 |