[EDA] Seaborn

박미영·2023년 4월 1일
0

📌seaborn 설치

!conda install -y seaborn



import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import rc

plt.rcParams['axes.unicode_minus'] = False      # 마이너스 기호 사용
rc("font", family="Malgun Gothic")             # 한글 폰트 사용 

# %matplotlib inline
get_ipython().run_line_magic("matplotlib", "inline")



📌예제1: seaborn 기초

  • 0부터 14 사이의 100개의 값 생성
np.linspace(0, 14, 100)

  • 4개의 실선 데이터가 생성
x = np.linspace(0, 14, 100)
y1 = np.sin(x)
y2 = 2 * np.sin(x + 0.5)
y3 = 3 * np.sin(x + 1.0)
y4 = 4 * np.sin(x + 1.5)
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4) # 쌍으로 넣어주면 4개의 실선 데이터가 생성된다. 
plt.show()

sns.set_style()

"white", "dark", "whitegrid", "darkgrid", "ticks" 종류가 있다.
💡 "ticks"는 예제 4번에서 설명

  • white
    sns.set_style("white")를 하면 그리드 없고 흰색인 배경이 나타난다.
sns.set_style("white")
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4) # 쌍으로 넣어주면 4개의 실선 데이터가 생성된다. 
plt.show()


  • dark
sns.set_style("dark")
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4) # 쌍으로 넣어주면 4개의 실선 데이터가 생성된다. 
plt.show()


  • whitegrid
sns.set_style("whitegrid")
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4) # 쌍으로 넣어주면 4개의 실선 데이터가 생성된다. 
plt.show()


  • darkgrid
sns.set_style("darkgrid")
plt.figure(figsize=(10, 6))
plt.plot(x, y1, x, y2, x, y3, x, y4) # 쌍으로 넣어주면 4개의 실선 데이터가 생성된다. 
plt.show()




📌예제2: seaborn tips data

  • boxplot
  • swarmplot
  • lmplot



tips = sns.load_dataset("tips")
tips

tips.info()

total_bill, tip은 float 데이터, sex, smoker, day, time은 category 데이터임을 알아두자.



boxplot

plt.figure(figsize=(8, 6))
sns.boxplot(x=tips["total_bill"])
plt.show()


  • 요일에 따른 total bill boxplot
# boxplot
plt.figure(figsize=(8, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
plt.show()

boxplot hue, palette option

hue: 카테고리 데이터 표현 옵션

plt.figure(figsize=(8, 6))
sns.boxplot(x="day", y="total_bill", data=tips, hue="smoker")
plt.show()


palette: Set 1 - 3

plt.figure(figsize=(8, 6))
sns.boxplot(x="day", y="total_bill", data=tips, hue="smoker", palette="Set3") # Set 1 - 3
plt.show()



swarmplot

# swarmplot

plt.figure(figsize=(8, 6))
sns.swarmplot(x="day", y="total_bill", data=tips)
plt.show()

  • color option
    color: 0-1 사이 검은색부터 흰색 사이 값을 조절(0: 검정, 1: 흰색)
plt.figure(figsize=(8, 6))
sns.swarmplot(x="day", y="total_bill", data=tips, color="0.5")
plt.show()

plt.figure(figsize=(8, 6))
sns.swarmplot(x="day", y="total_bill", data=tips, color="0.2")
plt.show()

plt.figure(figsize=(8, 6))
sns.swarmplot(x="day", y="total_bill", data=tips, color="1")
plt.show()



boxplot with swarmplot

plt.figure(figsize=(8, 6))
sns.boxplot(x="day", y="total_bill", data=tips)
sns.swarmplot(x="day", y="total_bill", data=tips, color="0.25")
plt.show()



lmplot

total_bill과 tip 사이 관계 파악

sns.set_style("darkgrid")
sns.lmplot(x="total_bill", y="tip", data=tips, height=7) # height 그래프 크기 figsize랑 같다고 생각하면 됨
plt.show()

hue option

sns.set_style("darkgrid")
sns.lmplot(x="total_bill", y="tip", data=tips, height=7, hue="smoker")
plt.show()




📌예제3: flights data

  • heatmap

flights = sns.load_dataset("flights")
flights.head()

flights.info()

pivot(index, columns, values)

flights = flights.pivot(index='month', columns='year', values='passengers')
flights.head()



heatmap

annot=True: 데이터 값 표시
fmt= (d: 정수형 표현, f: 실수형 표현)

plt.figure(figsize=(10, 8))
sns.heatmap(data=flights, annot=True, fmt="d") # annot=True: 데이터 값 표시, fmt="d" 정수형 표현, f: 실수형 표현
plt.show()



colormap option

cmap="색상명"

plt.figure(figsize=(10, 8))
sns.heatmap(flights, annot=True, fmt="d", cmap="YlGnBu") # cmap: 색상
plt.show()




📌예제4: iris data

  • pairplot
iris = sns.load_dataset("iris")
iris.tail()

pairplot

값 전체 데이터에 대해서 모든 경우의 수를 그래프로 나타내준다.

sns.pairplot(iris)
plt.show()

  • sns.set_style("ticks")
    x축, y축 모양이 변했다.
sns.set_style("ticks")
sns.pairplot(iris)
plt.show()



pairplot with hue

  • 원하는 데이터만 pairplot으로 나타내기
iris["species"].unique()

iris의 species는 3가지 종류의 데이터가 있음을 알 수 있다.

hue option

sns.pairplot(iris, hue="species")
plt.show()

hue option을 주기 전엔 한 가지 색상으로 표현되어 어떤 데이터를 나타내는지 알 수 없었는데 hue option을 주고 나선 한 눈에 데이터를 잘 알아볼 수 있다.



원하는 컬럼만 pairplot

sns.pairplot(iris, 
             x_vars=["sepal_width", "sepal_length"],
             y_vars=["petal_width", "petal_length"])
plt.show()




📌예제5: anscombe data

lmplot

anscombe = sns.load_dataset("anscombe")
anscombe.tail()

anscombe["dataset"].unique()

sns.set_style("darkgrid")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"), ci=None, height=7) #ci: 신뢰구간 선택
plt.show()


  • scatter_kws option: 원 크기
sns.set_style("darkgrid")
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"), ci=None, height=7, scatter_kws={"s": 50}) #ci: 신뢰구간 선택, scatter_kws: 원 크기
plt.show()



  • order option
  1. dataset == 'II', order=1
# order option
sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'II'"), 
    order=1,
    ci=None, 
    height=7, 
    scatter_kws={"s": 80}) #ci: 신뢰구간 선택
plt.show()


  1. dataset == 'II', order=2
# order option
sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'II'"), 
    order=2,
    ci=None, 
    height=7, 
    scatter_kws={"s": 80}) #ci: 신뢰구간 선택
plt.show()


  1. dataset == 'III', order X
# outlier
sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'III'"), 
    ci=None, 
    height=7, 
    scatter_kws={"s": 80}) #ci: 신뢰구간 선택
plt.show()

  • outlier
    혼자 동떨어져있는 데이터 다루는 방법 robust=True

# outlier
sns.set_style("darkgrid")
sns.lmplot(
    x="x", 
    y="y", 
    data=anscombe.query("dataset == 'III'"), 
    robust=True,
    ci=None, 
    height=7, 
    scatter_kws={"s": 80}) #ci: 신뢰구간 선택
plt.show()


robust=True 작성 후 ERROR가 발생했다.

⚠️ERROR 발생

ModuleNotFoundError: No module named 'statsmodels'

💡해결방법

conda install statsmodels




"이 글은 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글