본문 바로가기
AI/데이터 사이언스

[AI 부트캠프] DAY 24 - 파이썬 EDA 4

by HOHHOH 2023. 8. 19.

[오늘의 일지]

파이썬 온라인 녹화 강의 - Matplotlib 복습 및 Seaborn 추가 내용 정리, 데이터 이용해서 EDA 해보기

[상세 내용]

파이썬 EDA

Seaborn 추가 내용

- Seanborn은 화려한 시각화 기법들을 제공하며 histplot, barplot, jointplot, lineplot 등과 같은 식의 함수의 형태를 가지고 있으며 sns.xxxplot(data=df)의 구조로 사용됩니다. 또 pandas DataFrame과 매우 호환이 잘 되는 특징을 가지고 있습니다.

 

- Histplot : 지난 일지에서도 설명했지만 헷갈리는 부분이 있어서 다시 정의하려고 합니다. 히스토그램과 막대그래프는 비슷한 형태를 가지고 있지만 차이점을 가지고 있습니다. 히스토그램은 연속형 데이터에 사용되는 반면, 막대그래프는 범주형 또는 명목형 데이터에 사용됩니다. 즉 쉽게 말하자면 히스토그램은 측정된 값이 연속형이기 때문에 값의 위치를 바꿀 수 없는 그래프이고 막대그래프는 카테고리 별로 만들어진 그래프이기 때문에 위치를 바꾸는 것이 가능한 그래프입니다.

# Seaborn 안에 내장되어 있는 penguin이라는 데이터에 histplot을 출력합니다.
plt.figure(figsize=(6, 6))
plt.title("Distribution over body_mass", fontsize=14)
sns.histplot(data=data, x="body_mass_g", bins=15, hue="species", multiple="stack")
plt.show()

연속적인 데이터를 가지고 있는 히스토그램

 

- Barplot : 위에서 설명한 데로 막대그래프는 카테고리별로 각각 독립적인 데이터를 가지고 있습니다.

# penguin 데이터에 barplot을 출력합니다.
#sns.barplot(data=data, x="species", y="body_mass_g")
sns.barplot(data=data, x="body_mass_g", y="species", hue="sex")
plt.show()

y축을 보면 카테고리를 가지고 있고 x축에도 다른 변수를 선언한 막대 그래프

 

- Countplot : 범주형 속성을 가지는 히스토그램도 존재하는데 막대그래프와 가장 큰 차이는 x축이나 y축에 하나의 변수만을 선언할 수밖에 없다는 것입니다.

# penguin 데이터에 countplot을 출력합니다.
plt.figure(figsize=(8, 6))
sns.set_palette("Blues")
sns.countplot(data=data, x="sex", hue="species")
plt.show()

 

x축만 변수가 선언된 범주형 속성을 가지는 히스토그램

 

- Boxplot : 데이터의 각 종류별로 사분위 수(quantile)를 표시하는 plot입니다. 여기서 사분위 수는 예전에 통계학에서 배웠지만 다시 정의하자면 데이터의 개수에 따라 범위를 4등분 한 것을 의미합니다. 이 그래프를 통해서 제1, 2, 3, 4 사분위를 알 수 있으며 제3 사분위수와 제1 사분위수의 차인 IQR(Inter-Quantile Range)과 제2 사분위수인 중앙값 그리고 이상치도 그래프를 통해 알 수 있습니다.

# penguin 데이터에 boxplot을 출력합니다.
plt.figure(figsize=(8, 6))
sns.set_palette("Set2")
sns.boxplot(data=data, y="species", x="bill_depth_mm", hue="sex")
plt.show()

Boxplot의 예시

 

- Violinplot : boxplot과 비슷한 분포를 보여주지만 정확한 수치는 알 수 없는 plot입니다.

# penguin 데이터에 violinplot을 출력합니다.
plt.figure(figsize=(8, 6))
sns.violinplot(data=data, y="species", x="bill_depth_mm", hue="sex")
plt.show()

