본문 바로가기

코딩 학원(국비지원)

99일차 코딩학원 (subplot, seaborn)

반응형

6/14 공부 내용 정리

  • 서브플롯(subplot) :  여러 개의 그래프를 한 번에 표시하거나 다양한 관점에서 데이터를 시각화하고자 할 때 유용
  • seaborn 사용해서 "penguins" 데이터 셋 : 펭귄 종류와 관련된 정보 시각화하기. 
  • https://www.figma.com/@apple 애플이 내부적으로 사용하는 디자인 템플릿을 피그마에 공개했다. 

subplot 코드, 그래프

import matplotlib.pyplot as plt
import numpy as np

plt.subplot(1, 2, 1)
plt.plot([0.1, 0.3, 0.5])       # x값 0, 1, 2에 대응하는 y값을 그래프로 그림

plt.subplot(3, 2, 2)
plt.bar([1, 2, 3], [3, 2, 1])   # x값 [1, 2, 3]에 대응하는 y값 [3, 2, 1]을 막대그래프로 그리기

plt.subplot(3, 2, 4)
plt.plot([4, 1, -3])

plt.subplot(3, 2, 6)
plt.scatter([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])

plt.show()

subplot

 

seaborn 코드, 그래프

'''
    Seaborn
        - 화려한 시각화 기법들 제공
            - histplot, barplot, lineplot...
        - pandas DataFrame과 매우 호환이 잘 됨
'''

import seaborn as sns
import matplotlib.pyplot as plt

# "penguins" 데이터 셋 : 펭귄 종류와 관련된 정보


'''
    - histplt
        - 가장 기본적으로 사용되는 히스토그램을 출력 
        - 전체 데이터를 특정 구간별 정보를 확인할 때 사용
'''

'''
    7 columns
        - species : 펭귄 종류를 나타내는 범주형 변수 (Adelie, Gentoo, Chinstrap)
        - island : 펭귄 서식하는 섬 위치를 나타내는 범주형 변수 (Torgersen, Biscoe, Dream)
        - bill_length_mm : 펭귄 부리 길이를 밀리미터(mm) 단위로 나타내는 수치형 변수
        - bill_depth_mm : 펭귄 부리 깊이를 밀리미터(mm) 단위로 나타내는 수치형 변수
        - flipper_length_mm : 펭귄 지느러미 (mm)
        - body_mass_g : 체중 (g)
        - sex : 성별 (M, F)
'''

data = sns.load_dataset("penguins")
print(data)

plt.figure(figsize=(6,6))
plt.title("Distribution over body_mass", fontsize=15)
# bins = 막대그래프 개수, hue= "species" 기준으로 색깔 부여함, multiple="stack" 따로따로 쌓이게 그림
sns.histplot(data=data, x="body_mass_g", bins=20, hue="species", multiple="stack")
plt.show()

'''
    2. displot
        - distribution들을 여러 subplot들로 나눠서 출력해주는 plot 
        - kind를 변경하는 것으로 hisplot, kdeplot, ecdfplot 출력이 가능함 
            - hisplot : 히스토그램을 그리는 함수 
            - kdeplot :  kernel density estimation
                         데이터의 분포를 부드러운 곡선으로 그리는 함수
                         확률밀도함수를 계산하고 이를 곡선으로 시각화함
            - ecdfplot : 
'''

plt.figure()
# kind="kde" : 밀도함수, col="island" : 양옆으로 출력, row="island", : 세로로 출력
sns.displot(data=data, kind="kde", x="body_mass_g", hue="species", row="island")
plt.show()

'''
    3. barplot
        - 어떤 데이터에 대한 값의 크기를 막대로 보여주는 plot (막대그래프) 
        - 가로/세로 두 가지로 출력 가능
        - 히스토그램과는 다름 
'''

plt.figure()
#sns.barplot(data=data, x="species", y="body_mass_g")
sns.barplot(data=data, x="body_mass_g", y="species", hue="sex")
plt.show()

