폰트 적용
# 설치한 폰트 설정 저 파일 위치의 폰트들을 확인해서 긁어옴.
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.font_manager as font_manager
# Add every font at the specified location
font_dir = ['C:\\\\Chang_git\\\\python_basic\\\\fonts']
for font in font_manager.findSystemFonts(fontpaths=font_dir):
print(mpl.font_manager.FontProperties(fname=font).get_name())
font_manager.fontManager.addfont(font)
# Set font family globally
mpl.rcParams['font.family'] = 'LINE Seed Sans KR'
print(mpl.rcParams['font.family'])
mpl.rcParams['axes.unicode_minus'] = False
Seaborn이란
- Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 패키지 인다.
- 시각화 기능은 Matplotlib 패키지에 의존하며
- 통계 기능은 Statsmodels 패키지에 의존한다.
카운트 플롯
- countplot()을 사용하면 각 카테고리 값마다의 데이터가 얼마나 있는지 표시할 수 있다.
- value_counts()를 보듯이 각 유니크한 값들이 몇 개씩 있는지 시각적으로 확인 가능
- 카운트 플롯은 카테고리별 히스토그램이라 볼 수 있다.
- API 옵션은 바차트와 동일(모양도 바차트와 동일)
테마를 활용해서 스타일 적용하기
- set_theme()는 global 범위의 테마를 적용해서 그래프를 쉽게 꾸밀 수 있다.
- style과 palette 키워드 인수를 활용해서 그 값을 설정한다.
- style = darkgrid, whitegrid, dark, white, ticks,…
- palette = pastel, husl, spectral, flasre, …
- set_context()의 인수로 paper, notebook, talk , poster 중 하나를 넣으면 해당하는 설정을 세팅할 수 있다.
import seaborn as sns
sns.set_theme(style = 'whitegrid')
sns.set_context('paper')
df = sns.load_dataset('titanic')
sns.countplot(x = df['class']) # x 키워드 인수에 Series 값을 전달한다.
df
survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
3 | 1 | 1 | female | 35.0 | 1 | 0 | 53.1000 | S | First | woman | False | C | Southampton | yes | False |
4 | 0 | 3 | male | 35.0 | 0 | 0 | 8.0500 | S | Third | man | True | NaN | Southampton | no | True |
… | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … |
886 | 0 | 2 | male | 27.0 | 0 | 0 | 13.0000 | S | Second | man | True | NaN | Southampton | no | True |
887 | 1 | 1 | female | 19.0 | 0 | 0 | 30.0000 | S | First | woman | False | B | Southampton | yes | True |
888 | 0 | 3 | female | NaN | 1 | 2 | 23.4500 | S | Third | woman | False | NaN | Southampton | no | False |
889 | 1 | 1 | male | 26.0 | 0 | 0 | 30.0000 | C | First | man | True | C | Cherbourg | yes | True |
890 | 0 | 3 | male | 32.0 | 0 | 0 | 7.7500 | Q | Third | man | True | NaN | Queenstown | no | True |
891 rows × 15 columns
- hue 키워드 인수를 활용해서 분류할 두 번째 변수를 설정할 수 있다.
- data 키워드 인수에 DataFrame을 전달하고, x 키워드 인수에 DataFrame 중 매칭하고 싶은 column의 name을 전달한다.
# groupby
sns.countplot(data = df , x = 'class',hue='alive')
# data영역에 titanic 자체를 넣고 x 에 column 정보를 담아도 된다.
# alive column을 두 번째 변수로 지정하여 선실별 생존 여부를 가시적으로 확인할 수 있도록 돕는다.
- 플롯을 수평하게 작성할 수도 있다.
- y 키워드 인수에 data로 넘긴 DataFrame의 column name 값을 전달하면 된다.
sns.countplot(data = df , y = 'class',hue='alive')
tips 데이터셋
tips = sns.load_dataset('tips')
tips.head()
total_bill tip sex smoker day time size
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
러그 플롯
- 데이터 위치를 x 축 위에 작은 선분(rug)으로 나타내어 실제 데이터들의 위치를 보여준다(촘촘할수록 데이터 밀집되어 있음을 알 수 있음.)
- 커널 밀도는 커널이라는 함수를 겹치는 방법으로 히스토그램보다 부드러운 형태의 분포 곡선을 보여주는 방법이다.
sns.kdeplot(data=tips,x='total_bill') # 위에 파란선 (밀도를 보기 유리함) = kernel density = kde
sns.rugplot(data=tips,x='total_bill') # 밑에 주황색점 (밀도를 볼 수 있음.)
- scatterplot을 사용해서 y에 tip에 대한 column name을 넣어주어서 전체 금액 대비 tip의 비용이 얼마인지 볼 수 있다.
- (x, y를 부여해서 점형태로 분포를 볼 수 있다.)
sns.scatterplot(data=tips,x='total_bill',y= 'tip', hue= 'time')
sns.rugplot(data=tips,x='total_bill', y = 'tip', hue = 'time')
- hue 속성에 추가 값을(time column) 넣어서 식사시간 별로 추가 분류(색으로) 하여 가시적으로 보임
sns.scatterplot(data=tips,x='total_bill',y= 'tip', hue= 'time')
sns.rugplot(data=tips,x='total_bill', y = 'tip',hue='time',height = .1)
# rugplot의 크기를 조절하기 위해 height 키워드를 사용가능하다. 0.1 = 전체 그래프 10%
diamonds = sns.load_dataset('diamonds')
sns.scatterplot(data=diamonds, x = 'carat', y='price',s=5)
sns.rugplot(data=diamonds,x = 'carat',y = 'price', lw=1, alpha=.005) # 투명도를 많이줘서 얼마나 밀집되어있는지 표현이 가능하다(많이 겹쳐야 본래의 색이 보이기 때문)
히스토그램
- 1차원 혹은 2차원 데이터를 구간별로 보는데 유용하다
penguins = sns.load_dataset('penguins')
penguins.info() # info로 전체 데이터 조회 가능
histplot() x축 기준
- x 키워드 인수로 columns label 값을 전달한다.
- 좌측 y축은 개수를 표현하고 있다.
sns.histplot(data = penguins, x = 'flipper_length_mm') # 하지만 이정도 분류로는 파악이 어렵다.
histplot() y축 기준
- x 키워드 인수를 y 키워드 인수로 변경하여 표현 가능
sns.histplot(data = penguins, y = 'flipper_length_mm')
- binwidth 키워드 인수를 사용해서 bin(막대한칸)의 너비를 지정할 수 있다.
sns.histplot(data = penguins,x = 'flipper_length_mm',binwidth=3) # x축의 너비를 3씩나눔
- bins 키워드 인수를 사용해서 bin의 개수(막대의 개수)를 지정할 수도 있다.
sns.histplot(data = penguins,x = 'flipper_length_mm',bins = 30)
histplot() kde를 동시에 표시하기
- kde 키워드 인수를 True로 바꿔줌으로써 함수를 겹치는 방법으로 히스토그램보다 부드러운 형태의 분포 곡선을 보여준다.
sns.histplot(data=penguins,x = 'flipper_length_mm',kde=True)
histplot() hue 키워드 인수로 데이터 분리하기
- hue 키워드 인수에 분류 기준이 될 column label을 전달해서 여러 개의 히스토그램을 합친 것과 같은 결과의 그래프를 얻을 수 있다.
- 기본설정상으로는 값들이 overlab 되어 보인다.
sns.histplot(data=penguins,x = 'flipper_length_mm',hue='species') # 좀 더 보기 명확해졌다.
stack을 사용한 표현법
- 각 히스토그램의 layer가 겹친다면 이를 누적하듯 표현하는 방법도 있다
sns.histplot(data=penguins,x = 'flipper_length_mm',hue='species',multiple = 'stack')
element 키워드 인수에 step을 활용한 표현법
- 하나의 도형 형태로 윤곽선만 따서 보여준다.
- elements 키워드 인수에 ’step’이란 값을 전달하여 shape에 치중하여 더 잘 보이도록 할 수 있다.
sns.histplot(data=penguins,x = 'flipper_length_mm',hue='species',element = 'step')
element 키워드 인수에 poly을 활용한 표현법
- element 인자에 ‘poly’ 값을 전달하면 다각형 모양으로 표현된다.
sns.histplot(data=penguins,x = 'flipper_length_mm',hue='species',element= 'poly')
histogram의 heatmap
- x, y 축에 모두 column을 할당할 경우 만들어지는 형태이다.
sns.histplot(data=penguins,x = 'bill_depth_mm',y= 'body_mass_g',hue='species') # 진할수록 데이터가 더 겹친다는 의미.
- 카테고리화되어있는 값들이 인자의 값으로 들어가면 좀 더 보기 편한 heat map이 된다.
- x, y 축 column을 할당할 때 그중 하나의 값이 이산 된 값이라면 아래와 같이 데이터를 시각화하여 표현하면 이해하기 좋다.
sns.histplot(data=penguins,x = 'bill_depth_mm',y= 'species',hue='species',legend = False) #
히스토그램 - displot()
- 1,2차원 데이터의 분포를 히스토그램으로 보여준다.
- 다만 rug와 kde에 대해 동시에 표현이 가능해서 표현 범위가 더 넓고 더 많이 사용된다.
sns.displot(data=penguins, x = 'flipper_length_mm') # histplot()과 동일한 인수와 그래프 모양을 보인다.
displot()에서 kde 표현하기
- kind 키워드 인수를 활용해서 히스토그램 종류를 kde로 변경 가능하다.(부드러운 곡선형태)
sns.displot(data=penguins, x = 'flipper_length_mm',kind= 'kde')
displt() ecdf로 표현하기
- kind 키워드 인수에 ecdf를 활용해서 누적 분포 그래프로 표현 가능하다.
sns.displot(data=penguins, x = 'flipper_length_mm',kind= 'ecdf')
displot() 히스토그램과 kde 동시에 표현하기
- kde 키워드 인수 값을 True로 전달하면 히스토그램 와 kde를 동시에 표현 가능하다.
sns.displot(data=penguins, x = 'flipper_length_mm',kde = True)
displot() heatmap
- 마찬가지로 x, y에 각각 값을 할당하여 히트맵 형태로 그래프를 출력할 수 있다.
sns.displot(data=penguins, x = 'flipper_length_mm',y = 'bill_length_mm',hue = 'species')
displot() 2 개의 값을 kde로 표현하기
- x, y축 모두 할당한 앞의 히스토그램을 kde로도 표현 가능하다.
- 또한 rug = True 키워드 인수를 전달해서 rug에 대한 표현도 동시에 가능하다.
sns.displot(data=penguins, x = 'flipper_length_mm',y = 'bill_length_mm',kind = 'kde',rug=True) # 안쪽 영역일수록 더 밀도가 높다는 뜻.
'파이썬 > 파이썬 시각화' 카테고리의 다른 글
6. Seaborn - 3 (0) | 2023.05.02 |
---|---|
5. Seaborn - 2 (0) | 2023.05.02 |
3. Matplotlib - 3 (0) | 2023.05.02 |
2. Matplotlib - 2 (0) | 2023.05.02 |
1. Matplotlib - 1 (0) | 2023.05.02 |