Violinplot의 예시

 

- Lineplot : 특정 데이터를 x, y로 표시하여 관계를 확인할 수 있는 plot으로 선 그래프 형태입니다.

# penguin 데이터에 lineplot을 출력합니다.
plt.figure(figsize=(8, 6))
sns.lineplot(data=data, x="body_mass_g", y="bill_depth_mm", ci=None)
plt.show()

Lineplot의 예시

 

- Pointplot : 특정 수치 데이터를 error bar와 함께 출력해 주는 plot으로 error bar를 한 번에 찍어주기 때문에 살펴보고 싶은 특정 지표들만 사용하는 것이 좋습니다.

# penguin 데이터에 pointplot을 출력합니다.
plt.figure(figsize=(8, 6))
sns.pointplot(data=data, x="island", y="bill_length_mm")
plt.show()

Pointplot의 얘시

 

- Scatterplot : matplotlib에서도 나왔던 plot으로 산점도가 퍼져있는 모양을 중점으로 그래프를 분석할 때 사용됩니다.

# penguin 데이터에 scatterplot을 출력합니다.
plt.figure(figsize=(10, 6))
sns.scatterplot(data=data, x="flipper_length_mm", y="body_mass_g", hue="sex")
plt.show()

Scatterplot의 예시

 

- Pairplot : 어제도 짧게 설명했지만 주어진 데이터의 각 feature들 사이의 관계를 표시하는 plot으로 scatterplot, FacetGrid, kdeplot을 이용하여 feature 간의 관계를 잘 보여줍니다. 이 plot은 모든 feature들 간의 관계를 나타내기 때문에 너무 많은 feature를 가지고 있는 데이터에는 적합하지 않습니다.

# penguin 데이터에 pairplot을 출력합니다.
plt.figure(figsize=(10, 10))
sns.pairplot(data=data, hue="sex")
plt.show()

pairplot의 예시

 

- Heatmap : 정사각형 그림에서 데이터 간의 차이를 색으로 보여주는 plot인데 데이터 간의 차이는 상관관계를 이용해서 수치로 나타낸 다음 그 수치를 색으로 표현하면서 시각적으로 관계를 분석할 수 있습니다.

# 각 feature간 상관관계를 파악하기 위해 Correlation matrix를 만듭니다.
corr = data.corr()
corr

# penguin 데이터에 heatmap을 출력합니다.
plt.figure(figsize=(8, 8))
sns.heatmap(data=corr, square=True, cmap="Blues", annot=True, fmt=".3f")
plt.show()

Heatmap 예시

 

데이터 이용해서 EDA 해보기

- 이 파트는 강사님이 실제 존재하는 데이터를 바탕으로 특정 주제가 주어졌을 때 어떤 식으로 원하는 데이터만 필터링하여 가져와서 정형 데이터로 만들어 내는 과정을 순서대로 보여주는 강의였습니다. 아직 순차적으로 강사님이 사용하는 코드를 따라 하는 단계지만 혼자서 과제를 해본다면 실력이 향상될 수 있다는 느낌을 받았습니다.

 

[마무리]

 오늘은 여러 가지 라이브러리로 정형 데이터를 만들어 나가는 과정을 실제 데이터를 기반으로 연습해 보는 시간을 가졌습니다. 실제 데이터를 이용하는 과정에서 어떻게 필터링을 해서 원하는 데이터만을 가져오는지가 중요하게 느껴졌던 거 같습니다. 새로운 것을 배우면서 시간이 빠르게 흘러간 한 주였던 거 같습니다. 이제 막 분석 파트를 접하게 되었는데 프로그래밍 파트도 흥미가 있었지만 이번 분석 파트도 여러 가지 면에서 만만치 않게 흥미로움이 있다고 느끼고 있습니다. 앞으로 하게 될 프로젝트도 기대가 되는 부분입니다.

반응형

댓글