'''
    4. countplot 
        - 범주형 속성을 가지는 데이터들의 histogram을 보여주는 plot
        - 종류별 count를 보여주는 방법
        - set_palette() : 색상 팔레트 설정 함수 
            - Set1 : 가지 색상 가진 팔레트
            - Set2 : 8가지 색상 가진 팔레트
            - Set3 : 12가지 색상 가진 팔레트
            - viridis : 연속적인 색상 그라데이션 팔레트 
'''

sns.set_palette("Set1")
plt.figure(figsize=(8,6))
sns.countplot(data=data, x="sex", hue="species")
plt.show()

'''
    5. boxplot
        - 사분위 수를 표시하는 plot
        - 특정 데이터의 전체적인 분포를 확인하기 좋은 시각화 기법
        - box와 전체 range의 그림을 통해 outlier를 찾기 쉬움         
'''
plt.figure(figsize=(8,6))
sns.set_palette("Set2")
sns.boxplot(data=data, x="bill_length_mm", y="species", hue="sex")
plt.show()

'''
    6. violinplot
        - 데이터에 대한 분포 자체를 보여주는 plot
        - boxplot과 비슷하지만, 전체 분포에 대한 그림을 보여줌
'''

plt.figure(figsize=(8,6))
sns.violinplot(data=data, x="bill_length_mm", y="species", hue="sex")
plt.show()

'''
    7. lineplot
        - 특정 데이터를 x,y로 표시하여 관계를 확인할 수 있음
        - 선 그래프
        - 수치형 지표들 간의 경향을 파악할 때 많이 사용 
'''

plt.figure(figsize=(8,6))
sns.lineplot(data=data, x="body_mass_g", y="bill_depth_mm")
plt.show()


'''
    8.pointplot
        - 특정 수치 데이터를 error bar와 함께 출력해주는 plot
        - 데이터와 error bar를 한번에 찍어주기 때문에,
          특정 지표들만 사용하는 것이 좋음 
'''

plt.figure(figsize=(8,6))
sns.pointplot(data=data, x="body_mass_g", y="bill_depth_mm")
plt.show()

'''
    9. scatterplot
        - lineplot과 비슷하게 x,y에 대한 전체적인 분포를 확인하는 plot
        - lineplot은 경향성에 초점을 둔다면,
          scantterplot은 데이터 그 자체가 퍼져있는 모양에 중점을 둠 
'''

plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x="flipper_length_mm", y="body_mass_g", hue="sex")
plt.show()

'''
    10. pairplot 
        - 주어진 데이터의 각 feature들 사이의 관계를 표시하는 plot
        - scatterplot, FaceGrid, kdeplot을 이용하여 feature들 간의 관계를 잘 보여줌
        - 각 feature에 대해 계산된 모든 결과를 보여줌 
            - feature가 많은 경우 사용하기 적합하지 않음 
'''

plt.figure(figsize=(10, 10))
sns.pairplot(data=data, hue="sex")
plt.show()

'''
    11. heartmap
        - 정사각형 그림에 데이터에 대한 정도 차이를 색 차이로 보여줌
        - 열화상카메라로 사물을 찍은 것처럼 보임 
        - 상관관계를 알 수 있음 
'''

# 각 feature간 상관관게를 파악하기 위해 correlation matrix 생성
corr = data.corr()
print(corr)

plt.figure(figsize=(8, 8))
sns.pairplot(data=corr)
plt.show()

seaborn


매우 유용하다. 데이터를 시각화하는 그래프를 코드로 구현하려면 매우 어렵다. 위 코드들을 참고해서 주식 종목, 배당금을 입력하면 배당금 합계, 시각화 자료가 나오는 프로그램을 만들고 있다. 완성되면 네이버 블로그에 공개할 것이다. 

반응형

'코딩 학원(국비지원)' 카테고리의 다른 글

101일차 코딩학원 (능력단위평가)  (1) 2023.06.16
100일차 코딩학원 (머신러닝)  (2) 2023.06.15
98일차 코딩학원  (3) 2023.06.13
97일차 코딩학원  (1) 2023.06.12
95일차 코딩학원  (3) 2023.06.08