ML 세션 - Week1.데이터 탐색과 시각화
Jul 21, 2024
»
AI
시각화
분석 결과를 커뮤니케이션 하기 위해서
EDA(탐색적 데이터 분석 Exploratory Data Analysis)
가공하지 않은 원천의 데이터를 있는 그대로 탐색하고 분석하는 기법
- 극단적인 해석은 피해야 하며 지나친 추론이나 자의적 해석도 지양
- 기술통계와 데이터 시각화를 통해 데이터의 특성을 파악
- 목적
- 데이터의 형태와 척도가 분석에 알맞게 되어있는지 확인
- 데이터의 평균, 분산, 분포, 패턴 등의 확인을 통해 데이터 특성 파악
- 데이터의 결측값이나 이상치 파악 및 보완
- 변수 간의 관계성 파악
- 분석 목적과 방향성 점검 및 보정
엑셀을 활용한 EDA
파이썬, R, SAS 등의 데이터 가공 및 시각화 기능이 아무리 좋다 하더라도 적은 데이터를 다룰 때는 엑셀만큼 사용자 친화적이고 효율적인 프로그램이 없음
EDA 실습
# 필요한 패키지 임포트 pandas,seaborn, matplotlib
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
sns.set(color_codes=True) %matplotlib inline
df = pd.read_csv("datasets/hotel_bookings.csv") #pandas로 데이터 불러오기
df.info() # 각 칼럼 속성 및 결측치 확인
# info()로 데이터를 구성하는 행과 열의 크기와 각 칼럼을 구성하는 값의 자료형 등을 확인 가능
df.describe() # 평균, 표준편차, 최대 최솟값 등을 한번에 확인 가능한 함수
df.skew() # 각 칼럼 왜도 확인
df.kurtosis() # 각 칼럼 척도 확인
sns.distplot(df['lead_time']) #분포 시각화

sns.violinplot(x="hotel", y="lead_time", data=df, inner=None, color=".8")
# VioLinplot() 함수는 분포를 효과적으로 표현
sns.stripplot(x="hotel", y="lead_time", data=df, size=1)
# strippLot() 함수는 각 관측치의 위치를 직관적으로 표현

공분산과 상관성 분석
공분산: 서로 공유하는 분산
- 양의 상관관계: X1이 커지면 X2도커진다.
- 음의 상관관계: X1이 커지면 X2는 작아진다.
- 무상관관계: X1과 X2는 선형적인 관계가 없다.
- (- 1): X1과 X2 는 완벽한 직선의 관계다.
- 계산식

- 한계
각 변수 간의 다른 척도 기준이 그대로 반영되어 공분산 값이 지니는 크기가 상관성의 정도를 나타내지 못 함
상관계수
- 피어슨 상관계수 : 변수 X1과 X2가 함께 변하는 정도(공분산)를 X1과 X2가 변하는 전체 정도로 나눠준 것
- 공식

-
해석표
범위(절댓값) 단계 0 Zero 0.1~0.3 Weak 0.4~0.6 Moderate 0.7~0.9 Strong 1 Perfect 
- 결정계수 : 상관계수의 제곱
df.cov() # 공분산 확인
df.corr(method='pearson') # 피어슨 상관계수 확인
sns.heatmap(df.corr(), cmap='viridis') # 히트맵 시각화
# 노란색에 가까울수록 양의 상관관계를 보이고 보라색에 가까울수록 음의 상관관계를 보임
sns.clustermap(df.corr(), annot =True, cmap = 'RdYlBu_r', vmin = -1, vmax = 1,
) # clustermap 히트맵 시각화
# 기존 히트맵에 상관성이 강한 변수들끼리 묶어서 표현해주는 기능이 추가
시간 시각화
- 시간 흐름에 따른 데이터의 변화를 표현
- 선그래프 형태인 연속형과 막대그래프 형태인 분절형으로 구분
- 선그래프
- 시간 간격의 밀도가 높을 때 사용
- 데이터의 양이 너무 많거나 변동이 심하면 트렌드나 패턴을 확인하는 것이 어려울 수 있음 -> 추세선 삽입해 들쭉날쭉한 데이터 흐름을 안정된 선으로 표현 가능
- 추세선 그리는 일반적 방법은 이동평균 방법
- 전체적인 경항이나 패턴을 쉽게 파악할 수 있다.
- 분절형
- 막대그래프, 누적 막대그래프, 점 그래프 등으로 표현
- 시간의 밀도가 낮은 경우에 활용
- 값들의 상대적 차이를 나타내는 것에 유리
- 선그래프
시간 시각화 실습
df_Line['Month'] = df_line['Sales'].rolling (window=30) -mean()
# rolling()로 이동평균 생성
ax = df_line.plot(x='Date2', y='Sales', linewidth = "0.5")
df_line.plot(x='Date2', y='Month', color='#FF7F50', Linewidth = "1", ax=ax)
#plot()로 선그래프 시각화
ax = df_bar_1.plot.bar(x='Year' , y= 'Sales', rot=0,
figsize=(10,5))
#막대그래프 시각화
df_bar_2_pv.plot.bar(x='Year', stacked=True, figsize=(10,7))
#누적 막대그래프 시각화
비교 시각화
- 그룹별 차이 표현
- 히트맵 차트
- 그룹과 비교 요소 많을 때
- 분류 그룹이나 변수가 너무 많으면 혼란을 유발할 수 있기 때문에 적정한 수준으로 데이터를 정제하는 작업 필요
- 방사형 차트
- 하나의 차트에 하나의 그룹 시각화

