10-1. 탐색적 데이터 분석
탐색적 데이터 분석(EDA) : 가공하지 않은 데이터를 그대로 탐색/분석하는 기법
- EDA를 하는 주요 목적
- 데이터의 형태와 척도가 분석에 알맞게 되어 있는지 확인
- 데이터의 평균, 분산, 분포, 패턴 등을 확인해 데이터의 특성 파악
- 데이터의 결측값, 이상치 파악 및 보완
- 변수 간의 관계성 파악
- 분석 목적과 방향성 점검 및 보정
- 엑셀을 활용한 EDA
각 데이터 샘플을 1,000개씩 뽑아 엑셀에서 눈으로 쭉 살피는 것으로도 여러 정보를 얻을 수 있음.
범주형 데이터의 비율이나 연속형 데이터의 범위 등 파악 가능
피벗 테이블을 활용해 필요한 데이터를 추출해 확인 가능
-> 친화적인 프로그램을 이용해 본격적인 데이터 분석에 앞서 데이터에 대한 이해도를 높이는 작업
- 탐색적 데이터 분석 실습
info( ) 매서드 : 각 칼럼의 데이터 타입 및 결측치 개수 알 수 있음.
describe( ) 매서드 : 각 칼럼의 평균, 표준편차, 최대/최소 등을 알 수 있음.
skew( ) 매서드: 각 칼럼의 왜도 확인 가능.
왜도 : 데이터 분포의 좌우 비대칭도를 표현하는 척도
- 데이터 분포가 좌우 대칭일수록 왜도값(의 절댓값)은 감소하고, 한쪽으로 몰려 있을수록 왜도값(의 절댓값)은 증가
- 분포가 왼쪽으로 치우쳐 오른쪽으로 긴 꼬리를 가지면 양수, 반대의 경우 음수
- 주로 다음과 같은 수식으로 왜도값 구함.
kurtosis( ) 매서드 : 각 컬럼의 첨도 확인
첨도 : 데이터 분포가 정규분포에 비해 얼마나 뾰족하고 완만한지의 정도를 나타내는 척도로 중심에 얼마나 쏠려 있는가를 나타냄.
- 3을 기준으로 값이 클수록 뾰족한 양의 첨도(급첨)이며 값이 작을수록 음의 첨도(완첨)이지만 -3을 적용해 음수(완첨)/양수(급첨)로 구분하기도 함.
seaborn 패키지의 distplot 함수를 사용해 컬럼의 분포 시각화 가능
sns.displot(df[’lead_time’])
violinplot( ) 함수 : 호텔 구분에 따른 lead_time 컬럼 분포를 시각화해줌(회색)
srtipplot( ) 함수 : 호텔별로 lead_time 컬럼의 각 관측치의 위치를 표현해줌(파란색)
10-2. 공분산과 상관성 분석
데이터를 탐색할 때 타깃변수 Y와 입력변수 X의 관계, 입력변수 X들 간의 관계를 살펴봐야 함.
공분산과 상관계수 : 변수 간의 상관관계를 파악하는 대표적인 개념
공분산 : 두 변수 간의 분산의 관계, 즉 서로 공유하는 분산
- 각 샘플별로 두 변수에 대한 분산을 구해(해당 값 - 평균값) 서로 곱한 값을 모든 샘플에 대해 더하고 다시 샘플 수로 나눠 구할 수 있음.
- 해당 값이 0이면 두 변수는 상관관계가 없는 것이며 해당 값이 양수이면 양의 상관관계, 음수이면 음의 상관관계를 가짐.
상관계수 : 각 변수의 척도 기준이 다르다면 공분산의 크기가 상관성의 정도를 정확하게 나타내지 못함.
-> 피어슨 상관계수를 주로 사용
피어슨 상관계수 : 두 변수의 공분산을 두 변수 각각의 전체 분산으로 나눠 구함. 따라서 그 값은 -1과 1 사이의 값을 가짐(양 끝 값 포함)
-> 일반적으로 상관계수의 절댓값이 0.4 이상이면 어느 정도 상관관계가 있다고 해석
-> 0.7 이상이면 강한 상관관계가 있다고 해석
이때 산점도의 기울기 값은 상관계수와 관계 X
-> 상관계수가 높다는 것은 변수 X1이 움직일 때 변수 X2가 많이 움직이는 것이 아니라, 변수 X1이 변수 X2에 대해 예상할 수 있는 정확도(설명력)가 높다는 뜻
상관분석은 두 변수의 선형적 관계만을 측정 -> 두 변수의 분포가 각각 위로볼록, 아래로볼록한 2차함수의 형태를 띌 경우 상관관계가 매우 낮게 나옴 -> 따라서 상관분석을 하면서 산점도 그래프도 별도로 그려 보는 것이 좋음!!
피어슨 상관관계는 등간, 비율척도의 데이터에서만 사용 가능
- 기타 척도에 대한 상관분석 방법
- Pearson correlation coefficient : 간격/비율 - 간격/비율
- Spearman’s rank correlation coefficient : 서열 - 서열
- Point-biserial correlation coefficient : 간격/비율 - 명목(2분 변수)
- Phi coefficient : 명목(2분 변수) - 명목(2분 변수)
- Cramer’s coefficient : 명목 - 명목 (2 X 2 이상)
- 등간척도 : IQ, 온도 등 동일한 간격으로 서열을 매긴 척도
- 비율척도 : 무게, 길이 등 절대영점이 존재하며 ‘10m는 5m의 두배이다’ 같은 절대적 크기 비교가 가능한 척도
- 명목척도 : 범주화하여 나타내는 척도. 숫자나 기호를 부여해 사용하기도 함
- 서열척도 : 생활 수준 등 서열을 매길 수 있으나 그 간격은 동일하지 않은 척도
- 공분산과 상관성 분석 실습
cov( ) 함수 / corr( ) 함수 : 자동으로 문자형 변수를 제외함.
다음으로 히트맵으로 상관계수를 시각화
sns.heatmap(df.corr(), cmap = ‘viridis’)
히트맵에 수치가 표시되지 않아 불편 -> 이때 clustermap( ) 함수 사용 : 각 상관계수 값을 표시해 줄 뿐만 아니라 상관성이 강한 변수끼리 묶어서 표현해줌!
sns.clustermap(df.corr(), annot = True, cmap = 'RdYlBu', vmin = -1, vmax = 1)
불필요한 부분은 가려진 히트맵을 출력
np.triu(np.ones_like(df.corr( ))) : 행렬의 우측 상단을 1, 좌측 하단을 0으로 변환해주는데 dtype을 bool로 전달하면 1과 0 대신 각각 True와 False로 변환해줌.
-> 마지막으로 mask 매개변수로 True인 부분(우측 상단)을 가려 히트맵 출력
10-3. 시간 시각화
시간 시각화 : 선그래프 형태인 연속형과 막대그래프 형태인 분절형이 있음.
시간 간격의 밀도가 높을 때(초 단위 데이터처럼) 주로 선그래프를 사용.
하지만 데이터의 양이 너무 많거나 변동이 심하면 패턴을 파악하기 난해하므로 이때는 추세선을 삽입하기도 함.
추세선 : 들쭉날쭉한 데이터 흐름을 안정된 선으로 표현할 수 있으며 추세선을 그리는 가장 일반적인 방법으로는 이동평균 방법이 있음.
이동평균 방법 : 만약 2 → 5 → 3 → 7 → 4 의 값을 가지는 데이터가 있다면 이를
(2, 5, 3의 평균) → (5, 3, 7의 평균) → (3, 7, 4의 평균)으로 나타내는 것
분절형 시간 시각화 : 막대그래프, 누적 막대그래프 (혹은 점 그래프) 등으로 이루어짐.
-> 시간의 밀도가 낮을 때 주로 사용되며 값들의 상대적 차이를 나타낼 때 유용
누적 막대그래프 : 시점별로 여러개의 세부 항목이 존재할 때 사용 가능
-> 각 항목의 전체 합 또한 한번에 나타낼 수도 있고 전체에 대한 각 항목의 비율을 서로 비교할 수도 있어 유용
- 시간 시각화 실습
10-4. 비교 시각화
그룹과 비교 요소가 많을 때 그룹별 차이를 효과적으로 나타내기 위해서 ‘히트맵 차트’ 이용.
- 차트에서 각 행은 그룹에 해당하고 각 열은 요소에 해당하기 때문에 그룹을 기준으로 각 요소의 차이를 볼 수도, 요소를 기준으로 각 그룹의 차이를 볼 수도 있음.
- 차트의 행/열/색상을 각각 다른 변수로 설정하여 세 변수간의 관계를 살필 수도 있고 차트의 열을 시간 흐름으로 설정하여 시간에 따른 변화를 파악할 수도 있음.
- 하나의 변수(그룹) X N개의 각 변수에 해당하는 값들
- 하나의 변수(그룹) X 하나의 변수(그룹/수준) X 하나의 변수(수준)
- 방사형 차트를 통해서도 비교 시각화를 할 수 있음
- 평행 좌표 그래프를 통해서도 비교 시각화 가능. 변수별로 값들을 특정 범위로 변환한다면 더욱 효과적으로 시각화 가능
- 비교 시각화 실습
10-5. 분포 시각화
분포 시각화 : 데이터가 연속형 등의 양적 척도인지, 명목형 등의 질적 척도인지에 따라 구분하여 그림.
양적 척도의 경우 막대/선그래프, 혹은 히스토그램으로 나타낼 수 있음.
히스토그램 : 구간을 쪼게 동일한 면적의 막대그래프를 이어 그린 그래프. 처음에는 많은 구간으로 나누고 시각적인 정보의 손실이 커지기 전까지 구간의 개수를 줄여나가면서 그림.
질적 척도 중 변수의 구성이 단순한 경우에는 파이차트 혹은 도넛차트를 사용.
-> 이들은 구성 요소들의 분포 정도를 면적(혹은 각도)으로 표시. 비율을 수치로 같이 입력해 주는 것이 좋음.
질적 척도에서 구성 요소가 복잡한 경우에는 트리맵 차트 혹은 와플 차트를 이용.
- 트리맵 차트 : 하나의 큰 사각형 속에 비율에 따라 구성 요소들이 작은 사각형으로 쪼게져 들어가는데, 구성 요소 안에서도 분류를 나누어 더 작은 사각형으로 위계구조를 나타낼 수 있음.(의류 매장에서 바지 품목 안에서 반바지와 긴바지로 한번더 나눌 수 있음).
- 와플 차트 : 일정한 조각들로 분포를 표현하는데 위계구조를 표현하지는 못함.
- 분포 시각화 실습
도넛차트 : 파이차트와 동일하게 그리지만 차트 형태 옵션을 추가해 도넛 형태로 만들어줌.
10-6. 관계 시각화
산점도를 이용해 두 (연속형) 변수 간의 관계를 나타낼 때, 극단치가 있다면 이를 제거하고 그래프를 그리는 것이 좋음.
-> 아래와 같이 그래프에 큰 차이가 날 수 있기 때문.
산점도에서 데이터가 너무 많아 점끼리 겹쳐 정보를 확인하기 힘들 때 점들에 투명도를 주어 밀도를 함께 확인할 수 있음. 구간별로 빈도에 따라 농도나 색상을 달리하는 기법도 사용.
산점도에서는 두 변수 간 관계만 표현할 수 있지만 ‘버블 차트’에서는 세 변수(4개까지 가능하긴 함) 간 상관관계를 표현할 수 있음.
-> 버블의 크기(지름이 아닌 면적으로 반영)로 한 가지 요소를 추가로 표현하기 때문에 샘플이 너무 많을 때는 효과가 떨어짐.
-> 색상, 농도 등을 구분할 수도 있지만 그래프가 너무 복잡해지기 때문에 색상으로 그룹을 구분하는 정도로 충분함.
- 관계 시각화 실습
10-7. 공간 시각화
위도와 경도 데이터를 지도에 표시하여 나타낼 수 있음(구글의 지오맵의 경우 지명만으로도 가능).
-> 인구 밀도 등의 집계 데이터도 지도 위에 표시해 유용하게 사용할 수 있음.
-> 지도를 확대하거나 위치를 옮기는 등의 행동도 가능.
- 대표적인 공간시각화 기법
- 도트맵 : 특정 위치에 작은 점을 찍는 기법이며 데이터의 개요를 파악하기에 용이하지만 정확한 값을 나타낼 수는 없다는 단점이 있음.
- 버블맵 : 도트맵에서 원의 크기로 데이터 값을 표시하는 기법
- 코로폴리스맵 : 색상의 음영으로 구역의 데이터 크기를 나타내는 기법. 음영 뿐만 아니라 여러 색을 혼합할 수도 있고 투명도, 명도, 채도 등으로 다양하게 표현할 수 있음.
- 커넥션맵 : 링크맵이라고도 하며 지도에 찍힌 점들을 직선 혹은 곡선으로 연결하는 기법. 여러 점을 한 선으로 연결해 경로를 표시할 수도 있음.
- 공간 시각화 실습
10-8. 박스 플롯
박스 플롯 : 하나의 그림으로 양적 척도 데이터의 분포, 편향성, 평균, 중앙값 등을 모두 확인할 수 있는 구조를 지님
- 박스 플롯에서 나타내는 수치
- 최솟값 : 제1사분위에서 1.5 IQR을 뺀 위치까지의 최솟값
- 제1사분위 : 25%의 위치
- 제2사분위 : 50%의 위치(중앙값)
- 제3사분위 : 75%의 위치
- 최댓값 : 제3사분위에서 1.5 IQR을 더한 위치까지의 최댓값
- IQR : 3사분위 수에서 1사분위 수를 뺀, 사분위수 범위
박스 플롯의 데이터 분포와 정규분포 비교
-> 박스 플롯의 박스 부분은 정규분포의 평균을 중심으로 좌우 1표준편차 안에 측정된 관측치 양과 비슷하고 양쪽 수염의 끝까지는 정규분포에서 평균의 좌우 3표준편차 안에 측정된 관측치 양과 유사하다는 것을 알 수 있음.
- 박스 슬롯 실습
'데이터 분석가가 반드시 알아야할 모든 것' 카테고리의 다른 글
서포트벡터머신, 연관규칙과 협업 필터링 (0) | 2024.05.01 |
---|---|
모델 평가 (0) | 2024.04.10 |
데이터 분석하기2 (1) | 2024.04.03 |
데이터 분석하기 (0) | 2024.03.27 |
데이터 전처리와 파생변수 생성 (0) | 2024.03.20 |