7일차에 배운 데이터 시각화 방법과 도구들에 대해 포스팅하겠습니다.
수 많은 양의 데이터를 확인하기 위한 방법으로 시각화나 통계량을 사용하여 데이터를 확인합니다. 그 중에 데이터를 그래프로 만드는 것을 시각화라고 합니다.
우리가 다루는 데이터에는 비지니스가 담겨 있습니다. 그래서 데이터를 시각화하는 목적은 비지니스의 인사이트를 파악하는 것입니다.
시각화의 한계로는 요약된 정보가 표현됐을 때 관점에 따라 해석의 결과가 달라질 수가 있다는 점에 있습니다. 그로 인하여 정보의 손실이 발생합니다.
▶ Matplotlib
기본 차트를 그려주는 라이브러리 입니다.
matplotlib를 사용하기 위한 환경준비는 아래와 같습니다.
import pandas as pd
import numpy as np
# 시각화 라이브러리
import matplotlib.pyplot as plt
import seaborn as sns
seborn도 마찬가지로 시각화 라이브러리입니다. matplotlib를 전체 호출하는 것이 아니라 matplotlib에 있는 pyplot을 호출해 줍니다.
기본차트를 그리는 형식
# 차트 그리기
plt.plot(data['컬럼명'])
# 화면에 보여주기
plt.show()
차트를 만들어준 후 화면에 보여줄 때는 .show()
를 사용해 줍니다.
x축은 인덱스, y축은 1차원의 값이 들어옵니다. x축과 y축은 따로 사용자가 지정해 줄 수 있습니다.
plt.plot(데이터프레임명['x축에 지정할 컬럼명'], 데이터프레임명['y축에 지정할 컬럼명'])
plt.show()
#또는
plt.plot('x축에 지정할 컬럼명', 'y축에 지정할 컬럼명', data = 데이터프레임명)
plt.show()
만약 축의 이름이 길어서 겹치거나 정보를 전혀 못 알아볼 때는 아래 코드를 사용하여 출력해 줄 수 있습니다.
plt.plot(데이터프레임명['x축에 지정할 컬럼명'], 데이터프레임명['y축에 지정할 컬럼명'])
plt.xticks(rotation = 30) # x축 값 꾸미기 : 방향을 30도 틀어서
plt.xlabel('x축 이름') # x축 이름 지정
plt.ylabel('y축 이름') # y축 이름 지정
plt.title('표 제목 지정') # 타이틀
plt.show()
그래프를 만들때 범례와 격자무늬를 추가하는 방법은 아래와 같습니다.
plt.plot(데이터프레임명['x축에 지정할 컬럼명'], 데이터프레임명['y축에 지정할 컬럼명'], label = '컬럼명')
plt.plot(데이터프레임명['x축에 지정할 컬럼명'], 데이터프레임명['y축에 지정할 컬럼명'], label = '컬럼명')
# label = : 범례추가를 위한 레이블값
plt.legend(loc = 'upper right') # 레이블 표시하기. loc = : 위치
plt.grid() #격자무늬가 배경에 추가됨
plt.show()
코드에 plt.legend(loc = 'upper right')
을 사용해주면 위쪽 오른쪽에 범례가 생성됩니다.
숫자형 변수를 분석하는 방법으로는 정보의 대푯값(평균, 중앙값 등)으로 표현하거나 구간을 나누고 빈도수를 계산하는 방법이 있습니다.
정보의 대푯값(기초통계량)
▶평균 : 산술평균, 기하평균, 조화평균
우리가 일반적으로 아는 평균을 산술평균이라고 합니다. 조화평균은 분자가 동일한 두 비율의 평균을 말합니다.
★평균의 함정에 속으면 안됩니다. 항상 평균을 다룰 때는 평균에 대해서는 속으면 안됩니다.
▶중위수 : 자료의 순서상 가운데 위치한 값(중앙값)
▶최빈값 : 자료 중에서 가장 빈번하게 나오는 값
▶사분위수 : 데이터를 오름차순 정렬을 해준 후 4등분 했을 때 각 경계에 해당하는(20%,50%,75%) 값을 의미합니다.
describe()
을 사용하면 기초통계량을 모두 보여줍니다.
데이터프레임명['컬럼명'].describe()
시각화 도구에는 여러가지가 있습니다. 대표적인 도구를 살표보겠습니다.
▶히스토그램 만들기
히스토그램은 아래와 같은 형식으로 히스토그램 그래프를 만들 수 있습니다.
plt.hist(데이터프레임['컬럼명'], bins = 5, edgecolor = 'gray')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()
edgecolor은 경계선의 색을 정해줍니다. bins = 5
는 5등분을 해주는 옵션입니다. bins의 값을 더 높은 값으로 설정해 더 세분화해서 그래프를 확인할 수 있습니다.
▶밀도함수 그래프 만들기
막대함수가 아니라 bins = 값
을 따로 설정해주지 않아도 됩니다. 데이터의 밀도를 추정하는 방식으로 그래프의 아래의 면접은 1입니다.
sns.kdeplot(titanic['Fare'])
# sns.kdeplot(x='Fare', data = titanic) #원래는 이렇게 쓰는게 맞다
plt.show()
다른 사용 방법으로는..
sns.histplot(x ='Age', data = titanic, kde=True)
plt.show()
hisplot으로 그래프를 만들게 되면 옵션 값으로 kde = True
를 설정할 수 있는데 만약 설정을 해주면 막대그래프인 히스토그램과 밀도함수 그래프가 같이 표시되어 그래프를 보여줍니다.
▶boxplot
값에 만약 NaN 즉, 결측값이 존재하면 그래프가 그려지지 않습니다.(하지만 seborn을 이용하면 알아서 결측치를 제거해줍니다.) vert옵션을 사용하여 횡(False), 종(True, 디폴트 값) 방향으로 그래프를 표현할 수 있습니다.
plt.boxplot(데이터프레임['컬럼명']) # 종
plt.show()
#또는
plt.boxplot(데이터프레임['컬럼명'], vert = False) # 횡
plt.show()
박스플롯을 상세히 알아보기
IQR은 1사분위~3사분위를 뜻합니다. IQR의 값은 3사분의 값 - 1사분위의 값 입니다.
경계선을 정할 때 min값과 (1사분위의 값 - 1.5IQR) 두 값 중에서 더 큰 값을 경계선으로 설정 하고 max값과 (3사분위 + 1.5IQR) 두 값 중에서 더 작은 값을 경계선으로 설정합니다. 설정된 경계선 밖에 있는 값들을 이상치(?) 즉 이상치가 될 수 있는 후보 값이 됩니다.
박스플롯은 이상치 판정 기준을 제시해줍니다.
※데이터의 양극화가 있을 때 용인을 분석해서 해당 용인별로 데이터를 나눠서 이상치 분석에 들어가야합니다.
범주형 변수는 범주별로 갯수를 세줍니다. ex) 범주별 빈도수, 범주별 비율
범주별 빈도수는 아래와 같은 코드를 작성해주면 구해줄 수 있습니다.
데이터프레임명['컬럼명'].value_counts()
함수 value_counts()
를 사용하면 범주별 빈도수를 구할 수 있습니다.
범주별 비율은 범주별 빈도수를 전체 count로 나눠주면 됩니다.
데이터프레임명['컬럼명'].value_counts() / 데이터프레임명.shape[0]
데이터프레임명.shape[0]
는 전체 행을 반환해줍니다.
범주형 변수의 시각화 도구는 숫자형 변수와 다릅니다. 아래의 범주형 변수 시각화 도구들을 살펴보겠습니다.
▶bar
plt.bar()
은 범주별 빈도수를 직접 계산한 결과를 입력해야 범주별 빈도 bar plot이 나타납니다.
▶countplot
sns.countplot()
은 범주별 빈도수의 계산을 자동으로 해줍니다.
sns.countplot(데이터프레임명['컬럼명'])
plt.grid()
plt.show()
※범주형은 알아서 생겨난 값이 아닙니다. 따라서 범주형에서는 이상치라는 단어를 사용하는 것은 어색합니다.
이번포스터에는 데이터 시각화 도구에 대해서 포스팅했습니다. 오늘 학습하면서 느낀점은 seborn을 사용하면 자동으로 처리해주는 것이 많아서 seborn에 익숙해지면 좋을 것 같다고 느꼈습니다. 물론 아직 걸음마로 단계별로 어떻게 실행되는지 익숙해지는 것이 가장 중요할 것 같습니다.
※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.