카테고리 없음

[KMU SUMMER AI] Matplotlib으로 데이터 시각화하기

프로틴형님 2022. 7. 16. 07:35

I. Matplotlib 시작하기


  • 파이썬의 데이터 시각화 라이브러리
  • matplotlib
  • %maplotlib inline를 통해서 활성화
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

Case Study with Arguments

plt.plot([2,4,2,4,2]) # 실제 plotting을 하는 함수 y = x + 1
plt.show() # plt를 확인하는 명령


Figsize : figure(도면)의 크기 조절

plt.figure(figsize=(4,4)) # plotting을 할 도면을 선언

plt.plot([0,1,2,3,4])
plt.show()


2차함수 그래프 with plot()

# 리스트를 이용해서 1차함수 y=x를 그려보면:

plt.plot([0,1,2,3,4])
plt.show()


# numpy.array()를 이용해서 함수 그래프 그리기
# 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.plot(x, x**2)

plt.show()


# x, y 축에 설명 추가하기

plt.xlabel("x value")
plt.ylabel("f(x) value")

plt.show()


# x,y 축의 범위를 설정하기

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


# x,y축에 눈금 설정하기

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

plt.xticks([i for i in range(-5,5,1)]) # x 축의 눈금 설정, -5, -4, -3 ...
plt.yticks([i for i in range(0,24,3)]) # y 축의 눈금 설정

plt.plot(x, x**2)

plt.show()


# 그래프에 title 달기

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)]) # x 축의 눈금 설정, -5, -4, -3 ...
plt.yticks([i for i in range(0,24,3)]) # y 축의 눈금 설정
plt.title(" y = x^2 graph ")

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

###
plt.legend()
###

plt.show()


II. Matplotlib Case Study


꺾은선 그래프 (Plot)

x = np.arange(20) # 0 ~ 19
y = np.random.randint(0,20,20) # 난수를 20번 생성

plt.plot(x,y)

# Extra : y축을 20까지 보이게 하고 싶다면?
plt.axis([0,19,0,20])

# y축을 "5"단위로 보이게 하고 싶다면?
plt.yticks([i for i in range(0,21,5)])

plt.show()


산점도 (Scatter Plot)

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


박스 그림 (Box Plot)

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

# Extra : Plot의 title을 "Box plot of x, y"
plt.title("Box plot of x, y")

plt.show()


막대 그래프 (Bar Plot)

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

# Extra : xtics를 올바르게 처리해봅시다.
plt.xticks([i for i in range(1,21)])
# np.arange(0,20,1)

plt.show()


# cf) Histogram
# 도수분표를 직사각형의 막대 형태로 나타냈다.
# "계급"으로 나타낸 것이 특징 : 0,1,2가 아니라 0~2까지의 "범주형" 데이털 구성 후 그림을 그림

plt.hist(y, bins=np.arange(0,22,2))

# Extra : xticks를 올바르게 고쳐봅시다.
plt.xticks(np.arange(0,22,2))

plt.show()


원형 그래프 (Pie Chart)

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

plt.pie(z, labels=['One', "two", "three", "four"])
plt.show()


III The 멋진 그래프, Seaborn Case Study


Matplotlib를 기반으로 더 다양한 시각화 방법을 제공하는 라이브러리

  • 커널밀도그림
  • 카운트그림
  • 캣그림
  • 스트립그림
  • 히트맵

Seaborn import 하기

import seaborn as sns

커널밀도그림 (Kernel Density Plot)

  • 히스토그램과 같은 연속적인 분포를 곡선화해서 그린 그림
  • sns.kdeplot()
# in Histogram

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

plt.hist(y, bins=x)
plt.show()


# kdeplot

sns.kdeplot(y, shade=True)

plt.show()


카운트그림 (Count Plot)

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

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

plt.show()


# sns의 countplot

sns.countplot(x=vote_df['vote'])

plt.show()


캣그림 (Cat Plot)

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

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()
sns.stripplot(x="WHO Region",y="Recovered", data=covid)

plt.show()


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

plt.show()


히트맵 (Heatmap)

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

plt.show()