파이썬 데이터 시각화 라이브러리 matplotlib에 대해 알아본다.

Matplotlib 시작하기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline
  • matplotlib은 모듈 임포트와 동시에 인라인 명령어를 통해 활성화를 해주어야 사용할 수 있다.
plt.figure(figsize=(6,6)) # plotting을 할 도면을 선언
plt.plot([1,2,3,4,5]) # 실제 plotting을 하는 함수
# plt.plot(x=index, y=[1,2,3,4,5])
plt.show() # plt를 확인하는 명령

2차함수 그리기

# y=x^2
x = np.array([1,2,3,4,5]) # 정의역
y = np.array([1,4,9,16,25]) # f(x)

plt.plot(x,y)
plt.show()

여러가지 방법으로 그려보기

# np.arange(a,b,c)

x = np.arange(-10, 10, 0.01)

plt.xlabel("x value")
plt.ylabel("f(x) value")
plt.axis([-5, 5, 0, 25]) # [x_min, x_max, y_min, y_max]
plt.xticks([i for i in range(-5,5,1)])
plt.yticks([i for i in range(0,24,3)])

plt.title("y = x^2 graph")

plt.plot(x, x**2, label="trend")
plt.legend()

plt.show()

x, y 축 범위 설정하기

plt.axis([-5, 5, 0, 25]) # [x_min, x_max, y_min, y_max]

축의 눈금 설정하기

plt.xticks([i for i in range(-5,5,1)])
plt.yticks([i for i in range(0,24,3)])

그래프에 제목 달기

plt.title("y = x^2 graph")

범례는 그래프를 그리고 난 후 시행한다.

plt.legend()

꺽은선 그래프(Plot)

x = arange(20)
y = np.random.randint(0,20,20)

plt.plot(x, y)
plt.show()

# y축을 20까지 5단위로 그리려면? 아래 코드 추가
plt.axis([0, 20, 0, 20]
plt.yticks([i for i in range(0,20,5)])

산점도(Scatter Plot)

plt.scatter(x,y)
plt.show()

박스 그림(Box Plot)

  • 수치형 데이터에 대한 정보 (Q1, Q2, Q3, min, max)
plt.boxplot(y)
plt.show()

# plot title을 "Box plot of y" 로 추가 해보자
plt.title("Box plot of y")

막대 그래프(Bar plot)

  • 범주형 데이터 “값”과 그 값의 크기를 직사각형으로 나타낸 그림
plt.bar(x,y)
plt.show()

# xtics를 처리
plt.xticks(np.arange(0,20,1))

# Histogram
# 도수분포를 직사각형의 막대 형태로 나타내는 것은 막대그래프와 같으나,
# 계급이라는 개념이 도입됨 0,1,2 가 아니라 0~2 까지의 범주형 데이터로 구성 후 그림을 그림

plt.hist(y, bins=np.arange(0,20,2))
plt.xticks(np.arange(0,20,2))
plt.show()

원형 그래프(Pie Chart)

  • 데이터에서 전체에 대한 부분의 비율을 부채꼴로 나타낸 그래프
  • 다른 그래프에 비해서 비율 확인에 용이
z = [100,200,300,400]
plt.pie(z, labels=["one","two","three","four"])
plt.show()

Seaborn

  • Matplotlib을 기반으로 더 다양한 시각화 방법을 제공하는 라이브러리
    • 커널밀도그림
    • 카운트그림
    • 캣그림
    • 스트립그림
    • 히트맵

Seaborn 사용하기

import seaborn as sns

커널밀도그림 (Kernel Density Plot)

  • 히스토그램과 같은 연속적인 분포를 곡선화해서 그린 그림
x = np.arange(0,,22,2)
y = np.random.randint(0,20,20)

plt.hist(y, bins=x) # histogram 그리기
plt.show()

sns.kdeplot(y, shade=True)
plt.show()

카운트그림(Count Plot)

  • 범주형 column의 빈도수를 시각화 -> Groupby 후의 도수를 하는 것과 동일한 효과
vote_df = pd.DataFrame({"name":["Andy", "Bob", "Cat"], "vote":[True, True, False]})
vote_df

vote_count = vote_df.groupby("vote").count()
vote_count

plt.bar(x=[False, True] , height = vote_count["name"])

# sns.countplot
sns.countplot(x=vote_df["vote"])
plt.show()

캣그림(Cat Plot)

  • 숫자형 변수와 하나 이상의 범주형 변수의 관계를 보여주는 함수
covid = pd.read_csv("./country_wise_latest.csv")
covid.head(5)

s = sns.catplot(x="WHO Region", y="Confirmed", data=covid, kind="violin")
s.fig.set_size_inches(10,6)
plt.show()

스트립그림(Strip Plot)

  • scatter plot과 유사하게 데이터의 수치를 표현하는 그래프
sns.stripplot(x="WHO Region", y="Recovered", data=covid)
plt.show()

# swarmplot
sns.swarmplot(x="WHO Region", y="Recovered", data=covid)
plt.show()

히트맵(Heatmap)

  • 데이터의 행렬을 색상으로 표현해주는 그래프
sns.heatmap(covid.corr())
plt.show()