본문 바로가기

파이썬/데이터 분석

데이터 분석 - 1 [EDA(탐색적 데이터 분석)]

반응형

EDA(탐색적 데이터 분석)

데이터의 구조를 확인하고 특성을 파악하기 위해 데이터를 시각화하고 요약하는 과정

 

진행 순서의 차이나 데이터 특성에 따라 과정이 다를 수 있지만 다음의 과정과 같이 진행할 수 있다.

 

1. 데이터 불러오기

import pandas as pd

data = pd.read_csv( '/csv파일경로/csv파일이름.csv' )

 

위와 같은 과정을 통해 csv파일을 변수에 저장한다.

 

2. 데이터 구조 확인

data.head() # 데이터 상단의 5개 행을 보여준다
data.info() # 데이터 변수들이 가지는 각각의 type을 보여준다
data.tail() # 데이터 마지막 5개 행을 보여준다
data.describe() # 숫자형 데이터에 대한 기본 통계(평균,표준오차,최소값,4분위수 등)
data.shape() # 데이터프레임의 행과 열의 수를 튜플 형태로 반환
data.columns() # 데이터프레임의 열 이름을 반환
data.index() # 데이터프레임의 인덱스를 반환
data.dtypes() # 각 열의 데이터 타입을 반환
data.memory_usage() # 데이터프레임이 메모리에서 차지하는 공간을 반환
data.isnull().sum() # 각 열의 결측치(null 값) 개수를 반환
data.nunique() # 각 열의 고유값 개수를 반환
data.sample(n) # 무작위로 n개의 행을 반환
data.value_counts() # 특정 열의 고유값 빈도수를 반환 (범주형 데이터 분포 볼 때 사용)
data.corr # 숫자형 변수들 간의 상관관계를 계산하여 반환

 

위의 명령어를 통해 데이터의 값을 확인한다.

 

3. 데이터 기술통계 확인

 

data.describe(include='all') # 숫자형 데이터에 대한 기본 통계 요약 
			     # include = 'all' 추가 시 모든 열에 대한 기술 통계 제공
data.mean() # 각 열의 평균값 반환
data.median() # 각 열의 중앙값 반환
data.mode() # 각 열의 최빈값 반환
data.std() # 각 열의 표준편차 반환
data.var() # 각 열의 분산 반환
data.min() # 각 열의 최소값 반환
data.max() # 각 열의 최대값 반환
data.quantile([0.25,0.5,0.75]) # 지정된 분위수 (1사분위수,중앙값,3사분위수) 반환
data.cumsum() # 각 열의 누적 합 반환
data.cumprod() # 각 열의 누적 곱 반환
data.skew() # 각 열의 왜도 반환
data.kurt() # 각 열의 첨도 반환

 

2에서 확인한 데이터를 토대로 추가로 필요한 통계량을 확인한다.

 

4. 데이터 시각화

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np

우선 matplotlib과 pandas , seaborn , numpy를 import한 후 진행한다.

 

▶상관관계 그래프

corr_matrix = data.corr() # 상관관계 행렬 계산
plt.figure(figsize=(10, 8)) # 그래프 그림의 크기 설정
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='PuBuGn', cbar=True) # cmap에서 색 설정가능
plt.title('Correlation Matrix')
plt.show()

 

▶막대 그래프 :  범주형 데이터의 빈도나 값

a = data.groupby('그룹으로 엮을 변수명')['수치형이면 평균'].mean() # 변수 설정 
plt.figure(figsize=(10, 6))
a.plot(kind='bar', color='색 설정') 
plt.title('그래프 제목 설정')
plt.xlabel('x 변수명')
plt.ylabel('y 변수명')
plt.grid(True) # 그래프 안에 격자 추가
plt.xticks(rotation=45) # x축의 눈금 45도 회전
plt.show() # 여태까지의 설정을 화면에 표시

 

▶선 그래프 : 시간에 따른 데이터 변화

plt.figure(figsize=(10, 6))
data['변수명'].plot(kind='line', color='색 설정')
plt.title('그래프 이름')
plt.xlabel('x 변수')
plt.ylabel('y 변수')
plt.grid(True) # 그래프 안에 격자 추가
plt.show()

 

▶히스토그램 : 연속형 데이터의 분포

# 히스토그램 그리기
plt.figure(figsize=(10, 6))
data['Temperature'].plot(kind='hist', bins=막대의 개수, color='색 설정')
plt.title(' 제목 설정 ')
plt.xlabel('x 변수명')
plt.ylabel('y 변수명')
plt.grid(True)
plt.show()

 

▶파이 차트 :  전체에서 각 부분의 비율을 시각화하는데 사용

# 범주별 개수 계산
counts = data['변수명'].value_counts()
plt.figure(figsize=(10, 6))
counts.plot(kind='pie', autopct='%1.1f%%', colors=['색1 설정','색2 설정', '색3 설정', '색4 설정'])
# autopct='%1.1f%%'는 23.456%를 23.5%로 표시 즉, 소수점 첫째 자리까지 표시
# autopct='%1.2f%%'로 변경 시 소수점 둘째 자리까지 표시
plt.title('파이차트 이름 설정')
plt.ylabel('')
plt.show()

 

▶산점도 :  두 변수 간의 관계를 시각화

plt.figure(figsize=(10, 6))
plt.scatter(data['변수1'], data['변수2'], color='색 설정', alpha=0.5) 
# alpha는 투명도 설정 ( 값이 작을수록 투명 )
plt.title('그래프 제목 설정')
plt.xlabel('x 변수')
plt.ylabel('y 변수')
plt.grid(True)
plt.show()

 

▶박스플롯 :  데이터의 분포와 이상치를 시각화

plt.figure(figsize=(10, 6))
data.boxplot(column='x 변수', by='y 변수', grid=False)
plt.title('그래프 제목')
plt.suptitle('') 
plt.xlabel('x 변수')
plt.ylabel('y 변수')
plt.xticks(rotation=45) # 각도 설정
plt.show()

 

위와 같은 시각화를 통해 이상치 / 결측치 등을 확인하고, 추후 분석 방향을 결정하는데 용이해진다

반응형