[7주차] 데이터 시각화

2024. 1. 15. 20:23Portfolio/BDA 7기

Contents 접기

데이터 시각화

데이터 시각화는 중요한 데이터 분석의 과정으로, 주로 파이썬 라이브러리 matplotlib seaborn 가 사용된다.

특히 seaborn은 matplotlib을 기반으로 만들어져 있어 더 간편하게 사용할 수 있는데,

이 두 라이브러리를 이용하여 변수 간의 관계를 확인하고, 도출해낸 인사이트를 시각적으로 뒷받침하는게 중요하다

[데이터 시각화] 출처: https://blog.altair.co.kr/69196/

 

또한, Tableau와 같은 시각화 도구를 통해 빠르게 데이터를 확인하고,

다양한 그래프를 통해 상대방을 설득하는 데 활용할 수 있다.

 

1. 왜 시각화를 진행하는가?

시각화는 데이터 분석으로 도출한 나의 주장이나 가설을 명확하게 전달하기 위해 진행하는데,

시각화의 의미가 변수간의 관계 확인 용도 뿐만 아니라 데이터 분석에서 본인의 주장과 가설이 베이스로 진행되기 때문에

수치에 대한 정확한 표시와 주석이 필요하다.

 

간단하고 명확한 시각화가 복잡한 그래프보다 이해하기 쉽고 설득력이 있을 수 있음을 기억하자!

 

 

2. 시각화 이것만 짚고 넘어가자

데이터의 타입(연속형, 범주형)에 따라 표현할 수 있는 시각화가 달라질 수 있다.

 


matplot

matplotlib는 다양한 그래프, 플롯, 차트를 그릴 수 있는 데이터 시각화를 위한 강력한 도구이다.

많은 다른 시각화 라이브러리들이 matplotlib를 기반으로 만들어졌다.

 

코드를 통해 직접 시각화하여 기능을 알아보자

plt.scatter([1,2,3,4],[5,6,7,8]) # 산점도 표현 (1,5), (2,6), ...
plt.xlim(0,3) # 그래프의 x축 범위
plt.ylim(5.7) # 그래프의 y축 범위
plt.title('scatter') # 그래프 제목
plt.xlabel('x axis') # x축 이름
plt.ylabel('y axis') # y축 이름

쉽당

 

xlim과 ylim은 각 축의 범위를 나타내는데,

xlim(left or right) :  left는 x축의 최소값, right는 최댓값
ylim(bottom or top) : bottom는 y축의 최소값, top은 최댓 

 

 

눈금값 설정

x축과 y축의 눈금값을 원하는 값으로 설정할 수 있다.

plt.scatter([1,2,3,4],[5,6,7,8])
plt.xticks([1,2,3,4],['A','B','C','D']) # x축 값 1, 2, 3, 4를 각각 A, B, C, D로 설정
plt.title('scatter')
plt.xlabel('x axis')
plt.ylabel('y axis')

 

 

범례 설정

그래프에 어떤 데이터가 어떤 선 or 점으로 표시되어 있는지를 설명하는 요소를 범례라고 하고,

이는 그래프를 이해하는 데 도움을 준다.

# 데이터 생성
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 2, 1, 2, 1]

# 라인 플롯 그리기
plt.plot(x, y1, label='Line 1')
plt.plot(x, y2, label='Line 2')

# 범례 추가
plt.legend(loc='upper right', title='Lines', labels=['Line 1', 'Line 2'])

# x축과 y축에 레이블 추가
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 그래프 제목 추가
plt.title('Multiple Lines with Legend')

# 그래프 보여주기
plt.show()
# 파라미터 설명
loc : 범례의 위치 지정 (upper right, lower left, best, center 등)
frameon : 범례의 외곽에 프레임을 표시할지 여부 나타내는 bool 값 (기본값 True)
title : 범례의 제목 설정
labels : 범례에 표시할 레이블을 리스트로 전달

 

 

 