- 하나의 차트에 모든 그룹 한 번에 시각화

- 하나의 차트에 하나의 그룹 시각화
- 평행 좌표 그래프를 통한 그룹별 요소 비교 시각화

- 가장 낮은 값은 0%로 가장 높은 값은 100%로 변환하여 차이 부각
- 여러 변수를 평행으로 배치해서 수치를 표현하기 때문에 각 그룹의 요소별 차이 수준을 효과적으로 파악 가능
- 집단적 경향성 표현 용이
분포 시각화
- 연속형과 같은 양적 척도인지, 명목형과 같은 질적 척도인지에 따라 구분해서 그림
- 양적 척도의 경우 막대그래프나 선그래프로 분포를 나타낼 수도 있고, 히스토그램(histogram)을 통해 분포를 단순화하여 보다 알아보기 쉽게 만들 수도 있음
- 질적 척도로 이루어진 변수는 구성이 단순한 경우 파이차트나 도넛차트를 사용

- 구성 요소가 복잡한 질적 척도를 표현할 때는 트리맵차트를 이용하면 보다 효과적으로 표현 가능
- 와플 차트는 와플처럼 일정한 네모난 조각들로 분포를 표현. 트리맵차트처럼 위계구조를 표현하지는 못함

관계 시각화
산점도
- 하나의 요소는 X축, 다른 한 요소는 Y축에 대입하여 일치하는 지점에 점을 찍어주기
- 극단치 제거하고 그리기
- 투명도를 주어 점들의 밀도 함께 표현 가능
- 두 개의 변수 간 관게만 표현 가능
- 버블차트 이용

- 버블차트는 관측치가 너무 많으면 정보 전달 효율 떨어짐
- 원의 지름이 아닌 면적 통해 크기 판단
공간 시각화
위치정보인 위도와 경도데이터를 지도에 매핑하여 시각적으로 표현
- 지도를 확대하거나 위치를 옮기는 등 인터랙티브한 활용이 가능
- 거시적에서 미시적으로 진행되는 분석방향과 같이 스토리라인을 잡고 시각화를 적용하는 것이 좋음
- 도트맵
- 지리적 위치에 동일한 크기의 작은 점을 찍어서 해당 지역의 데이터분포나 패턴을 표현하는 기법

- 버블맵
- 버블차트를 지도에 그대로 옮겨둔 것
- 버블 크기 조정 필요

- 코로플레스맵
- 단계 구분도
- 데이터 값의 크기에 따라 색상의 음영을 달리하여 해당 지역에 대한 값을 시각화하는 기법
- 작은 지역에 비해 큰 지역 강조하는 인상 줄 수 있음

- 커넥션맵
- 링크맵이라고도 함
- 지도에 찍힌 점들을 곡선 또는 직선으로 연결하여 지리적 관계를 표현
- 지역 간의 무역관계나 항공 경로나 통신 정보 흐름등을 표현할 때 사용

- 플로우맵, 카토그램 등이 추가로 있음
박스 플롯
- 상자 수염 그림이라고도 불림
- 네모 상자 모양에 최댓값과 최솟값을 나타내는 선이 결합된 모양의 데이터 시각화 방법
- 하나의 그림으로 양적 척도 데이터의 분포 및 편향성, 평균과 중앙값 등 다양한 수치를 보기 쉽게 정리

- 데이터의 대체적인 분포 형태를 쉽게 확인하기 위해 사용 + 카테고리별 분포를 비교할 때도 유용하게 사용
- 다섯 가지 수치
- 최솟값: 제1사분위에서 1.5IQR을 뺀 위치
- 제1사분위(Q1): 25%의 위치
- 제2사분위(Q2): 50%의 위치(중앙값(median)을 의미)
- 제3사분위(Q3): 75%의 위치
- 최댓값: 제3사분위에서 1.5IQR을 더한 위치
- 최솟값 최댓값 범위 넘어가는 값은 이상치로서 작은 원으로 표시
- 분위수 수식
- 박스 플롯과 정규분포의 관계