그래프의 크기와 스타일 설정

plt.figure()를 통해 그래프의 크기와 스타일을 설정할 수 있다.

seaborn 함수와 같이 사용한다면?

import seaborn as sns
sns.set(style='whitegrid') # 스타일을 정할 수 있다.
plt.figure(figsize=(8,5)) # 도화지의 사이즈 지정 8x5
plt.scatter([1,2,3,4],[5,6,7,8], label='x=4')

산점도의 변화 파악이 용이해진 그래프.

 

막대그래프

데이터를 비교하는 데 자주 쓰이는 막대그래프는 다음과 같이 표현할 수 있다.

# plt.bar : 막대그래프 그리기
# width : 크기 조절, linewidth : 가장자리 조절, color : 색 변경
plt.bar([1,2,3],[10,20,30], width=0.3, color=['orange','red','blue'], linewidth=3.5) 
plt.xticks([1,2,3],['A','B','C']) # 눈금값 설정

 

박스 플롯(box plot)

박스플롯은 지난 이상치를 다룬 포스팅에서 한 번 등장한 적이 있다.

데이터의 분포와 중앙값, 이상치 등을 시각적으로 표현하는 통계적인 도구이다.

수치형 데이터가 필요한 것을 기억하자!

import numpy as np

x = np.random.normal(10,3,200)
y = np.random.normal(10,2,300)

plt.boxplot([x,y])
plt.xticks([1,2], ['Car', 'Bus'])

통계치 확인에 용이한 box plot

 

 

히스토그램

히스토그램은 데이터의 분포를 시각적으로 나타내기 위한 방법 중 하나이다.

주어진 데이터를 구간으로 나누고, 각 구간에 속하는 데이터의 빈도를 막대로 표현할 수 있다.

x = np.random.normal(10,3,200)

# bins : 막대의 개수를 조정할 수 있다.
plt.hist(x,bins=3)

 

 

히트맵

히트맵은 데이터의 상대적인 크기를 색상으로 나타내어 행렬 형태의 정보를 시각적으로 표현하는 방법이다.

주로 2차원 데이터를 표현하며, 각 데이터 포인트의 크기 또는 값에 따라 다른 색상이 사용된다.

일반적으로 낮은 값은 밝은색으로, 높은 값은 짙은 색으로 표현한다.

 

이렇게 시각적으로 구분된 색상을 통해 데이터의 패턴, 경향 또는 관계를 쉽게 파악할 수 있다.

import pandas as pd
df = pd.DataFrame(['+score':[5,4,3],
		  '-score':[2,1,5],
                  index = ['Python', 'R', 'SQL'])

sns.heatmap(df, annot=True, fmt='.lf', linewidth=2, linecolor='black')
# 파라미터 설명
annot : 각 셀에 실제 값 또는 형식화된 문자열을 표시할지 여부 지정
fmt : 'annot'이 True인 경우 사용할 문자열 형식 설정
linewidth & linecolor : 셀 간 경계선의 굵기 및 색상 지정

 

 

그래프를 여러 개 그리기

그래프를 여러 개 그리는 경우  subplots 을 사용하고, Figure (큰 도화지)안에 좌표를 찍어서 Axes (축)을 생성하여

해당 위치에 그래프를 그릴 수 있다.

fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=2, figsize=(10,8))

 

 

실제로 축을 지정하여 그래프를 그려보자

x1 = np.arange(1,10)
x2 = np.arange(1,30)
y1 = x1*2
y2 = x2*3

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10,7))

# 축을 지정해서 그래프를 그려보자
ax[0].plot(x1,y1, color='red')
ax[1].bar(x2,y2, color='green')

ax[0].set_xlabel('ax[0] axis')
ax[1].set_xlabel('ax[1] axis')

ax[0].legend()
ax[1].legend()

 

 

시각화를 배우기 시작하니 이제 드디어 무언가 하는 느낌을 받는다 !